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功能;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2023-07-08 统计的系统客观性与动态进化性•Freq频率与Bayes两大学派及争论•统计推断•Bayes学派及其基本观点与Bayes估计