任务是循环使用两个tcp3d译两个码块。在时刻a和b分别启动两个TCP3D译码,译码完成后通过edma传输结果并产生中断,如果在中断处加一个断点,则每次循环都可以得到正确的结果。但是拿去断点,则只进入中断一次(应该是第一个tcp3d在edma传输后触发的),但是第二个tcp3d在edma传输后并不能进入到edma中断,此时查看EDMA的IPR寄存器发现,相关的pending置位。这样下一次循环时,就连中断也进不去了。请问这是什么原因?谢谢了!
Andy Yin1:
首先确认相应EDMA Channel的IPR确实置位,然后在中断服务函数中需要情CPINTC system interrupt,可以调用CSL_CPINTC_clearSysInterrupt,然后清IPR,保证下一次中断事件被响应。
John:
回复 Andy Yin1:
ok, 现在是另外一个问题,就是能进中断,但是IPR和IPRH的都为0,没有置位。按理说没有置位,应该不会进入到中断里来的。另外,中断ISR是通过EventCombiner_dispatchPlug(eventId, ISR, hostIntr[dspCoreID], TRUE)注册的。另外,中断ISR通过CpIntc_dispatchPlug 和 EventCombiner_dispatchPlug注册有什么区别?
John:
回复 Andy Yin1:
确实是进入到了中断服务程序,在该服务程序中加个while循环一直读IPR、IPRH都为0。