Hello,
使用SPI读取外部Flash数据,由于数据量比较大,采用了SPI+DMA异步传输方式,创建了2个channel,第一个channel为flash的commander,一个4个字节,第二个channel为25600个字节,用于回读Flash的数据。DMA用了4个通道,ch0/ch1用于UART, ch2/ch3用于本配置的SPI,未使用本配置的SPI时,UART是可以正常发送的,配置了SPI后,UART和SPI均无法正常工作。
Platform模块配置如下:
ben_chin_10-1755146984231.png
Mcl模块DMA配置如下:
ben_chin_0-1755143805958.png
ben_chin_1-1755143849674.png
Rm模块配置如下:
ben_chin_2-1755143934882.png
Spi模块配置如下:
channel部分
ben_chin_3-1755146506318.png
ben_chin_4-1755146530193.png
ExternalDevice部分
ben_chin_5-1755146568667.png
Job部分
ben_chin_6-1755146631080.png
Sequency部分
ben_chin_7-1755146685150.png
general和PhyUnit
ben_chin_9-1755146836334.png
代码如下:
#define SPI_START_SEC_VAR_INIT_UNSPECIFIED
#include "Spi_MemMap.h"
__attribute__(( aligned(32) )) uint8_t nvmTxMsg[4] = {0};
__attribute__(( aligned(32) )) uint8_t nvmRxMsg[NVM_DEV_NUM] = {0};
#define SPI_STOP_SEC_VAR_INIT_UNSPECIFIED
#include "Spi_MemMap.h"
void Nvm_hal_Init(void)
{
/* Initialize the hardware abstraction layer for the device */
//Spi_SetHWUnitAsyncMode(2,SPI_INTERRUPT_MODE);
Spi_SetupEB(NVMCMD_SPI_CHANNEL, nvmTxMsg, NULL, 4);
Spi_SetupEB(NVMDATA_SPI_CHANNEL, NULL, nvmRxMsg, NVM_DEV_NUM);
}
void Nvm_SpiTransfer(void)
{
/* Perform SPI synchronous transmission */
nvmTxMsg[0] = 0x03u;
nvmTxMsg[1] = 0x00u;
nvmTxMsg[2] = 0x00u;
nvmTxMsg[3] = 0x00u;
//Dio_WriteChannel(DioConf_DioChannel_SideMarkerEnableOut,0);
Spi_AsyncTransmit(NVM_SPI_SEQUENCE);
}
uint32_t nvm;
void NvmSpi_Callback(void)
{
nvm++;
//Dio_WriteChannel(DioConf_DioChannel_SideMarkerEnableOut,1);
}