1、概述
DMA(直接内存访问,DIrect Memory Access)
工作原理:DMA控制器直接在内存和外设之间传输数据,而不需要CPU的干预。
优点:极大地提高了数据传输效率,释放CPU资源。适合大批量数据传输,减少CPU负担。
缺点:需要额外的硬件支持(DMA控制器)。实现复杂度较高,涉及内存管理和总线控制。
RT1176配备两个 DMA 控制器,且相应地配有两个 DMAMUX(DMA 多路复用器)。EDMA(增强型 DMA)位于 CM7(Cortex-M7)域,与 CM7 协同工作;EDMA_LPSR(低功耗场景增强型 DMA)位于 CM4(Cortex-M4)域,与 CM4 协同工作。其中,DMA_CH_MUX(DMA 通道多路复用器)为 EDMA 提供服务,DMA_CH_MUX_LPSR(低功耗场景 DMA 通道多路复用器)则为 EDMA_LPSR 提供服务。
DMAMUX可将被称为时隙(slot) 的 DMA 源路由至 32 个 DMA 通道中的任意一个。
2、模块框图
3、模块特性
- 最多 208 个外设时隙可路由至 32 个通道。
- 32 个可独立选择的 DMA 通道路由器。
- 每个通道输出可单独配置为 "Always On" 模式,不依赖任何外设时隙。
- 前 4 个通道额外提供触发功能。
- 每个通道路由器可分配至任一可用的外设 DMA 时隙。
- 当任一通道的存储器映射配置发生变更时,该模块会向 DMA 控制器发送信号,以重置该通道的内部状态机,使其能够基于新配置接收新请求。
4、工作模式
禁用模式(Disabled mode)
在此模式下,DMA 通道被禁用。由于 DMA 通道的禁用与使能主要通过 DMA 配置寄存器完成,因此该模式主要用作 DMA 通道多路复用器(MUX)中 DMA 通道的复位状态。此外,该模式也可用于在系统重新配置期间(例如修改 DMA 触发周期时)暂时挂起 DMA 通道。正常模式(Normal mode)
在此模式下,DMA 源被直接路由至指定的 DMA 通道。此模式下 DMAMUX 的工作对系统完全透明。周期性触发模式(Periodic Trigger mode)
在此模式下,DMA 源仅能周期性地发起 DMA 传输请求(例如发送缓冲区为空或接收缓冲区满时)。周期配置在周期性中断定时器(PIT)的寄存器中完成。该模式仅适用于 0 至 3 号通道。
6、应用信息(MUX的初始化说明)
6.1 使能与配置源
如需使能带周期性触发功能的源,操作如下:
- 确定该源将关联到哪个 DMA 通道。注意,仅前 4 个 DMA 通道具备周期性触发能力。
- 清除该 DMA 通道的 CHCFG [ENBL] 和 CHCFG [TRIG] 字段。
- 确保 DMA 中的该通道已正确配置。此时可使能该 DMA 通道。
- 配置对应的定时器。
- 选择需要路由至 DMA 通道的源。写入相应的 CHCFG 寄存器,并确保 CHCFG [ENBL] 和 CHCFG [TRIG] 字段已置位。
示例:
如需将 5 号源的发送功能配置为与 DMA 通道 1 配合使用,并启用周期性触发能力,操作如下:
- 向 CHCFG1 寄存器写入 0x00000000。
- 在 DMA 中配置通道 1,包括使能该通道。
- 配置定时器以设置所需的触发间隔。
- 向 CHCFG1 寄存器写入 0xC0000005。
使能无周期性触发的源
操作步骤如下:
- 确定该源将关联到哪个 DMA 通道。注意,仅前 4 个 DMA 通道具备周期性触发能力。
- 清除该 DMA 通道的 CHCFG [ENBL] 和 CHCFG [TRIG] 字段。
- 确保 DMA 中的该通道已正确配置。此时可使能该 DMA 通道。
- 选择需要路由至 DMA 通道的源。写入相应的 CHCFG 寄存器,确保 CHCFG [ENBL] 字段置位,同时 CHCFG [TRIG] 字段清零。
示例:
如需将 5 号源的发送功能配置为与 DMA 通道 1 配合使用,且不启用周期性触发能力,操作如下:
- 向 CHCFG1 寄存器写入 0x00000000。
- 在 DMA 中配置通道 1,包括使能该通道。
- 向 CHCFG1 寄存器写入 0x80000005。
禁用源
若要禁用特定的 DMA 源,可不对任何 CHCFG 寄存器写入对应的源值。此外,可能还需要进行一些模块特定的配置。
切换 DMA 通道的源
- 在 DMA 中禁用该 DMA 通道,并为新源重新配置通道。
- 清除该 DMA 通道的 CHCFG [ENBL] 和 CHCFG [TRIG] 位。
- 选择需要路由至该 DMA 通道的源。写入相应的 CHCFG 寄存器,确保 CHCFG [ENBL] 和 CHCFG [TRIG] 字段已置位。
将 DMA 通道 8 的源从 5 号发送源切换至 7 号发送源
- 在 DMA 配置寄存器中,禁用 DMA 通道 8,并将其重新配置为处理至外设时隙 7 的传输。本示例假设通道 8 不具备触发能力。
- 向 CHCFG8 寄存器写入 0x00000000。
- 向 CHCFG8 寄存器写入 0x80000007。(在本示例中,由于假设通道 8 不支持周期性触发功能,因此设置 CHCFG [TRIG] 字段不会产生任何效果。)
7、配置选项
ENBL(通道使能位) | TRIG(触发使能位) | A_ON(始终使能位) | Function | Mode |
0 | X | X | DMA 通道禁用 | 禁用模式 |
1 | 0 | 0 | DMA 通道使能,无触发 | 正常模式 |
1 | 1 | 0 | DMA 通道使能,带触发功能 | 周期性触发模式 |
1 | 0 | 1 | DMA 通道始终使能 | 始终使能模式 |
1 | 1 | 1 | DMA 通道始终使能,且带触发功能 | 始终使能触发模式 |
8、寄存器解读
偏移地址(十六进制) | 寄存器 | 位宽(比特) | 访问方式 | 复位值(十六进制) |
---|---|---|---|---|
0 - 7C | 通道 a 配置寄存器(CHCFG0 - CHCFG31) | 32 | 读写(RW) | 0000_0000 |
位号解析:
位 | 字段 | 说明 |
---|---|---|
31 | ENBL | DMA 多路复用器通道使能 使能 DMA 多路复用器的通道。DMA 有独立的通道使能 / 禁用控制,应使用这些控制来禁用或重新配置 DMA 通道。 0 - DMA 多路复用器通道禁用 1 - DMA 多路复用器通道使能 |
30 | TRIG | DMA 通道触发使能 使能触发型 DMA 通道的周期性触发功能。 0 - 触发禁用。若触发禁用且 ENBL 置位,DMA 通道将直接把指定源路由至 DMA 通道(正常模式) 1 - 触发使能。若触发使能且 ENBL 置位,DMA_CH_MUX 工作在周期性触发模式 |
29 | A_ON | DMA 通道始终使能 使能 DMA 通道的始终开启功能。若 TRIG 位置位,模块将在每次触发时发出请求。 0 - DMA 通道始终开启功能禁用 1 - DMA 通道始终开启功能使能 |
28-8 | — | 保留字段 |
7-0 | SOURCE | DMA 通道源(时隙编号) 指定路由至特定 DMA 通道的 DMA 源(若有)。有关外设及其时隙编号的详情,请参见芯片专用的 DMA_CH_MUX 信息 |