纠结了这么久,终于在师兄的帮助下解决了!
网上有人说这个问题需要在中断函数内清除DMA中断标志位,但我观察发现,在进入中断之后,DMA中断标志位就自动清除了,但我还是尝试了一下清除,没有效果。
因为之前在关闭repeat时,采用在中断函数里先关闭DMA再在主程序里打开,就可以多次进入中断,所以考虑和DMA_open函数有关,去CSL库源代码查看,发现有一个if语句,if(DMA_RGETH(hDma,DMACSR)){;},大括号内是空的,判断或是不判断不影响效果呀!!!但是,这个if语句不是用来判断的,它只是起到了读取一下DMACSR寄存器的作用,和DMA_RGETH(hDma,DMACSR);的效果是一样的!!
然后,把DMA_RGETH(hDma,DMACSR);复制到中断函数里,OK !可以自动重复进入中断了!
嘿嘿。。。师兄比较忙,不轻易出马
一周热门 更多>