DMA(直接存储器访问) 是一种硬件技术,核心目标是解放CPU,让数据在设备与内存间自动传输,无需CPU全程参与。以下分三部分说明:
1. 为什么要用DMA?
传统方式:数据搬运(如外设与内存间复制)需CPU逐字节处理,如同快递员亲自搬货,效率低且占用CPU时间。
DMA方案:将搬运任务交给专用“搬运工”(DMA控制器),CPU仅需下达指令即可转而处理计算、逻辑控制等核心任务。
例子:
CPU是公司财务,每天需亲自将100份报表从仓库(内存)搬到打印机(外设)。若使用DMA,相当于雇了搬运工,财务只需说“从A仓库搬100份到打印机”,之后便可继续处理账目,搬运由他人完成。
2. DMA如何工作?
数据传输分为四个阶段,以UART串口发送数据到内存为例:
请求:串口准备好数据后,向DMA控制器发出搬运请求。
响应:DMA控制器向CPU“借用”总线控制权(CPU暂停访问内存)。
传输:DMA控制器自动将串口数据批量复制到指定内存地址,全程无CPU参与。
结束:传输完成后,DMA控制器归还总线控制权,并通知CPU:“任务完成,可处理数据了”。
3. DMA的应用场景与模式
适用场景:
外设↔内存:摄像头实时写入视频帧、声卡读取音频流。
内存↔内存:高速复制大块数据(如图像处理中的缓冲区拷贝)。
外设↔外设:传感器数据直传显示器(较少见)。
工作模式:
单次模式:搬运指定数据量后自动停止(如打印单份文件)。
循环模式:数据到达末尾后自动重置指针,持续传输(如实时录音,数据源源不断写入内存)。
例子:
视频直播中,摄像头每秒产生30帧图像。若用DMA,每帧数据自动存入内存,CPU仅需压缩/发送数据;若不用DMA,CPU将陷入搬运海量像素的泥潭,导致直播卡顿。
再举一个例子:
假设你在搞一个基于STM32的温湿度监控系统,ADC采样率10kHz,每次采样16位数据。如果全靠CPU搬运,CPU得频繁响应ADC中断,忙得不可开交。用了DMA,处理器只需要配置好DMA通道,数据自动从ADC流到内存,搬完后DMA触发一次中断,通知处理器处理这批数据。CPU轻松了不少,系统实时性也更强。
总结
DMA的核心价值是将CPU从重复性搬运中解放,专注于复杂任务,显著提升系统效率。它如同一个“自动传送带”,只需设置起点(源地址)、终点(目标地址)和数量(数据量),后续工作全由硬件完成。

882

被折叠的 条评论
为什么被折叠?



