STM32再學(xué)習——DMA控制器
DMA這簡(jiǎn)單的三字母表示Direct Memory Access,直譯過(guò)來(lái)就是“直接存儲器存取”,其設計目的是提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸,而無(wú)須MCU的干預,從而節省了MCU寶貴的運行時(shí)間,為其它操作提供了充足的時(shí)間。
本文引用地址:http://dyxdggzs.com/article/182406.htmSTM32F103系統MCU的DMA控制器有7個(gè)通道,每個(gè)通道專(zhuān)門(mén)用來(lái)管理來(lái)自一個(gè)或多個(gè)硬件外設對存儲器的訪(fǎng)問(wèn)請求。該訪(fǎng)問(wèn)請求可以通過(guò)硬件觸發(fā),也可以通過(guò)軟件配置來(lái)完成軟件觸發(fā)。7個(gè)通道請求通過(guò)一個(gè)仲裁器來(lái)協(xié)調,它們的優(yōu)先級可以通過(guò)軟件編程來(lái)設置,但相等的優(yōu)先級通過(guò)固有的硬件決定(請求0優(yōu)先于請求1)。
DMA控制器是可以完成外設至內存、內存至外設與內存至內存的三方數據直接轉移。數據在傳輸的時(shí)候可以選擇字節、半字與全字的傳輸寬度,并模擬打包與拆包過(guò)程,支持循環(huán)的緩沖器管理。最大的傳輸數據長(cháng)度為65536,當然,如果選擇全字傳輸則DMA傳輸一次傳輸可多達128K個(gè)字節的數據,這個(gè)對于嵌入式的MCU來(lái)說(shuō),可以說(shuō)是一個(gè)天文數字了。
DMA控制器對于數據的處理傳輸是采用的共享系統數據線(xiàn)執行的,因此,在1個(gè)DMA請求發(fā)生時(shí)要占用至少2個(gè)周期的總線(xiàn)時(shí)間,考慮到其它原因,2個(gè)連續的DMA請求間釋放系統時(shí)鐘至少1個(gè)周期,如果對于72Mhz的MCU來(lái)說(shuō)一個(gè)周期約為14ns,2個(gè)周期也就是28個(gè)ns的時(shí)間。MCU的計算時(shí)間已經(jīng)進(jìn)入了納秒階段了……
DMA的實(shí)現過(guò)程只有簡(jiǎn)單的三步(當然是簡(jiǎn)單說(shuō)了):
從外設數據寄存器或者從DMA_CMARx 寄存器指定地址的存儲器單元執行加載操作。
存數據到外設數據寄存器或者存數據到DMA_CMARx 寄存器指定地址的存儲器單元。
執行一次DMA_CNDTRx 寄存器的遞減操作。該寄存器包含未完成的操作數目。
DMA控制器通道的請求映像。DMA通道有7個(gè)請求,而這7個(gè)請求與所連接的外設可不是隨心所欲的選擇,因此,對于在同一個(gè)通道的DMA請求外設來(lái)說(shuō),在同一時(shí)間只能有一個(gè)請求有效,我們先請出來(lái)DMA請求映像來(lái),如下圖所示:
從上面可以清楚的看到,每個(gè)通道都可以用做Memory 2 memory,而這個(gè)功能,筆者認為卻是相當重要的。
通訊與傳感器是目前發(fā)展的兩個(gè)大發(fā)向,而與外設相連的DMA通道是以最快、最省事的方式將數據傳給MCU,而我們知道原始數據肯定要進(jìn)行一步數據的處理,因此,使用DMA的Memory2memory功能可以輕松完成數據“乒乓控制”,從而同時(shí)完成數據的采集與處理。通訊時(shí),待發(fā)送的數據存儲至緩沖器,而DMA的內存至外設,又可以把數據直接送到外設,不用MCU的任何運算與資源,對于數據通訊節省了大師寶貴的時(shí)間,也使得工程師們更加把精力關(guān)注于數據的處理中。
這么多的優(yōu)點(diǎn),STM32并沒(méi)有多加銀子,完全是免費贈送的,以后的項目應用一定使用。免費而高效,何樂(lè )而不為呢?
存儲器相關(guān)文章:存儲器原理
評論