DMA既可以指內(nèi)存和外設(shè)直接存取數(shù)據(jù)這種內(nèi)存訪問的計算機(jī)技術(shù),又可以指實現(xiàn)該技術(shù)的硬件模塊(對于通用計算機(jī)PC而言,DMA控制邏輯由CPU和DMA控制接口邏輯芯片共同組成,嵌入式系統(tǒng)的DMA控制器內(nèi)建在處理器芯片內(nèi)部,一般稱為DMA控制器,DMAC)。
值得注意的是,通常只有數(shù)據(jù)流量較大(kBps或者更高)的外設(shè)才需要支持DMA能力,這些應(yīng)用方面典型的例子包括視頻、音頻和網(wǎng)絡(luò)接口
現(xiàn)代計算機(jī)系統(tǒng)中,廣泛采用了DMA控制器與DMA接口相分離的結(jié)構(gòu)模式以IBM-PC系列微型計算機(jī)的軟盤機(jī)DMA接口為例。
8237 DMA控制器的編程結(jié)構(gòu)
Intel 8237DMA控制器芯片的內(nèi)部結(jié)構(gòu)
如下圖
Intel 8257是一種控制DMA(Direct Memory Access)操作的芯片,它可以將數(shù)據(jù)直接在IO設(shè)備和內(nèi)存之間進(jìn)行交換,而不需要經(jīng)過CPU,所以它的數(shù)據(jù)傳輸速率可以很快。
8257有以下特點:
8257有四個通道(channel),所以它支持4個設(shè)備同時進(jìn)行DMA操作。
每一個通道都可以被獨立地編程,每次最多可以傳輸64kb數(shù)據(jù)。
每個通道可以獨立的進(jìn)行讀傳輸、寫傳輸和校驗傳輸。
芯片共有40個針腳,如下圖所示:
8257功能模塊圖示如下:
- 8257功能模塊有數(shù)據(jù)總線緩沖區(qū),讀/寫邏輯,控制邏輯,優(yōu)先級解析器和4個DMA通道。
- 每個DMA通道都有兩個16位可編程寄存器,分別為地址寄存器和計數(shù)寄存器。
MEMR為存儲器讀操作信號,MEMW為存儲器寫操作信號,IOR為外設(shè)讀操作信號,IOW為外設(shè)寫操作信號。
- 地址寄存器用來存放用于DMA數(shù)據(jù)傳輸?shù)膬?nèi)存起始地址。
- 每進(jìn)行一次讀/寫/校驗傳輸后,地址寄存器中的地址都會自動增加。
- 計數(shù)寄存器用來對通過DMA進(jìn)行傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù)或字?jǐn)?shù)進(jìn)行計數(shù)。它保持著要傳送的字節(jié)數(shù),在每次傳送后此寄存器減量。當(dāng)這個寄存器的值減為零時,Terminal Count信號將產(chǎn)生。
- 計數(shù)寄存器的格式如下:
B0-B13這14位用于計數(shù),前面的兩位用于標(biāo)識DMA傳輸?shù)念愋停ㄗx/寫/校驗傳輸)。
進(jìn)行讀傳輸時,數(shù)據(jù)從內(nèi)存?zhèn)鬏數(shù)絀/O設(shè)備。
進(jìn)行寫傳輸時,數(shù)據(jù)從I/O設(shè)備傳輸?shù)絻?nèi)存。
校驗操作會產(chǎn)生DMA地址但不產(chǎn)生DMA內(nèi)存和I/O控制信號。
8257還有兩個8位的寄存器,分別叫做模式設(shè)置寄存器和狀態(tài)寄存器。
模式設(shè)置寄存器的格式如下:
模式設(shè)置寄存器有如下功能:
打開/關(guān)閉一個通道。
將優(yōu)先級指定為固定型(Fixed)/循環(huán)型(rotating)。
計數(shù)終止(terminal count)時停止DMA。
延長/一般 寫時間
自動重載通道2
B0-B3這4位用于打開或者關(guān)閉通道0-3,1代表打開,0代表關(guān)閉。
如果B4被設(shè)為1,通道有循環(huán)型優(yōu)先級。如果設(shè)為0,通道有固定型優(yōu)先級。在循環(huán)型優(yōu)先級中,服務(wù)完一個通道后就會把這個通道優(yōu)先級設(shè)為最低。在固定型優(yōu)先級中,通道0優(yōu)先級最高,通道3優(yōu)先級最低。
如果B5被設(shè)為1,低電平有效的寫信號(MEMW和IOW)的時間會被延長。
如果B6被設(shè)為1,計數(shù)終止后會停止DMA。
B7用來指定通道2的自動重載特性。
如果B7被設(shè)為1,通道3的計數(shù)寄存器和地址寄存器會在通道2計數(shù)終止后自動載入至通道2的計數(shù)寄存器和地址寄存器。當(dāng)這種模式打開后,可用的通道數(shù)由4減少至3。
狀態(tài)寄存器的格式如下:
B0-B3這4位用于指明通道0-3是否計數(shù)終止。
這些狀態(tài)位在處理器進(jìn)行讀操作后清除。
B4稱為更新標(biāo)識位(update flag),如果為1,說明通道2的寄存器已經(jīng)在自動載入模式的操作中重載了通道3的寄存器。
8257寄存器的內(nèi)部地址如下表所示:
評論