|
關注+星標公眾號,不錯過精彩內容來源 | 網(wǎng)絡
DMA,全稱Direct Memory Access,即直接存儲器訪問。
DMA傳輸將數(shù)據(jù)從一個地址空間復制到另一個地址空間,提供在外設和存儲器之間或者存儲器和存儲器之間的高速數(shù)據(jù)傳輸。
我們知道CPU有轉移數(shù)據(jù)、計算、控制程序轉移等很多功能,系統(tǒng)運作的核心就是CPU,
CPU無時不刻的在處理著大量的事務,但有些事情卻沒有那么重要,比方說數(shù)據(jù)的復制和存儲數(shù)據(jù),如果我們把這部分的CPU資源拿出來,讓CPU去處理其他的復雜計算事務,是不是能夠更好的利用CPU的資源呢?
因此:轉移數(shù)據(jù)(尤其是轉移大量數(shù)據(jù))是可以不需要CPU參與。比如希望外設A的數(shù)據(jù)拷貝到外設B,只要給兩種外設提供一條數(shù)據(jù)通路,直接讓數(shù)據(jù)由A拷貝到B 不經(jīng)過CPU的處理,
uzicvoy4a5564093770854.png (8.98 KB, 下載次數(shù): 3)
下載附件
保存到相冊
uzicvoy4a5564093770854.png
2024-11-5 09:26 上傳
DMA就是基于以上設想設計的,它的作用就是解決大量數(shù)據(jù)轉移過度消耗CPU資源的問題。有了DMA使CPU更專注于更加實用的操作–計算、控制等。
DMA定義:DMA用來提供在外設和存儲器之間或者存儲器和存儲器之間的高速數(shù)據(jù)傳輸。無須CPU的干預,通過DMA數(shù)據(jù)可以快速地移動。這就節(jié)省了CPU的資源來做其他操作。
DMA傳輸方式DMA的作用就是實現(xiàn)數(shù)據(jù)的直接傳輸,而去掉了傳統(tǒng)數(shù)據(jù)傳輸需要CPU寄存器參與的環(huán)節(jié),主要涉及四種情況的數(shù)據(jù)傳輸,但本質上是一樣的,都是從內存的某一區(qū)域傳輸?shù)絻却娴牧硪粎^(qū)域(外設的數(shù)據(jù)寄存器本質上就是內存的一個存儲單元)。四種情況的數(shù)據(jù)傳輸如下:
外設到內存內存到外設內存到內存外設到外設DMA傳輸參數(shù)我們知道,數(shù)據(jù)傳輸,首先需要的是1 數(shù)據(jù)的源地址 2 數(shù)據(jù)傳輸位置的目標地址 ,3 傳遞數(shù)據(jù)多少的數(shù)據(jù)傳輸量 ,4 進行多少次傳輸?shù)膫鬏斈J?/strong> DMA所需要的核心參數(shù),便是這四個
當用戶將參數(shù)設置好,主要涉及源地址、目標地址、傳輸數(shù)據(jù)量這三個,DMA控制器就會啟動數(shù)據(jù)傳輸,當剩余傳輸數(shù)據(jù)量為0時 達到傳輸終點,結束DMA傳輸 ,當然,DMA 還有循環(huán)傳輸模式 當?shù)竭_傳輸終點時會重新啟動DMA傳輸。
也就是說只要剩余傳輸數(shù)據(jù)量不是0,而且DMA是啟動狀態(tài),那么就會發(fā)生數(shù)據(jù)傳輸!
wrspxkmwufu64093770954.png (91.53 KB, 下載次數(shù): 3)
下載附件
保存到相冊
wrspxkmwufu64093770954.png
2024-11-5 09:26 上傳
DMA的主要特征每個通道都直接連接專用的硬件DMA請求,每個通道都同樣支持軟件觸發(fā)。這些功能通過軟件來配置;
在同一個DMA模塊上,多個請求間的優(yōu)先權可以通過軟件編程設置(共有四級:很高、高、中等和低),優(yōu)先權設置相等時由硬件決定(請求0優(yōu)先于請求1,依此類推);獨立數(shù)據(jù)源和目標數(shù)據(jù)區(qū)的傳輸寬度(字節(jié)、半字、全字),模擬打包和拆包的過程。源和目標地址必須按數(shù)據(jù)傳輸寬度對齊;支持循環(huán)的緩沖器管理;每個通道都有3個事件標志(DMA半傳輸、DMA傳輸完成和DMA傳輸出錯),這3個事件標志邏輯或成為一個單獨的中斷請求;存儲器和存儲器間的傳輸、外設和存儲器、存儲器和外設之間的傳輸;閃存、SRAM、外設的SRAM、APB1、APB2和AHB外設均可作為訪問的源和目標;可編程的數(shù)據(jù)傳輸數(shù)目:最大為65535。STM32少個DMA資源?對于大容量的STM32芯片有2個DMA控制器 兩個DMA控制器,DMA1有7個通道,DMA2有5個通道。每個通道都可以配置一些外設的地址。
①DMA1 controller
從外設(TIMx[x=1、2、3、4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1、2]和USARTx[x=1、2、3])產(chǎn)生的7個DMA請求,通過邏輯或輸入到DMA1控制器 其中每個通道都對應著具體的外設:
hob4hjzd1je64093771054.png (93.45 KB, 下載次數(shù): 3)
下載附件
保存到相冊
hob4hjzd1je64093771054.png
2024-11-5 09:26 上傳
4ctma5cmovw64093771154.png (86.6 KB, 下載次數(shù): 6)
下載附件
保存到相冊
4ctma5cmovw64093771154.png
2024-11-5 09:26 上傳
② DMA2 controller
從外設(TIMx[5、6、7、8]、ADC3、SPI/I2S3、UART4、DAC通道1、2和SDIO)產(chǎn)生的5個請求,經(jīng)邏輯或輸入到DMA2控制器,其中每個通道都對應著具體的外設:
2feplbvqeoc64093771254.png (72.45 KB, 下載次數(shù): 5)
下載附件
保存到相冊
2feplbvqeoc64093771254.png
2024-11-5 09:26 上傳
xpqtdyuyjvp64093771355.png (85.88 KB, 下載次數(shù): 3)
下載附件
保存到相冊
xpqtdyuyjvp64093771355.png
2024-11-5 09:26 上傳
這些在下方系統(tǒng)框圖中也可以清晰地看到
DMA工作系統(tǒng)框圖
ow01rw2gdvz64093771455.png (164.73 KB, 下載次數(shù): 5)
下載附件
保存到相冊
ow01rw2gdvz64093771455.png
2024-11-5 09:26 上傳
上方的框圖,我們可以看到STM32內核,存儲器,外設及DMA的連接,這些硬件最終通過各種各樣的線連接到總線矩陣中,硬件結構之間的數(shù)據(jù)轉移都經(jīng)過總線矩陣的協(xié)調,使各個外設和諧的使用總線來傳輸數(shù)據(jù)。我們對他來進行一點一點的分析:
下面看有與沒有DMA的情況下,ADC采集的數(shù)據(jù)是怎樣存放到SRAM中的?
沒有DMA
1.如果沒有DMA,CPU傳輸數(shù)據(jù)還要以內核作為中轉站,比如要將ADC采集的數(shù)據(jù)轉移到到SRAM中,這個過程是這樣的:
內核通過DCode經(jīng)過總線矩陣協(xié)調,從獲取AHB存儲的外設ADC采集的數(shù)據(jù),
然后內核再通過DCode經(jīng)過總線矩陣協(xié)調把數(shù)據(jù)存放到內存SRAM中。 |
|