<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
英文地址,請注明出處:http://en.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語句執…