This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
spi配置
SpibRegs.SPICCR.bit.SPISWRESET = 0;
SpibRegs.SPICCR.all = 0x004F;
SpibRegs.SPICTL.all = 0x0006;
SpibRegs.SPISTS.all = 0x0000;
SpibRegs.SPIBRR.all= 0x0001;
//增加FIFO
SpibRegs.SPIFFTX.all =0xE040 ;
SpibRegs.SPIFFRX.all =0x2040 ;
SpibRegs.SPIFFTX.bit.TXFFIL = 1; // Set TX FIFO level
SpibRegs.SPIFFRX.bit.RXFFIL = 1; // Set TX FIFO level
SpibRegs.SPIPRI.bit.FREE = 1;
SpibRegs.SPICCR.bit.SPISWRESET = 1;
dma 配置
DMACH5AddrConfig((volatile UINT16*)(&SpibRegs.SPITXBUF),(volatile UINT16 *)m_u16DmaTxData);
DMACH5BurstConfig(0,1,0); // Burst size, src step, dest step
DMACH5TransferConfig(1,1,0); // transfer size, src step, dest step
DMACH5ModeConfig(DMA_SPIBTX,PERINT_ENABLE,ONESHOT_ENABLE,CONT_DISABLE,
SYNC_DISABLE,SYNC_SRC,OVRFLOW_DISABLE,SIXTEEN_BIT,
CHINT_END,CHINT_ENABLE);
DMACH6AddrConfig((volatile UINT16*)m_u16DmaTxData,(volatile UINT16 *)(&SpibRegs.SPIRXBUF));
DMACH6BurstConfig(0,0,1); // Burst size, src step, dest step
DMACH6TransferConfig(1,0,1); // transfer size, src step, dest step
DMACH6ModeConfig(DMA_SPIBRX,PERINT_ENABLE,ONESHOT_ENABLE,CONT_DISABLE,
SYNC_DISABLE,SYNC_SRC,OVRFLOW_DISABLE,SIXTEEN_BIT,
CHINT_END,CHINT_ENABLE);
在dma传输结束后,RX_FIFO中总是发现有两个(SPIFFRX.bit.RXFFST =2)没传出,请问有什么办法让dma把RX_FIFO中的数据都读出来。
您好,
从您给出的DMA 传输配置来看,比较奇怪的是,传输大小设置为1。 这代表 DMA 通道将在传输2个16位字后被禁用。 CPU 必须在每2个16位字后重新使能 DMA 通道。 通常情况下会将传输大小设置为等于TRANSFER_SIZE = (NUM_WORDS/RXFFIL) - 1。 DMA 通道会不会有可能没有使能最终传输?
TRM中有以下描述:
When Continuous mode is disabled (MODE.CHx[CONTINUOUS] = 0), DMA state machine disables channel after all bursts in a transfer loop (TRANSFER_COUNT = 0) are complete. The channel must be re-enabled by setting the RUN bit in the CONTROL register before another transfer can be started on that channel.
此外,工程师还注意到 SPI 配置为非常快地运行,因为 SPIBRR 设置为1。 请问您尝试实现的 SPI 频率是多少?