浅谈DMA

DMA(Direct Memory Access,直接内存存取)是所有现代计算机系统中的重要特色,该工作方式允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后将这新信息再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。DMA 传输将一个内存区从一个装置复制到另外一个。CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存去。像是这样的操作并没有让处理器工作拖延,反而可以被重新安排去处理其他的工作。DMA 传输对于高效能嵌入式系统算法和网络是很重要的。 


一个完整的 DMA 传输过程必须经过下面的四个步骤: 


(1)DMA 请求——CPU 对 DMA 控制器进行初始化,并向 I/O 接口发出操作命令,I/O 接口提出 DMA 请求。 


(2)DMA 响应——DMA 控制器对 DMA 请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当 CPU 执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示 DMA 已经响应,通过 DMA 控制器通知 I/O 接口开始 DMA 传输。 


(3)DMA 传输——DMA 控制器获得总线控制权后,CPU 即刻挂起或只执行内部操作,由 DMA 控制器输出读写命令,直接控制 RAM 与 I/O 接口进行 DMA 传输。在 DMA 控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过程中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。 


(4)DMA 结束——当完成规定的成批数据传送后,DMA 控制器即释放总线控制权,并向 I/O 接口发出结束信号。当 I/O 接口收到结束信号后,一方面停止 I/O 设备的工作,另一方面向 CPU 提出中断请求,使 CPU 从不介入的状态解脱,并执行一段检查本次 DMA 传输操作正确性的代码。最后带着本次操作结果及状态继续执行原来的程序。


原文:https://blog.csdn.net/lu_embedded/article/details/78502499 


 

猜你喜欢

转载自blog.csdn.net/weixin_42625444/article/details/84645569
DMA