SciTech-EECS-MCU/CPU: DMA(直接内存访问): 开始时由CPU进行协调配对+传数据时DMA+结束时触发硬件中断通知MCU/CPU并解除配对
- MEM可以是:
-
MCU/CPU自带的内存:
容量由“芯片设计师”根据常用场景统计确定大小。
常能满足大多数用途。 -
MCU/CPU的外部内存:
容量由“硬件设计师”根据需要确定。
在设计电路阶段,为MCU/CPU增加的外围物理“大内存”,
安放布设在MCU/CPU的周围, 直连其高速总线, 可满足硬件特定需求。 -
MCU/CPU的可扩展外存:
容量由“终端用户”自由扩展。
在设计电路阶段,要为MCU/CPU增加通用的“硬件接口 或,扩展槽”, 常用的有SD卡槽、U盘接口。
直连MCU/CPU高速总线, 可满足“购买设备”的终端用户自由扩展外部存储容量的需求。
- DMA常用于大量数据的读写;
-
少量数据, 要调用MCU/CPU指令,实现上是“'register'转发”方式存取MEM(内存)。
常常数据只是8bit、16bit, 32bit, 64bit, 128bit, 256bit, 根据MCU/CPU的Datasheet确定。
CPU(汇编)指令上,每一笔“小数据”要两步完成:- 首先, 将MEM地址的数据读入register, 这是一条MCU/CPU指令。
- 其次, 其他“电路单元”读写register内容, 另一条MCU/CPU指令.
-
大量数据时, 先进MCU/CPU的DMA(Direct Memory Access)方式:
- 开始时, 由CPU总线协调好“配对”, 并保存一条“DMA记录”
每条“DMA记录”要有{"收"设备ID及其起始地址, "发"设备ID及其起始地址,数据大小}; - 传数时, DMA(分block块方式):
- 分“大块”传,一次传"一大块"(常有KB或MB为单位的大小), 直到传完;
- 不占用CPU执行指令。
- 结束时, 触发"硬件中断", 通知MCU/CPU已传完, 并由其解除“配对”并清除对应的"DMA记录"。
避免拆分为一笔笔“小数据收发”的方式,是因为:
- MCU/CPU将一直被占用执行两条汇编指令。
- 每一笔“小数据”都经过MCU/CPU(的register)转发, 传输路径上绕不必要的弯路。
- 开始时, 由CPU总线协调好“配对”, 并保存一条“DMA记录”
- DMA的条件:
- 首先数据的“收方”、“发方”与MCU/CPU, 都要有DMA功能.
例如, 收方是ADC( MCU/CPU自带的或其高速总线外接的), 总之此ADC的Datasheet上要有DMA功能。
发方是“终端用户”外插在可扩展槽的SD卡存储, 则此SD卡槽连接的MCU/CPU高速总线要有DMA功能;

浙公网安备 33010602011771号