DW_DMAC簡介

基本概念:

DMA:全稱direct memory access,即直接存儲器訪問。dma可以在中央處理器CPU不參與的情況下,實現外設和內存之間的數據直接傳輸,從而提高數據傳輸效率

0

外設與計算機內存之間的數據傳輸,一般可通過程序查詢方式和中斷方式進行

  1. 在程序查詢方式時,CPU要反復測試外設狀態,在外設未準備好的情況下,CPU就處于等待狀態,直到外設準備好,才進行數據傳送
  2. 中斷方式下,每實現一次數據傳送,CPU都要進入中斷處理程序、保護斷點、保護現場、恢復現場、返回主程序的操作

這兩種方式都是在CPU的控制下,通過CPU執行指令來完成的。數據傳送方向為外設->CPU->內存。這兩種方式沒傳送一字節都需要耗用較長時間

使用CPU搬運外設數據的缺點:

  • CPU的工作速度與外設的工作速度相差很大,降低系統的效率
  • CPU操作一次總線只能進行一次存取
  • 搬運數據時需要先把數據放在寄存器,然后再從寄存器搬到另一個地址
  • 外設數據類型繁多,CPU無法直接存取,需要進行格式轉換

使用DMA搬運數據的效果:

  • 多通道同時可以傳輸,提高搬運效率
  • 基于burst類型傳輸,操作一次總線可進行多個數據的讀寫
  • 搬運外設數據時,數據可先存放在通道內部的fifo,再轉發
  • 可以根據外設的數據格式設置后進行讀寫搬運數據

DMA概念介紹:

1、源外設:DMA搬運數據的起點,讀取數據的地方

2、目的外設:DMA搬運數據的終點,寫入數據的地方

3、通道channel:DMA多個通道,每個通道配置后都可以進行數據的搬運。可理解為傳輸數據的管道

4、master接口:作為master訪問讀寫數據的接口,一般使用AXI接口

5、slave接口:CPU讀寫配置DMA的接口,一般使用AHB或者APB

6、硬件握手:外設與DMA交互時的握手信號,例如dma_req、dma_single、dma_last等信號

7、流控:決定DMA傳輸中,傳輸的數據量、傳輸結束的控制信號等

數據流向簡介:

下圖展示的是源外設到目的外設的數據流向:

0

1、CPU通過APB/AHB總線將DMA具體的配置進行配置,上圖選擇channel0,通過AHB配置傳輸的源地址、目的地址、傳輸的數據量等

2、源外設,發送DMA握手信號之后,DMA才會啟動傳輸,在此之前會等待硬件握手信號

傳輸層次

針對非內存外設的DMA傳輸層次結構:

0

DMA傳輸中,分為block為傳輸,對應的就是Block Transfer level,DMA Transaction Level的Burst Transaction指的是外設配置的channel CTL寄存器中的msize,會根據msize的設置進行burst/signal傳輸;AMBA Transfer Level相當于AXI總線傳輸層次上面的,這個跟arlen/awlen的設置相關。如果想自己設置可通過channel CTL寄存器中的awlen/arlen設置,如果沒設置或者設置異常則會由dma隨機設置。

針對內存外設的DMA傳輸層次結構:

0

傳輸類型:

DMA的作用就是實現數據的直接傳輸,主要涉及四種情況的數據傳輸。四種傳輸情況如下:

1、外設到內存

2、內存到外設

3、外設到外設

4、內存到內存

上面四種傳輸情況,可根據具體的使用情況分為兩種流控方式:DMA流控、外設流控

DMA硬件握手信號:

1、dma_req:外設burst請求信號

2、dma_singal:外設single請求信號

3、dma_last:外設流控時信號有效,指示此次傳輸為最后一次burst/single傳輸

4、dma_ack:dma回應外設信號

5、dma_finish:dma傳輸完成信號

0

當DMA流控的時候,dma_last信號是會被忽略的,會根據block_ts傳輸完成之后,就會給外設發出dma_finish信號,表示傳輸完成

當外設流控的時候,當外設傳輸最后一塊數據時,就發送dma_last信號給到DMA,DMA收到dma_last信號就知道傳輸的是最后一塊數據,傳輸完成之后發送dma_finish信號給到外設,表示傳輸完成

0

DMA傳輸類型:

DMA single block:

contiguous:連續地址訪問的方式,按照地址遞增的方式傳輸數據

DMA multi blocks傳輸:

