dma,直接儲存器訪問。dma 傳輸方式無需 cpu 直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢復現場的過程,通過硬體為 ram 與 i/o 裝置開闢一條直接傳送資料的通路,能使 cpu 的效率大為提高。
stm32f4 最多有 2 個 dma 控制器(dma1 和 dma2),共 16 個資料流(每個控制器 8 個),每乙個 dma 控制器都用於管理乙個或多個外設的儲存器訪問請求。每個資料流總共可以有多達 8個通道(或稱請求)。每個資料流通道都有乙個仲裁器,用於處理 dma 請求間的優先順序.
stm32f4 的 dma 特性:
dma資料流通道選擇:
dma_sxcr 控制資料流到底使用哪乙個通道,每個資料流有 8 個通道可供選擇,每次只能選擇其中乙個通道進行 dma 傳輸,具體選擇哪個需根據各個資料流通道對映表來判斷
dma傳輸位址
指標遞增:
根據dma_sxcr暫存器中pinc和minc位的狀態,外設和儲存器指標在每次傳輸後可以自動向後遞增或保持常量
如果使能遞增模式,則根據在dma_sxcr暫存器中psize 或 msize位中程式設計的資料寬度,下次傳輸的位址將是前一次傳輸的位址遞增1(對於位元組)、2(對於半字)、4(對於字)
迴圈模式:
迴圈模式可用於處理迴圈緩衝區和連續資料流(比如adc掃瞄模式),可以置位dma_sxcr暫存器中的circ位使能
啟用迴圈模式後,傳輸的資料項的數目在資料流配置階段自動用設定的初始值進行載入,並繼續響應dma請求
資料項數目
單次傳輸和突發傳輸
雙緩衝模式
dma中斷請求
dma資料流x的配置
1)若使能資料流,通過重置dma_sxcr 暫存器中的en位將其禁止,然後讀取此位以確認沒有正在進行的資料流操作。將此位寫為0不會立即生效,因為實際上只有所有當前傳輸都已完成時才會將其寫為0。當所讀取的en位為0時,才表示可以配置資料流。因此在開始任何資料流配置之前需要等待en位為0。應該將先前的資料塊dma傳輸中在狀態暫存器(dma_lisr和dma_hisr)中置1的所有資料流專用的位置為0,然後才可以重新使能資料流
2)在dma_sxpar暫存器中設定外設埠暫存器位址,外設事件發生後,資料會從此位址移動到外設埠或從外設埠移動到此位址
3)在dma_sxma0r暫存器(雙緩衝區模式時還有dma_sxma1r暫存器)中設定儲存器位址,外設事件發生後,將從此儲存器讀取資料或將資料寫入此儲存器
4)在dma_sxndtr暫存器中配置要傳輸的資料項的總數,沒出現一次外設事件或每出現乙個節拍的突發傳輸,該值都會遞減
5)使用dma_sxcr暫存器中的chsel[2:0],選擇dma通道(請求)
6)如果外設用作資料流控制器而且支援此功能,將dma_sxcr暫存器中的pfctrl位置1.
7)使用dma_sxcr暫存器中的pl[1:0]位配置資料流優先順序
8)配置fifo的使用情況(使能或禁止,傳送和接收閾值)
9)配置資料傳輸方向、外設和儲存器增量/固定模式、單獨或突發事務、外設和儲存器資料寬度、迴圈模式、雙緩衝區模式和傳輸完成一半和/或全部完成,和/或dma_sxcr暫存器中錯誤中斷
10)通過將dma_sxcr暫存器中的en位置1啟用資料流
一旦在ahb目標埠上傳輸了一般資料,傳輸一半標誌(htif)置位1,如果傳輸一半中斷使能位(htie)置為1,還會生成中斷。傳輸結束時,傳輸完成標誌(tcif)置為1,如果傳輸完成中斷使能位(tcie)置為1,還會生成中斷。
dma配置程式過程(串列埠傳送dma)
①使能dma時鐘
rcc_ahb1periphclockcmd();
②初始化dma通道引數
dma_init()
③使能串列埠dma傳送,串列埠dma使能函式
usart_dmacmd()
④查詢dma的en位,確保資料流就緒,可以配置
dma_getcmdstatus()
⑤設定通道當前的剩餘資料量
dma_setcurrdatacounter()
⑥使能dma1通道,啟動傳輸
dma_cmd()
⑦查詢dma傳輸狀態
dma_getflagstatus()
⑧獲取/設定通道當前剩餘資料量
dma_getcurrdatacounter()
STM32 DMA 學習筆記(一)
dma 傳輸將資料從乙個位址空間複製到另外乙個位址空間。不需要cpu干涉 傳統的資料傳輸 位址a cpu 位址b dma資料傳輸 位址a 位址b 這樣也就為cpu減負了 含有兩個通道,dma1有7個通道,dma2有5個通道。每一乙個通道都可以連線乙個外設。那麼就有乙個仲裁器,來處理了通道間的優先順序...
STM32 DMA的學習筆記
dma配置參考stm32學習手冊即可 函式說明 dma1的x通道初始化,可完成儲存器到儲存器 外設到儲存器 如串列埠1的接收 儲存器到外設的初始化 如串列埠1的傳送 引數說明 dma1 channe1x dma1第x通道 x 1.7 cpar 外設位址,cmap 儲存器位址 turn 傳輸方向,0 ...
STM32 DMA和記憶體之間的關係
談到adc,我們還要第一次引入另外乙個重要的裝置dma.dma是什麼東西呢。通常在8位微控制器時代,很少有這個概念。在外置資源越來越多以後,我們把乙個mcu內部分為 主處理器 和 外設兩個部分。主處理器當然是執行我們指令的主要部分,外設則是 串列埠 i2c adc 等等用來實現特定功能的裝置 回憶一...