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