在线时间3 小时
UID3410246
注册时间2017-8-1
NXP金币0
该用户从未签到
新手上路

- 积分
- 26
- 最后登录
- 2020-12-14
|

楼主 |
发表于 2017-8-1 09:39:29
|
显示全部楼层
这是SPIFI_DMA的例程的main内容:
int main(void)
{
spifi_config_t config = {0};
spifi_transfer_t xfer = {0};
uint32_t sourceClockFreq;
uint32_t i = 0, page = 0, err = 0;
uint8_t *val = (uint8_t *)FSL_FEATURE_SPIFI_START_ADDR;
/* Init the boards */
/* attach 12 MHz clock to FLEXCOMM0 (debug console) */
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
/* attach 12 MHz clock to SPI3 */
CLOCK_AttachClk(kFRO12M_to_FLEXCOMM9);
BOARD_InitPins();
BOARD_BootClockFROHF48M();
BOARD_InitDebugConsole();
PRINTF("SPIFI flash dma example started \r\n");
DMA_Init(EXAMPLE_DMA);
DMA_EnableChannel(EXAMPLE_DMA, EXAMPLE_SPIFI_CHANNEL);
DMA_CreateHandle(&s_DmaHandle, EXAMPLE_DMA, EXAMPLE_SPIFI_CHANNEL);
/* Set SPIFI clock source */
CLOCK_AttachClk(kMAIN_CLK_to_SPIFI_CLK);
sourceClockFreq = CLOCK_GetSpifiClkFreq();
/* Set the clock divider */
CLOCK_SetClkDiv(kCLOCK_DivSpifiClk, sourceClockFreq / EXAMPLE_SPI_BAUDRATE - 1U, false);
/* Initialize SPIFI */
SPIFI_GetDefaultConfig(&config);
SPIFI_Init(EXAMPLE_SPIFI, &config);
SPIFI_TransferRxCreateHandleDMA(EXAMPLE_SPIFI, &handle, callback, NULL, &s_DmaHandle);
/* Enable Quad mode */
enable_quad_mode();
/* Setup memory command */
SPIFI_SetMemoryCommand(EXAMPLE_SPIFI, &command[READ]);
/* Set the buffer */
for (i = 0; i < PAGE_SIZE; i++)
{
g_buffer[i] = i;
}
/* Reset the SPIFI to switch to command mode */
SPIFI_ResetCommand(EXAMPLE_SPIFI);
/* Write enable */
SPIFI_SetCommand(EXAMPLE_SPIFI, &command[WRITE_ENABLE]);
/* Set address */
SPIFI_SetCommandAddress(EXAMPLE_SPIFI, FSL_FEATURE_SPIFI_START_ADDR);
/* Erase sector */
SPIFI_SetCommand(EXAMPLE_SPIFI, &command[ERASE_SECTOR]);
/* Check if finished */
check_if_finish();
/* Program page */
while (page < (SECTOR_SIZE / PAGE_SIZE))
{
SPIFI_SetCommand(EXAMPLE_SPIFI, &command[WRITE_ENABLE]);
SPIFI_SetCommandAddress(EXAMPLE_SPIFI, FSL_FEATURE_SPIFI_START_ADDR + page * PAGE_SIZE);
SPIFI_SetCommand(EXAMPLE_SPIFI, &command[PROGRAM_PAGE]);
xfer.data = g_buffer;
xfer.dataSize = PAGE_SIZE;
SPIFI_TransferSendDMA(EXAMPLE_SPIFI, &handle, &xfer);
while (!finished)
{
}
finished = false;
page++;
check_if_finish();
}
/* Reset to memory command mode */
SPIFI_ResetCommand(EXAMPLE_SPIFI);
SPIFI_SetMemoryCommand(EXAMPLE_SPIFI, &command[READ]);
for (i = 0; i < SECTOR_SIZE; i++)
{
val = (uint8_t *)(FSL_FEATURE_SPIFI_START_ADDR + i);
if (*val != g_buffer[i % PAGE_SIZE])
{
PRINTF("Data error in address 0x%x, the value in memory is 0x%x\r\n", i, *val);
err++;
}
}
if (err == 0)
{
PRINTF("All data written is correct!\r\n");
}
PRINTF("SPIFI DMA example Finished!\r\n");
while (1)
{
}
} |
|