①DMA介紹
②STM32F4-DMA功能框圖及詳解
③DMA的增量設置、模式、中斷
①DMA介紹
DMA是direct memory access的縮寫,即直接存儲器訪問;DMA是通過硬件在RAM和IO設備之間開辟一條通道,使得采集到的數據直接存到RAM,使得數據的傳輸不需要經過CPU讀數據再將數據放入RAM、這樣極大提高了CPU的效率。
②STM32F4-DMA功能框圖及詳解
外設通道:
STM32F4具有2個DMA控制器,每個DMA控制器有8個數據流,每個數據流可以從8個外設請求中選擇一個作為該數據流的外設通道;外設通道就是數據流的源地址或者目標地址;外設通道的選擇可以通過DMA數據流x的配置寄存器DMA_SxCR的CHSEL[2:0]位配置;
以下是DMA1的外設通道表:
數據流仲裁:當同時存在多個數據流在工作時,需要數據流仲裁器管理判斷數據流的優先傳輸;數據流傳輸的優先級可以通過配置控制寄存器DMA_SxCR的PL[1:0]位,來選擇優先級為非常高、高、中、低;當多個數據流的優先級相同時,數據流的編號越低、優先級越高;
數據FIFO:
每個數據流都有一個4字(16字節、4個32位寄存器)FIFO(先進先出存儲器緩沖區),DMA的傳輸具有FIFO模式和直接模式;
直接模式:當出現DMA請求時,會進行數據的傳輸到存儲器;若DMA的請求配置設置為存儲器到外設模式傳輸數據時,DMA會將數據從存儲器預加載到FIFO中、當外設觸發DMA請求時數據立即傳輸給外設;
FIFO模式:當數據量達到一定數量時,進行數據的傳輸;可以通過配置DMA_SxFCR的FTH[1:0]位來設置FIFO的閾值級別為FIFO的1/4 、2/4 、3/4。如果數據量達到閾值則FIFO中的數據將被傳輸到目標地址;
4-5、外設端口、存儲器端口:
DMA1的控制器的存儲器端口接在AHB總線上,外設端口接在APB1外設上;所以DMA1可以控制數據在外設與存儲器之間傳輸,但不能實現數據在存儲器與存儲器之間傳輸;
DMA2的控制器的存儲器端口和外設端口都有接到AHB總線上說以與DMA1相比,DMA2比DMA1多一個數據在存儲器與存儲器之間傳輸的模式;
③DMA的增量設置、模式、中斷
DMA的傳輸模式:DMA的傳輸模式有外設與外設之間的傳輸、外設與存儲器之間的傳輸、存儲器與存儲器之間的傳輸;模式的選擇可以通過DMA_SxCR寄存器的DIR[1:0]位控制;
DMA傳輸的源、目的、長度:
外設寄存器地址在DMA_SxPA寄存器中設置;
存儲器地址在DMA_SxM0AR寄存器中設置;
數據的傳輸量在寄存器DMA_CNDTRx中設置
傳輸數據的位寬在DMA_SxCR寄存器的PSIZE MSIZE位設置(盡量設置為一致)
DMA的增量設置:
通過設置DMA_SxCR寄存器中的PINC MINC位的狀態,可以使得外設和存儲器在每次數據傳輸后地址遞增或地址不變;當選擇為遞增模式后,地址的增量就是數據的位寬
循環模式:循環模式用于循環處理緩存區和連續的數據傳輸(ADC的掃描模式),可以通過DMA_SxCR寄存器中的CIRC位來選擇為循環模式;循環模式下當一輪數據傳輸完成后,下一次開始的地址和上一次的數據傳輸地址一樣;
DMA的單次傳輸和突發傳輸:
DMA有單次傳輸和突發傳輸,DMA控制器可以產生4、8、16個節拍的增量突發傳輸(原本一次傳輸一個數據位寬,4個節拍就是4個數據位寬一次性一起傳輸);突發傳輸的大小通過DMA_SxCR寄存器中的MBURST[1:0]和PBURST[1:0]位對兩個AHB端口獨立配置;
在突發傳輸下、AHB的總線仲裁器會一直授權給DMA主總線AHB的傳輸會鎖定其它總線暫時使用不了,使得突發傳輸不可被打斷從而保證了數據的一致性;
每個DMA數據流在傳輸的時候可以觸發以下中斷:
在DMA_xISR中可以設置、查看狀態;
-
存儲器
+關注
關注
38文章
7525瀏覽量
164159 -
cpu
+關注
關注
68文章
10899瀏覽量
212613 -
STM32
+關注
關注
2270文章
10921瀏覽量
356994 -
dma
+關注
關注
3文章
566瀏覽量
100816 -
STM32F4
+關注
關注
3文章
194瀏覽量
28123
發布評論請先 登錄
相關推薦
評論