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