MCU微課堂
第五十二期 2025.02.18
DMA簡介
直接存儲器存取(DMA)用來提供在外設(shè)和存儲器之間或者存儲器和存儲器之間的高速數(shù)據(jù)傳輸。無須CPU干預(yù),數(shù)據(jù)可以通過DMA快速地移動,這就節(jié)省了CPU的資源來做其他操作。兩個DMA控制器有12個通道(DMA1有7個通道,DMA2有5個通道),每個通道專門用來管理來自于一個或多個外設(shè)對存儲器訪問的請求。還有一個仲裁器來協(xié)調(diào)各個DMA請求的優(yōu)先權(quán)。
DMA主要特性
12個獨立的可配置的通道(請求):DMA1有7個通道,DMA2有5個通道;
每個通道都直接連接專用的硬件DMA請求,每個通道都同樣支持軟件觸發(fā)。這些功能通過軟件來配置;
在同一個DMA模塊上,多個請求間的優(yōu)先權(quán)可以通過軟件編程設(shè)置(共有四級:很高、高、中等和低),優(yōu)先權(quán)設(shè)置相等時由硬件決定(請求0優(yōu)先于請求1,依此類推);
獨立數(shù)據(jù)源和目標(biāo)數(shù)據(jù)區(qū)的傳輸寬度(字節(jié)、半字、全字),模擬打包和拆包的過程。源和目標(biāo)地址必須按數(shù)據(jù)傳輸寬度對齊;
支持循環(huán)的緩沖器管理;
每個通道都有3個事件標(biāo)志(DMA半傳輸、DMA傳輸完成和DMA傳輸出錯),這3個事件標(biāo)志邏輯或成為一個單獨的中斷請求;
存儲器和存儲器間的傳輸;
外設(shè)和存儲器、存儲器和外設(shè)之間的傳輸;
閃存、SRAM、外設(shè)的SRAM、APB1、APB2和AHB外設(shè)均可作為訪問的源和目標(biāo);
可編程的數(shù)據(jù)傳輸數(shù)目:最大為65535。
DMA通道
每個通道都可以在有固定地址的外設(shè)寄存器和存儲器地址之間執(zhí)行DMA傳輸。DMA傳輸?shù)臄?shù)據(jù)量是可編程的,最大達(dá)到65535。包含要傳輸?shù)臄?shù)據(jù)項數(shù)量的寄存器,在每次傳輸后遞減。
1、可編程的數(shù)據(jù)量
外設(shè)和存儲器的傳輸數(shù)據(jù)量可以通過DMA_CCRx寄存器中的PSIZE和MSIZE位編程。
2、指針增量
通過設(shè)置DMA_CCRx寄存器中的PINC和MINC標(biāo)志位,外設(shè)和存儲器的指針在每次傳輸后可以有選擇地完成自動增量。當(dāng)設(shè)置為增量模式時,下一個要傳輸?shù)牡刂穼⑹乔耙粋€地址加上增量值,增量值取決與所選的數(shù)據(jù)寬度為1、2或4。第一個傳輸?shù)牡刂肥谴娣旁贒MA_CPARx/DMA_CMARx寄存器中地址。在傳輸過程中,這些寄存器保持它們初始的數(shù)值,軟件不能改變和讀出當(dāng)前正在傳輸?shù)牡刂?它在內(nèi)部的當(dāng)前外設(shè)/存儲器地址寄存器中)。
當(dāng)通道配置為非循環(huán)模式時,傳輸結(jié)束后(即傳輸計數(shù)變?yōu)?)將不再產(chǎn)生DMA操作。要開始新的DMA傳輸,需要在關(guān)閉DMA通道的情況下,在DMA_CNDTRx寄存器中重新寫入傳輸數(shù)目。
在循環(huán)模式下,最后一次傳輸結(jié)束時,DMA_CNDTRx寄存器的內(nèi)容會自動地被重新加載為其初始數(shù)值,內(nèi)部的當(dāng)前外設(shè)/存儲器地址寄存器也被重新加載為DMA_CPARx/DMA_CMARx寄存器設(shè)定的初始基地址。
3、通道配置過程
下面是配置DMA通道x的過程(x代表通道號):
在DMA_CPARx寄存器中設(shè)置外設(shè)寄存器的地址。發(fā)生外設(shè)數(shù)據(jù)傳輸請求時,這個地址將是數(shù)據(jù)傳輸?shù)脑椿蚰繕?biāo)。
在DMA_CMARx寄存器中設(shè)置數(shù)據(jù)存儲器的地址。發(fā)生外設(shè)數(shù)據(jù)傳輸請求時,傳輸?shù)臄?shù)據(jù)將從這個地址讀出或?qū)懭脒@個地址。
在DMA_CNDTRx寄存器中設(shè)置要傳輸?shù)臄?shù)據(jù)量。在每個數(shù)據(jù)傳輸后,這個數(shù)值遞減。
在DMA_CCRx寄存器的PL[1:0]位中設(shè)置通道的優(yōu)先級。
在DMA_CCRx寄存器中設(shè)置數(shù)據(jù)傳輸?shù)姆较颉⒀h(huán)模式、外設(shè)和存儲器的增量模式、外設(shè)和存儲器的數(shù)據(jù)寬度、傳輸一半產(chǎn)生中斷或傳輸完成產(chǎn)生中斷。
設(shè)置DMA_CCRx寄存器的ENABLE位,啟動該通道。
一旦啟動了DMA通道,它既可響應(yīng)連到該通道上的外設(shè)的DMA請求。當(dāng)傳輸一半的數(shù)據(jù)后,半傳輸標(biāo)志(HTIF)被置1,當(dāng)設(shè)置了允許半傳輸中斷位(HTIE)時,將產(chǎn)生一個中斷請求。在數(shù)據(jù)傳輸結(jié)束后,傳輸完成標(biāo)志(TCIF)被置1,當(dāng)設(shè)置了允許傳輸完成中斷位(TCIE)時,將產(chǎn)生一個中斷請求。
4、循環(huán)模式
循環(huán)模式用于處理循環(huán)緩沖區(qū)和連續(xù)的數(shù)據(jù)傳輸(如ADC的掃描模式)。在DMA_CCRx寄存器中的CIRC位用于開啟這一功能。當(dāng)啟動了循環(huán)模式,數(shù)據(jù)傳輸?shù)臄?shù)目變?yōu)?時,將會自動地被恢復(fù)成配置通道時設(shè)置的初值,DMA操作將會繼續(xù)進(jìn)行。
5、存儲器到存儲器模式
DMA通道的操作可以在沒有外設(shè)請求的情況下進(jìn)行,這種操作就是存儲器到存儲器模式。當(dāng)設(shè)置了DMA_CCRx寄存器中的MEM2MEM位之后,在軟件設(shè)置了DMA_CCRx寄存器中的EN位啟動DMA通道時,DMA傳輸將馬上開始。當(dāng)DMA_CNDTRx寄存器變?yōu)?時,DMA傳輸結(jié)束。存儲器到存儲器模式不能與循環(huán)模式同時使用。
中斷
每個DMA通道都可以在DMA傳輸過半、傳輸完成和傳輸錯誤時產(chǎn)生中斷。為應(yīng)用的靈活性考慮,通過設(shè)置寄存器的不同位來打開這些中斷。
表1 DMA中斷請求
DMA請求映射
DMA1控制器
從外設(shè)(TIMx[x=1、2、3、4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1、2]和USARTx[x=1、2、3])產(chǎn)生的7個請求,通過邏輯或輸入到DMA控制器,這意味著同時只能有一個請求有效。參見表2各個通道的DMA1請求一覽。
表1 DMA中斷請求
DMA2控制器
從外設(shè)(TIMx[5、6、7、8]、ADC3、SPI/I2S3、UART4、USART6、DAC通道1、2和SDIO)產(chǎn)生的5個請求,經(jīng)邏輯或輸入到DMA2控制器,這意味著同時只能有一個請求有效。參見表3的各個通道的DMA2請求一覽。外設(shè)的DMA請求,可以通過設(shè)置相應(yīng)外設(shè)寄存器中的DMA控制位,被獨立地開啟或關(guān)閉。
表3 各個通道的DMA2請求一覽
-
控制器
+關(guān)注
關(guān)注
114文章
16876瀏覽量
182449 -
存儲器
+關(guān)注
關(guān)注
38文章
7617瀏覽量
166062 -
緩沖器
+關(guān)注
關(guān)注
6文章
2027瀏覽量
46349 -
dma
+關(guān)注
關(guān)注
3文章
569瀏覽量
102115
原文標(biāo)題:MCU微課堂|CKS32F107xx DMA
文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
使用STM32F101xx和STM32F103xx DMA控制器
CKS32F4xx系列產(chǎn)品串口DMA傳輸
CKS32F4xx系列RNG功能設(shè)置

CKS32F4xx系列FSMC功能簡介

CKS32F107xx系列時鐘系統(tǒng)具體配置方法講解

CKS32F107xx系列MCU中ADC介紹
CKS32F107xx系列MCU的GPIO內(nèi)部硬件結(jié)構(gòu)和工作模式

詳解CKS32F107xx系列的定時器同步功能

評論