shadow register:陰影寄存器方式,block傳輸之前會將信息重新從寄存器中讀取再進行傳輸

auto-reload:自動重載方式,每一個block傳輸開始前重新加載初始傳輸信息,重新傳輸

lllp:鏈表方式進行multi-block類型傳輸時,下一個block傳輸的信息會存儲在鏈表指向的地址中

對DMA不同傳輸方式的理解:

1、contiguouts進行源地址、目的地址遞增的數據傳輸,最常見的就是讀寫memory的方式

2、atuo-reload是傳輸完成之后又會回到起始狀態,加載的數據量、源地址和目的地址都不變

3、shadow和llp都需要將傳輸block信息配置好,區別是llp要分配一塊內存,但可以構造較多的即將傳輸的block信息,shadow不會用到系統內存,但只能提前構造下一塊傳輸的block信息

4、llp模塊可以靜態創建一塊鏈表,也可以動態擴展

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80580.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信號量基礎入門:并發控制的核心概念

問題的復雜性產生的根本原因在于,如 2.2 節所述,共享變量的訪問始終是“單向信息流”。也就是說,一個進程可以分配新值或檢查當前值,但這種檢查不會為其他進程留下任何痕跡。結果是,當一個進程想要對共享變量的當前值作…

(十九)Java集合框架深度解析:從基礎到高級應用

一、集合框架概述 1.1 什么是集合框架 Java集合框架(Java Collections Framework, JCF)是Java語言中用于表示和操作集合的一套標準化體系結構。它提供了一組接口、實現類和算法,用于存儲和操作對象組,解決了數組在存儲對象時的諸多限制。 集合框架的主…

Blender cycles烘焙貼圖筆記

下載了一些槍模型,一個模型有七八個材質,一個扳機、準星還有單獨的材質,用的貼圖只有一小部分有內容,對Draw Call非常不友好。不得不學一下怎么用Blender減材質。 找到了這個視頻如何在Blender中將多種材料多張貼圖烘焙成一張貼圖…

mysql的高可用

