STM32H7 DMAMUX 阅读笔记

DMAMUX1 学习笔记

外设通过发送 DMA 请求信号来指示 DMA 传输。DMA 请求会被等待直到它被 DMA 控制器服务,这时 DMA 会产生一个响应信号,这时对应的 DMA 请求信号会失效。

DMAMUX 请求多路复用器用于在外设和DMA控制器之间路由 DMA 请求线。路由功能由一个可编程的多通道 DMA 请求多路复用器来提供。每个通道选择一个唯一的 DMA 请求线,与 DMAMUX 的同步输入的无条件地或同步地事件同步。DMAMUX 可以也会使用一个来自 input trigger signals 的可编程事件。

DMAMUX Block Diagram

在这里插入图片描述
说明:

  • DMAMUX request multiplexer sub-block inputs(dammux_reqx)是来自外围设备(dmamux_req_inx)和 DMAMUX request generator sub-block(dmamux_req_genx);
  • DMA 控制器的通道(channel)请求输出为 dammux_req_outx;
  • 内部和外部信号到 DMA request trigger inputs(dmamux_trgx);
  • 内部和外部信号到 synchronization inputs (dmamux_syncx)

DMA 信号说明:
在这里插入图片描述

DMAMUX 通道

一个 DMAMUX 通道就是一个 DMAMUX request multiplexer 通道,可能是来自于 dmamux_req_inx 或 dmamux_trgx。

一个 DMAMUX request multiplexer(dammux_reqx)连接到(并且专门用于) DMA 控制器的某一个通道上。

一个通道配置程序可以按下列步骤来写:

  1. 设置和配置一个 DMA 通道例如 y;
  2. 设置和配置相关的 DMAMUX 的 y 通道;
  3. 使能 DMA 中的 y 通道;

DMAMUX request line multiplexer

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。

Synchronization mode and channel 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 的连接。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值