DMA既可以指內存和外設直接存取數(shù)據(jù)這種內存訪問的計算機技術,又可以指實現(xiàn)該技術的硬件模塊(對于通用計算機PC而言,DMA控制邏輯由CPU和DMA控制接口邏輯芯片共同組成,嵌入式系統(tǒng)的DMA控制器內建在處理器芯片內部,一般稱為DMA控制器,DMAC)。
值得注意的是,通常只有數(shù)據(jù)流量較大(kBps或者更高)的外設才需要支持DMA能力,這些應用方面典型的例子包括視頻、音頻和網(wǎng)絡接口
現(xiàn)代計算機系統(tǒng)中,廣泛采用了DMA控制器與DMA接口相分離的結構模式以IBM-PC系列微型計算機的軟盤機DMA接口為例。
8237 DMA控制器的編程結構
Intel 8237DMA控制器芯片的內部結構
如下圖

Intel 8257是一種控制DMA(Direct Memory Access)操作的芯片,它可以將數(shù)據(jù)直接在IO設備和內存之間進行交換,而不需要經(jīng)過CPU,所以它的數(shù)據(jù)傳輸速率可以很快。
8257有以下特點:
8257有四個通道(channel),所以它支持4個設備同時進行DMA操作。
每一個通道都可以被獨立地編程,每次最多可以傳輸64kb數(shù)據(jù)。
每個通道可以獨立的進行讀傳輸、寫傳輸和校驗傳輸。
芯片共有40個針腳,如下圖所示:

8257功能模塊圖示如下:
- 8257功能模塊有數(shù)據(jù)總線緩沖區(qū),讀/寫邏輯,控制邏輯,優(yōu)先級解析器和4個DMA通道。
- 每個DMA通道都有兩個16位可編程寄存器,分別為地址寄存器和計數(shù)寄存器。

MEMR為存儲器讀操作信號,MEMW為存儲器寫操作信號,IOR為外設讀操作信號,IOW為外設寫操作信號。
- 地址寄存器用來存放用于DMA數(shù)據(jù)傳輸?shù)膬却嫫鹗嫉刂贰?/p>
- 每進行一次讀/寫/校驗傳輸后,地址寄存器中的地址都會自動增加。
- 計數(shù)寄存器用來對通過DMA進行傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù)或字數(shù)進行計數(shù)。它保持著要傳送的字節(jié)數(shù),在每次傳送后此寄存器減量。當這個寄存器的值減為零時,Terminal Count信號將產(chǎn)生。
- 計數(shù)寄存器的格式如下:

B0-B13這14位用于計數(shù),前面的兩位用于標識DMA傳輸?shù)念愋停ㄗx/寫/校驗傳輸)。
進行讀傳輸時,數(shù)據(jù)從內存?zhèn)鬏數(shù)絀/O設備。
進行寫傳輸時,數(shù)據(jù)從I/O設備傳輸?shù)絻却妗?/p>
校驗操作會產(chǎn)生DMA地址但不產(chǎn)生DMA內存和I/O控制信號。
8257還有兩個8位的寄存器,分別叫做模式設置寄存器和狀態(tài)寄存器。
模式設置寄存器的格式如下:

模式設置寄存器有如下功能:
打開/關閉一個通道。
將優(yōu)先級指定為固定型(Fixed)/循環(huán)型(rotating)。
計數(shù)終止(terminal count)時停止DMA。
延長/一般 寫時間
自動重載通道2
B0-B3這4位用于打開或者關閉通道0-3,1代表打開,0代表關閉。
如果B4被設為1,通道有循環(huán)型優(yōu)先級。如果設為0,通道有固定型優(yōu)先級。在循環(huán)型優(yōu)先級中,服務完一個通道后就會把這個通道優(yōu)先級設為最低。在固定型優(yōu)先級中,通道0優(yōu)先級最高,通道3優(yōu)先級最低。
如果B5被設為1,低電平有效的寫信號(MEMW和IOW)的時間會被延長。
如果B6被設為1,計數(shù)終止后會停止DMA。
B7用來指定通道2的自動重載特性。
如果B7被設為1,通道3的計數(shù)寄存器和地址寄存器會在通道2計數(shù)終止后自動載入至通道2的計數(shù)寄存器和地址寄存器。當這種模式打開后,可用的通道數(shù)由4減少至3。
狀態(tài)寄存器的格式如下:

B0-B3這4位用于指明通道0-3是否計數(shù)終止。
這些狀態(tài)位在處理器進行讀操作后清除。
B4稱為更新標識位(update flag),如果為1,說明通道2的寄存器已經(jīng)在自動載入模式的操作中重載了通道3的寄存器。
8257寄存器的內部地址如下表所示:

電子發(fā)燒友App


































評論