如题,官方有C6657/C6655/C6554的UPP中断例程吗,在论坛上看到的,都存在只能触发一次中断的问题,谢谢!
Andy Yin1:
参考附件例程及如下帖子,先测试一下。
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/94529.aspx
steelheart:
回复 Andy Yin1:
Andy Yin1 你好,我在EVM6657板上对附件例程进行测试,发现情况一样,只能进一次中断,并且在中断退出的时候有执行uppRegs->UPEOI = 0;
第一次中断退出时UPIER为0,然后程序就再也进不去中断程序了,此时UPIER为0x808,表明确实发生了中断,这是什么原因呢?
steelheart:
回复 Andy Yin1:
麻烦跟进一下这个问题,或者给一下思路,为什么只能进一次中断处理程序,谢谢!
Andy Yin1:
回复 steelheart:
在完成一次数据传输进入中断后,有再重配DMA等数据传输么,如果用查询的方式能看到数据传输完成么,可能是下一次的数据传输失败导致中断没有产生。如果状态寄存器UPIER都没有被置位的话,应该是UPP本身就没有产生中断,查看UPISR确认中断是否使能,确认UPP DMA相关的寄存器是否配置对,UPI/QSR寄存器中的pending bit确认是否DMA一直pending没有完成。
steelheart:
回复 Andy Yin1:
Andy Yin1 你好,感谢回复。
完成中断后,UPIER被清零,说明中断服务程序已经把相关中断标志位清除了,中断后有重配置DMA传输,如下:
if(gtestTxFlag == 1) { while(CSL_FEXT(uppRegs->UPIS2, UPP_UPIS2_PEND) == 0) { gtestTxCnt++; upp_dma_prog(UPP_DMA_CHAN_I, (void *)xmtBuffer, 1, 8320, 0); } gtestTxFlag = 0; }
中断一次后,再发生中断(UPIER为0x808),也无法进入中断服务程序,另外pending bit您指的是UPIS2和UPQS2寄存器吧,这两个寄存器为0,说明No transfer pending。一下是无法进入中断服务程序的寄存器值:
按道理您给我的程序应该是没问题,您这边能在EVM6657开发板上验证一下嘛?谢谢!