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.

OMAPL138 EDMA3 阴影部分寄存器 写1到ICR清楚不了IPR中的相应位

TI专家、各位朋友:

        最近遇到一个问题,在EDMA3中断服务程序中判断是MCASP receive 还是MCASP transmit完成传输触发了中断,用仿真器单步调试时,发现IPR的值是正确的。

我先先清掉IPR的标志位,然后再去执行中断服务程序。但我往ICR相应的寄存器写1想清除IPR中的相应位时,我发现没起作用。

#define EDMA3_SR1CR_IPR  *(volatile uint32_t *)(0x01C02268)
#define EDMA3_SR1CR_ICR  *(volatile uint32_t *)(0x01C02270)


我使用的是EDMA3_0 Channel Controller 0  ,因此我配置的是Shadow Region 1 Channel Registers中的寄存器。

无论我使用EDMA3_SR1CR_ICR=0x0000 0001或者EDMA3_SR1CR_ICR=0x0000 0002(以及EDMA3_SR1CR_ICR|=0x0000 0001或者EDMA3_SR1CR_ICR|=0x0000 0002),都无法清除EDMA3_SR1CR_IPR中的标志位。

上图是对ICR寄存器的使用说明,在手册sprugp9b.pdf  P115页。

 

  • 确定一下DRAE1里是否使能了这个channel.

  • 确认。

    通过仿真器调试时,我在中断中设置断点观察的IPR寄存器的值,执行单步后发现对ICR中的相应位写1,IPR的值没改变,。后来思考了一下,应该是清除了IPR中的标志位,这时CPU停止在断点处,但EDMA还是在运行,只是后来EDMA搬运结束后又重新把IPR中的相应位置位。从侧面也能证明是这样的,手册上说必须清除IPR中所有标志位,后续的EDMA中断才能够执行,而我的代码一直是可以持续进入中断的。