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.

tms570 10106使用DMA进行传统spi通信过程中,在spi通信结束后,dma得块中断标记已经有了,且dma的stat寄存器为0,但是pend寄存器却一直为1;请问:大家有没有遇到过相关问题,帮忙看看?

tms570 10106使用DMA进行spi通信过程中,spi作为主设备,在spi通信结束后,dma得块中断标记已经有了,且dma的statu寄存器为0,但是pend寄存器却一直为1;导致那个dma一直处于pend状态,请问,这个时候pend不应该是0吗?? 具体配置及实现见下文:

1、在spi使能之前配置dma使能,包括发送使能和接收使能。

2、发送端spi dma配置:

  //dma配置

sCtrl.eChan = DMASendChan;   //发送DMA通道号
sCtrl.dwSrc = (void *)pwSend;    //发送源地址
sCtrl.dwDst = (void *)0xFFF7FC3A;   // spi data0寄存器地址

sCtrl.wFrmNum = 500;
sCtrl.wElmNum = 1U;
sCtrl.dwElmSize = 2;/* 16 bit */
sCtrl.eRIdxType = DMA_AM_POST;
sCtrl.eWIdxType = DMA_AM_CONS;

sCtrl.byIsAuto = 0U;
sCtrl.byTrsInBlk = 0U;
sCtrl.byIsInt = 0U;
//重置dma控制信息
(void)DMA_ReSetupChanCtrl(&sCtrl);

//硬件触发发送
DMA_StartTrans(DMASendChan, DMA_TRSF_TRG_HW);
//软件触发发送
DMA_StartTrans(DMASendChan, DMA_TRSF_TRG_SW);

3、接收端spi  dma发送配置

//dma配置
sCtrl.eChan = DMARecvChan;      //接收DMA通道号
sCtrl.dwSrc = (const void *)0xFFF7FC42UL; //RXBUF 寄存器低16位
sCtrl.dwDst = (void *)pwRecv;    //接收缓存区地址

sCtrl.wFrmNum = 500;
sCtrl.wElmNum = 1U;
sCtrl.dwElmSize = 2U/* 16 bit */;
sCtrl.eRIdxType = DMA_AM_CONS;
sCtrl.eWIdxType = DMA_AM_POST;

sCtrl.byIsAuto = 0U; /*一次初始化 */
sCtrl.byTrsInBlk = 0U;
sCtrl.byIsInt = 0U;
//重置dma控制信息*/
(void)DMA_ReSetupChanCtrl(&sCtrl);
//启动硬件触发接收
(void)DMA_StartTrans(DMARecvChan, DMA_TRSF_TRG_HW);

通信过程中,spi作主设备,先调用spi dma 接收使能;再调用spi dma 发送使能;

数据能正确发送,且环回接收正确;接受完成后,在对应dma寄存器中,看到DMA对应发送通道的BTC块中断已经被置上,且DMA stat寄存器中STCH已经为0,但是在DMA pend寄存器中,对应发送通道的状态还是1; 请问,为什么这个时候 pend的通道标记还是1,不是应为为0了吗?

各位大侠,请问:这是哪里配置错了,还是哪里有问题?