新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32中DMA實(shí)現(xiàn)方式

STM32中DMA實(shí)現(xiàn)方式

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
  STM32系列微控制器均含有DMA和通用時(shí)鐘TIMx模塊。其低端型號(hào)中僅包含DMA1,支持7個(gè)通道;高端型號(hào)還包括DMA2,支持5個(gè)通道。它的每個(gè)通道可任意指定工作模式,如內(nèi)存到內(nèi)存、內(nèi)存到外設(shè)或外設(shè)到內(nèi)存等。當(dāng)涉及到外設(shè)時(shí),一般是由外設(shè)來(lái)觸發(fā)DMA的一次傳輸,如串口收到數(shù)據(jù)的標(biāo)志位可觸發(fā)DMA。
  DMA的每次傳輸都分為4個(gè)階段:申請(qǐng)仲裁、地址計(jì)算、總線存取和應(yīng)答。除總線存取階段,其他3個(gè)階段都只需要一個(gè)系統(tǒng)周期,并且不占用總線,可在DMA控制器內(nèi)部并發(fā)地執(zhí)行。總線存取階段,每個(gè)字(4字節(jié))的傳輸需要3個(gè)系統(tǒng)周期。DMA和CPU工作在交替方式下,不會(huì)相互阻塞。DMA各個(gè)通道可獨(dú)立設(shè)置優(yōu)先級(jí),當(dāng)訪問(wèn)同一資源時(shí)高優(yōu)先級(jí)通道先獲得資源。
  采用時(shí)鐘的4個(gè)比較/捕獲通道加DMA可以產(chǎn)生出4路不同頻率和占空比的方波。這里為簡(jiǎn)化篇幅,只列出了產(chǎn)生一路方波的代碼?;驹硎牵簩r(shí)鐘的4個(gè)通道設(shè)置為反轉(zhuǎn)模式(即計(jì)數(shù)器與比較捕獲寄存器相等時(shí),其對(duì)應(yīng)的CPU引腳電平發(fā)生反轉(zhuǎn)),設(shè)置計(jì)數(shù)器為向上計(jì)數(shù)到0xFFFF的模式;然后預(yù)先計(jì)算好需要引腳反轉(zhuǎn)的時(shí)刻,并使能對(duì)應(yīng)通道的DMA請(qǐng)求。這樣,當(dāng)計(jì)數(shù)器與比較/捕獲寄存器的值相等時(shí),由DMA將下一個(gè)需要引腳電平反轉(zhuǎn)的時(shí)刻送入到比較/捕獲寄存器。
  這里將DMA設(shè)置為從內(nèi)存到外設(shè)的半字(2個(gè)字節(jié))環(huán)形傳輸。開(kāi)啟DMA全滿和半滿中斷,在中斷處理函數(shù)中不斷填充新的時(shí)刻值,即可保證產(chǎn)生的波形不間斷。假設(shè)存放時(shí)刻值的緩沖長(zhǎng)度為N,則每N/2個(gè)點(diǎn)才中斷一次,這樣CPU就不需要頻繁進(jìn)入中斷,執(zhí)行效率比較高。由此也可以看出,緩沖越大,對(duì)中斷響應(yīng)的實(shí)時(shí)性要求也越低,當(dāng)然這時(shí)中斷的處理時(shí)間也越長(zhǎng)。以下為示例代碼:
  需要注意的是,比較/捕獲寄存器的預(yù)加載功能必須禁止掉。我們需要的是寫入比較/捕獲寄存器的值立即與計(jì)數(shù)器相比較輸出,而無(wú)需等待一個(gè)更新事件。
  采用DMA+TIMx的方式來(lái)捕獲上升沿和下降沿時(shí)刻,有利于提高系統(tǒng)的實(shí)時(shí)性和執(zhí)行效率。通過(guò)TIMx的捕獲功能將方波的電平跳變時(shí)刻記錄在比較/捕獲寄存器中,然后DMA將該值自動(dòng)傳輸?shù)絻?nèi)存,只有當(dāng)DMA觸發(fā)半滿或全滿事件時(shí)CPU才需要進(jìn)入中斷處理數(shù)據(jù)。通過(guò)記錄方波的上升沿和下降沿時(shí)刻,然后將兩個(gè)時(shí)刻相減,進(jìn)而就能得到所有低沿和高沿的寬度,最后進(jìn)行后續(xù)的分析處理。這種方式下中斷頻率僅為方波頻率的4/N(N為緩沖區(qū)大小)。
  測(cè)試中STM32系列微控制器工作在36 MHz,可產(chǎn)生出1路最高1.5 MHz的方波,可捕獲1 MHz的方波,而此時(shí)CPU的執(zhí)行幾乎不受影響。這里采用DMA來(lái)實(shí)現(xiàn)方波的產(chǎn)生和捕獲,極大地提高了系統(tǒng)的實(shí)時(shí)性和執(zhí)行效率,減少了中斷次數(shù),節(jié)省了寶貴的資源。這種方案也可以用來(lái)實(shí)現(xiàn)高效的模擬串口。另外,若有多個(gè)DMA同時(shí)工作,應(yīng)考慮最壞情況下DMA的響應(yīng)時(shí)間,以避免錯(cuò)誤發(fā)生。


關(guān)鍵詞: STM32DMA實(shí)現(xiàn)方

評(píng)論


技術(shù)專區(qū)

關(guān)閉