DMA 控制器

一、DMA 是干啥的?

  • DMA 控制器可以无须 CPU 介入而在内部存储器、外部存储器及片上外设之间传送数 据 ,HPI 接口也使用DMA 辅助端口传送数据。
  • 通俗点说,CPU(老板)平时要管公司所有事,如果还要亲自搬货(传输数据)就太累了。 DMA(快递小哥)专门负责把数据从 A 仓库(比如内存) 搬到 B 仓库(比如硬盘),或者帮外设(比如打印机)取货送货,全程不用老板操心。

二、DMA结构

四个标准端口 (port): 与 DARAM、SARAM、 外部存储器和外设相连
一个辅助端口:用于HPI 和存储器之间的数据传送;
6 个 通 道 :能同时运输信息。

  1. DMA 的四大“快递点”(端口)

    • 它接了4个固定站点,可以快速跑腿:
      • DARAM:公司内部的小仓库(快速存取)。
      • SARAM:另一个小仓库(稍微慢一点)。
      • 外部存储器:公司外的大仓库(比如硬盘/U盘)。
      • 外设:其他设备部门(比如打印机、摄像头)。
  2. 专属的“VIP通道”(辅助端口)

    • 额外给 HPI 接口(比如一个特殊客户)开了一条专用通道,让它能直接和仓库(内存)传数据,不用排队!
  3. 6个“快递员分身”(通道)

    • 这个快递小哥有6个分身,可以同时处理6个不同的送货任务。比如:
      • 分身1:从内存搬数据给打印机。
      • 分身2:从摄像头取视频存到硬盘。
      • ……互不干扰,效率拉满!
      • 2个通道同时利用端口传送数据时,会出现排队的情况。
  4. 为啥老板(CPU)喜欢它?

    • DMA 自己就能搞定跑腿,老板不用停下手里工作(比如算账、打游戏),公司整体效率飙升!

DMA 控制器与DSP 其他部件的连接框图如图5-24所示。
在这里插入图片描述


三、数据的传输

1、FIFO:

  • 如前所述,DMA 控制器有6个通道,用于4个标准端口之间的数据传送,每个通道可以从某个端口读取数据,也可以将数据写入某个端口。每个通道有一个 FIFO 缓冲区。 如图5-25所示,数据的传输包括两个阶段:端口读取和端口写入。 DMA 先从源端口读取数 据,并将其放到通道的FIFO缓冲区里,然后再从FIFO 缓冲区取出写入目的端口。
  • 通俗比喻,FIFO好比每个快递员身上带个筐(FIFO 缓冲区):
    • 步骤1:先跑到 源端口(比如内存) 取货(数据),装进自己的筐里。
  • 步骤2:再跑到 目的端口(比如硬盘) 把筐里的货卸下来。
    这样就算路上堵车(端口忙),筐里的货也能临时存着,不耽误进度!
    在这里插入图片描述

2、HPI的优先权

  • HPI 接口 像个VIP客户,DMA 和 HPI 要抢仓库资源,但规则由 EHPIEXCL 开关 决定:要么共享,要么让 HPI 独占!
  • 如图5-26所示, HPI 和 DMA 通道的关系由 DMAGCR 寄存器中的 EHPIEXCL 位
    确定。
    ( 1 ) 当EHPIEXCL=0,HPI 和 DMA 通道共享DARAM 、SARAM 和 EMIF。
    ( 2 ) 当EHPIEXCL=1,HPI 独占DARAM 和 SARAM(DARAM和SARAM都是片上内设),DMA 通道只能访问EMIF 和外 设。
    注意:HPI 自己不能碰外设(比如打印机)
    在这里插入图片描述
  • DMA 通道和 HPI 具有可编程的优先级。通过寄存器 DMACCR 中的PRIO 位可以设置 每个通道的优先级,通过寄存器 DMAGCR 中的EHPIPRIO 位可以设置HPI 的优先级。不管 优先级如何设定,端口对通道和 HPI 的检测按照固定的顺序循环:0,1,2,3,4,5, HPI,0,1,2,3,4,5,HPI, …。优先权展现在轮到它被检查时生效,能立刻抢占当前处理权,但不会打破整体检测顺序。

四、DMA的传输配置

1、数据传输单位(四类)

  • 字节、单元、帧、块
    (1)字节 (Byte): 一个字节是DMA 通道最小的数据传输单位。
    (2)单元 (Element): 若干个字节构成的数据传输单位称为一个单元,一个单元可以是 8位、16位或32位的。 一个单元的传输是不能被中断的。
    ( 3 ) 帧 (Frame): 若干个单元构成的数据传输单位称为一帧。在一帧的传输过程中不 能被中断。
    ( 4 ) 块 (Block): 若干个帧构成的数据传输单位称为一个块,每个通道一次或多次传 输一个块。在块的传输过程中可以被中断。

2、 数据打包 —— 合并小包裹,省时省力!

  • 问题:如果快递车(总线)很大,但包裹(数据)很小,跑一趟只送一个小包裹太浪费!
  • 解决:DMA 的“打包功能”能把多个小包裹合并成大包裹再送。
    • 比如:4个8位数据(小包裹) → 打包成1个32位数据(大包裹) → 一次送完!
  • 如何设置
    • DMACSDP寄存器中的 DSTPACK/SRCPACK 字段:
      • =0:不打包,直接送小包裹。
      • =1:自动打包成大包裹再送!

3. 端口选择 —— 从哪里取货?送到哪里?

DMA 的每个通道需要指定:

  • 源端口(取货地址):从哪里取数据?
  • 目的端口(送货地址):把数据送到哪里?

4. 数据地址管理 —— 快递员的“送货路线规则”

DMA 需要知道数据存放的起始地址,还要决定每次送货后地址怎么变:

  • 起始地址
    • 源地址:由 DMACSSAL(低16位) + DMACSSAU(高16位) 组合成完整地址。
    • 目的地址:由 DMACDSAL + DMACDSAU 组合。

总结

  • DMA 配置 = 定义包裹大小 + 合并包裹 + 选择路线 + 规划送货地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值