CC3200的SPI工作在从机DMA乒乓模式下,使能收发中断,部分初始化如下 SPIFIFOLevelSet(ulBase,8,8); SPIFIFOEnable(ulBase, SPI_RX_FIFO | SPI_TX_FIFO); SPIIntEnable(ulBase,SPI_INT_RX_FULL|SPI_INT_TX_EMPTY); 中断处理中: static void SpiIntHandler()
{
unsigned long ulStatus;
ulStatus = MAP_SPIIntStatus(GSPI_BASE,true);
MAP_SPIIntClear(GSPI_BASE,SPI_INT_DMARX|SPI_INT_DMATX);
if(ulStatus & SPI_INT_DMARX)
{
if(g_DMARcvBank == 0)
{
UDMASetupTransfer(UDMA_CH30_GSPI_RX,UDMA_MODE_PINGPONG,32,
UDMA_SIZE_8,UDMA_ARB_8,
(void *)(GSPI_BASE + MCSPI_O_RX0),UDMA_SRC_INC_NONE,
(void *)&buf[0], UDMA_DST_INC_8);
g_DMARcvBank = 1;
} else{ ........ } 请问DMA工作原理及中断是什么时候触发的?我不是专业做这个的,很多可能基本的东西不一定了解,我按我的理解说一下流程,帮我看一下是否正确,谢谢 首先SPI收到一个字节数据到寄存器DR中,然后由于开通了DMA,所以DR中的数据自动转移到DAM的缓存FIFO中,当缓存FIFO中的数据数量达到要求的值时,触发中断,交由CPU进行进一步处理???是这样的吗????
|