本篇來介紹DMA的一些基礎(chǔ)知識。
1 DMA簡介
DMA(Direct Memory Access),中文名為直接內(nèi)存訪問,它是一些計算機總線架構(gòu)提供的功能,能使數(shù)據(jù)從附加設(shè)備(如磁盤驅(qū)動器)直接發(fā)送到計算機主板的內(nèi)存上。對應嵌入式處理器來說,DMA可以提供外設(shè)和存儲器之間,或存儲器與存儲器之間的高速數(shù)據(jù)傳輸,無須CPU干預,節(jié)省了CPU的資源。
1.1 DMA傳輸?shù)?種情況
DMA涉及的數(shù)據(jù)傳輸分為四種情況:
- 外設(shè)到內(nèi)存內(nèi)存到外設(shè)內(nèi)存到內(nèi)存外設(shè)到外設(shè)
它們本質(zhì)上是一樣的,都是從內(nèi)存的某一區(qū)域傳輸?shù)絻?nèi)存的另一區(qū)域,外設(shè)的數(shù)據(jù)寄存器本質(zhì)上就是內(nèi)存的一個存儲單元。
1.2 典型的DMA結(jié)構(gòu)
典型的DMA控制器的結(jié)構(gòu)示意圖如下:
DMA控制器內(nèi)部包含4中寄存器/計數(shù)器:
- 地址寄存器:包括源地址和目的地址寄存器狀態(tài)寄存器:用于寄存DMA傳輸前后的狀態(tài)控制寄存器:用于選擇DMA控制器的操作類型、工作方式、傳輸方向和有關(guān)參數(shù)字節(jié)計數(shù)器:用于控制傳輸數(shù)據(jù)塊的長度
DMA控制器需要連接包括:
- 與外設(shè)連接:用于接受外設(shè)發(fā)出的DMA操作請求和在DMA期間對外設(shè)進行控制與CPU連接:用于請求總線的控制權(quán)與三大總線連接:用于進行總線控制
DMA控制器可以像CPU那樣獲得總線的控制權(quán),因此可以完成外設(shè)與存儲器之間的數(shù)據(jù)高速交換。
如下圖,當外設(shè)需要與存儲器之間進行DMA傳輸時由DMA控制器提出總線請求,從CPU獲得總線授權(quán)后,由DMA控制器控制數(shù)據(jù)的傳輸。
2 STM32中的DMA
2.1 STM32的DMA資源概述
STM32F103內(nèi)部有2 個DMA控制器:
- DMA1有7個通道DMA2有5個通道,僅存大容量產(chǎn)品中
每個通道專門用來管理來自于一個或多個外設(shè)對存儲器訪問的請求。
此外,每個DMA還有一個仲裁器來協(xié)調(diào)各個請求的優(yōu)先權(quán)。
STM32F103中的DMA有以下一些特性:
- 獨立的源和目標數(shù)據(jù)區(qū)的傳輸寬度(字節(jié)、半字、全字)每個通道都有3個事件標志(DMA 半傳輸,DMA 傳輸完成和 DMA 傳輸出錯)存儲器和存儲器間的傳輸外設(shè)和存儲器,存儲器和外設(shè)的傳輸閃存、SRAM、外設(shè)的 SRAM、APB1、APB2 和 AHB 外設(shè)均可作為訪問的源和目標
2.2 STM32的DMA框圖
STM32F103的DMA框圖如下:
- ①代表DMA請求:當外設(shè)準備通過DMA傳輸數(shù)據(jù)時,需先給DMA控制器發(fā)送請求。②代表DMA通道:DMA1有7 個,DMA2有 5個,雖然每個通道可以接收多個外設(shè)的請求,但是同一時間只能接收一個。③代表總裁器:用于處理當發(fā)生多個 DMA 通道請求時的響應順序。仲裁器管理 DMA 通道請求分為兩個階段:
3 總結(jié)
本篇介紹了DMA的一些基礎(chǔ)知識,包括DMA傳輸?shù)?種情況、典型的DMA結(jié)構(gòu)以及STM32的DMA相關(guān)基礎(chǔ)介紹。