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