轉(zhuǎn)自 https://bbs.csdn.net/topics/392159760?page=1
zhouxiangbai的實驗結(jié)果:
DMA源端:音頻模塊的數(shù)據(jù)FIFO
DMA目的端:內(nèi)存Buffer
DMA傳輸方式:循環(huán)列表鏈表(linked list)
實驗結(jié)果:啟動DMA傳輸,DMA在不停的從DMA源取數(shù)據(jù)(因為是傳輸方式是循環(huán)列表,且在傳輸過程中沒有使能任何傳輸中斷),CPU是可以做其他事情的。
問了一下同事,他解釋是:芯片是分時給CPU和DMA的,當(dāng)分時給哪一方時,哪一方就獨占總線,另一方被掛起。至于芯片是不是這么設(shè)計的、具體怎么設(shè)計的,我們都搞不清楚。但是他這樣解釋我倒是覺得有道理,可以解釋我最初的疑惑
不喝冰的解釋:
在STM32中是采用這種方法:
DMA控制器和Cortex?-M3核心共享系統(tǒng)數(shù)據(jù)總線,執(zhí)行直接存儲器數(shù)據(jù)傳輸。當(dāng)CPU和DMA
同時訪問相同的目標(biāo)(RAM或外設(shè))時, DMA請求會暫停CPU訪問系統(tǒng)總線達若干個周期,總線
仲裁器執(zhí)行循環(huán)調(diào)度,以保證CPU至少可以得到一半的系統(tǒng)總線(存儲器或外設(shè))帶寬。
DMA技術(shù)的出現(xiàn),使得外圍設(shè)備可以通過DMA控制器直接訪問內(nèi)存,與此同時,CPU可以繼續(xù)執(zhí)行程序.那么DMA控制器與CPU怎樣分時使用內(nèi)存呢?通常采用以下三種方法:(1)停止CPU訪內(nèi)存;(2)周期挪用;(3)DMA與CPU交替訪問內(nèi)存.
總結(jié)來說:目前的實驗現(xiàn)象說明,在DMA連續(xù)傳輸過程中,CPU可以正常工作,CPU一定以某種方式獲得了總線的控制權(quán)。CPU和DMA時分復(fù)用了總線。