TI中文支持网
TI专业的中文技术问题搜集分享网站

请教一个CC3200的SPI的DMA接收问题

Other Parts Discussed in Thread:CC3200

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进行进一步处理???是这样的吗????

Viki Shi:

有个SPI+DMA的例程,参考一下:github.com/…/spidma.ino

,

Viki Shi:

以及:e2e.ti.com/…/402221

,

user1252639:

再多问一句,这里的中断函数什么时候调用 ????SPI收到一外数据就触发还是收到满足DMA的要求的数量后触发?

,

Viki Shi:

参考此帖答案:e2echina.ti.com/…/185079

赞(0)
未经允许不得转载:TI中文支持网 » 请教一个CC3200的SPI的DMA接收问题
分享到: 更多 (0)