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.

MSP430F6系列 DMA与ADC12中断冲突问题

Other Parts Discussed in Thread: MSP430F6638

我使用的是MSP430F6638,通过ADC12进行5个通道的重复序列采集,并触发DMA0进行连续单次数据传输,DMA0SZ=128,。现在我单独开启ADC12或DMA0的中断使能,两者都能正常执行中断;但同时开启时,DMA0的中断就响应不了了,但数据传输正常。现在能确定的是ADC12中断处理时间很短,可以退出中断服务程序,不是中断排队的问题。而且还发现两个向量表ADC12IV和DMAIV偏移地址相同(0Eh),这样设计的原因和有点何在?是不是因为这个原因造成两模块中断冲突?如何解决?谢谢!

  • 会不会发生了中断嵌套?MSP430默认不允许中断嵌套,如果要进行中断嵌套需要在中断程序中打开中断使能~

  • 我没有开中断嵌套,因为ADC要求实时采集。如果同时中断,应该处理完优先级较高的ADC中断,然后立刻处理DMA中断吧。

    那个……不好意思哈,我之前情况描述有误(我看到的数据时以前存储在数组中的数据……),实际情况是:开启ADC中断后,ADC中断可以响应,但DMA就无法触发了,无法传送数据(ADC中断中没有访问ADC12MEM,也没有清ADC12IFG),感觉ADC响应中断比DMA触发更快,是不是中断函数中CPU无法让出总线控制权呢?谢谢!

  • 现在我用TimerA0捕获与DMA配合也出现类似的问题:关闭捕获中断的话,TA0CCR2.IFG能触发DMA;如果开启捕获中断,DMA就不能被触发……中断结束会自动清除TA0CCR2.IFG,但为什么在这之前TA0CCR2.IFG置位时不能触发DMA呢?

  • 虽然我用的是5系列,但6系列的应该也是一样

    DMA里关于触发源有说明,如果作为触发源的TA0CCR2的CCIE置位了,那么TA0CCR2的CCIFG不会触发传送,也就是二者不可得兼。

  • 可能是DMA的中断向量和DAC12的共用的原因。

  • 哦,明白了,以前没注意到,谢谢!