dma實現的是資料的傳輸功能,它的特性在於不占用cpu的資源。正常情況下我們要獲取外設的資料,需要利用cpu對外設資料進行讀取,在用cpu將資料寫進儲存器,而dma就可以實現節約cpu工作的目的。
在stm32f4和stm32f1之間兩者的dma是有所區別的,f4能實現儲存器到儲存器的傳輸,兩者的暫存器不太一樣。
這裡主要講f4的dma。
f4有兩個dma控制器,每個dma控制器有8個資料流,每個資料流有8個通道,在外設到儲存器的傳輸的我們可以查表看到乙個外設可以附著在哪個dma通道。我們可以通過暫存器設定要傳輸資料的大小(dma_sxndtr),設定外設位址(dma_sxpar),儲存器位址(dma_sxm0ar),在儲存器到儲存器的傳輸中,其實是將其中乙個儲存器的位址寫進外設位址暫存器去,我們在配置暫存器中(dma_sxcr)可設定傳輸方向和通道優先順序等資料。
dma的通道可由軟體配置成四個優先等級,當軟體優先等級相同時,硬體將按照通道數越小優先順序越高的原則裁定。
dma的事務為三個過程:
通過外設位址暫存器或儲存器位址暫存器定址,將外設暫存器或儲存器暫存器的數值載入。
通過外設位址暫存器或儲存器位址暫存器定址,將載入到的資料傳輸到目的位址。
資料項暫存器結算傳輸的數量數。
dma的雙緩衝模式可以將乙個外設的資料傳到儲存器後,緊接著將另乙個外設的資料也傳到儲存器。
它的強大在於它可以一邊在第二步將a的資料傳到目的地,一邊通過第一步將定址到的b載入到一會要傳輸的值。
fifo是協助dma完成傳輸的,是乙個先進先出的儲存區。這你可以設定為位元組,半字,字傳輸,對應為8位,16位,32位。
dma有幾種型別的中斷,有半傳輸,全傳輸,傳輸錯誤,我們可以使能對應的中斷標誌位,但記住,當我們使能了以後我們就要編寫對應的中斷服務函式,不然中斷觸發時,程式會跑死。
DMA工作原理
dma方式的工作原理 乙個裝置介面試圖通過匯流排直接向另乙個裝置傳送資料 一般是大批量的資料 它會先向cpu傳送dma請求訊號。外設通過dma的一種專門介面電路 dma控制器 dmac 向cpu提出接管匯流排控制權的匯流排請求,cpu收到該訊號後,在當前的匯流排週期結束後,會按dma訊號的優先順序和...
DMA原理理解
如果載入失敗,可訪問github檢視 dma intro stm32 編寫mcu外設模組驅動時,經常會配置dma的使用,之前在adc採集,uart模組通訊中都使用過,但是只知道使用,具體沒細究過。找了之前用過的幾款mcu晶元 51 52系列,stm32f系列,mc9s12系列,s32k14系列等 也...
微機原理之DMA總結
1 當介面準備就緒,便向dma控制器發dma請求 2 cpu通過hold引腳接受dma發出的匯流排請求 就是所謂的hold訊號 3 cpu如果完成了當前匯流排的操作,如果允許dma對匯流排的請求會通過 hlda引腳向dma控制器傳送hlda訊號 4 dma先把位址送上位址匯流排,然後然後會向介面傳送...