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.

请教一个关于430内部DMA模块的问题



最近阅读430手册的DMA模块发现一个问题,DMA模块的说明里有一些DMA操作运行的流程图,里面有一个是在DMA传输数据时CPU是挂起的,后来查看了关于DMA的资料发现,DMA在传输数据时会获得地址数据总线的控制权,这时CPU就处于挂起状态了,但是有个问题没想明白,用DMA传输数据就是为了能让CPU干别的事情,但是总线的控制权却在DMA那,CPU啥也干不了,岂不是没用了? 但是我实验中却发现用DMA传输大量数据时CPU还是能够响应其他中断的,比如键盘中断,定时器中断等,这是怎么回事?

  • DMA是数据直接存取,不在手cpu控制了。你就当cpu放权了就行了,别的别管了。只要功能正常,很多中文的书翻译有偏差。容易误解。

  • 您好,你这个问题应该是翻译错误,DMA是直接读取,这个时候CPU是完全解放的,你不需要担心占用CPU资源的问题。

  • 如果CPU是完全解放的,那么CPU能控制内部地址总线和数据总线吗,看资料里说,DMA传输时总线的控制权会在DMA这,而CPU将失去总线控制权,要是这样的话,CPU在DMA传输期间怎么访问内部的其他外设,比如定时器,乘法器,USCI等等?例如,在某一时间段内,DMA正在传输大量数据,而此时CPU要执行存在于Flash中的代码,给定义在内存中的一个数组赋值,如果此时DMA掌控着总线,那这个操作能进行吗?

    我的意思就是如果像网上说的那样,DMA传输期间 CPU会把总线控制权交给DMA,虽说CPU被解放出来了,但是失去了总线控制权的CPU还能干啥,很多事情都干不了了吧,感觉和挂起没啥区别了。。。 本来刚开始DMA这块感觉挺明白的,但是现在彻底不明白了。。。

  • 楼主你的理解是正确的,在DMA掌握总线使用权的过程中,CPU就是挂起来的,这样可以降低MCU的功耗,MSP430就是一款主打低功耗的MCU,不过说实话好像从来没用过这个功能。