DMA数据传输的时候,CPU可以同时并行处理其它任务吗?

2019-12-15 11:16发布

000.PNG (23.71 KB, 下载次数: 0) 下载附件 2018-11-24 13:02 上传

想请教下各位:

问题1:上述说法是正确的嘛?还是说每种类型的单片机在DMA这块机制不一样?

问题2:如果上述说法正确的,为什么在进行DMA传输的这段时间内需要挂起CPU?这样使用DMA有什么意义?

问题3:如果上述说法不正确,那么是否会产生资源共享的问题(在DMA传输的这段时间内,DMA也可以看作某种意义上的CPU,与真正的CPU进行资源竞争)?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
XA144F
2019-12-16 01:06
在8086时代,DMA还用的是8237,当DMA开始传输数据时,会完全占用地址、数据和控制总线,而CPU在此时使用总线的话会造成各种严重后果。所以8237在开始运行时会发出一个LOCK信号来让8086暂时停止运行,直到8237传输结束后才撤销LOCK信号让8086继续跑。
MSP430估计也是这种情况。
当然,现在的CPU内部带指令缓存和数据缓存,所以就算DMA占用了外部的三总线,CPU还能继续运行,当然在遇到需要从外部存储器中读取D和I时就要耐心等等了。
stm32单片机的DMA是有仲裁的,保证CPU和DMA都能运行而且性能损失最低。就算到了极端情况,仲裁器也能保证CPU有一半的带宽可用。

一周热门 更多>