5.4.1 DMA的工作過(guò)程 要實(shí)現(xiàn)DMA傳送,目前都采用大規(guī)模集成電路芯片DMA控制器(DMAC)。 DMA的工作過(guò)程大致如下: ①外設(shè)向DMAC發(fā)出DMA傳送請(qǐng)求。 ②DMAC通過(guò)連接到CPU的HOLD信號(hào)向CPU提出DMA請(qǐng)求。 ③CPU在完成當(dāng)前總線周期后會(huì)立即對(duì)DMA請(qǐng)求做出響應(yīng)。 ④待CPU將總線置高阻——放棄總線控制權(quán),DMAC即開始對(duì)總線實(shí)施控制并向外設(shè)送出DMA的應(yīng)答信號(hào)。 ⑤DMAC送出地址信號(hào)和控制信號(hào),實(shí)現(xiàn)外設(shè)與內(nèi)存或內(nèi)存與內(nèi)存的數(shù)據(jù)傳送。 ⑥D(zhuǎn)MAC將規(guī)定的數(shù)據(jù)字節(jié)傳送完之后,通過(guò)向CPU發(fā)HOLD信號(hào),撤消對(duì)CPU的DMA請(qǐng)求。


5.4.2 DMA控制器8237
1. 8237的引線及功能
DMAC8237的外部引線圖如圖5.33所示。
A0~A3:雙向地址線,具有三態(tài)輸出。
A4~A7:三態(tài)輸出線。
DB0~DB7:雙向三態(tài)數(shù)據(jù)總線。

HRQ:保持請(qǐng)求信號(hào)
HLDA:保持響應(yīng)信號(hào)
DREQ0~DREQ3:DMA請(qǐng)求(通道0~3)信號(hào)。
DACK0~DACK3:DMA響應(yīng)信號(hào),分別對(duì)應(yīng)通道0~3。
CLK:時(shí)鐘輸入。
RESET:過(guò)程結(jié)束,低電平有效的雙向信號(hào)。
2.8237的工作方式
8237工作有兩種周期,即空閑周期和工作周期。
(1)空閑周期
(2)工作周期
①單字節(jié)傳送方式。
②數(shù)據(jù)塊傳送。
③請(qǐng)求傳送。
④級(jí)聯(lián)方式。

(3) 傳送類型
① 接口到存貯器的傳送。
② 存貯器到接口。
③ 存貯器到存貯器。
(4) 優(yōu)先級(jí)
(5) 傳送速率
3. 8237的內(nèi)部寄存器
8237有4個(gè)獨(dú)立的DMA通道,有許多內(nèi)部寄存器。 表5.3給出這些寄存器的名稱、長(zhǎng)度和數(shù)量。

(1)基地址寄存器 (2)基字?jǐn)?shù)寄存器 (3)當(dāng)前地址寄存器 (4)當(dāng)前字?jǐn)?shù)寄存器 (5)地址暫存寄存器和字?jǐn)?shù)暫存寄存器 (6)方式寄存器 (7)命令寄存器 (8)請(qǐng)求寄存器 (9)屏蔽寄存器




①單個(gè)通道屏蔽字。
②四通道屏蔽字。
(10)狀態(tài)寄存器
(11)暫存寄存器
(12)字節(jié)指針觸發(fā)器


4. 8237的尋址及連接
8237的4個(gè)通道的寄存器及其他各種寄存器的尋址編碼如表5.4和表5.5所示。





5. 8237的初始化
下面我們抽出PC機(jī)中BIOS對(duì)8237初始化部分加以說(shuō)明:
①為了對(duì)DMAC8237初始化,首先進(jìn)行總清。
②對(duì)DMAC(8237)的4個(gè)通道的基地址寄存器與當(dāng)前地址寄存器、基字?jǐn)?shù)寄存器及當(dāng)前字?jǐn)?shù)寄存器先寫入FFFFH,再讀出比較,看讀寫操作是否正確。
③程序?qū)MAC(8237)的零通道初始化。一行刷新結(jié)束,HRQ變?yōu)闊o(wú)效,退出DMA。
此處給出通道0初始化程序如下:
OUT DMA+0DH,AL ;總清8237
;INITIALIZEANDSTARTDMAFORMEMORYREFRESH
MOV DS,BX
MOV ES,BX ;初始化DS和ES
MOV AL,0FFH
OUT DMA+1,AL ;通道0的傳送字節(jié)數(shù),為64K字節(jié)
OUT DMA+1,AL
MOV DL,0BH ;使DX=000BH MOV AL,58H OUT DX,AL ;寫方式字 MOV AL,0 OUT DMA+8,AL ;寫入命令字 OUT DMA+10,AL; ;寫屏蔽字


DMAC初始化程序如下: INITADM:OUT DMA+0DH,AL ;總清 MOV AL,40H OUT DMA+2,AL ;送地址低字節(jié)到通道1 MOV AL,74H OUT DMA+2,AL ;送地址高字節(jié)到通道1 MOV AL,80H OUT PAG,AL ;送頁(yè)寄存器 MOV AL,64H OUT DMA+3,AL;送傳送字節(jié)數(shù)低字節(jié)到通道1
MOV AL,0
OUT DMA+3,AL ;送傳送字節(jié)數(shù)高字節(jié)到通道1
MOV AL,59H ;通道1方式字:讀操作,單字節(jié) ;傳送
OUT DMA+11,AL ;地址遞增,自動(dòng)預(yù)置
MOV AL,0 ;命令字,允許工作,固定優(yōu)先級(jí)
OUT DMA+8,AL ;DACK低有效
OUT DMA+15,AL ;寫屏蔽寄存器,規(guī)定允許 ;4個(gè)通道均可請(qǐng)求
程序中,將取數(shù)的存貯單元的首地址87440H分別寫到頁(yè)寄存器(外加的三態(tài)輸出寄存器)和DMAC通道1的高低字節(jié)寄存器中。
這里每次傳送一個(gè)字節(jié)。每傳送100個(gè)字節(jié)循環(huán)。開始可以不用總清命令,以免影響其他通道。這時(shí)可以換成只清字節(jié)指針觸發(fā)器的命令,即:
MOV AL,0
OUT DMA+12, AL
