DMA(Direct Memory Access),字面意思“直接访问内存”,无需 CPU 干预直接读写内存。传统CPU读写数据时,需要先将要使用的数据保存到 RAM,等要用时再从RAM 加载。
目录
一、传统CPU存取数据
CPU 不直接存取外设的原因:
- CPU 的工作速度和外设的工作速度差距太大
- 外设格式种类繁多,无法直接存取,需要经过转换
基于上述原因,CPU 不能直接从外设获取或者向外设写入内容。传统CPU 获取数据的步骤如下:
1、CPU 将外设数据加载到内存(和CPU的处理速度最接近)
2、CPU 检查 cache 是否有自己需要的数据(是否命中)
3、如果命中,直接返回数据;如未命中,继续从内存获取(这里暂时不考虑MMU)
4、返回数据

二、认识DMA
由上面CPU 读取数据来看,无论是将外设数据搬移到内存,还是从内存读取数据,都需要CPU 的参与。为了让 CPU 能够专注于处理手中事务,DMA 将负责数据的搬移工作。
1、什么是DMA
DMA(Direct Memory Access)即直接存储器访问,借助内部的控制器来实现内存和外设之间的数据传输。有了DMA,CPU 可以专注于内存数据的存取;数据的搬运过程完全可以交由DMA硬件完成。有了DMA以后,不代表完全不需要CPU了,只是不会像中断那样频繁向CPU发送请求。
- 开始传输时刻:DMA向CPU申请至少一个总线周期的占用时间来做数据传输工作
- 结束传输时刻:DMA向CPU发送中断请求,请求CPU处理这些数据


本文介绍了传统CPU存取数据的方式及局限,引出DMA。阐述了DMA的概念,即直接存储器访问,可实现内存和外设间数据传输,减轻CPU负担。还介绍了其工作模式、数据传输方式、寻址模式,以及DMA数据传输的准备、请求、传送、善后四个阶段。
最低0.47元/天 解锁文章
1万+