1. 環境準備 2臺MySQL服務器(node1: 192.168.1.101,node2: 192.168.1.102)2臺HAProxy Keepalived服務器(haproxy1: 192.168.1.103,haproxy2: 192.168.1.104)虛擬IP(VIP: 192.168.1.100&#x…

鴻蒙 系統-安全-程序訪問控制-應用權限管控

Ability Kit 提供了一種允許應用訪問系統資源(如:通訊錄等)和系統能力(如:訪問攝像頭、麥克風等)的通用權限訪問方式,來保護系統數據(包括用戶個人數據)或功能&#xff0…

算法-數對的使用

1、數對可用于數組排序中&#xff0c;并且可記憶化排序前的元素下標 #include<iostream> #include<string> #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10; pair<int, int> a[N]; void solve() {ll n;cin …

Linux基礎第四天

系統之間文件共享 想要實現兩個不同的系統之間實現文件共享&#xff0c;最簡單的一種方案就是設置VMware軟件的共享文件夾&#xff0c;利用共享文件夾可以實現linux系統和windows系統之間的文件共享&#xff0c;這樣就可以實現在windows系統上編輯程序&#xff0c;然后在linux系…

Docker 核心原理詳解:Namespaces 與 Cgroups 如何實現資源隔離與限制

#Docker疑難雜癥解決指南# Docker 作為容器化技術的代名詞,徹底改變了軟件的開發、部署和管理方式。它憑借其輕量、快速、一致性強的特性,成為了現代云原生架構的基石。然而,Docker 容器的神奇之處并非“無中生有”,其背后是 Linux 內核的兩大核心技術——Namespaces(命名…

GitHub 趨勢日報 (2025年05月14日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1xming521/WeClone&#x1f680;從聊天記錄創造數字分身的一站式解決方案&…

【Go】從0開始學習Go

文章目錄 從0開始學習Go0 與C對比1 代碼框架1.1 helloworld式代碼示例1.2 主體代碼元素&#xff08;核心三部分&#xff09;1.3 其他 2 與C/C區別3 有用的小工具4 注意事項 從0開始學習Go 0 與C對比 特性CGo編譯型語言需要編譯為機器碼直接編譯為二進制可執行文件靜態類型類型…

簡單說一下 Webpack分包

最近在看有關webpack分包的知識&#xff0c;搜索了很多資料&#xff0c;感覺這一塊很是迷惑&#xff0c;網上的資料講的也迷迷糊糊&#xff0c;這里簡單總結分享一下&#xff0c;也當個筆記。 如有錯誤請指出。 為什么需要分包 我們知道&#xff0c;webpack的作用&#xff0c…

使用Python和FastAPI構建網站爬蟲:Oncolo醫療文章抓取實戰

使用Python和FastAPI構建網站爬蟲&#xff1a;Oncolo醫療文章抓取實戰 前言項目概述技術棧代碼分析1. 導入必要的庫2. 初始化FastAPI應用3. 定義請求模型4. 核心爬蟲功能4.1 URL驗證和準備4.2 設置HTTP請求4.3 發送請求和解析HTML4.4 提取文章內容4.5 保存結果和返回數據 5. AP…

YoloV8改進策略:卷積篇|風車卷積|即插即用

文章目錄 論文信息論文翻譯摘要引言相關研究紅外搜索與跟蹤檢測和分割網絡紅外搜索與跟蹤數據集的損失函數紅外搜索與跟蹤數據集方法風車形卷積(PConv)基于尺度的動態損失SIRST - UAVB數據集實驗實驗設置與其他方法的比較多模型上的消融實驗結論致謝代碼改進方法測試結果總結…

【NLP】36. 從指令微調到人類偏好:構建更有用的大語言模型

從指令微調到人類偏好&#xff1a;構建更有用的大語言模型 大語言模型&#xff08;LLMs&#xff09;已經成為現代自然語言處理系統的核心&#xff0c;但單純依賴傳統語言建模目標&#xff0c;往往難以滿足實際應用的“人類意圖”。從 Instruction Tuning&#xff08;指令微調&…

基于Transformers與深度學習的微博評論情感分析及AI自動回復系統

前言 這個項目存在cookie沒有自動更新問題&#xff0c;后續可能會發出來解決教程&#xff0c;還有微博網頁版的話最多看到300條評論&#xff0c;而且回復別人信息的話最多回復15條就要休息5分鐘左右才能評論 1. 項目概述 本項目實現了一個微博評論自動化處理系統&#xff0c…

詳解 Zephyr RTOS:架構、功能與開發指南

目錄 Zephyr RTOS 的核心特性 1. 輕量級和可擴展性 2. 實時性能 3. 多平臺支持 4. 安全性 5. 社區和生態系統 Zephyr 的架構 1. 內核 2. 驅動模型 3. 網絡棧 4. 文件系統 開發環境和工具鏈 安裝和配置 開發流程 1. 應用程序開發 2. 調試和測試 3. 部署 實際應…

人工智能重塑醫療健康:從輔助診斷到個性化治療的全方位變革

人工智能正在以前所未有的速度改變著醫療健康領域&#xff0c;從影像診斷到藥物研發&#xff0c;從醫院管理到遠程醫療&#xff0c;AI 技術已滲透到醫療服務的各個環節。本文將深入探討人工智能如何賦能醫療健康產業&#xff0c;分析其在醫學影像、臨床決策、藥物研發、個性化醫…

Linux筆記---內核態與用戶態

用戶態&#xff08;User Mode&#xff09; 權限級別&#xff1a;較低&#xff0c;限制應用程序直接訪問硬件或關鍵系統資源。 適用場景&#xff1a;普通應用程序的運行環境。 限制&#xff1a;無法執行特權指令&#xff08;如操作I/O端口、修改內存管理單元配置等&#xff09…

Spring 代理與 Redis 分布式鎖沖突:一次鎖釋放異常的分析與解決

Spring 代理與 Redis 分布式鎖沖突&#xff1a;一次鎖釋放異常的分析與解決 Spring 代理與 Redis 分布式鎖沖突&#xff1a;一次鎖釋放異常的分析與解決1. 問題現象與初步分析2 . 原因探究&#xff1a;代理機制對分布式鎖生命周期的干擾3. 問題復現偽代碼4. 解決方案&#xff1…

SQL:多列匹配(Multiple-column Matching)

目錄 基礎概念 應用場景詳解 1. 多列等值匹配 2. 多列 IN 匹配&#xff08;集合匹配&#xff09; 3. 多列 JOIN 匹配&#xff08;復合鍵連接&#xff09; 4. 多列匹配 子查詢 5. 多列匹配 EXISTS 6. 多列匹配 UNION&#xff08;組合數據源&#xff09; 7. 多列匹配…