外设通过发送 DMA 请求信号来指示 DMA 传输。DMA 请求会被等待直到它被 DMA 控制器服务,这时 DMA 会产生一个响应信号,这时对应的 DMA 请求信号会失效。
DMAMUX 请求多路复用器用于在外设和DMA控制器之间路由 DMA 请求线。路由功能由一个可编程的多通道 DMA 请求多路复用器来提供。每个通道选择一个唯一的 DMA 请求线,与 DMAMUX 的同步输入的无条件地或同步地事件同步。DMAMUX 可以也会使用一个来自 input trigger signals 的可编程事件。

说明:
DMA 信号说明:

一个 DMAMUX 通道就是一个 DMAMUX request multiplexer 通道,可能是来自于 dmamux_req_inx 或 dmamux_trgx。
一个 DMAMUX request multiplexer(dammux_reqx)连接到(并且专门用于) DMA 控制器的某一个通道上。
一个通道配置程序可以按下列步骤来写:
DMAMUX request multiplexer 拥有多个通道,这确保能准确地路由 DMA request/acknowledge 控制信号,这个路由“线路”被称为 DMA request line。
每一个 DMA request line 都是并行连接到 DMAMUX request line multiplexer 的通道中。
DMA 请求是一个源即来自外设或也可来自 DMAMUX 请求产生器。
DMAMUX request line multiplexer 通过 DMAMUX_CxCR 寄存器中的 DMAREQ_ID 位来选择 DMA request line。




⚠️ DMAREQ_ID 被填充了 null 值表明 DMAMUX request line multiplexer 没有选择任何的 DMA request line。
不允许设置两个 DMAMUX 通道拥有相同的非 null 数值。
在DMA请求选择的基础上,如果需要,可以配置和启用 synchronization 和/或 event generation。
通过设置 DMAMUX_CxCR 寄存器中的 synchronization enable (SE) 位,每一个 DMAMUX request line multiplexer 的通道 x 可以独立被设置成 synchronized。
DMAMUX 有多个同步输入源,这些同步输入源并行得连接到 request multiplexer 的通道上,它们是互不干扰的。
通道 x 同步输入源可以通过设置 DMAMUX_CxCR 寄存器的 SYNC_ID 位来选择。



当通道被配置为同步模式时,一旦在 input synchronization signal 检测到 rising/falling edge(由 DMAMUX_CxCR 寄存器的 SPOL[1:0]位来设置),被选择的 input DMA request line 信号会被传播作为 multiplexer channel output。
此外,还有一个可编程 DMA 请求计数器,位于 DMAMUX 请求多路复用器内部。这个请求计数器可用于通道请求输出生成,也可能用于事件生成。通过设置 DMAMUX_CxCR 寄存器的 EGE 位,可以开启通道 x 的事件输出。
事件输出如下图所示:

⚠️ 如果 synchronization event 产生,然而此时没有挂起的 select input DMA request line,这个 event 将会被丢弃。
同步模式的使用:

当同步信号(dmamux_syncx)达到时,输入的 dmamux_reqx 会立刻被传播到 dmamux_req_outx 作为输出信号,同时通道内部的 DMA request counter 会开启计数,初始值是设置在 DMA_CxCR 寄存器的 NBERQ 位中。当 counter 递减到零时,会触发一次 dmamux_evtx 的事件,同时断开输入信号 dmamux_reqx 到输出 dmamux_req_outx 的连接。