日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

35_DMA基本原理

發布時間:2024/1/18 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 35_DMA基本原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

DMA簡介

DMA框圖

STM32的DMA有一下一些特征

DMA1控制器

DMA處理

數據方向

仲裁器

DMA通道

可編程的數據量

指針增量

循環模式

存儲器到存儲器模式

通道傳輸數據量

中斷

通道配置過程


DMA簡介

DMA全稱Direct Memroy Access, 既直接存儲器訪問。

DMA傳輸將數據從一個地址空間復制到另一個地址空間。當CPU初始化這個傳輸動作,傳輸動作本身是由DMA控制器來實現和完成的。

DMA傳輸方式無需CPU直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢復現場過程,通過硬件為RAM和IO設備開辟一條直接數據的通道,使得CPU的效率大大提高,為CPU減輕負擔。

STM32最多有2個DMA控制器(DMA2僅存在大容量產品中),DMA1有7個通道。DMA2有5個通道。每個通道專門用來管理來自于一個或多個外設對存儲器訪問的請求。還有一個仲裁器來協調各個DMA請求的優先權。

DMA框圖

?

?從圖上可以看出DMA1有7個通道,可以理解為可以訪問7個不同的地方,DMA2有5個通道,假設是從外設到存儲器,可以看到圖上的APB1,APB2里的外設可以提出DMA請求,通過仲裁器,在到設置好對應的通道,連接總線矩陣,這樣就可以去訪問Flash。或者反過來從Flash訪問外設。

STM32的DMA有一下一些特征

1.每個通道都直接連接專用的硬件DMA請求,都支持軟件觸發,這些通過軟件來配置。

2.在七個請求間的優先權可以通過軟件編程設置(共有四級:很高、高、中等和低),假如在相等優先權時由硬件決定(請求0優先于請求1,依此類推)。

3.獨立的源和目標數據區的傳輸寬度(字節、半字、全字),模擬打包和拆包的過程。源和目標地址必須按數據傳輸寬度對齊。

4.支持循環的緩沖器管理

5.每個通道都有3個事件標志(DMA半傳輸,DMA傳輸完成和DMA傳輸出錯),這3個事件標志邏輯或成為一個單獨的中斷請求。

6.外設和存儲器,存儲器和外設的傳輸,存儲器和存儲器間的傳輸

7.閃存、SRAM、外設的SRAM、 APB1 APB2和AHB外設均可作為訪問的源和目標。

8.可編程的數據傳輸數目:最大為65536

DMA1控制器

從外設(TIMx[x=1、2、3、4]、ADC1、 SPI1、 SPI/I2S2、12Cx[x=1、2]和USARTx[x=1、2、3])產生的7個請求,通過邏輯或輸入到DMA1控制器,這意味著同時只能有一個請求有效。參見下圖的DMA1請求映像。

外設的DMA請求,可以通過設置相應外設寄存器中的控制位,被獨立地開啟或關閉。

?DMA2

DMA處理

在發生一個事件后,外設向DMA控制器發送一個請求信號。DMA控制器根據通道的優先權處理請求。當DMA控制器開始訪問發出請求的外設時,DMA控制器立即發送給它一個應答信號。當從DMA控制器得到應答信號時,外設立即釋放它的請求。一旦外設釋放了這個請求,DMA控制器同時撤銷應答信號。如果有更多的請求時,外設可以啟動下一個周期。總之,每次DMA傳送由3個操作組成:

1.從外設數據寄存器或者從當前外設/存儲器地址寄存器指示的存儲器地址取數據,第一次傳輸時的開始地址是DMA_CPARx或DMA_CMARx寄存器指定的外設基地址或存儲器單元。

2.存數據到外設數據寄存器或者當前外設/存儲器地址寄存器指示的存儲器地址,第一次傳輸時的開始地址是DMA_CPARx或DMA_CMARx寄存器指定的外設基地址或存儲器單元。

3.執行一次DMA_CNDTRx寄存器的遞減操作,該寄存器包含未完成的操作數目。

數據方向

仲裁器

