最近阅读430手册的DMA模块发现一个问题,DMA模块的说明里有一些DMA操作运行的流程图,里面有一个是在DMA传输数据时CPU是挂起的,后来查看了关于DMA的资料发现,DMA在传输数据时会获得地址数据总线的控制权,这时CPU就处于挂起状态了,但是有个问题没想明白,用DMA传输数据就是为了能让CPU干别的事情,但是总线的控制权却在DMA那,CPU啥也干不了,岂不是没用了? 但是我实验中却发现用DMA传输大量数据时CPU还是能够响应其他中断的,比如键盘中断,定时器中断等,这是怎么回事?
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模块发现一个问题,DMA模块的说明里有一些DMA操作运行的流程图,里面有一个是在DMA传输数据时CPU是挂起的,后来查看了关于DMA的资料发现,DMA在传输数据时会获得地址数据总线的控制权,这时CPU就处于挂起状态了,但是有个问题没想明白,用DMA传输数据就是为了能让CPU干别的事情,但是总线的控制权却在DMA那,CPU啥也干不了,岂不是没用了? 但是我实验中却发现用DMA传输大量数据时CPU还是能够响应其他中断的,比如键盘中断,定时器中断等,这是怎么回事?
您好,你这个问题应该是翻译错误,DMA是直接读取,这个时候CPU是完全解放的,你不需要担心占用CPU资源的问题。
如果CPU是完全解放的,那么CPU能控制内部地址总线和数据总线吗,看资料里说,DMA传输时总线的控制权会在DMA这,而CPU将失去总线控制权,要是这样的话,CPU在DMA传输期间怎么访问内部的其他外设,比如定时器,乘法器,USCI等等?例如,在某一时间段内,DMA正在传输大量数据,而此时CPU要执行存在于Flash中的代码,给定义在内存中的一个数组赋值,如果此时DMA掌控着总线,那这个操作能进行吗?
我的意思就是如果像网上说的那样,DMA传输期间 CPU会把总线控制权交给DMA,虽说CPU被解放出来了,但是失去了总线控制权的CPU还能干啥,很多事情都干不了了吧,感觉和挂起没啥区别了。。。 本来刚开始DMA这块感觉挺明白的,但是现在彻底不明白了。。。