<RT1176系列11>DMAMUX解读

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 使能与配置源

如需使能带周期性触发功能的源,操作如下:

  1. 确定该源将关联到哪个 DMA 通道。注意,仅前 4 个 DMA 通道具备周期性触发能力。
  2. 清除该 DMA 通道的 CHCFG [ENBL] 和 CHCFG [TRIG] 字段。
  3. 确保 DMA 中的该通道已正确配置。此时可使能该 DMA 通道。
  4. 配置对应的定时器。
  5. 选择需要路由至 DMA 通道的源。写入相应的 CHCFG 寄存器,并确保 CHCFG [ENBL] 和 CHCFG [TRIG] 字段已置位。

示例:

如需将 5 号源的发送功能配置为与 DMA 通道 1 配合使用,并启用周期性触发能力,操作如下:

  1. 向 CHCFG1 寄存器写入 0x00000000。
  2. 在 DMA 中配置通道 1,包括使能该通道。
  3. 配置定时器以设置所需的触发间隔。
  4. 向 CHCFG1 寄存器写入 0xC0000005。

使能无周期性触发的源

操作步骤如下:

  1. 确定该源将关联到哪个 DMA 通道。注意,仅前 4 个 DMA 通道具备周期性触发能力。
  2. 清除该 DMA 通道的 CHCFG [ENBL] 和 CHCFG [TRIG] 字段。
  3. 确保 DMA 中的该通道已正确配置。此时可使能该 DMA 通道。
  4. 选择需要路由至 DMA 通道的源。写入相应的 CHCFG 寄存器,确保 CHCFG [ENBL] 字段置位,同时 CHCFG [TRIG] 字段清零。

示例:

如需将 5 号源的发送功能配置为与 DMA 通道 1 配合使用,且不启用周期性触发能力,操作如下:

  1. 向 CHCFG1 寄存器写入 0x00000000。
  2. 在 DMA 中配置通道 1,包括使能该通道。
  3. 向 CHCFG1 寄存器写入 0x80000005。

禁用源

若要禁用特定的 DMA 源,可不对任何 CHCFG 寄存器写入对应的源值。此外,可能还需要进行一些模块特定的配置。

切换 DMA 通道的源

  1. 在 DMA 中禁用该 DMA 通道,并为新源重新配置通道。
  2. 清除该 DMA 通道的 CHCFG [ENBL] 和 CHCFG [TRIG] 位。
  3. 选择需要路由至该 DMA 通道的源。写入相应的 CHCFG 寄存器,确保 CHCFG [ENBL] 和 CHCFG [TRIG] 字段已置位。

将 DMA 通道 8 的源从 5 号发送源切换至 7 号发送源

  1. 在 DMA 配置寄存器中,禁用 DMA 通道 8,并将其重新配置为处理至外设时隙 7 的传输。本示例假设通道 8 不具备触发能力。
  2. 向 CHCFG8 寄存器写入 0x00000000。
  3. 向 CHCFG8 寄存器写入 0x80000007。(在本示例中,由于假设通道 8 不支持周期性触发功能,因此设置 CHCFG [TRIG] 字段不会产生任何效果。)

7、配置选项

ENBL(通道使能位)TRIG(触发使能位)A_ON(始终使能位)FunctionMode
0XXDMA 通道禁用禁用模式
100DMA 通道使能,无触发正常模式
110DMA 通道使能,带触发功能周期性触发模式
101DMA 通道始终使能始终使能模式
111DMA 通道始终使能,且带触发功能始终使能触发模式

8、寄存器解读

偏移地址(十六进制)寄存器位宽(比特)访问方式复位值(十六进制)
0 - 7C通道 a 配置寄存器(CHCFG0 - CHCFG31)32读写(RW)0000_0000

位号解析:

