1.只有F15/16x具有DMA(Direct Memory Access是一種不經(jīng)過CPU而直接從內(nèi)存了存取數(shù)據(jù)的數(shù)據(jù)交換模式。)為數(shù)據(jù)告訴傳輸提供保證。(例如,利用DMA控制器可以直接將ADC轉(zhuǎn)換存儲(chǔ)器的內(nèi)容傳送到RAM中)處理數(shù)據(jù),而非處理任務(wù)。
2.特性:
數(shù)據(jù)傳送無需CPU
塊傳輸可達(dá)到65536字節(jié)
提高片內(nèi)外設(shè)吞吐能力,每個(gè)字或者字節(jié)僅需2個(gè)MCLK
處理數(shù)據(jù)是CPU處于低功耗
字節(jié)和字可以混合傳輸
四種傳輸尋址模式:固定地址到固定地址,固定地址到塊地址,塊地址到固定地址,塊地址到塊地址。
觸發(fā)方式靈活:邊沿或電平
單個(gè)、塊、或突發(fā)塊傳輸模式:每次觸發(fā)DMA操作,可根據(jù)需要傳輸不同模式數(shù)據(jù)。
3.結(jié)構(gòu)
三個(gè)獨(dú)立的傳輸通道:0 1 2
可配置的通道優(yōu)先權(quán):
程序命令控制模塊:每個(gè)DMA通道開始之前,CPU要編程給定的相關(guān)命令和模式控制,以決定DMA通道類型。
可配置的傳送觸發(fā)器:(觸發(fā)源選擇模塊,DMAREQ軟件觸發(fā),TimerA CCR2輸出、Timer_BCCR2輸出、I2C數(shù)據(jù)發(fā)送準(zhǔn)備好、USART接收發(fā)送數(shù)據(jù)、DAC12IFG、AD12模塊的ADC12IFGx/DMAxIFG、DMAxIFG、DMAE0外部觸發(fā)源。觸發(fā)源擴(kuò)充能力)。
4.DMA控制器相關(guān)操作:
a.選擇DMA觸發(fā)源:
DMAREQ(軟件觸發(fā),DMA傳輸開始后該位自動(dòng)清零)
TACCR2 CCIFG (TACCR2的CCIFG標(biāo)志位,觸發(fā)DMA操作(前提CCIE不置位),DMA傳輸開始后該位自動(dòng)清零)
TBCCR2 CCIFG(同上)
URXIFG0(UART或SPI)(USART0準(zhǔn)備接收新數(shù)據(jù)時(shí)觸發(fā)DMA操作(前提URXIE0不置位),DMA傳輸后該位自動(dòng)清零)
RXTMAEN(I2C)(I2C模式只對USART0 有效,DMA傳輸后該位不能自動(dòng)清零)
DAC12_0 DAC12IFG((前提DACIE不置位),該位可以自動(dòng)清除)
ADC12IFGx (置位標(biāo)志有模塊自動(dòng)選擇,當(dāng)ADC12單通道上執(zhí)行單次或重復(fù)轉(zhuǎn)換時(shí),ADC12IFGx置位,觸發(fā)DMA操作。DMA傳輸后
該位不能自動(dòng)清零,只有對應(yīng)的ADC12MEMx被訪問該標(biāo)志才自動(dòng)清除。用軟件置位ADC12IFGx標(biāo)志不能觸發(fā)DMA操作)
TACCR0 CCIFG((觸發(fā)前提:CCIE不置位)DMA傳輸后該位自動(dòng)清零)
TBCCR0 CCIFG(同上)
URXIFG0(URXIFG1置位觸發(fā),(前提:UTXIE1不置位)DMA傳輸后該位自動(dòng)清零)
UTXIFG0(UTXIFG1置位觸發(fā),(前提:UTXIE1不置位)DMA傳輸后該位自動(dòng)清零)
硬件乘法器準(zhǔn)備好,觸發(fā)DMA
DMAxIFG:(DMA0IFG觸發(fā)DMA通道1,DMA1IFG觸發(fā)DMA通道2,DMA1IFG觸發(fā)DMA通道0,DMA傳輸后該位不能自動(dòng)清零)
DMAE0:外部觸發(fā)標(biāo)志DMAE0.
b.確定觸發(fā)信號(hào)方式:邊沿(0),電平(1) DMALEVEL
c.DMA控制器的尋址:(每個(gè)通道尋址方式完全獨(dú)立)DMASRCINCR源地址 DMADSTINCR目的地址
固定地址到固定地址
固定地址到塊地址
塊地址到固定地址
塊地址到塊地址
d.選擇DMA傳輸模式:
單字或者單字節(jié)傳輸
快傳輸
突發(fā)塊傳輸
重復(fù)單字或者單字節(jié)傳輸
重復(fù)塊傳輸
重復(fù)突發(fā)塊傳輸
e.CPU暫停傳輸 DMAONFETCH=0且DMA控制器接收到有效觸發(fā)信號(hào),CPU進(jìn)入暫停狀態(tài),DMA開始傳輸。DMAONFETCH=1時(shí)在
DMA暫停CPU之前,CPU就結(jié)束當(dāng)前正在進(jìn)行的指令,開始DMA操作。DMA傳輸過程中,要完成地址和字節(jié)數(shù)的設(shè)置以及其他控制操作。
f.DMA操作停止方式
NMI中斷:NMI中斷可以結(jié)束DMA操作:設(shè)置DMACTL1的ENNMI位。(適用于單字或者單字節(jié)模式、塊傳輸模式、突發(fā)塊傳輸模式)
清除DMAEN位(突發(fā)快傳輸模式)
g.DMA通道的優(yōu)先級(jí) DMA0 1 2
(固定優(yōu)先級(jí):DMA傳輸過程中不可以被打斷,有更高的通道請求時(shí),只有先執(zhí)行再響
應(yīng)
(循環(huán)優(yōu)先級(jí):防止被某一通道單獨(dú)壟斷
(通過ROUNDROBIN設(shè)置:1:循環(huán),0:固定、
h.DMA傳輸周期
DMA控制器可以最大限度的避免程序查詢和中斷方式中歐冠非數(shù)據(jù)傳輸時(shí)間,可滿足傳輸率高的外設(shè)。
……傳輸之前需要一個(gè)或兩個(gè)MCLK時(shí)鐘周期來實(shí)現(xiàn)同步
……同步后,每個(gè)字或者字節(jié)傳輸僅需要2個(gè)MCLK
……每傳輸結(jié)束有一個(gè)周期等待時(shí)間
若MCLK處于活動(dòng)狀態(tài),CPU關(guān)閉,DMA傳輸直接使用MCLK
若MCLK關(guān)閉,DMA用臨時(shí)DCOCLK啟動(dòng)MCLK時(shí)鐘源,結(jié)束后CPU仍處關(guān)閉,MCLK時(shí)鐘源也關(guān)閉
DMA最大周期:表4-27 P211
i.DMA與中斷
(1)DMA與系統(tǒng)中斷
系統(tǒng)中斷不能打斷DMA中斷。若ENNMI置位NMI中斷可以打斷DMA傳輸。DMA事件可以打斷中斷處理程序(前提:DMA控制
器打開)
(2)DMA控制器中斷
條件:DMAxSZ內(nèi)容減為零(相應(yīng)的中斷標(biāo)志置位)并且DMAIE,GIE置位
注意:DMA只有一個(gè)中斷向量,并且這個(gè)中斷向量和DAC12模塊公用。軟件檢查DMAIFG和DAC12IFG,這樣才能判斷中斷源。
DMAIFG不能自動(dòng)復(fù)位,有軟件來
5.DMA寄存器:(硬件結(jié)構(gòu)是字結(jié)構(gòu),必須用字指令來訪問)
控制寄存器0 :選擇觸發(fā)源
控制寄存器1 :DMAONFETCH:傳輸開始時(shí)間。ROUNDROBIN:選擇優(yōu)先級(jí)管理方式。ENNMINMI:NMI是否中斷DMA操作
通道0 1 2 控制寄存器(傳輸模式選擇、目的地址增減控制位、傳輸源地址增減控制位、目的單元基本單位、源單元基本單位、觸發(fā)源有效方式、模塊使能、中斷標(biāo)志、中斷允許、是否被NMI中斷、DMA請求位)
通道0 1 2 源地址寄存器:存放起始源地址
通道0 1 2 目的地址寄存器:存放目的地址
通道0 1 2 傳輸長度寄存器:沒傳送一個(gè)字或者字節(jié)DMAxSZ減量,為零時(shí)自動(dòng)裝入初值
6.使用:
設(shè)置觸發(fā)源
源地址
目的地址
傳輸單元個(gè)數(shù)