5.7 直接記憶體存取(DMA)

直接記憶體存取(direct memory accessDMA)為一個特殊的硬體結構,它允許介面裝置與記憶體之間直接轉移資料,而不需經由CPU的參與。在週邊與記憶體之間需要大量資料轉移時,此種方式可說是一種不需要中斷服務程式的中斷服務,直接由硬體完成此特定的工作,節省了許多程式執行的時間。


 (圖 5-11) DMA的微電腦架構

5.7-1 直接記憶體存取的工作程序

一個直接記憶體存取的微電腦架構如 ( 5-11)所示,其中DMAC是這個架構中負責行使直接記憶體存取的控制晶片,整個DMA的工作程序描述如下:

(1)    一個週邊的IO裝置須要直接記憶體存取時,以DRQ=1DMAC提出DMA請求。

(2)    DMACHRQ=1通知CPU HOLD端。

(3)    CPU執行完畢目前的匯流排週期,將位址匯流排、資料匯流排以及控制匯流排置於高阻抗狀態,亦即與CPU接腳中分離,然後啟動HLDA=1告知DMAC可以使用系統匯流排了。

(4)    DMAC將事先以程式規劃好的位址計數器內容轉移至位址匯流排。

(5)    接著以DACK=1通知IO裝置位址線已備妥。

(6)    啟動記憶體及IO裝置的讀或寫控制線,完成第一筆資料的轉移。如果DMAC設定在區段模式,DMAC會將位址計數器加一,語句計數器減一,再回到前一個步驟,直到DMAC中的語句計數器等於零。

(7)    DMAC釋放控制權將所有匯流排開路,移除DMA請求,以HRQ=0通知 DMA工作已經結束,CPU得知後以HLDA=0回應,並收回匯流排控制權繼續原先的工作。

5.7-2 直接記憶體存取的工作模式

由於DMAC通常是一只IC,為了適合各種場合的需要,在設計時就規劃了多種工作模式,只要在使用前以程式寫入一些資料至它的內部暫存器,就可以選擇工作模式,典型的DMAC晶片82C37A就有以下四種工作模式。

1. 單一轉移模式(single transfer mode)

2. 區段轉移模式(block transfer mode)

3. 要求轉移模式(demand transfer)

4. 串接模式(cascade mode)

單一轉移模式中,週邊設備每啟動一次DRQDMAC僅轉移一筆資料就把匯流排控制權交回CPU

區段轉移模式時,DRQ只需維持啟動狀態到DACK回應為止,DMAC就可以將整個區段的資料轉移完畢。

要求轉移模式與區段轉移模式類似,但每轉移一筆資料都重新檢查DRQ,若DRQ不在啟動狀態則暫停DMA的工作,並將匯流排控制權交還CPU,直到DRQ再啟動時,再從上次暫停的位址繼續轉移至最後一筆資料。

串接模式允許一個以上的介面要求DMA,如 ( 5-12)所示。假設每一只DMAC都有兩個通道的DRQ要求線及DACK認知線,則可擴充至第二層DMAC,此時可擁有四個DMA的通道選擇,且優先權為維持第一層的遺傳,使得通道1>通道2>通道3>通道4。當第二層提出DMA需求時,第一層DMAC除了傳達HRQHLDA之外,本身並不輸出任何位址與控制信號,DMA的工作仍然由第二層的DMAC來處理


 (圖 5-12) DMAC的串接模式