在設(shè)計SMT32項目的時候,相信很多小伙伴在查看數(shù)據(jù)手冊時都會看到“DMA”,在學習51的時候,估計很難接觸到DMA,所以一開始接觸就會有點蒙。今天核桃就和大伙簡單的講一下。
簡單來說,DMA就是替CPU做數(shù)據(jù)搬運的,純牛馬,為CPU減輕負擔。
DMA(Direct Memory Access,中文:直接存儲器訪問),用于外設(shè)與存儲器/存儲器和存儲器之間的高速數(shù)據(jù)傳輸使用。這樣數(shù)據(jù)的傳輸就不在依賴于CPU了。
DMA工作的核心步驟如下:
(1)初始化配置地址設(shè)置:配置源地址(數(shù)據(jù)起始位置)和目標地址(數(shù)據(jù)目的地)。
傳輸方向:定義數(shù)據(jù)流向(如外設(shè)→內(nèi)存、內(nèi)存→外設(shè)、內(nèi)存→內(nèi)存)。
數(shù)據(jù)量:指定待傳輸?shù)臄?shù)據(jù)塊大小(如字節(jié)數(shù))。
傳輸模式:選擇塊傳輸(連續(xù)傳輸所有數(shù)據(jù))、單次傳輸(每次請求傳單個單元)或循環(huán)模式等。
中斷使能:設(shè)置傳輸完成或錯誤時的中斷通知。
(2)啟動DMA傳輸CPU發(fā)送啟動命令后,DMA控制器接管總線控制權(quán),成為總線主設(shè)備。外設(shè)通過DMA請求信號(如DRQ)觸發(fā)傳輸,或由軟件啟動內(nèi)存間傳輸。
(3)數(shù)據(jù)傳輸階段
總線仲裁:DMA控制器與CPU通過總線仲裁器協(xié)調(diào)總線使用權(quán)。傳輸期間,CPU可能暫?;虻却偩€空閑。
直接傳輸:DMA按配置的地址和步長,逐單元完成數(shù)據(jù)搬運,無需CPU干預。
(4)傳輸完成與通知
中斷信號:數(shù)據(jù)全部傳輸后,DMA控制器發(fā)送中斷通知CPU。
總線釋放:DMA交出總線控制權(quán),CPU恢復對總線的正常訪問。
DMA的優(yōu)勢
(1)減輕CPU的負擔,CPU僅需要初始化配置,無需參與數(shù)據(jù)傳輸,可執(zhí)行其他任務(wù)。
(2)提升吞吐量,適用于高速外設(shè)(比如網(wǎng)卡,磁盤),減少數(shù)據(jù)延遲。
(3)降低功耗,CPU可進入低功耗模式,由DMA完成數(shù)據(jù)搬運。
總結(jié):
DMA通過硬件控制器協(xié)調(diào)總線訪問,實現(xiàn)外設(shè)與內(nèi)存間的高效數(shù)據(jù)傳輸,大幅優(yōu)化系統(tǒng)性能。其核心在于“繞過CPU”,結(jié)合總線仲裁、中斷機制和靈活的配置選項,成為現(xiàn)代計算機系統(tǒng)中不可或缺的組件。