字段说明
31ENBLDMA 多路复用器通道使能
使能 DMA 多路复用器的通道。DMA 有独立的通道使能 / 禁用控制,应使用这些控制来禁用或重新配置 DMA 通道。
0 - DMA 多路复用器通道禁用
1 - DMA 多路复用器通道使能
30TRIGDMA 通道触发使能
使能触发型 DMA 通道的周期性触发功能。
0 - 触发禁用。若触发禁用且 ENBL 置位,DMA 通道将直接把指定源路由至 DMA 通道(正常模式)
1 - 触发使能。若触发使能且 ENBL 置位,DMA_CH_MUX 工作在周期性触发模式
29A_ONDMA 通道始终使能
使能 DMA 通道的始终开启功能。若 TRIG 位置位,模块将在每次触发时发出请求。
0 - DMA 通道始终开启功能禁用
1 - DMA 通道始终开启功能使能
28-8保留字段
7-0SOURCEDMA 通道源(时隙编号)
指定路由至特定 DMA 通道的 DMA 源(若有)。有关外设及其时隙编号的详情,请参见芯片专用的 DMA_CH_MUX 信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90908.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】MySQL 缓存方案

一、MySQL主从同步 1.1 主从同步是什么 MySQL 主从同步是一种数据复制机制,通过该机制可以实现将主数据库(Master)的 DDL(数据定义语言)和 DML(数据操纵语言,如 update、insert、delete&#x…

base64.b64encode(f.read()).decode(‘utf-8‘)作用

base64.b64encode(f.read()).decode(utf-8) 的作用是将文件内容(通常是二进制文件)编码为一个 UTF-8 格式的字符串。下面逐步解释这个过程:f.read():读取文件 f 中的内容。这将返回文件的二进制数据。base64.b64encode()&#xff…

集合框架学习

目录 集合体系结构 Collection的常用方法 Collection的遍历方式 迭代器 增强for Lambda表达式 集合框架概述 集合体系结构 单列集合 Collection代表单列集合,每个元素(数据)只包含一个值 双列集合 Map代表双列集合,每个元素包含两个值(键值对) Collection集合特点 Li…

经典算法题解析:从思路到实现,掌握核心编程思维

算法是编程的灵魂,也是面试中的重点考察内容。本文精选了几道经典算法题,涵盖字符串处理、链表操作、树遍历等常见场景,通过详细解析帮助你理解算法设计思路与实现细节,提升解题能力。一、无重复字符的最长子串题目描述给定一个字…

【Unity游戏】——1.俄罗斯方块

搭建场景 使用任意方块、纯色瓦片或者其他图形作为背景,设置其大小与目标大小一致或者更大,设置左下角为场景顶点,并放置在(0,0)处。调整摄像机至合适位置。 制作游戏预制体 每个方块预制体包含有4个小方…

【C++进阶】---- 二叉搜索树

1.二叉搜索树的概念 ⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树: • 若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值 • 若它的右⼦树不为空,则右⼦树上所有结点的值都⼤于等于根结…

基于 OpenCV 与 sklearn 的数字识别:KNN 算法实践

在计算机视觉领域,数字识别是一个经典问题,广泛应用于邮政编码识别、车牌识别等场景。本文将介绍如何使用 OpenCV 进行图像处理,并结合 KNN(K 近邻)算法实现数字识别,同时对比 OpenCV 内置 KNN 与 scikit-l…

利用径向条形图探索华盛顿的徒步旅行

利用径向条形图探索华盛顿的徒步旅行 import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np import pandas as pdfrom matplotlib.cm import ScalarMappable from matplotlib.lines import Line2D from mpl_toolkits.axes_grid1.inset_locator impor…

火狐浏览器中国特供版关闭,如何下载 Firefox 国际版?如何备份数据?

火狐浏览器中国特供版关闭,如何下载 Firefox 国际版?如何备份数据?各位火狐老用户注意了!7 月 27 日北京谋智火狐正式发布公告:2025 年 9 月 29 日 24:00 起,中国特供版账户服务将彻底关闭,所有…

C语言操作符详解:从基础到进阶

在C语言中,操作符是构建表达式的基础,掌握各类操作符的用法、优先级及特性,对写出高效且正确的代码至关重要。本文将系统梳理C语言操作符的核心知识点,包含实例代码与详细解析,助你彻底搞懂操作符。 1. 操作符的分类 C…

鸿蒙平台运行Lua脚本

1. 目标 使用 rust 在移动端实现 Lua 脚本的运行。 2. 核心步骤 [Rust Host App]│├── [mLua VM] (通过 mlua 或 rlua 库嵌入)│ ├── 独立Lua状态(隔离执行)│ ├── 受限标准库(禁用危险函数)│ └── 内存/CPU限…

【Ubuntu】发展历程

Ubuntu 是一个基于 Debian 的 Linux 发行版,由 Canonical 公司开发和维护。它以其易用性、稳定性和强大的社区支持而著称。以下是 Ubuntu 从发布以来的主要版本和发展历程:1. Ubuntu 4.10 "Warty Warthog" (2004)发布日期:2004年10…

k8s下springboot-admin 监控服务部署,客户端接入

踩坑及解决以下问题 1、客户端监控信息不显示,需要暴露监控检查接口路径 2、服务端不显示客户端日志,需要启用日志,并指定日志路径 3、解决在k8s下,客户端多实例注册id相同,如2个实例只显示一个 整体架构 springboot-admin 由服务端和客户端组成 服务端负责 1、提供 We…

git删除远程分支和本地分支

1. git删除远程分支 git push origin --delete [branch_name]2. 删除本地分支 2.1 git branch -d 会在删除前检查merge状态(其与上游分支或者与head)。 git branch -d [branch_name] 2.2 git branch -D 直接删除 git branch -D 是 git branch --delete…

Go 的时间包:理解单调时间与挂钟时间

Go 的时间包:理解单调时间与挂钟时间 📅 引言 Go 语言自版本 1.9 起在 time.Time 中同时支持 “挂钟时间(wall‑clock)” 和 “单调时间(monotonic clock)”,用于分别满足时间戳与时间间隔测量…

Android启动时间优化大全

1 修改Android mksh默认的列长度 不修改这个参数,adb shell后,输入超过80个字符,就不能看到完整的命令行。external/mksh/src/sh.h EXTERN mksh_ari_t x_cols E_INIT(80); EXTERN mksh_ari_t x_lins E_INIT(24);2 Kernel优化 2.1 内核驱动模块…

matplotlib.pyplot: 底层原理简析与进阶技巧

文章目录 1 底层实现原理 1.1 核心架构 1.1 渲染流程 2 基础用法 2.1 基本绘图 2.2 多子图系统 2.3 高阶用法 2.3.1 自定义Artist对象 2.3.2 高级动画技术 2.3.3 事件处理系统 2.3.4 混合渲染技术 3 性能优化技巧 4 扩展模块 5 总结 5.1 底层原理关键点 5.2 进阶技巧 1 底层实现…

深入理解现代前端开发中的 <script type=“module“> 与构建工具实践

引言:模块化开发的演进在早期的前端开发中,JavaScript 缺乏原生的模块化支持,开发者不得不依赖 IIFE(立即调用函数表达式)或第三方库(如 RequireJS)来实现代码组织。随着 ES6(ES2015…

yolo--qt可视化开发

qt5可能不支持我们的cuda版本,改用qt6 YOLO11QT6OpencvC训练加载模型全过程讲解_yolov11 模型转换成opencv c模型-CSDN博客 下面是qt5版本的案例,和yolo及cuda有冲突 安装qt 切换到虚拟环境,例如pyqt,conda activate pyqt pip …

SQL性能优化

show [session|global] status : 查看服务器状态 show global status like Com_ : 查看各种语句的执行次数 开启慢查询: 在 MySQL 配置文件(/etc/my.cnf)配置: #开启MySQL慢日志查询开关 slow_query_log1 #设置慢日志的时间为2秒,SQL语句执…