周洪雁,宮 志
(1.大慶師范學(xué)院 物理與電氣信息工程學(xué)院,黑龍江 大慶163712 2.大慶油田有限責(zé)任公司 信息技術(shù)公司,黑龍江 大慶163000)
DMA,即為存儲(chǔ)器訪問(wèn),DMA 數(shù)據(jù)傳輸是按照地址空間的標(biāo)識(shí)來(lái)傳遞的。CPU 雖然初始化了DMA傳輸動(dòng)作,但是在實(shí)際的應(yīng)用當(dāng)中整個(gè)數(shù)據(jù)傳輸過(guò)程是不需要CPU 來(lái)參與的,完全由DMA 自身來(lái)實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)移,這也就是為什么在進(jìn)行大量多次的數(shù)據(jù)采集的時(shí)候,我們采用DMA 來(lái)實(shí)現(xiàn)數(shù)據(jù)的傳輸可以很大程度的提升處理器的處理速度,其實(shí)本質(zhì)并不是提升了CPU 的處理速度,而是讓CPU 有更多的時(shí)間去處理數(shù)據(jù)而不是浪費(fèi)在數(shù)據(jù)的傳輸上。
STM32 的大多數(shù)外設(shè)可產(chǎn)生DMA 請(qǐng)求,可通過(guò)邏輯或的關(guān)系掛載到DMA 的使能端子,由于是邏輯或的關(guān)系故而同一時(shí)刻只能有一個(gè)請(qǐng)求被執(zhí)行。STM32 上所掛載外設(shè)的DMA 請(qǐng)求,可以通過(guò)填充相應(yīng)的結(jié)構(gòu)體來(lái)實(shí)現(xiàn)。
1.2.1 DMA1 通道簡(jiǎn)介
DMA 通道配置如圖1所示。
圖1 DMA 通道配置
圖1中的邏輯或,如同一個(gè)通道的DMA 請(qǐng)求,這里DMA1 為例(ADC3、TIM2_CH1、TIM4_CH3),需要強(qiáng)調(diào)的是這幾個(gè)參數(shù)在通道1 上是邏輯或的關(guān)系,所謂邏輯或就是同一時(shí)間DMA 只能響應(yīng)其中的一個(gè)。
1.2.2 DMA 中斷狀態(tài)寄存器
通常我們?cè)谂渲肈MA 的時(shí)候會(huì)開啟DMA 中斷,一旦數(shù)據(jù)傳輸結(jié)束會(huì)進(jìn)入中斷服務(wù)函數(shù),當(dāng)沒有開啟DMA 中斷的時(shí)候也可以通過(guò)查詢的方式來(lái)檢測(cè)DMA 是否傳輸完畢,這是因?yàn)镈MA 傳輸完畢后會(huì)有一個(gè)標(biāo)志位,該標(biāo)志位會(huì)置一來(lái)標(biāo)識(shí)DMA 傳輸結(jié)束,CPU 可以處理下一組數(shù)據(jù)了,然而這個(gè)標(biāo)志位是軟件置位的,置1 后不會(huì)自動(dòng)清零,需要軟件清零,所以在檢測(cè)到標(biāo)志位后首先進(jìn)行軟件清零,再進(jìn)入下一步操作,使DMA 工作在滿負(fù)荷狀態(tài),極大地提升CPU 的運(yùn)作效率。
1.2.3 DMA 中斷標(biāo)志清除寄存器
上面提到了標(biāo)志位需要通過(guò)軟件清零,同樣的中斷標(biāo)志位也是需要我們進(jìn)行軟件清零的,不同的是我們不能通過(guò)直接給中斷標(biāo)志寄存器寫0 來(lái)實(shí)現(xiàn)清零,需要通過(guò)給中斷標(biāo)志清除寄存器寫1 來(lái)實(shí)現(xiàn)對(duì)中斷標(biāo)志位的清零。同樣在進(jìn)入中斷之后,我們首先需要做的就是清除中斷標(biāo)志位。
高級(jí)定時(shí)器TIM1 或高級(jí)定時(shí)器TIM8 的本質(zhì)都是一個(gè)獨(dú)立于內(nèi)設(shè)掛載在CPU 上的外設(shè),就是一個(gè)16 位的可以自動(dòng)重新裝載的計(jì)數(shù)器,與普通單片機(jī)一樣該計(jì)數(shù)器的工作同樣不需要CPU 內(nèi)核的參與,它的時(shí)鐘驅(qū)動(dòng)是由一個(gè)可編程的預(yù)分頻從系統(tǒng)時(shí)鐘上獨(dú)立分支出來(lái)的,如圖2所示。高級(jí)定時(shí)器TIM1 適用領(lǐng)域較多,對(duì)于脈沖寬度的測(cè)量或者像普通單片機(jī)那樣生成產(chǎn)生輸出各種波形也是完全可以勝任的。
圖2 整體系統(tǒng)圖
根據(jù)內(nèi)部電路圖可知定時(shí)器1 與定時(shí)器8 掛載在APB2 預(yù)分頻器上,分頻因子可選1,2,4,8,16。而APB2 預(yù)分頻器掛載在AHB 預(yù)分頻上分頻因子可選1,2…512 故使能定時(shí)器1 時(shí)區(qū)別于常用的定時(shí)器。
所謂死區(qū)就是在一組成對(duì)出現(xiàn)的互補(bǔ)脈寬上兩者之間并不是完全互補(bǔ)的而是存在一定的錯(cuò)位,所謂錯(cuò)位的這段時(shí)間就被稱之為死區(qū)。在配置STM32 生成互補(bǔ)脈寬的同時(shí)也可對(duì)死區(qū)進(jìn)行初始配置,可通過(guò)相關(guān)的寄存器使能死區(qū),同時(shí)也只需繼續(xù)填充相應(yīng)的結(jié)構(gòu)體即可完成對(duì)死區(qū)時(shí)間的配置。死區(qū)的設(shè)置函數(shù)里還有一個(gè)剎車功能,剎車功能有效電平設(shè)置為低電平的時(shí)候,倘若突然將該引腳拉低,原先正在輸出的互補(bǔ)脈寬會(huì)突然停止。
通過(guò)把基于STM32 的脈寬發(fā)生器用于實(shí)際工作領(lǐng)域,可以得到該脈寬發(fā)生器具有精度高和速度快的特點(diǎn),可以滿足一般的實(shí)驗(yàn)和生存需要。故該脈寬發(fā)生器的設(shè)計(jì)和開發(fā)具有一定的實(shí)際意義。
[1]黃智偉.全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽常用電路模塊制作[M].北京:北京航空航天大學(xué)出版社,2011.
[2]李全利,遲榮強(qiáng).單片機(jī)原題與接口技術(shù)[M].北京:高等教育出版社,2004.
[3]宋巖.Cortex-M3 權(quán)威指南[M].北京:北京大學(xué)出版社,2008.