DMA 控制器
一、DMA 是干啥的?
- DMA 控制器可以无须 CPU 介入而在内部存储器、外部存储器及片上外设之间传送数 据 ,HPI 接口也使用DMA 辅助端口传送数据。
- 通俗点说,CPU(老板)平时要管公司所有事,如果还要亲自搬货(传输数据)就太累了。 DMA(快递小哥)专门负责把数据从 A 仓库(比如内存) 搬到 B 仓库(比如硬盘),或者帮外设(比如打印机)取货送货,全程不用老板操心。
二、DMA结构
●四个标准端口 (port): 与 DARAM、SARAM、 外部存储器和外设相连
●一个辅助端口:用于HPI 和存储器之间的数据传送;
● 6 个 通 道 :能同时运输信息。
-
DMA 的四大“快递点”(端口)
- 它接了4个固定站点,可以快速跑腿:
- DARAM:公司内部的小仓库(快速存取)。
- SARAM:另一个小仓库(稍微慢一点)。
- 外部存储器:公司外的大仓库(比如硬盘/U盘)。
- 外设:其他设备部门(比如打印机、摄像头)。
- 它接了4个固定站点,可以快速跑腿:
-
专属的“VIP通道”(辅助端口)
- 额外给 HPI 接口(比如一个特殊客户)开了一条专用通道,让它能直接和仓库(内存)传数据,不用排队!
-
6个“快递员分身”(通道)
- 这个快递小哥有6个分身,可以同时处理6个不同的送货任务。比如:
- 分身1:从内存搬数据给打印机。
- 分身2:从摄像头取视频存到硬盘。
- ……互不干扰,效率拉满!
- 2个通道同时利用端口传送数据时,会出现排队的情况。
- 这个快递小哥有6个分身,可以同时处理6个不同的送货任务。比如:
-
为啥老板(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:自动打包成大包裹再送!
- DMACSDP寄存器中的
3. 端口选择 —— 从哪里取货?送到哪里?
DMA 的每个通道需要指定:
- 源端口(取货地址):从哪里取数据?
- 目的端口(送货地址):把数据送到哪里?
4. 数据地址管理 —— 快递员的“送货路线规则”
DMA 需要知道数据存放的起始地址,还要决定每次送货后地址怎么变:
- 起始地址:
- 源地址:由
DMACSSAL
(低16位) +DMACSSAU
(高16位) 组合成完整地址。 - 目的地址:由
DMACDSAL
+DMACDSAU
组合。
- 源地址:由
总结
- DMA 配置 = 定义包裹大小 + 合并包裹 + 选择路线 + 规划送货地址。