DMA 简介
DMA 控制器的作用不仅在于提高系统性能和减少处理器中断的产生,而且还专门设计用于针对 32 位 MCU 应用进行优化。 DMA 控制器提供 7 个通道,用于内存到内存、内存到外设和外设到内存的传输。 每个通道都支持将外设的 DMA 请求映射到任何通道。 图1DMA 控制器架构
DMAMUX 简介
DMAMUX 用于将外设的 DMA 请求映射到任意流量通道。 DMAMUX 对每个外设都有一个唯一的 ID 号,用户只需将此 ID 号写入相应的寄存器并打开 DMAMUX 功能即可。 DMAMUX 的引入使得 DMA 比传统的 DMA 控制器更加灵活,用户可以随意分配 7 个通道的使用,再也不用担心某个 IP 只能在一个或几个通道上使用的 DMA 请求。 每个IP地址对应的ID号如下: 表1每个 IP 地址对应的 ID 号列表
注意:**中的“DMAMUX请求”是ID号;“* 每个 IP 的 DMA 请求。
DMA功能分析
可编程数据宽度
DMA 控制器的通道可以支持不同数据宽度、字节和半字字的传输。 源数据和目标数据的数据宽度可以通过 DMA CXCTRL 中的 pwidth 和 mwidth 位进行编程,正常情况下需要将 pwidth 和 mwidth 位设置为相等,当 pwidth 不等于 mwidth 时,数据会根据 pwidth mwidth 设置进行对齐。 图2 pwidth:byte, mwidth: half-word
图3 pwidth: half-word, mwidth: word
配置 DMAMUX
在 M2P 和 P2M 模式下,必须配置 DMAMux,否则 DMA 不会响应外设 DMA 请求。 DMAMUX的作用是多路复用外设的DMA请求,即任何外设的DMA请求都可以映射到DMA1和DMA2的任意通道,这大大增加了DMA通道分配的灵活性。 配置 DMAMUX 就像调用两个专门提供的接口函数一样简单
配置请求生成器模块
配置 DMAMUX 后,您可以选择配置 DMA 请求生成器模块,该模块共有 4 个请求生成器通道。 该模块不需要任何传统的外设(如定时器、SPI等)来提供DMA请求,可以通过外部EXINT输入作为DMA请求源输入。 配置 Request Generator 模块就像调用专门提供的接口函数一样简单:
配置请求同步模块
配置 DMAMUX 后,您可以选择配置 DMA 同步模块,该模块共有 7 个同步通道。 启用此功能后,当外设产生DMA请求时,DMA不会立即响应并发送数据,而是等待同步信号的到来,当接收到同步信号时,DMA会根据配置发送数据。 同步信号可由外部输出输入提供,配置同步模块就像调用专门提供的接口功能一样简单
DMA 配置解析
下面介绍 DMA 配置接口和流程。
功能接口
表2通道配置函数列表
数据流配置
设置外设地址(CXPADDR 寄存器)。在传输过程中,数据传输的初始外设地址不能更改。 设置内存地址(CXMADDR 寄存器)。数据传输的初始存储地址在传输过程中不能更改。 配置传输的数据量(cxdtcnt 寄存器)。可编程传输数据的最大长度为 65535。 在传输过程中,传输的数据量值逐渐减少。 数据流配置(cxctrl 寄存器)。
它包括信道优先级、数据传输方向和宽度、地址增量模式、循环模式和中断模式。
优先级 (CHPL)。
有 4 个级别,最高优先级、高优先级、中优先级和低优先级。
如果两个流具有相同的优先级,则编号较低的流具有较高的优先级。 例如,流 1 优先于流 2。
数据传输方向 (DTD)。它分为内存到外设 (M2P)、外设到内存 (P2M) 或内存到内存 (M2M) 传输。 在内存到内存传输模式下不允许循环模式、双缓冲模式和直接模式。 数据传输的宽度 (pwidth mwidth)。根据实际使用场景,您可以将宽度配置为字节、半字或字。 地址递增模式 (pincm mincm)。当通道配置设置为增量模式时,下一次传输的地址将是上一次传输的地址加上传输宽度(pwidth mwidth)。 循环模式 (LM)。当流配置设置为循环模式时,CXDTCNT 寄存器的内容将在最后一次传输后恢复为其初始值。 启用 DMAMUX(MUXsel 寄存器的 TBL SEL 位)。在非内存到内存 (M2M) 模式下,需要启用 DMAMUX 以启动数据流以响应来自外围设备的 DMA 请求。 写入外设 ID 号(muxcxctrl 寄存器的 reqsel)。在非内存到内存 (M2M) 模式下,需要写入外设的 DMA 请求 ID 号,以便启动数据流以响应外设的 DMA 请求。 打开数据流(cxctrl 寄存器的 chen 位)。
配置流程
打开 DMA 时钟;调用通道复位功能复位数据流;调用 struct 初始化函数,初始化通道配置结构;调用初始化函数初始化通道;调用 dmamux enable 函数并写入 id number 函数,配置 dmamux 相关内容调用通道使能函数打开通道。 如需数据表、样品测试、采购、BOM匹配等需求,**客服微信:13310830171。