我使用的是MSP430F6638,通过ADC12进行5个通道的重复序列采集,并触发DMA0进行连续单次数据传输,DMA0SZ=128,。现在我单独开启ADC12或DMA0的中断使能,两者都能正常执行中断;但同时开启时,DMA0的中断就响应不了了,但数据传输正常。现在能确定的是ADC12中断处理时间很短,可以退出中断服务程序,不是中断排队的问题。而且还发现两个向量表ADC12IV和DMAIV偏移地址相同(0Eh),这样设计的原因和有点何在?是不是因为这个原因造成两模块中断冲突?如何解决?谢谢!
Xutong Han2:
会不会发生了中断嵌套?MSP430默认不允许中断嵌套,如果要进行中断嵌套需要在中断程序中打开中断使能~
yang Yang9:
回复 Xutong Han2:
我没有开中断嵌套,因为ADC要求实时采集。如果同时中断,应该处理完优先级较高的ADC中断,然后立刻处理DMA中断吧。
那个……不好意思哈,我之前情况描述有误(我看到的数据时以前存储在数组中的数据……),实际情况是:开启ADC中断后,ADC中断可以响应,但DMA就无法触发了,无法传送数据(ADC中断中没有访问ADC12MEM,也没有清ADC12IFG),感觉ADC响应中断比DMA触发更快,是不是中断函数中CPU无法让出总线控制权呢?谢谢!
yang Yang9:
回复 Xutong Han2:
现在我用TimerA0捕获与DMA配合也出现类似的问题:关闭捕获中断的话,TA0CCR2.IFG能触发DMA;如果开启捕获中断,DMA就不能被触发……中断结束会自动清除TA0CCR2.IFG,但为什么在这之前TA0CCR2.IFG置位时不能触发DMA呢?
huaqing mo:
可能是DMA的中断向量和DAC12的共用的原因。
yang Yang9:
回复 huaqing mo:
哦,明白了,以前没注意到,谢谢!