我想对 UDMA 与 Tiva SPI 的交互进行一些澄清。 我正在 Tiva 处理器上设置一个从器件 SPI 接口、并希望在交替模式下将 UDMA 与 SPI 配合使用。
SPI 配置为16位宽元素-使用 SSI1。
UDMA 配置为交替模式
uDMAChannelControlSet (10 | UDMA_PRI_SELECT、UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_4);
//设置传输缓冲区
uDMAChannelTransferSet (10| UDMA_PRI_SELECT、UDMA_MODE_PINGONG、(void *)(SSI1_BASE + SSI_O_DR)、&g_DSP_SPI_Rx_buffer[primary_buffer]、128);
//配置乒乓传输的备用传输
uDMAChannelControlSet (10 | UDMA_ALT_SELECT、UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_4);
uDMAChannelTransferSet (10 | UDMA_ALT_SELECT、UDMA_MODE_PINGONG、 (void *)(SSI1_base + SSI_O_DR)、g_DSP_SPI_RX_buffer[ALT_buffer]、128);
在尝试使 DMA 正常工作时、我发现需要启用 SPI RX DMA 中断才能使 DMA 正常工作: SSIIntEnable (SSI1_base、SSI_DMARX)。 此外、在 SSI1的中断处理程序中、我需要清除 SSI_DMARX 中断屏蔽、以便更多数据包获得 DMA'ed. 这意味着、要接收128元件数据包、SSI ISR 需要运行大约30次、否则会丢失数据。 使用 DMA 来避免中断服务传输的整个过程不是什么? 我想我错过了数据表中的一些内容、希望有人能够向正确的方向指出我。
谢谢你
-Yan