SciTech-EECS-MCU/CPU: DMA(直接内存访问): 开始时由CPU进行协调配对+传数据时DMA+结束时触发硬件中断通知MCU/CPU并解除配对

  1. MEM可以是:
  • MCU/CPU自带的内存:
    容量由“芯片设计师”根据常用场景统计确定大小。
    常能满足大多数用途。

  • MCU/CPU的外部内存:
    容量由“硬件设计师”根据需要确定。
    在设计电路阶段,为MCU/CPU增加的外围物理“大内存”,
    安放布设在MCU/CPU的周围, 直连其高速总线, 可满足硬件特定需求。

  • MCU/CPU的可扩展外存:
    容量由“终端用户”自由扩展。
    在设计电路阶段,要为MCU/CPU增加通用的“硬件接口 或,扩展槽”, 常用的有SD卡槽、U盘接口。
    直连MCU/CPU高速总线, 可满足“购买设备”的终端用户自由扩展外部存储容量的需求。

  1. 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)转发, 传输路径上绕不必要的弯路。
  1. DMA的条件:
  • 首先数据的“收方”、“发方”与MCU/CPU, 都要有DMA功能.
    例如, 收方是ADC( MCU/CPU自带的或其高速总线外接的), 总之此ADC的Datasheet上要有DMA功能。
    发方是“终端用户”外插在可扩展槽的SD卡存储, 则此SD卡槽连接的MCU/CPU高速总线要有DMA功能;
posted @   abaelhe  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2023-07-08 统计的系统客观性与动态进化性•Freq频率与Bayes两大学派及争论•统计推断•Bayes学派及其基本观点与Bayes估计
点击右上角即可分享
微信分享提示