資料介紹
第一次接觸DMA是在學校學習ARM9裸板程序的時候,想起來都時隔快2年了。現(xiàn)在來看看STM32平臺的DMA,一樣,在標準外設庫的支持下,STM32的DMA編程十分簡單,但是既是學習,那還是花點時間看看DMA的相關概念及原理的了解下。
1. DMA簡介
DMA是Direct Memory Access的簡稱,是直接存儲器訪問的意思。DMA是STM32單片機的外設之一,主要功能是用來搬移數(shù)據(jù)的。通過DMA搬移數(shù)據(jù)不需要CPU直接參與控制,也不需要中斷處理方式那樣保留現(xiàn)場和恢復現(xiàn)場。在傳輸數(shù)據(jù)的時候,CPU可以干其他事情。
無使用DMA的數(shù)據(jù)傳輸:
使用DMA后的數(shù)據(jù)傳輸:
DMA數(shù)據(jù)傳輸支持從外設到存儲器、存儲器到外設、存儲器到存儲器(這里所講的存儲器可以是SRAM,也可以是FLASH)。DMA控制器包含了DMA1控制器和DMA2控制器,分別由7和5個通道作為數(shù)據(jù)傳輸。每個通道專門用來管理來自一個或者多個外設對存儲器訪問的請求,還有一個仲裁器用于協(xié)調(diào)各個外設對DMA傳輸請求的優(yōu)先權。注意,DMA2只存在于大容量或互聯(lián)型的STM32單片機中。
2. DMA功能框圖
2.1 STM32外設對DMA的請求及通道
請求及通道對應圖中的標號1和標號2:STM32外設想要通過DMA來傳輸數(shù)據(jù),需先給DMA控制器發(fā)送DMA請求,控制器在收到外設的DMA請求之后會給外設一個應答信號,外設應答且DMA控制器收到外設的應答后,DMA啟動傳輸,直至傳輸完畢。
為什么需要發(fā)出請求,應答和接收應答這幾個繁瑣的步驟?由圖中藍色框框可以看出,DMA傳輸和CPU是共用系統(tǒng)總線的,要啟動DMA傳輸?shù)那疤崾窍到y(tǒng)總線是空閑的,換句話說是CPU沒有占用系統(tǒng)總線,所以啟動DMA傳輸前需要以上幾個應答機制,其最底層是DMA控制器和CPU正為系統(tǒng)總線作出協(xié)調(diào)。DMA1有7個通道,DMA2有5個通道,不同的外設請求要通過對應的DMA通道發(fā)給DMA控制器。將不同的外設請求傳輸至對應的通道,這個是我們在軟件編程上設置的。
DMA1開放的通道及對應請求:
DMA2開放的通道及對應請求:
雖然每個通道可以接收多個外設的請求,但是同一時間內(nèi)只能接收一個。
2.2 仲裁器
仲裁器對應圖中的標號3:當DMA控制器的多個通道發(fā)生DMA請求時,就需要仲裁器管理響應處理的順序。仲裁器通過軟件和硬件來管理DMA請求:軟件指的是我們寫的代碼,在DMA_CCRx(x指通道號)寄存器中設置,有4個等級,非常高(DMA_Priority_VeryHigh)、高(DMA_Priority_High)、中(DMA_Priority_Medium)和低(DMA_Priority_Low)。硬件則是指若有兩個或以上的DMA通道請求設置的優(yōu)先級一樣,則它們的響應順序取決于通道編號,編號低者優(yōu)先級高,在有DMA2的STM32中,DMA1控制器擁的響應優(yōu)先級高于DMA2。
2.3 配置DMA控制器
配置DMA控制器,無非就是下圖這幾個寄存器:
前面說到,DMA數(shù)據(jù)傳輸機制并不需要CPU的參與,但是DMA控制器要正常工作,數(shù)據(jù)要正確傳輸,需有三個必要條件:源地址、目的地址和數(shù)據(jù)大小,對于數(shù)據(jù)分批傳輸?shù)那闆r,數(shù)據(jù)大小這個條件還包含每次傳輸?shù)拇笮〖皢挝弧?
(1)源地址和目的地址
DMA的傳輸數(shù)據(jù)的方向有三個:從外設到存儲器、從存儲器到外設、從存儲器到存儲器。DMA_CCR的BIT[4]DIR就是用于配置數(shù)據(jù)傳輸方向的:
取值為0表從外設到存儲器,取值為1表從存儲器到外設。外設地址在DMA_CPAR寄存器配置,存儲器地址在DMA_CMAR寄存器配置。
(2)傳輸數(shù)據(jù)的大小及單位
以串口向電腦發(fā)送數(shù)據(jù)為例(存儲器->外設方向),開發(fā)板軟件可以一次性給電腦發(fā)送大量數(shù)據(jù),具體多少在DMA_CNDTR配置:
DMA_CNDTR低16位有效,一次最多只能傳輸65535個數(shù)據(jù)。
數(shù)據(jù)要正確傳輸,源、目標存儲的數(shù)據(jù)寬度必須一致。串口數(shù)據(jù)寄存器是8位的,也就是外設數(shù)據(jù)寬度設置寄存器DMA_CCRx的BIT[9:8]PSIZE取值為0:
存儲器的數(shù)據(jù)寬度設置寄存器DMA_CCRx的BIT[11:10]MSIZE取值也為0:
DMA傳輸數(shù)據(jù),還需要設置源地址上的數(shù)據(jù)發(fā)送指針和目的地址數(shù)據(jù)存放指針的增量模式。開發(fā)板串口向電腦發(fā)送數(shù)據(jù),假設要發(fā)送的數(shù)據(jù)很多,那么存儲器(源地址)上數(shù)據(jù)發(fā)送指針每次發(fā)送完畢需要加1,而串口數(shù)據(jù)寄存器則不需要,因為該寄存器只有一個,數(shù)據(jù)寄存器上的數(shù)據(jù)傳送到電腦后被清空了(就算不清空,數(shù)據(jù)直接覆蓋也沒關系)。外設的地址指針增量模式由DMA_CCRx的PINC配置,存儲器的地址指針則由MINC配置。
(3)傳輸結(jié)束
DMA中斷狀態(tài)寄存器DMA_ISR可以設置每個DMA通道傳輸過半、傳輸完成和傳輸錯誤示產(chǎn)生對應標志,
在DMA_CCRx位1、2、3可以設置發(fā)生傳輸過半、傳輸完成和傳輸錯誤時產(chǎn)生中斷:
另外補充一點,位0用于使能DMA傳輸
傳輸完成分兩種模式:一次傳輸和循環(huán)傳輸,一次傳輸指傳輸一次后就停止,要再傳輸需要關閉DMA使能后重新配置后才能繼續(xù)傳輸。循環(huán)傳輸則是一次傳輸完成后又恢復第一次傳輸時的配置循環(huán)傳輸,如此循環(huán)。設置位在DMA_CCRx寄存器的CIRC。
3. DMA功能模塊描述結(jié)構體
標準庫的一貫風格,在stm32f10x_dma.h文件中定于可DMA_InitTypeDef初始化結(jié)構體,DMA_Init()函數(shù)定義在stm32f10x_dma.c中。
(1)DMA_PeripheralBaseAddr:外設地址,若是存儲器到存儲器模式,此成員設置為其中一個存儲器的地址,否則設置為外設的地址。
(2)DMA_MemoryBaseAddr:存儲器地址,一般設置為程序中存放數(shù)據(jù)的容器(數(shù)組)的首地址。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- S參數(shù)的概念及應用 0次下載
- 帶通濾波器的概念及相關介紹 4次下載
- HDMI模塊接口概念及接口信號定義介紹 0次下載
- 多個DMA通道和PCIe接口IP核資料下載 6次下載
- 移動基站天線有關概念及選型原則 15次下載
- ARM Cortex-M3 MCU 的 I2C DMA操作和中斷資料下載
- 兩種總線數(shù)據(jù)兩種傳遞形式:PIO、DMA介紹資料下載
- STM32串口DMA容易忽視的問題資料下載
- 電感基本概念資料下載
- 阻抗控制相關的一些基本概念資料下載
- ARM Architecture, Core, CPU,SOC概念簡明介紹資料下載
- STM32實現(xiàn)用DMA完成多通道AD采樣資料下載
- 嵌入式Linux開發(fā)教程之嵌入式系統(tǒng)介紹資料免費下載
- 基于RF射頻知識基本概念及DTD無線產(chǎn)品介紹 8次下載
- 電子商務相關概念及理論,下載 0次下載
- 諧波的概念及應用 603次閱讀
- 相位噪聲的概念及其應用 1187次閱讀
- 以太網(wǎng)網(wǎng)線相關的概念及其區(qū)別 2212次閱讀
- 電源核相的概念及意義 6133次閱讀
- STM8L051F3的DMA相關知識 1803次閱讀
- 動力電池各種概念及原理剖析 3169次閱讀
- 詳解MMU相關概念及工作原理 7486次閱讀
- 共模瞬變抗擾度(CMTI)詳細概念及其在系統(tǒng)中的重要性 1.9w次閱讀
- 流量計測量和計算中常用的物性技術參數(shù)和計算公式的詳細資料免費下載 4818次閱讀
- 教你如何提高LED的發(fā)光效率 2.6w次閱讀
- 車聯(lián)網(wǎng)基本概念及其實現(xiàn) 1.3w次閱讀
- 晶圓尺寸的概念_晶圓尺寸越大越好嗎 14.5w次閱讀
- 異步傳輸是什么_異步傳輸概念及工作原理 1.9w次閱讀
- 太赫茲成像技術概念及原理解析_太赫茲波特征及應用 3.2w次閱讀
- dma控制器芯片8257資料介紹 1.7w次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統(tǒng)的設計與實現(xiàn)
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發(fā)板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論