SciTech-EECS-MCU/CPU: DMA(直接記憶體訪問): 開始時由CPU進行協調配對+傳資料時DMA+結束時觸發硬體中斷通知MCU/CPU並解除配對

abaelhe發表於2024-07-08
  1. MEM可以是:
  • MCU/CPU自帶的記憶體:
    容量由“晶片設計師”根據常用場景統計確定大小。
    常能滿足大多數用途。

  • MCU/CPU的外部記憶體:
    容量由“硬體設計師”根據需要確定。
    在設計電路階段,為MCU/CPU增加的外圍物理“大記憶體”,
    安放佈設在MCU/CPU的周圍, 直連其高速匯流排, 可滿足硬體特定需求。

  • MCU/CPU的可擴充套件外存:
    容量由“終端使用者”自由擴充套件。
    在設計電路階段,要為MCU/CPU增加通用的“硬體介面 或,擴充套件槽”, 常用的有SD卡槽、隨身碟介面。
    直連MCU/CPU高速匯流排, 可滿足“購買裝置”的終端使用者自由擴充套件外部儲存容量的需求。

  1. DMA常用於大量資料的讀寫;
  • 少量資料,一般是經過MCU/CPU的處理,實現上是“'register'轉發”方式存取MEM(記憶體)。
    常常資料只是8bit、16bit, 32bit, 64bit, 128bit, 256bit, 根據MCU/CPU的Datasheet確定。
    CPU(彙編)指令上,每一筆“小資料”要兩步完成:
    • 首先, 將MEM地址的資料讀入register, 這是一條MCU/CPU指令。
    • 其次, 其他“電路單元”讀寫register內容, 另一條MCU/CPU指令。
      大量資料時,如果分為一筆筆的“小資料收發”方式:
    • MCU/CPU將一直被佔用執行兩條彙編指令。
    • 每一筆“小資料”都經過MCU/CPU(的register)轉發, 傳輸路徑上繞不必要的彎路。
      而先進MCU/CPU的DMA時:
    • 開始時, 由CPU匯流排協調好“配對”, 並儲存一條“DMA記錄”
    • 傳數時, DMA(分block塊方式):
      • 分“大塊”傳,一次傳"一大塊"(常有KB或MB為單位的大小), 直到傳完;
      • 不佔用CPU執行指令。
    • 結束時, 觸發硬體中斷, 通知MCU/CPU已傳完,並由MCU/CPU解除“配對”並清除“DMA記錄”
  • 首先資料的“收方”、“發方”與MCU/CPU, 都要有DMA功能.
    例如收方是ADC( MCU/CPU自帶的或其高速匯流排外接的), 總之此ADC的Datasheet上要有DMA功能。
  1. 例如: MCU/CPU內部的ADC

相關文章