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