仲裁器根據通道請求的優先級來啟動外設/存儲器的訪問。優先權管理分個階段:

軟件:每個通道的優先權可以在DMA_CCRx寄存器中設置,有4個等級:

????????最高優先級

????????高優先級

????????中等優先級

????????低優先級

硬件:如果2個請求有相同的軟件優先級,則較低編號的通道比較高編號的通道有較高的優先權。舉個例子,通道2優先于通道4。

注意: 在大容量產品和互聯型產品中,DMA1控制器擁有高于DMA2控制器的優先級

DMA通道

每個通道都可以在有固定地址的外設寄存器和存儲器地址之間執行DMA傳輸: DMA傳輸的數據量是可編程的,最大達到65535。包含要傳輸的數據項數量的寄存器,在每次傳輸后遞減。

可編程的數據量

外設和存儲器的傳輸數據量可以通過DMA_CCRx寄存器中的PSIZE和MSIZE位編程。

指針增量

通過設置DMA_CCRx寄存器中的PINC和MINC標志位,外設和存儲器的指針在每次傳輸后可以有選擇地完成自動增量。當設置為增量模式時,下一個要傳輸的地址將是前一個地址加上增量值,增量值取決與所選的數據寬度為1、2或4,第一個傳輸的地址是存放在DMA_CPAR/DMA_CMARx寄存器中地址。在傳輸過程中,這些寄存器保持它們初始的數值,軟件不能改變和讀出當前正在傳輸的地址(它在內部的當前外設/存儲器地址寄存器中)。當通道配置為非循環模式時,傳輸結束后(即傳輸計數變為0)將不再產生DMA操作。要開始新的DMA傳輸,需要在關閉DMA通道的情況下,在DMA_CNDTRx寄存器中重新寫入傳輸數目。在循環模式下,最后一次傳輸結束時, DMA_CNDTRx寄存器的內容會自動地被重新加載為其初始數值,內部的當前外設/存儲器地址寄存器也被重新加載為DMA_CPARx/DMA_CMARx寄存器設定的初始基地址

循環模式

循環模式用于處理循環緩沖區和連續的數據傳輸(如ADC的掃描模式)。在DMA_CCRx寄存器中的CIRC位用于開后這一功能。當啟動了循環模式,數據傳輸的數目變為0時,將會自動地被恢復成配置通道時設置的初值, DMA操作將會繼續進行。

存儲器到存儲器模式

DMA通道的操作可以在沒有外設請求的情況下進行,這種操作就是存儲器到存儲器模式。當設置了DMA_CCRx寄存器中的MEM2MEM位之后,在軟件設置了DMA_CCRx寄存器中的EN位啟動DMA通道時,DMA傳輸將馬上開始。當DMA_CNDTRx寄存器變為0時, DMA傳輸結束。存儲器到存儲器模式不能與循環模式同時使用。

通道傳輸數據量

?中斷

每個DMA通道都可以在DMA傳輸過半、傳輸完成和傳輸錯誤時產生中斷。為應用的靈活性考慮,通過設置寄存器的不同位來打開這些中斷。

通道配置過程

下面是配置DMA通道x的過程(x代表通道號):

1.在DMA_CPARx寄存器中設置外設寄存器的地址。發生外設數據傳輸請求時,這個地址將是數據傳輸的源或目標。

2.在DMA_CMARx寄存器中設置數據存儲器的地址。發生外設數據傳輸請求時,傳輸的數據將從這個地址讀出或寫入這個地址。

3.在DMA_CNDTRx寄存器中設置要傳輸的數據量。在每個數據傳輸后,這個數值遞減。

4.在DMA_CCRx寄存器的PL[1:0]位中設置通道的優先級。在DMA_CCRx寄存器中設置數據傳輸的5.方向、循環模式、外設和存儲器的增量模式、外設和存儲器的數據寬度、傳輸一半產生中斷或傳輸完成產生中斷。

6.設置DMA_CCRx寄存器的ENABLE位,啟動該通道。旦啟動了DMA通道,它既可響應連到該通道上的外設的DMA請求。

總結

以上是生活随笔為你收集整理的35_DMA基本原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。