




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章輸入/輸出與接口技術(shù)8.1接口技術(shù)概述8.2CPU與外設(shè)之間數(shù)據(jù)傳送方式8.3DMA控制器8.4可編程定時(shí)/計(jì)數(shù)接口電路及其應(yīng)用8.5可編程并行接口電路及其應(yīng)用8.6可編程串行接口電路及其應(yīng)用習(xí)題88.1.1CPU與外部設(shè)備之間的接口信息
CPU通過(guò)接口與外部設(shè)備的連接如圖8.1所示,其中既有數(shù)據(jù)端口,又有狀態(tài)端口,還有控制端口,每一個(gè)I/O端口對(duì)應(yīng)一個(gè)I/O地址。從硬件角度看,端口可以理解為寄存器。數(shù)據(jù)端口可以是雙向的,狀態(tài)端口只作輸入操作,控制端口只作輸出操作。CPU用I/O指令對(duì)其直接訪問(wèn)。在I/O操作中,主要有三類信息:數(shù)據(jù)信息、狀態(tài)信息和控制信息。8.1接口技術(shù)概述圖8.1簡(jiǎn)單的外設(shè)接口
(1)數(shù)據(jù)信息:是CPU和I/O設(shè)備交換的基本信息,通常是8位或16位。數(shù)在輸入過(guò)程中,數(shù)據(jù)信息一般是由外部設(shè)備通過(guò)接口芯片傳遞給系統(tǒng)的。數(shù)據(jù)信息由外設(shè)經(jīng)過(guò)外設(shè)和接口之間的數(shù)據(jù)線進(jìn)入接口,再到達(dá)系統(tǒng)的數(shù)據(jù)總線,然后送入CPU。在輸出過(guò)程中,數(shù)據(jù)信息從CPU經(jīng)過(guò)數(shù)據(jù)總線進(jìn)入接口,再通過(guò)外設(shè)和接口之間的數(shù)據(jù)線,到達(dá)外設(shè)。
(2)狀態(tài)信息:反映了當(dāng)前外設(shè)的工作狀態(tài),它是由外設(shè)通過(guò)接口送入CPU的。對(duì)于輸入設(shè)備來(lái)說(shuō),用Ready信號(hào)來(lái)表示待輸入的數(shù)據(jù)是否準(zhǔn)備就緒;對(duì)于輸出設(shè)備來(lái)說(shuō),用Busy信號(hào)來(lái)表示輸出設(shè)備是否處于空閑狀態(tài),如空閑,則可接收CPU送來(lái)的數(shù)據(jù)信息,否則CPU等待。
(3)控制信息:是CPU通過(guò)接口送給外設(shè)的。CPU通過(guò)發(fā)送控制信息控制外設(shè)的工作。外設(shè)種類不同,控制信息也各不相同。接口控制信號(hào)一般可分為兩類:總線控制信號(hào)和輸入/輸出控制信號(hào)??偩€控制信號(hào)包括數(shù)據(jù)線、地址線、IOR、LOW等;輸入/輸出控制信號(hào)比較復(fù)雜,一般包括數(shù)據(jù)線、輸入/輸出應(yīng)答信號(hào)等。8.1.2輸入/輸出指令及其尋址方式在微型計(jì)算機(jī)系統(tǒng)中,端口的編址通常有兩種不同的方式,一是I/O端口與存儲(chǔ)器單元統(tǒng)一編址;二是I/O端口獨(dú)立編址。
1.I/O端口與存儲(chǔ)器單元統(tǒng)一編址所謂I/O端口與存儲(chǔ)器單元統(tǒng)一編址,也稱為存儲(chǔ)器映像(MemoryMapped)I/O方式,既把每個(gè)I/O端口都當(dāng)作一個(gè)存儲(chǔ)器單元看待,I/O端口與存儲(chǔ)器單元在同一個(gè)地址空間中進(jìn)行統(tǒng)一編址。通常,是在整個(gè)地址空間中劃分出一小塊連續(xù)的地址分配給I/O端口。被分配給I/O端口的地址,存儲(chǔ)器不能再使用,如圖8.2所示。圖8.2內(nèi)存映射與I/O映射編址(a)內(nèi)存映射編址;(b)I/O映射I/O編址
2.I/O端口獨(dú)立編址I/O端口獨(dú)立編址(I/OMapped),也稱為I/O隔離編址或I/O指令尋址方式,即I/O端口地址區(qū)域和存儲(chǔ)器地址區(qū)域,分別各自獨(dú)立編址。訪問(wèn)I/O端口使用專門的I/O指令,而訪問(wèn)內(nèi)存則使用MOV指令。CPU在尋址內(nèi)存和外設(shè)時(shí),使用不同的控制信號(hào)來(lái)區(qū)分當(dāng)前是對(duì)內(nèi)存操作還是對(duì)I/O操作。
3.輸入/輸出指令及其尋址
1)8086/8088采用的IN和OUT指令
I/O指令可以采用8位(單字節(jié))或16位(雙字節(jié))地址兩種尋址方式。如采用單字節(jié)作為端口地址,則最多可以有256個(gè)端口(端口地址號(hào)從00H~FFH),并且是直接尋址(直接端口尋址)方式,指令格式如下:輸入: IN AX,Port ;從Port端口輸入16位數(shù)據(jù)到AX IN AL,Port ;從Port端口輸入8位數(shù)據(jù)到AL輸出: OUT Port,AX ;從AX輸出16位數(shù)據(jù)到Port端口
OUT Port,AL ;從AL輸出8位數(shù)據(jù)到Port端口這里Port是一個(gè)單字節(jié)的8位地址。
如用雙字節(jié)地址作為端口地址,則最多可以有64K個(gè)端口(端口地址號(hào)從0000H~FFFFH),并且是間接尋址方式,即把端口地址放在DX寄存器內(nèi)(間接端口尋址)。其指令格式如下:輸入: MOV DX,XXXXH ;16位地址
IN AX,DX ;16位傳送或 IN AL,DX ;8位傳送輸出: MOV DX,XXXXH OUT DX,AX ;16位傳送或 OUT DX,AL ;8位傳送這里XXXXH為兩字節(jié)地址信息。2)80286和80386/486還支持I/O端口直接與內(nèi)存之間的數(shù)據(jù)傳送輸入: MOV DX,Port LES DI,Bufferin INSB ;8位傳送或 INSW ;16位傳送輸出: MOV DX,Port LDS SI,Bufferout OUTSB ;8位傳送或 OUTSW ;16位傳送
這里的輸入與輸出是直接對(duì)內(nèi)存儲(chǔ)器的RAM而言,當(dāng)輸入時(shí),用ES:DI指向RAM中的目標(biāo)緩沖區(qū)Bufferin;當(dāng)輸出時(shí),用DS:SI,指向源緩沖區(qū)Bufferout。若在INS或OUTS指令前加上REP重復(fù)前綴時(shí),則可以實(shí)現(xiàn)I/O端口與RAM上的緩沖區(qū)之間進(jìn)行成批數(shù)據(jù)傳送。從輸入/輸出指令可以看出,對(duì)于PC系列的機(jī)器,I/O端口內(nèi)的數(shù)據(jù)也有8位與16位之分,通常16位數(shù)據(jù)端口地址安置在偶數(shù)地址號(hào)上,CPU在一次總線周期內(nèi)就可以存取16位的數(shù)據(jù)。8位數(shù)據(jù)的端口地址可以安置在偶地址號(hào)或奇地址號(hào)上,偶地址使用數(shù)據(jù)總線D7~D0傳送數(shù)據(jù),奇地址使用數(shù)據(jù)總線D15~D8傳送數(shù)據(jù)。表8-l列出8位或16位數(shù)據(jù)端口在奇數(shù)或偶數(shù)端口地址號(hào)上,單字節(jié)直接尋址的輸入/輸出指令。表8-1IBM-PC機(jī)上I/O端口地址配置I/O端口配置地址數(shù)據(jù)總線指令舉例8位偶數(shù)地址D7~D0INAL,20HOUT20H,AL奇數(shù)地址D15~D8INAL,21HOUT21H,AL16位偶數(shù)地址D15~D0INAX,20HOUT20H,AX8.1.3CPU的輸入/輸出時(shí)序1.I/O讀總線周期時(shí)序一般I/O設(shè)備的工作速度較慢,所以在I/O總線周期的T3和T4之間插入一個(gè)等待狀態(tài)Tw,使整個(gè)周期由4個(gè)T狀態(tài)變?yōu)?個(gè)。所以各個(gè)信號(hào)也都要相應(yīng)地延長(zhǎng)或推遲一個(gè)時(shí)鐘周期。CPU仍是在T4狀態(tài)的開(kāi)始采樣數(shù)據(jù)線,由于CPU只用A15~A0尋址I/O端口,所以地址總線上沒(méi)有A19~A16的狀態(tài)。其時(shí)序如圖8.3所示。圖8.38086I/O讀寫時(shí)序
2.I/O寫總線周期時(shí)序
I/O寫總線周期的時(shí)序與I/O讀相比,除()信號(hào)換成了()信號(hào)外,數(shù)據(jù)信號(hào)也提前產(chǎn)生,但仍必須保持到T4狀態(tài)的上升沿之后,以便I/O端口在T4為低電平的某個(gè)時(shí)刻寫入數(shù)據(jù)。8.1.4常用外圍接口芯片
1.三態(tài)緩沖器74LS244外設(shè)輸入的數(shù)據(jù)和狀態(tài)信號(hào),通過(guò)數(shù)據(jù)輸入三態(tài)緩沖器經(jīng)數(shù)據(jù)總線傳送給微處理器。74LS244芯片的8位三態(tài)總線驅(qū)動(dòng)器如圖8.4所示。圖8.474LS244結(jié)構(gòu)及引腳
2.數(shù)據(jù)收發(fā)器74LS245
74LS245是一種三態(tài)輸出的8總線收發(fā)器,其邏輯電路和引腳如圖8.5所示。該收發(fā)器有16個(gè)雙向傳送的數(shù)據(jù)端,即A1~A8,B1~B8,另有兩個(gè)控制端——使能端和方向控制端DIR,該芯片的功能見(jiàn)表8-2。
74LS245通常用于數(shù)據(jù)的雙向傳送、緩沖和驅(qū)動(dòng)。表8-274LS245的真值表圖8.574LS245結(jié)構(gòu)及引腳
3.輸出寄存器(74LS273)數(shù)據(jù)輸出寄存器用來(lái)寄存微處理器送出的數(shù)據(jù)和命令。數(shù)據(jù)輸出接口通常是用具有信息存儲(chǔ)能力的雙穩(wěn)態(tài)觸發(fā)器來(lái)實(shí)現(xiàn)的。最簡(jiǎn)單的輸出接口可用D觸發(fā)器構(gòu)成。8D觸發(fā)器74LS273如圖8.6所示。8個(gè)數(shù)據(jù)輸入端D0~D7與微型計(jì)算機(jī)的數(shù)據(jù)總線相連,8個(gè)數(shù)據(jù)輸出端Q0~Q7與外設(shè)相連。圖7.674LS273引腳及其真值表加到74LS273時(shí)鐘端CLK的脈沖信號(hào)的上升沿將出現(xiàn)在D0~D7上的數(shù)據(jù)寫入該觸發(fā)器寄存。該觸發(fā)器寄存的數(shù)據(jù)可由CLR上的脈沖的下降沿清除。該觸發(fā)器寄存數(shù)據(jù)的過(guò)程是微處理器執(zhí)行OUT指令完成的。執(zhí)行OUT指令時(shí),微處理器發(fā)出寫寄存器信號(hào),該信號(hào)通常是端口地址和I/O寫信號(hào)IOW相負(fù)與產(chǎn)生的。將寫寄存器信號(hào)接至74LS273的CLK端。OUT指令就把累加器AL中的數(shù)據(jù)通過(guò)數(shù)據(jù)總線送至該觸發(fā)器寄存。74LS273可以用作無(wú)條件傳送的輸出接口電路。
4.鎖存器74LS373鎖存器是由三態(tài)緩沖器和寄存器組成的。數(shù)據(jù)進(jìn)入寄存器寄存后并不立即從寄存器輸出,要經(jīng)過(guò)三態(tài)緩沖才能輸出。鎖存器既可以作數(shù)據(jù)輸入寄存器,又可以作數(shù)據(jù)輸出寄存器。
74LS273的數(shù)據(jù)鎖存輸出端Q是通過(guò)一個(gè)一般的門(二態(tài)門)輸出的。也就是說(shuō),只要74LS273正常工作,其Q端總有一個(gè)確定的邏輯狀態(tài)(0或1)輸出。因此,74LS273無(wú)法直接用作輸入接口,即它的Q端絕對(duì)不允許直接與系統(tǒng)的數(shù)據(jù)總線相連接。
74LS373是一種8D鎖存器,具有三態(tài)驅(qū)動(dòng)輸出,其引線圖和真值表如圖8.7所示。圖8.774LS373結(jié)構(gòu)及引腳表8-374LS373的真值表8.2CPU與外設(shè)之間數(shù)據(jù)傳送方式8.2.1程序控制方式
1.無(wú)條件傳送無(wú)條件傳送是一種最簡(jiǎn)單的輸入/輸出控制方法,一般用于控制CPU與低速I/O接口之間的信息交換,例如,開(kāi)關(guān)、繼電器和速度、溫度、壓力、流量等變送器(即A/D轉(zhuǎn)換器)。由于這些信號(hào)變化很緩慢,當(dāng)需要采集這些數(shù)據(jù)時(shí),外部設(shè)備已經(jīng)把數(shù)據(jù)準(zhǔn)備就緒,無(wú)需檢查端口的狀態(tài),就可以立即采集數(shù)據(jù)。數(shù)據(jù)保持時(shí)間相對(duì)于CPU的處理時(shí)間長(zhǎng)得多。因此,輸入的數(shù)據(jù)就用不著加鎖存器而直接用三態(tài)緩沖器與系統(tǒng)總線連接。
2.有條件傳送又稱為程序查詢方式。這種傳送方式在接口電路中,除具有數(shù)據(jù)緩沖器或數(shù)據(jù)鎖存器外,還應(yīng)具有外設(shè)狀態(tài)標(biāo)志位,用來(lái)反映外部設(shè)備數(shù)據(jù)的情況。比如,在輸入時(shí),若數(shù)據(jù)已準(zhǔn)備好,則將該標(biāo)志位置位;輸出時(shí),若數(shù)據(jù)已空(數(shù)據(jù)已被取走),則將標(biāo)志位置位。在接口電路中,狀態(tài)寄存器也占用端口地址號(hào)。使用有條件傳送方式控制數(shù)據(jù)的輸入/輸出,通常要按圖8.8的流程進(jìn)行。即首先讀入設(shè)備狀態(tài)標(biāo)志信息,再根據(jù)所讀入的狀態(tài)信息進(jìn)行判斷,若設(shè)備未準(zhǔn)備就緒,則程序轉(zhuǎn)移去執(zhí)行某種操作,或循環(huán)回去重新執(zhí)行讀入設(shè)備狀態(tài)信息;若設(shè)備準(zhǔn)備好,則執(zhí)行完成數(shù)據(jù)傳送的I/O指令。數(shù)據(jù)傳送結(jié)束后,CPU轉(zhuǎn)去執(zhí)行其他任務(wù),剛才所操縱的設(shè)備脫離CPU控制。圖8.8條件傳送示意圖8.2.2中斷控制方式有條件傳送的缺點(diǎn)除了占用CPU較多的工作時(shí)間外,還難以滿足實(shí)時(shí)控制系統(tǒng)對(duì)I/O工作的要求。因?yàn)樵诓樵兎绞街?,CPU處于主動(dòng)地位,而外設(shè)接口處于消極被查詢的被動(dòng)地位。而在一般實(shí)時(shí)控制系統(tǒng)中,外設(shè)要求CPU為它服務(wù)是隨機(jī)的,而且支持系統(tǒng)的外設(shè)往往有幾個(gè)甚至幾十個(gè),若采用查詢方式工作,很難實(shí)現(xiàn)系統(tǒng)中每一個(gè)外設(shè)都工作在最佳工作狀態(tài)。所謂工作在最佳狀態(tài),是指一旦某個(gè)外設(shè)請(qǐng)求CPU為它服務(wù)時(shí),CPU應(yīng)該以最快的速度響應(yīng)其請(qǐng)求。這就要求系統(tǒng)中的外設(shè),具有主動(dòng)申請(qǐng)CPU為其服務(wù)的權(quán)利。比如,當(dāng)某個(gè)A/D轉(zhuǎn)換器的模擬量已轉(zhuǎn)換為數(shù)字量后,這時(shí)它就可以立刻向CPU發(fā)出中斷請(qǐng)求,CPU暫時(shí)中止處理當(dāng)前的事務(wù),而轉(zhuǎn)去執(zhí)行優(yōu)先的中斷服務(wù)程序,輸入A/D轉(zhuǎn)換器的數(shù)字量數(shù)據(jù)。微型計(jì)算機(jī)都具有中斷控制的能力,8086/8088CPU的中斷結(jié)構(gòu)靈活,功能很強(qiáng)。所以,微機(jī)系統(tǒng)采用中斷控制I/O方式是很方便的。CPU執(zhí)行完每一條指令后,都會(huì)去查詢外部是否有中斷請(qǐng)求,若有,就暫停執(zhí)行現(xiàn)行的程序,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,完成傳送數(shù)據(jù)的任務(wù)。當(dāng)然,在一個(gè)具有多個(gè)外設(shè)的系統(tǒng)中,在同一時(shí)刻就往往不止一個(gè)外設(shè)提出中斷請(qǐng)求,這就引入了所謂中斷優(yōu)先權(quán)管理和中斷嵌套等問(wèn)題。8.2.3直接存儲(chǔ)器存取(DMA)控制方式
對(duì)于一些高速外設(shè)或數(shù)據(jù)通信,如高速磁盤控制器或高速數(shù)據(jù)采集系統(tǒng),中斷控制方式往往滿足不了它們的需要。為此,提出了數(shù)據(jù)在I/O接口與存儲(chǔ)器之間的傳送,不經(jīng)CPU的干預(yù),而是在專用硬件電路的控制下,在存儲(chǔ)器和外部設(shè)備之間,直接開(kāi)辟高速的數(shù)據(jù)傳送通路直接傳送。這種方法稱為直接存儲(chǔ)器存取(DirectMemoryAccess,縮寫為DMA)。為實(shí)現(xiàn)這種工作方式而設(shè)計(jì)的專用接口電路,稱為DMA控制器(DMAC)。例如,Intel公司的8257、8237,Zilog公司的Z8410(Z80DMAC),Motorola公司的MC6844等,都是能實(shí)現(xiàn)DMA方式的可編程DMAC芯片。DMA的工作過(guò)程大致如下:
(1)當(dāng)外設(shè)準(zhǔn)備好,可以進(jìn)行DMA傳送時(shí),外設(shè)向DMA控制器發(fā)出DMA傳送請(qǐng)求信號(hào)(DRQ)。
(2)DMA控制器收到請(qǐng)求后,向CPU發(fā)出“總線請(qǐng)求”信號(hào)HOLD,申請(qǐng)占用總線。
(3)CPU在完成當(dāng)前總線周期后會(huì)立即對(duì)HOLD信號(hào)進(jìn)行響應(yīng)。響應(yīng)包括兩個(gè)方面,一是CPU將數(shù)據(jù)總線、地址總線和相應(yīng)的控制信號(hào)線均置為高阻態(tài),由此放棄對(duì)總線的控制權(quán)。另一方面,CPU向DMA控制器發(fā)出“總線響應(yīng)”信號(hào)(HLDA)。(4)DMA控制器收到HLDA信號(hào)后,就開(kāi)始控制總線,并向外設(shè)發(fā)出DMA響應(yīng)信號(hào)DACK。
(5)DMA控制器送出地址信號(hào)和相應(yīng)的控制信號(hào),實(shí)現(xiàn)外設(shè)與內(nèi)存或內(nèi)存與內(nèi)存之間的直接數(shù)據(jù)傳送。例如,在地址總線上發(fā)出存儲(chǔ)器的地址,向存儲(chǔ)器發(fā)出寫信號(hào)MEMW,同時(shí)向外設(shè)發(fā)出I/O地址、IOR和AEN信號(hào),即可從外設(shè)向內(nèi)存?zhèn)魉鸵粋€(gè)字節(jié)。
(6)DMA控制器自動(dòng)修改地址和字節(jié)計(jì)數(shù)器,并據(jù)此判斷是否需要重復(fù)傳送操作。規(guī)定的數(shù)據(jù)傳送完后,DMA控制器就撤消發(fā)往CPU的HOLD信號(hào)。CPU檢測(cè)到HOLD失效后,緊接著撤消HLDA信號(hào),并在下一時(shí)鐘周期重新開(kāi)始控制總線時(shí),繼續(xù)執(zhí)行原來(lái)的程序。(1)硬盤和軟盤I/O??梢允褂肈MAC作磁盤存儲(chǔ)介質(zhì)與半導(dǎo)體主存儲(chǔ)器之間傳送數(shù)據(jù)的接口。這種場(chǎng)合需要將磁盤中的大量數(shù)據(jù)(如磁盤操作系統(tǒng)等)快速地裝入內(nèi)部存儲(chǔ)器。
(2)快速通信通道I/O。例如,光導(dǎo)纖維通信鏈路,DMAC可以用來(lái)作為計(jì)算機(jī)系統(tǒng)和快速通信通道之間的接口,可作為同步通信數(shù)據(jù)的發(fā)送和接收,以便提高響應(yīng)時(shí)間,支持較高的數(shù)據(jù)傳輸速率,并使CPU脫出來(lái)做其他工作。DMA方式主要用于:(3)多處理機(jī)和多程序數(shù)據(jù)塊傳送。對(duì)于多處理機(jī)結(jié)構(gòu),通過(guò)DMAC控制數(shù)據(jù)傳送,可以較容易地實(shí)現(xiàn)專用存儲(chǔ)器和公用存儲(chǔ)器之間的數(shù)據(jù)傳送,對(duì)多任務(wù)應(yīng)用、頁(yè)式調(diào)度和任務(wù)調(diào)度都需要傳送大量的數(shù)據(jù)。因此,采用DMA方式可以提高數(shù)據(jù)傳輸速度。
(4)掃描操作。在圖像處理中,對(duì)CRT屏幕送數(shù)據(jù),也可以采用DMA方式。(5)快速數(shù)據(jù)采集。當(dāng)要采集的數(shù)據(jù)量很大,而且數(shù)據(jù)是以密集突發(fā)的形式出現(xiàn),例如,對(duì)波形的采集,此時(shí)采用DMA方式可能是最好的方法,它能滿足響應(yīng)時(shí)間和數(shù)據(jù)傳輸速率的要求。
(6)在PC/XT機(jī)中還采用DMA方式進(jìn)行DRAM的刷新操作。DMA工作過(guò)程波形如圖8.9所示。圖8.9DMA工作波形8.2.4I/O處理機(jī)方式
8089是專門用來(lái)處理輸入/輸出的協(xié)處理器。它共有52條指令、lMB尋址能力和兩個(gè)獨(dú)立的DMA通道。當(dāng)8086/8088加上8089組成系統(tǒng)后,8089能代替8086/8088,以通道控制方式管理各種I/O設(shè)備。以通道控制方式管理I/O設(shè)備,目前只有在大中型計(jì)算機(jī)中才普遍使用,因此,8089為微機(jī)的輸入/輸出系統(tǒng)設(shè)計(jì)帶來(lái)?yè)Q代性的變化。一般情況下,通過(guò)接口電路控制I/O外設(shè),必須依靠CPU的支持,對(duì)于非DMA方式,從外部設(shè)備每讀入一個(gè)字節(jié)或發(fā)送給外部設(shè)備一個(gè)字節(jié),都必須由CPU執(zhí)行指令來(lái)完成。雖然高速設(shè)備可以用DMA傳送數(shù)據(jù),但仍然需要CPU對(duì)DMAC進(jìn)行初始化,啟動(dòng)DMA操作,以及完成每次DMA操作之后都要檢查傳送的狀態(tài)。
對(duì)I/O數(shù)據(jù)的處理,如對(duì)數(shù)據(jù)的變換、拆、裝、檢查等,更加需要CPU支持,CPU控制I/O如圖8.10(a)所示。從圖中不難看出,普通I/O接口,不管是DMA方式還是非DMA方式,在I/O傳送過(guò)程都要占去CPU的開(kāi)銷。8089是一個(gè)智能控制器,它可以取出和執(zhí)行指令,除了控制數(shù)據(jù)傳送外,還可以執(zhí)行算術(shù)和邏輯運(yùn)算、轉(zhuǎn)移、搜索和轉(zhuǎn)換。當(dāng)CPU需要進(jìn)行I/O操作時(shí),它只要在存儲(chǔ)器中建立一個(gè)信息塊,將所需要的操作和有關(guān)參數(shù)按照規(guī)定列入,然后通知8089前來(lái)讀取。8089讀得操作控制信息后,能自動(dòng)完成全部的I/O操作。
因此,對(duì)配合8089的CPU來(lái)說(shuō),所有輸入/輸出的操作過(guò)程中,數(shù)據(jù)都是以塊為單位成批發(fā)送或接收的,而把一塊數(shù)據(jù)按字或字節(jié)與I/O設(shè)備(如CRT終端,行式打印機(jī))交換都由8089來(lái)完成,當(dāng)8089控制數(shù)據(jù)交換時(shí),CPU可以并行處理其他操作。由于引入8089來(lái)承擔(dān)原來(lái)必須由CPU承擔(dān)的I/O操作,這就大大地減輕了CPU控制外設(shè)的負(fù)擔(dān),有效地減少了CPU在I/O處理中的開(kāi)銷。8089控制I/O如圖8.10(b)所示。圖8.108086、8089控制I/O(a)8086控制I/O;(b)8089控制I/O8.3DMA控制器8237及其應(yīng)用8.3.1DMA控制器的功能通用的DMA控制器應(yīng)具有以下功能:
(1)編程設(shè)定DMA的傳輸模式及其所訪問(wèn)內(nèi)存的地址區(qū)域。
(2)屏蔽或接受外部設(shè)備的DMA請(qǐng)求(DREQ)。當(dāng)有多個(gè)設(shè)備同時(shí)請(qǐng)求時(shí),還要進(jìn)行優(yōu)先級(jí)排隊(duì),首先接受最高級(jí)的請(qǐng)求。(3)向CPU轉(zhuǎn)達(dá)DMA請(qǐng)求。DMA控制器要向CPU發(fā)出總線請(qǐng)求信號(hào)HOLD(高電平有效),請(qǐng)求CPU放棄總線的控制。
(4)接收CPU的總線響應(yīng)信號(hào)(HLDA)。接管總線控制權(quán),實(shí)現(xiàn)對(duì)總線的控制。
(5)向相應(yīng)外部設(shè)備轉(zhuǎn)達(dá)DMA允許信號(hào)DACK。于是在DMA控制器的管理下,實(shí)現(xiàn)外部設(shè)備和存儲(chǔ)器之間的數(shù)據(jù)直接傳送。(6)在傳送過(guò)程中進(jìn)行地址修改和字節(jié)計(jì)數(shù)。在傳送完要求的字節(jié)數(shù)后,向CPU發(fā)出DMA結(jié)束信號(hào)(EOP),撤消總線請(qǐng)求(HRQ),將總線控制權(quán)交還給CPU。
DMA控制器一方面可以接管總線,直接在其他I/O接口和存儲(chǔ)器之間進(jìn)行讀寫操作,就像CPU一樣成為總線的主控器件,這是有別于其他I/O控制器的根本不同之處。另一方面,作為一個(gè)可編程I/O器件,其DMA控制功能正是通過(guò)初始化編程來(lái)設(shè)置的。當(dāng)CPU用I/O指令對(duì)DMA控制器寫入或者讀出時(shí),它又和其他I/O電路一樣成為總線的從屬部件。8.3.2可編程控制器Intel8237DMAC的主要性能和內(nèi)部結(jié)構(gòu)
8237DMAC是Intel8080、8085、8086、8088系列通用的,一種高性能可編程DMA控制器芯片,它的性能如下:
(1)使用單一的+5V電源、單相時(shí)鐘、40條引腳、雙列直插式封裝。時(shí)鐘頻率為3~5MHz,最高速率可達(dá)1.6MB/s。
(2)具有四個(gè)獨(dú)立的通道??梢圆捎眉?jí)聯(lián)方式擴(kuò)充用戶所需要的通道,每個(gè)通道都具有16位地址寄存器和16位字節(jié)計(jì)數(shù)器。(3)用戶通過(guò)編程,可以在四種操作類型和四種傳送方式之中任選一種。
(4)每個(gè)通道都具有獨(dú)立的允許/禁止DMA請(qǐng)求的控制。所有通道都具有獨(dú)立的自動(dòng)重置原始狀態(tài)和參數(shù)的能力。
(5)有增1和減1自動(dòng)修改地址的能力。
(6)具有固定優(yōu)先權(quán)和循環(huán)優(yōu)先權(quán)兩種優(yōu)先權(quán)排序的優(yōu)先權(quán)控制邏輯。(7)每個(gè)通道都有軟件的DMA請(qǐng)求。還各有一對(duì)聯(lián)絡(luò)信號(hào)線(通道請(qǐng)求信號(hào)DREQ和響應(yīng)信號(hào)DACK),而且DREQ和DACK信號(hào)的有效電平可以通過(guò)編程來(lái)設(shè)定。
(8)具有終止DMA傳送的外部信號(hào)輸入引腳,外部通過(guò)此引腳輸入有效低電平的過(guò)程終止信號(hào)EOP,可以終止正在執(zhí)行的DMA操作。每個(gè)通道在結(jié)束DMA傳送后,會(huì)產(chǎn)生過(guò)程終止信號(hào)EOP輸出,可以用它作為中斷請(qǐng)求信號(hào)輸出。
8237A的內(nèi)部寄存器的類型和數(shù)量如表8-4所示。表8-48237A內(nèi)部寄存器8237A由I/O緩沖器、時(shí)序和控制邏輯、優(yōu)先級(jí)編碼器和循環(huán)優(yōu)先級(jí)邏輯、命令控制邏輯和內(nèi)部寄存器組五部分組成,如圖8.11所示。其中圖(a)是8237A內(nèi)部結(jié)構(gòu)框圖,圖(b)是四通道示意圖。通道部分只畫出了一個(gè)通道的情況,即每個(gè)通道都有一個(gè)基地址寄存器、基字節(jié)數(shù)寄存器、當(dāng)前地址寄存器和當(dāng)前字節(jié)數(shù)寄存器(16位),每一個(gè)通道都有一個(gè)6位的模式寄存器以控制不同的工作模式。圖8.118237A結(jié)構(gòu)(a)內(nèi)部結(jié)構(gòu)框圖;(b)四通道示意框圖圖8.118237A結(jié)構(gòu)(a)內(nèi)部結(jié)構(gòu)框圖;(b)四通道示意框圖8.3.38237的引腳和時(shí)序圖8.128237引腳
引腳的功能定義如下:
CLK(Clock):時(shí)鐘輸入,用來(lái)控制8237內(nèi)部操作定時(shí)和DMA傳送時(shí)的數(shù)據(jù)傳送速率。
CS(ChipSelect):片選輸入,低電平有效。在CPU控制總線時(shí),即8237在受控方式下,當(dāng)CS有效時(shí),選中該8237作為I/O設(shè)備,而當(dāng)CPU向8237寫入編程控制字時(shí),它開(kāi)啟I/O寫輸入;當(dāng)CPU從8237讀回狀態(tài)字,或當(dāng)前地址、當(dāng)前字節(jié)計(jì)數(shù)器內(nèi)容時(shí),它開(kāi)啟I/O讀輸入。在DMA控制總線時(shí),自動(dòng)禁止CS輸入,以防止DMA操作期間該器件選中自己。RESET:復(fù)位輸入,高電平有效。RESET有效時(shí),會(huì)清除命令、狀態(tài)、請(qǐng)求和暫存寄存器,并清除字節(jié)指示器和置位屏蔽寄存器。復(fù)位后,8237處于空閑周期,它的所有控制線都處于高阻狀態(tài),并且禁止所有通道的DMA操作。復(fù)位之后必須重新對(duì)8237初始化,它才能進(jìn)入DMA操作。READY:準(zhǔn)備好輸入信號(hào)。當(dāng)選用的存儲(chǔ)器或I/O設(shè)備速度比較慢時(shí),可用這個(gè)異步輸入信號(hào)使存儲(chǔ)器或I/O讀寫周期插入等待狀態(tài),以延長(zhǎng)8237傳送的讀/寫脈沖(IOR,LOW,EMMR和MEMW)。
HRQ(HoldRequest):請(qǐng)求占有信號(hào),輸出,高電平有效。在僅有一塊8237的系統(tǒng)中,HRQ通常接到CPU的HOLD引腳,用來(lái)向CPU請(qǐng)求對(duì)系統(tǒng)總線的控制權(quán)。如果通道的相應(yīng)屏蔽位被清除,也就是說(shuō)DMA請(qǐng)求未被屏蔽,只要出現(xiàn)DREQ有效信號(hào),8237就會(huì)立即發(fā)出HRQ有效信號(hào)。在HRQ有效之后,至少等待一個(gè)時(shí)鐘周期后,HLDA才會(huì)有效。HLDA(HoldAcknowledge):同意讓出總線響應(yīng)輸入信號(hào),高電平有效。來(lái)自CPU的同意讓出總線響應(yīng)信號(hào),它有效表示CPU已經(jīng)讓出對(duì)總線的控制權(quán),把總線的控制權(quán)交給DMAC。
DREQ0~DREQ3(DMARequest):DMA請(qǐng)求輸入信號(hào)。它們的有效電平可由編程設(shè)定。復(fù)位時(shí)使它們初始化為高電平有效。這4條DMA請(qǐng)求線是外部電路為取得DMA服務(wù),而送到各個(gè)通道的請(qǐng)求信號(hào)。在固定優(yōu)先權(quán)時(shí),DREQ0的優(yōu)先權(quán)最高,DREQ3的優(yōu)先權(quán)最低。各通道的優(yōu)先權(quán)級(jí)別是可以編程設(shè)定的,當(dāng)通道的DREQ有效時(shí),就向8237請(qǐng)求DMA操作。DACK是響應(yīng)DREQ信號(hào)后,進(jìn)入DMA服務(wù)的應(yīng)答信號(hào),在響應(yīng)的DACK產(chǎn)生前DREQ必須維持有效。DACK0~DACK3(DMAAcknowledge):DMA響應(yīng)輸出,它們的有效電平可由編程設(shè)定,復(fù)位時(shí)使它們初始化為低電平有效。8237用這些信號(hào)來(lái)通知各自的外部設(shè)備已經(jīng)被授予一個(gè)DMA周期了,即利用有效的DACK信號(hào)作為I/O接口的選通信號(hào)。系統(tǒng)允許多個(gè)DREQ同時(shí)有效,但在同一時(shí)間,只能一個(gè)DACK信號(hào)有效。
A3~A0(Address):地址線的低4位,雙向、三態(tài)地址線。CPU控制總線時(shí),它們是輸入信號(hào),用來(lái)尋址要讀出或?qū)懭氲?237內(nèi)部寄存器,在DMA的有效周期內(nèi),由它們輸出低4位地址。A7~A4:三態(tài)、輸出的地址線。在DMA周期,輸出低字節(jié)的高4位地址A7~A4。
DB7~DB0:雙向、三態(tài)的數(shù)據(jù)總線,連接到系統(tǒng)數(shù)據(jù)總線上。在I/O讀期間,在編程條件下,輸出被允許??梢詫?237內(nèi)部的地址寄存器、狀態(tài)寄存器、暫存寄存器和字節(jié)計(jì)數(shù)器中的內(nèi)容讀入CPU。當(dāng)CPU對(duì)8237的控制寄存器寫入控制字時(shí),在一個(gè)I/O寫周期內(nèi),這些輸出被禁止,數(shù)據(jù)從CPU寫入8237。在DMA操作期間,8237的高8位地址A7~A0,由DB7~DB0輸出,并由ADSTB信號(hào)將這些地址信息鎖存入地址鎖存器。若是進(jìn)行存儲(chǔ)器與存儲(chǔ)器之間的DMA操作,則在存儲(chǔ)器讀出期間,把從源存儲(chǔ)器讀出的數(shù)據(jù)輸入到8237的暫存器;而在存儲(chǔ)器寫入期間,數(shù)據(jù)再?gòu)臅捍嫫鬏敵?,然后寫入到新的目的存?chǔ)單元。ADSTB(AddressStrobe):地址選通、輸出信號(hào),高電平有效。用來(lái)將從DB7~DB0,輸出的高8位地址A7~A0選通到地址鎖存器。
AEN(AddressEnable):地址允許、輸出信號(hào),高電平有效。在DMA傳送期間,該信號(hào)有效時(shí),禁止其他系統(tǒng)總線驅(qū)動(dòng)器使用系統(tǒng)總線,同時(shí)允許地址鎖存器中的高8位地址信息送上系統(tǒng)地址總線。
IOR(I/ORead):I/O讀,雙向、三態(tài),低電平有效。CPU控制總線時(shí)由CPU發(fā)來(lái),若該信號(hào)有效,表示CPU讀取8237內(nèi)部寄存器。在進(jìn)行DMA操作時(shí)由8237發(fā)出,采用讀取I/O設(shè)備的控制信號(hào)。LOW:I/O寫,雙向、三態(tài),低電平有效。CPU控制總線時(shí)由CPU發(fā)來(lái),CPU用它把數(shù)據(jù)寫入8237。而在DMA操作期間LOW是由8237發(fā)出,作為對(duì)I/O設(shè)備寫入的控制信號(hào)。
MEMR(MemoryRead):存儲(chǔ)器讀,輸出,三態(tài),低電平有效。在DMA操作期間MEMR是由8237發(fā)出,作為從選定的存儲(chǔ)單元讀出數(shù)據(jù)的控制信號(hào)。
MEMW(MemoryWrite):存儲(chǔ)器寫,輸出,三態(tài),低電平有效。在DMA操作期間,MEMW由8237發(fā)出,作為把數(shù)據(jù)寫入選定的存儲(chǔ)單元的控制信號(hào)。EOP(EndOfProcess):過(guò)程結(jié)束,雙向,低電平有效。表示DMA服務(wù)結(jié)束。當(dāng)8237接收到有效的EOP信號(hào)時(shí),就會(huì)終止當(dāng)前正在執(zhí)行的DMA操作。當(dāng)復(fù)位請(qǐng)求位時(shí),如果是允許自動(dòng)預(yù)置(自動(dòng)再啟動(dòng)方式),就將該通道的基址寄存器和基字節(jié)計(jì)數(shù)器的內(nèi)容,重新寫入當(dāng)前的地址寄存器和當(dāng)前的字節(jié)計(jì)數(shù)器,并使屏蔽位保持不變。若不是自動(dòng)預(yù)置方式,當(dāng)EOP有效時(shí),將會(huì)使當(dāng)前運(yùn)行通道的狀態(tài)字中的屏蔽位和TC位置位,EOP可以由I/O設(shè)備輸入給8237。另外,當(dāng)8237的任一通道到達(dá)計(jì)數(shù)終點(diǎn)(TC)時(shí),會(huì)產(chǎn)生低電平的輸出脈沖信號(hào),此信號(hào)除了使8237終止DMA服務(wù)外,還可以送出作為中斷請(qǐng)求信號(hào)等使用。EOP信號(hào)不用時(shí),必須通過(guò)上拉電阻接到高電平,以防止誤輸入。8237的操作時(shí)序如圖8.13所示。它有三種操作周期:空閑周期(IdelCycle),即DMAC工作于被動(dòng)狀態(tài);請(qǐng)求應(yīng)答周期和DMA操作周期,即DMAC工作于主動(dòng)狀態(tài)。每個(gè)操作周期又由若干狀態(tài)組成,每種狀態(tài)是一個(gè)時(shí)鐘周期。8237有SI、S0、S1、S2、S3、S4和Sw
共七種狀態(tài)。1.空閑周期SI8237在編程進(jìn)入允許DMA工作狀態(tài)之前或雖已編程進(jìn)入允許DMA,但無(wú)DMA請(qǐng)求時(shí),8237處于空閑周期,執(zhí)行空閑狀態(tài)SI。在空閑周期內(nèi),在每個(gè)SI的下降沿,8237采樣DREQI輸入信號(hào),以確定是否有通道請(qǐng)求DMA服務(wù)。同時(shí),還采樣CS輸入引腳,判斷CPU是否要對(duì)該8237芯片進(jìn)行編程寫入或讀出,若8237采樣到CS有效,只要HLDA是低電平,便可以進(jìn)入編程工作狀態(tài)(即CPU可以訪問(wèn)8237)。CPU可以訪問(wèn)由地址信息A3~A0尋址的內(nèi)部寄存器。
2.請(qǐng)求應(yīng)答周期S0
對(duì)8237編程完成后,在SI的下降沿采樣到DREQI有效后,8237將在SI的上升沿,向CPU輸出占有總線的請(qǐng)求信號(hào)HRQ,并向CPU請(qǐng)求DMA服務(wù),進(jìn)入S0狀態(tài),等待CPU同意讓出總線的回答信號(hào)HLDA,在HLDA有效之前的S0狀態(tài)中,CPU仍可以訪問(wèn)8237。S0狀態(tài)是8237送出HRQ信號(hào)向CPU提出控制總線的請(qǐng)求信號(hào)HRQ后,到它接收到CPU發(fā)回同意讓出總線的HLDA有效信號(hào)之間的周期狀態(tài)。這是8237從被動(dòng)狀態(tài)過(guò)渡到主動(dòng)狀態(tài)的過(guò)渡時(shí)期。
3.DMA操作周期在HLDA到達(dá)之后,8237開(kāi)始進(jìn)入數(shù)據(jù)傳送周期,開(kāi)始以DMA方式傳送數(shù)據(jù)。一個(gè)完整的DMA傳送周期包括S1、S2、S3和S4共四個(gè)狀態(tài)。如果是慢速的存儲(chǔ)器或I/O設(shè)備,可以由READY引腳輸入低電平,當(dāng)S3結(jié)束的下降沿采樣READY為低電平時(shí),就在S3和S4之間插入Sw狀態(tài)(見(jiàn)圖8.13(c)),以達(dá)到速度的匹配。對(duì)于存儲(chǔ)器至存儲(chǔ)器之間的數(shù)據(jù)傳送,每傳送一個(gè)數(shù)據(jù),需先從源存儲(chǔ)器單元讀出數(shù)據(jù),將它存入暫存器,再寫入目的存儲(chǔ)器單元中,這樣傳送一個(gè)數(shù)據(jù)要八個(gè)狀態(tài)。因此,狀態(tài)標(biāo)注采用兩位數(shù)標(biāo)注,從存儲(chǔ)器讀出要用S11、S12、S13和S14共四個(gè)狀態(tài),寫入存儲(chǔ)器用S21、S22、S23和S24共四個(gè)狀態(tài)(見(jiàn)圖8.13(b))。圖8.138237操作時(shí)序圖8.138237操作時(shí)序圖8.138237操作時(shí)序
一個(gè)DMA有效周期時(shí)序是:8237收到有效的HLDA響應(yīng)信號(hào)后進(jìn)入S1時(shí),立即輸出地址允許信號(hào)AEN,這標(biāo)志著8237獲得了系統(tǒng)總線控制權(quán)和DMA周期的開(kāi)始。8237在S1期間把高8位地址A15~A8送到數(shù)據(jù)總線DB7~DB0上,并發(fā)出ADSTB地址選通信號(hào)。在ADSTB的下降沿(在S2內(nèi)),把高8位地址存入地址鎖存器,再由地址允許信號(hào)AEN把高8位地址送上地址總線A15~A8。低8位地址A7~A0由8237直接或經(jīng)驅(qū)動(dòng)器輸出到地址總線A7~A0上。對(duì)于一般的DMA在S2發(fā)出DACK信號(hào),通知請(qǐng)求DMA服務(wù)的設(shè)備,即DACK信號(hào)可以用作I/O端口的片選信號(hào)。因?yàn)椋珼MAC從地址總線上發(fā)出的地址已被用來(lái)訪問(wèn)存儲(chǔ)器。
若是M→I/O或I/O→M的傳送方式,對(duì)I/O設(shè)備的尋址就用DACK擔(dān)任。隨后,若是DMA讀操作,就發(fā)出存儲(chǔ)器讀命令MEMR;若是DMA寫操作,則發(fā)出I/O讀命令I(lǐng)OR讀取要傳送的數(shù)據(jù)。在S3狀態(tài)中8237發(fā)出寫命令,把讀出的數(shù)據(jù)寫入指定的地址單元。對(duì)于DMA讀操作發(fā)出I/O寫命令I(lǐng)OW;對(duì)于DMA寫操作發(fā)出MEMW命令。若編程選用擴(kuò)展寫命令,則寫入操作和讀出操作同時(shí)開(kāi)始。在S2期間同時(shí)發(fā)出MEMR和LOW或IOR和MEMW。在存儲(chǔ)器和I/O設(shè)備之間傳送數(shù)據(jù)時(shí),數(shù)據(jù)不讀入8237,而是保持在數(shù)據(jù)線DB7~DB0上。所以,寫周期一開(kāi)始,即可從數(shù)據(jù)總線上直接寫到存儲(chǔ)器或I/O端口。也就是說(shuō)DMA通道提供了直接傳送數(shù)據(jù)的功能。
對(duì)于存儲(chǔ)器至存儲(chǔ)器的傳送,不發(fā)I/O讀寫命令。每傳送一個(gè)字節(jié)用八個(gè)狀態(tài),前四個(gè)狀態(tài)發(fā)出MEMR命令,把數(shù)據(jù)從源地址存儲(chǔ)器讀入8237暫存器,后四個(gè)狀態(tài)發(fā)出MEMW命令,把暫存器中的數(shù)據(jù)寫入目的存儲(chǔ)器。
對(duì)于成組或請(qǐng)求傳送,連續(xù)傳送多個(gè)數(shù)據(jù),其地址碼是連續(xù)變化的。對(duì)于大多數(shù)傳送來(lái)說(shuō),保存在地址鎖存器中的高8位地址是不變的,只有當(dāng)?shù)?位地址發(fā)生進(jìn)位或借位時(shí),才會(huì)改變高8位地址。為了加快傳送速度,只有對(duì)地址鎖存器中的A15~A8內(nèi)容進(jìn)行修改時(shí),才去執(zhí)行S1狀態(tài),否則可以不進(jìn)入S1狀態(tài)。在S3后沿,8237檢測(cè)READY輸入信號(hào)。若READY為低電平時(shí),8237插入Sw狀態(tài);若READY為高電平時(shí),就進(jìn)入S4狀態(tài)。S4狀態(tài)結(jié)束后,8237已完成數(shù)據(jù)傳送,因此,對(duì)應(yīng)的讀寫信號(hào)變?yōu)闊o(wú)效。S4狀態(tài)結(jié)束后,若8237還處于DMA操作,即開(kāi)始另一個(gè)DMA傳送周期。若DMA操作結(jié)束,則8237進(jìn)入空閑狀態(tài)SI。圖8.13(a)為DMA讀或DMA寫連續(xù)傳送兩個(gè)字節(jié)的時(shí)序,圖8.13(b)是存儲(chǔ)器至存儲(chǔ)器傳送操作時(shí)序,圖8.13(c)表示插入Sw的時(shí)序。
為了提高傳送速度,若存儲(chǔ)器或I/O響應(yīng)速度跟得上,可以采用壓縮時(shí)序的方式,如圖8.13(d)所示。由于S1是用來(lái)輸出高8位地址,而S3是用來(lái)延長(zhǎng)讀取數(shù)據(jù)脈沖時(shí)間,因此可以省去S1和S3,而使數(shù)據(jù)傳送壓縮為兩個(gè)狀態(tài)。壓縮時(shí)序方式只用于連續(xù)數(shù)據(jù)塊傳送,即高8位地址不變的數(shù)據(jù)塊,若在數(shù)據(jù)傳送過(guò)程中高8位地址必須修改,則仍然需要出現(xiàn)S1狀態(tài)。8.3.48237DMAC的工作方式
1.工作模式在DMA傳輸時(shí),每個(gè)通道有四種工作模式。
1)單次傳送方式單次傳送方式也稱單字節(jié)傳送方式。每次DMA操作只傳送一個(gè)字節(jié),即DMAC發(fā)出一次占用總線請(qǐng)求,獲得總線控制權(quán)后,進(jìn)入DMA傳送方式,只傳送一個(gè)字節(jié)的數(shù)據(jù)。然后,就自動(dòng)把總線控制權(quán)交還給CPU,讓CPU至少占用一個(gè)總線周期。若還有通道請(qǐng)求信號(hào),DMAC再重新向CPU發(fā)出總線請(qǐng)求,獲得總線控制權(quán)后,再傳送下一個(gè)字節(jié)數(shù)據(jù)。2)成組傳送方式成組傳送方式也稱為連續(xù)傳送或塊傳送方式。在進(jìn)入DMA操作后,就連續(xù)傳送數(shù)據(jù),直到整塊數(shù)據(jù)全部傳送完畢。在字節(jié)計(jì)數(shù)器減到0或外界輸入終止信號(hào)EOP時(shí),才會(huì)將總線控制權(quán)交還給CPU而退出DMA操作方式。如果在數(shù)據(jù)的傳送過(guò)程中,通道請(qǐng)求信號(hào)DREQ變?yōu)闊o(wú)效,DMAC也不會(huì)釋放總線,只是暫時(shí)停止數(shù)據(jù)的傳送,等到DREQ信號(hào)再次變?yōu)橛行Ш?,又繼續(xù)進(jìn)行數(shù)據(jù)傳送,一直到整塊數(shù)據(jù)全部傳送結(jié)束,才會(huì)退出DMA方式,把總線控制權(quán)交還給CPU。3)請(qǐng)求傳送方式請(qǐng)求傳送方式也可以用于成塊數(shù)據(jù)傳輸。當(dāng)DMAC采樣到有效的通道請(qǐng)求信號(hào)DREQ時(shí),向CPU發(fā)去請(qǐng)求占用總線的信號(hào)HRQ(在Z80DMA中是BUSRQ),CPU讓出總線控制權(quán)后,就進(jìn)入DMA操作方式。當(dāng)DREQ變?yōu)闊o(wú)效后,DMAC立即停止DMA操作,釋放總線給CPU,當(dāng)DREQ再次變?yōu)橛行Ш?,它才再次發(fā)出HRQ請(qǐng)求信號(hào),CPU再次讓出總線控制權(quán),DMAC又重新控制總線,繼續(xù)進(jìn)行數(shù)據(jù)傳送,數(shù)據(jù)塊傳送結(jié)束就把總線歸還給CPU。這種方式適用于準(zhǔn)備好傳送數(shù)據(jù)時(shí),發(fā)出通道請(qǐng)求;若數(shù)據(jù)未準(zhǔn)備好,則通道請(qǐng)求無(wú)效,并將總線控制權(quán)暫時(shí)交還給CPU。
4)級(jí)聯(lián)方式級(jí)聯(lián)方式是用來(lái)擴(kuò)充DMA的通道數(shù)的。
2.操作類型根據(jù)傳輸過(guò)程中數(shù)據(jù)的流向,操作類型可以分為三種。
(1)DMA寫傳送(I/O設(shè)備→存儲(chǔ)器)。它是將I/O設(shè)備(如磁盤接口)傳送來(lái)的數(shù)據(jù)寫入存儲(chǔ)器。
(2)DMA讀傳送(存儲(chǔ)器→I/O設(shè)備)。它是將存儲(chǔ)器中的數(shù)據(jù),寫入I/O設(shè)備。(3)DMA校驗(yàn)。該方式實(shí)際并不進(jìn)行數(shù)據(jù)傳送,只是完成某種校驗(yàn)過(guò)程。當(dāng)一個(gè)8237通道處于DMA校驗(yàn)方式時(shí),它會(huì)像上述的傳送操作一樣,保持著它對(duì)系統(tǒng)總線的控制權(quán),并且每個(gè)DMA周期都將響應(yīng)外部設(shè)備的DMA請(qǐng)求,只是不產(chǎn)生存儲(chǔ)器或I/O設(shè)備的讀/寫控制信號(hào),這就阻止數(shù)據(jù)的傳送。但I(xiàn)/O設(shè)備可以使用這些響應(yīng)信號(hào),在I/O設(shè)備內(nèi)部對(duì)一個(gè)指定數(shù)據(jù)塊的每一個(gè)字節(jié)進(jìn)行存取,以便進(jìn)行校驗(yàn)。上述的三種操作中,被操作的數(shù)據(jù)都不進(jìn)入DMAC內(nèi)部,而且校驗(yàn)方式也僅是由DMAC控制系統(tǒng)總線,并響應(yīng)I/O設(shè)備的DMA請(qǐng)求,在每個(gè)DMA周期向I/O設(shè)備發(fā)出一個(gè)DMA響應(yīng)信號(hào)DACK,I/O設(shè)備利用此信號(hào)作為片選信號(hào),去進(jìn)行某種校驗(yàn)。
存儲(chǔ)器至存儲(chǔ)器傳送是8237進(jìn)行存儲(chǔ)器之間的數(shù)據(jù)塊傳送操作時(shí),由通道0提供源地址,而由通道1提供目的地址和進(jìn)行字節(jié)計(jì)數(shù)。這種傳送需要兩個(gè)總線周期:第一個(gè)總線周期先將源地址內(nèi)的數(shù)據(jù)讀入8237的暫存器,在第二個(gè)總線周期再將暫存器內(nèi)容放到數(shù)據(jù)總線上,然后在寫信號(hào)的控制下,將數(shù)據(jù)總線上的數(shù)據(jù)寫入目的地址的存儲(chǔ)器單元。8.3.58237的控制字和編程
1.內(nèi)部寄存器
8237內(nèi)部寄存器如表8-4所示,現(xiàn)對(duì)這些寄存器的功能說(shuō)明如下。
1)當(dāng)前地址寄存器每個(gè)通道都有一個(gè)16位長(zhǎng)的當(dāng)前地址寄存器,當(dāng)進(jìn)行DMA傳送時(shí),由它提供訪問(wèn)存儲(chǔ)器的地址。在每次數(shù)據(jù)傳送之后,地址值自動(dòng)增1或減1。CPU是以連續(xù)兩字節(jié)按先低字節(jié)后高字節(jié)順序,對(duì)其進(jìn)行寫入或讀出的。在自動(dòng)預(yù)置方式下,當(dāng)EOP有效后,將它重新預(yù)置為初始值。2)當(dāng)前字節(jié)計(jì)數(shù)器每個(gè)通道都有一個(gè)16位長(zhǎng)的當(dāng)前字節(jié)計(jì)數(shù)寄存器,它保存當(dāng)前DMA傳送的字節(jié)數(shù)。實(shí)際傳送的字節(jié)數(shù)比編程寫入的字節(jié)數(shù)大1,例如,編程的初始值為10,將導(dǎo)致傳送11個(gè)字節(jié),每次傳送以后,字節(jié)計(jì)數(shù)器減1。當(dāng)其內(nèi)容從0減1而到達(dá)FFFFH時(shí),將產(chǎn)生終止計(jì)數(shù)TC脈沖輸出。CPU訪問(wèn)它是以連續(xù)兩字節(jié)對(duì)其讀出或?qū)懭氲?。在自?dòng)預(yù)置方式下,當(dāng)EOP有效后,將它重新預(yù)置成初始值。如果處在非自動(dòng)預(yù)置方式,這個(gè)計(jì)數(shù)器在終止計(jì)數(shù)之后將為FFFFH。3)基地址寄存器和基字節(jié)計(jì)數(shù)器每個(gè)通道均有一個(gè)16位的基地址寄存器和一個(gè)16位的基字節(jié)計(jì)數(shù)寄存器,它們用來(lái)存放所對(duì)應(yīng)的地址寄存器和字節(jié)計(jì)數(shù)器的初始值。在編程時(shí),這兩個(gè)寄存器由CPU以連續(xù)兩字節(jié)方式與對(duì)應(yīng)的當(dāng)前寄存器同時(shí)寫入,但它們的內(nèi)容不能讀出。在自動(dòng)預(yù)置方式下,基地址寄存器的內(nèi)容被用來(lái)恢復(fù)當(dāng)前寄存器的初始值。
4)命令寄存器這是DMAC四個(gè)通道公用的一個(gè)8位寄存器,它控制8237的操作。編程時(shí),CPU對(duì)它寫入命令字,而由復(fù)位信號(hào)(RESET)和軟件清除命令清除它。其命令格式如圖8.14所示。圖8.14命令寄存器格式(1)D0位為允許或禁止存儲(chǔ)器至存儲(chǔ)器的傳送操作。這種傳送方式能以最小的程序工作量和最短的時(shí)間,成組地將數(shù)據(jù)從存儲(chǔ)器的一個(gè)區(qū)域傳送到另一個(gè)區(qū)域。當(dāng)D0=1時(shí),允許進(jìn)行存儲(chǔ)器至存儲(chǔ)器傳送,此時(shí)首先由通道發(fā)出DMA請(qǐng)求,規(guī)定通道用于從源地址讀入數(shù)據(jù),然后將讀入的數(shù)據(jù)字節(jié)存放在暫存器中,由通道1把暫存器的數(shù)據(jù)字節(jié)寫到目的地址存儲(chǔ)單元。一次傳送后,兩通道對(duì)應(yīng)存儲(chǔ)器的地址各自進(jìn)行加1或減l。當(dāng)通道1的字節(jié)計(jì)數(shù)器為FFFFH時(shí),產(chǎn)生終止計(jì)數(shù)TC脈沖,由EOP引腳輸出有效信號(hào)而結(jié)束DMA服務(wù)。每進(jìn)行一次存儲(chǔ)器至存儲(chǔ)器傳送,需要兩個(gè)總線周期,通道0的當(dāng)前地址寄存器用于存放源地址,通道1的當(dāng)前地址寄存器和當(dāng)前字節(jié)計(jì)數(shù)器提供目的地址和進(jìn)行計(jì)數(shù)。(2)D1位設(shè)定在存儲(chǔ)器至存儲(chǔ)器傳送過(guò)程中,源地址保持不變或按增1或減1改變。當(dāng)D1=0時(shí),傳送過(guò)程中源地址是變化的;當(dāng)D1=1時(shí),在整個(gè)傳送過(guò)程中,源地址保持不變,可以把同一源地址單元的同樣內(nèi)容的一個(gè)數(shù)據(jù)寫到一組目標(biāo)存儲(chǔ)單元中。當(dāng)D0=0時(shí),不允許存儲(chǔ)器至存儲(chǔ)器傳送,則D1位無(wú)意義。
(3)D2位為允許或禁止DMAC工作的控制位。
(4)D3、D5為與時(shí)序有關(guān)的控制位,詳見(jiàn)后面的時(shí)序說(shuō)明。(5)D4位用來(lái)設(shè)定通道優(yōu)先權(quán)。當(dāng)D4=0時(shí),為固定優(yōu)先權(quán),即通道0優(yōu)先權(quán)最高,優(yōu)先權(quán)隨著通道號(hào)增大而遞減,通道3的優(yōu)先權(quán)最低;當(dāng)D4=1時(shí),為循環(huán)優(yōu)先權(quán),即在每次DMA操作周期(不是DMA請(qǐng)求,而是DMA服務(wù))之后,各個(gè)通道的優(yōu)先權(quán)都發(fā)生變化。剛剛服務(wù)過(guò)的通道其優(yōu)先權(quán)變?yōu)樽畹?,它后面的通道的?yōu)先權(quán)變?yōu)樽罡?。循環(huán)優(yōu)先權(quán)結(jié)構(gòu)可以防止任何一個(gè)通道獨(dú)占DMA。所有DMA操作,最初都指定通道0具有最高優(yōu)先權(quán),DMA的優(yōu)先權(quán)排序只是用來(lái)決定同時(shí)請(qǐng)求DMA服務(wù)的通道的響應(yīng)次序。任何一個(gè)通道一旦進(jìn)入DMA服務(wù)后,其他通道都不能打斷它的服務(wù),這一點(diǎn)和中斷服務(wù)是不同的。
(6)D6、D7位用于設(shè)定DREQ和DACK的有效電平極性。5)模式寄存器每個(gè)通道都有一個(gè)8位的模式寄存器,它用于指定DMA的操作類型、傳送方式、是否自動(dòng)預(yù)置和傳送一字節(jié)數(shù)據(jù)后地址是按增1還是減1規(guī)律修改。由CPU寫入工作方式寄存器的控制字。下面介紹各位的作用。
(1)命令字的D0、D1兩位是通道的尋址位,即根據(jù)D0、D1兩位的編碼,確定此命令字寫入的通道。其格式如圖8.15所示。(2)D3、D2位為當(dāng)D7、D6位不同時(shí)為1時(shí),由這兩位的編碼設(shè)定通道的DMA的傳送類型:讀、寫和校驗(yàn)。注意:當(dāng)設(shè)定命令寄存器為存儲(chǔ)器至存儲(chǔ)器的傳送方式時(shí),應(yīng)將工作方式寄存器D3、D2位設(shè)定為00。圖8.15模式寄存器格式(3)D4位設(shè)定通道是否進(jìn)行自動(dòng)預(yù)置。當(dāng)選擇自動(dòng)預(yù)置時(shí),在接收到EOP信號(hào)后,該通道自動(dòng)將基地址寄存器內(nèi)容裝入當(dāng)前地址寄存器,將基字節(jié)計(jì)數(shù)器內(nèi)容裝入當(dāng)前字節(jié)計(jì)數(shù)器,不必通過(guò)CPU對(duì)8237進(jìn)行初始化,就能執(zhí)行另一次DMA服務(wù)。
(4)D5位設(shè)定每傳送一字節(jié)數(shù)據(jù)后,存儲(chǔ)器地址是進(jìn)行加1還是減1修改。
(5)D7、D6這兩位的不同編碼決定該通道DMA傳送的方式。8237進(jìn)行DMA傳送時(shí),有4種傳送方式:?jiǎn)未蝹魉?、?qǐng)求傳送、成組傳送和級(jí)聯(lián)方式。6)請(qǐng)求寄存器
DMA請(qǐng)求可以由I/O設(shè)備發(fā)出DREQ信號(hào),也可以由軟件發(fā)出,請(qǐng)求寄存器就是用于由軟件來(lái)啟動(dòng)DMA請(qǐng)求的設(shè)備。存儲(chǔ)器到存儲(chǔ)器傳送,必須利用軟件產(chǎn)生DMA請(qǐng)求,這種軟件請(qǐng)求DMA傳送操作必須是成組傳送方式。在傳送結(jié)束后,EOP信號(hào)變?yōu)橛行?,該通道?duì)應(yīng)的請(qǐng)求標(biāo)志位被清“0”。因此,每用軟件執(zhí)行一次DMA請(qǐng)求傳送,都要對(duì)請(qǐng)求寄存器編程一次,RESET信號(hào)清除所有通道的請(qǐng)求寄存器。軟件請(qǐng)求位是不可屏蔽的,可以用請(qǐng)求控制字對(duì)各通道的請(qǐng)求標(biāo)志進(jìn)行置位和復(fù)位。該寄存器只能寫,不能讀。對(duì)某個(gè)通道的請(qǐng)求標(biāo)志進(jìn)行置位和復(fù)位的命令字格式如圖8.16所示。8237接收到請(qǐng)求命令時(shí)。按D1、D0確定的通道,對(duì)該通道的請(qǐng)求標(biāo)志執(zhí)行D2規(guī)定的操作。D2=1,將請(qǐng)求標(biāo)志位置1,D2=0,將請(qǐng)求標(biāo)志位清0。例如,若用軟件請(qǐng)求通道,進(jìn)行DMA傳送,則向請(qǐng)求寄存器寫入04H控制字。圖8.16請(qǐng)求寄存器格式7)屏蔽寄存器
8237每個(gè)通道均有一屏蔽標(biāo)志位。當(dāng)某通道的屏蔽標(biāo)志位置1時(shí),禁止該通道的DREQ請(qǐng)求,并禁止該通道DMA操作。若某個(gè)通道規(guī)定不自動(dòng)預(yù)置,則當(dāng)該通道遇到有效的信號(hào)時(shí),將對(duì)應(yīng)的屏蔽標(biāo)志位置1。RESET信號(hào)使所有通道的屏蔽標(biāo)志位都置1,各通道的屏蔽標(biāo)志位可以用命令進(jìn)行置位或復(fù)位。其命令字有兩種格式:第一種格式用來(lái)單獨(dú)為每個(gè)通道的屏蔽位進(jìn)行置位或復(fù)位,其中D2位為0表示清除屏蔽標(biāo)志,D2位為1表示置位屏蔽標(biāo)志,由D1和D0的編碼指出通道號(hào)。第二種格式是可以同時(shí)設(shè)定四個(gè)通道的屏蔽標(biāo)志。其命令字格式如圖8.17所示。圖8.17屏蔽寄存器格式
注意:這兩種不同格式的命令字,寫入DMAC時(shí),有不同的口地址。寫單個(gè)通道屏蔽寄存器口地址為0AH,而同時(shí)寫四個(gè)通道的屏蔽位的口地址為0FH。例如,為了在每次對(duì)軟盤讀寫操作時(shí),進(jìn)行DMA初始化,都必須解除通道2的屏蔽,以便響應(yīng)硬件DREQ2的DMA請(qǐng)求??梢圆扇∠率鰞煞N方法之一來(lái)清除屏蔽寄存器:(1)使用單一通道屏蔽命令。例如:MOV AL,0000001B ;開(kāi)放通道2OUT DMA+0AH,AL ;寫單一屏蔽寄存器(2)使用4位屏蔽命令。例如:MOV AL,00001011B ;僅開(kāi)放通道2OUT DMA+0FH,AL ;寫入4位屏蔽命令8)狀態(tài)寄存器狀態(tài)寄存器是一個(gè)8位寄存器,用來(lái)存放8237的狀態(tài)信息,它可以由CPU讀出。狀態(tài)寄存器的格式如圖8.18所示。它的低4位是表示四個(gè)通道的終止計(jì)數(shù)狀態(tài),高4位是表示當(dāng)前是否存在DMA請(qǐng)求。只要通道到達(dá)計(jì)數(shù)終點(diǎn)TC,或外界送來(lái)有效的EOP信號(hào),D3~D0相應(yīng)的位就被置1,RESET信號(hào)和CPU每次讀狀態(tài)后,都清除D3~D0位。D7~D4位表示通道3~0請(qǐng)求DMA服務(wù),但未獲得響應(yīng)的狀態(tài)。圖8.18狀態(tài)寄存器格式9)暫存寄存器暫存寄存器為8位的寄存器,在存儲(chǔ)器至存儲(chǔ)器傳送期間,用來(lái)暫存從源地址單元讀出的數(shù)據(jù)。當(dāng)數(shù)據(jù)傳送完成時(shí),所傳送的最后一個(gè)字節(jié)數(shù)據(jù)可以由CPU讀出。用RESET信號(hào)可以清除此暫存器中的數(shù)據(jù)。10)命令寄存器
8237設(shè)置了3條軟件命令,它們是:主清除、清除字節(jié)指示器和清除屏蔽寄存器。這些軟件命令只要對(duì)某個(gè)適當(dāng)?shù)刂愤M(jìn)行寫入操作就會(huì)自動(dòng)執(zhí)行清除命令。
(1)主清除命令。該命令在8237內(nèi)部所起作用和硬件復(fù)位信號(hào)RESET相同。它執(zhí)行后能清除命令寄存器、狀態(tài)寄存器、各通道的請(qǐng)求標(biāo)志位、暫存寄存器和字節(jié)指示器,并把各通道的屏蔽標(biāo)志位置1,使8237進(jìn)入空閑周期。(2)清除字節(jié)指示器命令。字節(jié)指示器又稱為先/后觸發(fā)器或字節(jié)地址指示觸發(fā)器。因?yàn)?237各通道的地址和字節(jié)計(jì)數(shù)都是16位的,而8237每次只能接收一個(gè)字節(jié)數(shù)據(jù),所以CPU訪問(wèn)這些寄存器時(shí),要用連續(xù)兩個(gè)字節(jié)進(jìn)行。當(dāng)字節(jié)指示器為0時(shí),CPU訪問(wèn)這些16位寄存器的低字節(jié);當(dāng)字節(jié)指示器為1時(shí),CPU訪問(wèn)這些16位寄存器的高字節(jié)。為了按正確順序訪問(wèn)16位寄存器的高字節(jié)和低字節(jié),CPU首先使用清除字節(jié)指示器命令來(lái)清除字節(jié)指示器,使CPU第一次訪問(wèn)16位寄存器的低字節(jié),第一次訪問(wèn)之后,字節(jié)指示器自動(dòng)置1,而使CPU第二次訪問(wèn)16位寄存器的高字節(jié),然后字節(jié)指示器自動(dòng)恢復(fù)為0狀態(tài)。(3)清除屏蔽寄存器命令。這條命令清除四個(gè)通道的全部屏蔽位,使各通道均能接受DMA請(qǐng)求。
2.內(nèi)部寄存器的尋址對(duì)8237內(nèi)部寄存器的尋址和執(zhí)行與控制器有關(guān)的軟件命令,都由芯片選擇信號(hào)CS、I/O讀信號(hào)IOR、I/O寫信號(hào)LOW和A3~A0地址線的不同狀態(tài)編碼來(lái)完成。CS=0表示訪問(wèn)該8237DMAC芯片;A3=0表示訪問(wèn)某個(gè)地址寄存器或字節(jié)計(jì)數(shù)器;A3=1表示訪問(wèn)控制寄存器和狀態(tài)寄存器,或正在發(fā)出一條軟件命令。在CS和A3都為0時(shí),CPU訪問(wèn)某個(gè)地址寄存器或字節(jié)計(jì)數(shù)器,而用IOR為低電平或IOW為低電平表示是讀操作還是寫操作。對(duì)當(dāng)前地址寄存器進(jìn)行寫入的同時(shí),也寫入基本地址寄存器;對(duì)當(dāng)前字節(jié)計(jì)數(shù)器進(jìn)行寫入的同時(shí),也寫入基本字節(jié)計(jì)數(shù)器。在CS為0、A3為1時(shí),CPU對(duì)狀態(tài)和控制寄存器的尋址及給出的軟件命令歸納如表8-5所示。每片8237占有16個(gè)口地址,暫存寄存器只能在存儲(chǔ)器至存儲(chǔ)器傳送完成后進(jìn)行讀出。并由A2~A1編碼狀態(tài)給出通道號(hào),而A0=0表示訪問(wèn)當(dāng)前地址寄存器,A0=1表示訪問(wèn)當(dāng)前字節(jié)計(jì)數(shù)器。表8-58237內(nèi)部寄存器口地址分配主片的I/O口地址(H)從片的I/O口地址(H)寄存器IN(讀,)OUT(寫,)0000C0CH0當(dāng)前地址寄存器CH0基址與當(dāng)前地址寄存器0010C2CH0當(dāng)前字節(jié)計(jì)數(shù)器CH0基字節(jié)計(jì)數(shù)器與當(dāng)前字節(jié)計(jì)數(shù)器0020C4CH1當(dāng)前地址寄存器CH1基址與當(dāng)前地址寄存器0030C6CH1當(dāng)前字節(jié)計(jì)數(shù)器CH1基字節(jié)計(jì)數(shù)器與當(dāng)前字節(jié)計(jì)數(shù)器0040C8CH2當(dāng)前地址寄存器CH2基址與當(dāng)前地址寄存器0050CACH2當(dāng)前字節(jié)計(jì)數(shù)器CH2基字節(jié)計(jì)數(shù)器與當(dāng)前字節(jié)計(jì)數(shù)器0060CCCH3當(dāng)前地址寄存器CH3基址與當(dāng)前地址寄存器0070CECH3當(dāng)前字節(jié)計(jì)數(shù)器CH3基字節(jié)計(jì)數(shù)器與當(dāng)前字節(jié)計(jì)數(shù)器續(xù)表8-58237內(nèi)部寄存器口地址分配0080D0狀態(tài)寄存器命令寄存器0090D2
請(qǐng)求寄存器00A0D4
寫屏蔽寄存器單個(gè)屏蔽位00B0D6
模式寄存器00C0D8
清除字節(jié)指令器(軟命令)00D0DA暫存寄存器主清除指令(軟命令)00E0DC
清除屏蔽寄存器(軟命令)00F0DE
寫全部屏蔽位寄存器3.8237的編程步驟(1)輸出主清除命令;(2)寫入基址與當(dāng)前地址寄存器;(3)寫入基址與當(dāng)前字節(jié)數(shù)地址寄存器;(4)寫入模式寄存器;(5)寫入屏蔽寄存器;(6)寫入命令寄存器;(7)寫入請(qǐng)求寄存器。
若有軟件請(qǐng)求,就寫入到指定通道,可以開(kāi)始DMA傳送過(guò)程;若無(wú)軟件請(qǐng)求,則在完成(1)~(7)的編程后,由通道的DREQ啟動(dòng)DMA傳送過(guò)程。例如,若要利用通道0,由外設(shè)(磁盤)輸入32KB的一個(gè)數(shù)據(jù)塊,傳送至內(nèi)存8000H開(kāi)始的區(qū)域(增量傳送),采用塊連續(xù)傳送的方式,傳送完不自動(dòng)初始化,外設(shè)的DREQ和DACK都為高電平有效。編程首先要確定端口地址。地址的低4位用以區(qū)分8237的內(nèi)部寄存器,高4位地址A7~A4經(jīng)譯碼后,連至選片端CS,假定選中時(shí)高4位為5。(1)模式控制字D7 D6 D5 D4 D3 D2 D1 D01 0 0 0 0 1 0 0(2)屏蔽字 D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 0 0(3)命令字 D7 D6 D5 D4 D3 D2 D1 D01 0 1 0 0 0 0 0初始化程序如下:OUT 5DH,AL ;輸出主清除命令MOV AL,00HOUT 50H,AL ;輸出基址和當(dāng)前地址的低8位MOV AL,80HOUT 50H,AL ;輸出基址和當(dāng)前地址的高8位MOV AL,00HOUT 51H,ALMOV AL,80HOUT 51H,AL ;給基址和當(dāng)前字節(jié)數(shù)賦值MOV AL,84HOUT 5BH,AL ;輸出模式字MOV AL,00HOUT 5AH,AL ;輸出屏蔽字MOV AL,0A0HOUT 58H,AL ;輸出命令字8.3.6Intel8237的應(yīng)用舉例
1.8088訪問(wèn)8237的尋址當(dāng)8237處于SI空閑狀態(tài)時(shí),CPU可以對(duì)它進(jìn)行訪問(wèn),但是否訪問(wèn)此8237,這要取決于它的片選引腳CS是否出現(xiàn)低電平。主系統(tǒng)板內(nèi)部的8237片選引腳CS,接到系統(tǒng)板中I/O接口電路的選中信號(hào)產(chǎn)生電路的譯碼輸出(Y0)DMACS上。由I/O接口片選信號(hào)產(chǎn)生電路,及I/O接口使用的I/O地址表可知,當(dāng)出現(xiàn)I/O地址為00H~1FH時(shí),DMACS為低電平,此時(shí)8237被選中。若CPU執(zhí)行的是OUT指令,則IOW有效,CPU送上數(shù)據(jù)總線的數(shù)據(jù),寫入8237內(nèi)部寄存器;
若8088執(zhí)行的是IN指令,則IOR有效,就會(huì)將8237內(nèi)部寄存器的數(shù)據(jù),送上數(shù)據(jù)總線并讀入CPU。8237內(nèi)部又有多個(gè)寄存器,CPU與8237傳送數(shù)據(jù)時(shí),具體訪問(wèn)哪個(gè)內(nèi)部寄存器,要取決于它的A3~A0地址信息的編碼狀態(tài)。8237的A3~A0接系統(tǒng)地址總線A3~A0,在系統(tǒng)的BIOS中,安排8237內(nèi)部寄存器使用的I/O端口地址為00H~0FH。DMAC內(nèi)部寄存器與I/O端口地址的對(duì)應(yīng)關(guān)系如表8-5所示。2.8237的初始化編程在進(jìn)行DMA傳輸之前,CPU要對(duì)8237進(jìn)行編程。DMA傳輸要涉及到RAM地址、數(shù)據(jù)塊長(zhǎng)、操作方式和傳輸類型。因此,在每次DMA傳輸之前,除自動(dòng)預(yù)置外,都必須對(duì)8237進(jìn)行一次初始化編程。若數(shù)據(jù)塊超過(guò)64KB界限時(shí),還必須將頁(yè)面地址寫入頁(yè)面寄存器。IBM-PC/XT機(jī)中,BIOS對(duì)8237的初始化程序如下。
1)對(duì)8237A-5芯片的檢測(cè)程序在系統(tǒng)上電后,要對(duì)DMA系統(tǒng)進(jìn)行檢測(cè),其主要內(nèi)容是對(duì)8237A-5芯片所有通道的16位寄存器進(jìn)行讀/寫測(cè)試,即對(duì)四個(gè)通道的八個(gè)16位寄存器先寫入全“1”后,讀出比較,再寫入全“0”后,讀出比較。若寫入內(nèi)容與讀出結(jié)果相等,則判斷芯片可用;否則,視為致命錯(cuò)誤。下面是PC/XT機(jī)的DMA系統(tǒng)檢測(cè)的例程。;檢測(cè)前禁止DMA控制器工作MOV AL,04H ;命令字,禁止8237工作OUT DMA+08,AL ;命令字送命令寄存器OUT DMA+0DH,AL ;主清除DMA命令;對(duì)CH0~CH3作全“1”和全“0”檢測(cè),設(shè)置當(dāng)前地址、寄存器和字節(jié)計(jì)數(shù)器MOV AL,0FFH ;對(duì)所有寄存器寫入FFHC16: MOV BL,AL ;為比較將AL存入BLMOV BH,ALMOV CH,8 ;置循環(huán)次數(shù)為8MOV DX,DMA ;DMA第一個(gè)寄存器地址裝入DXC17: OUTDX,AL ;數(shù)據(jù)寫入寄存器低8位OUT DX,AL;數(shù)據(jù)寫入寄存器高8位MOV AX,0101H;讀當(dāng)前寄存器前,寫入另一個(gè)值,破壞原內(nèi)容IN AL,DX;讀通道當(dāng)前地址寄存器低8位或當(dāng)前字節(jié)計(jì)數(shù)器低8位MOV AH,ALIN AL,DX;讀通道當(dāng)前地址寄存器高8位或當(dāng)前字計(jì)數(shù)器高8位CMP BX,AX;比較讀出數(shù)據(jù)和寫入數(shù)據(jù)JE C18 ;相同轉(zhuǎn)去修改
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育大數(shù)據(jù)在學(xué)生評(píng)價(jià)中的運(yùn)用
- 教育心理學(xué)在遠(yuǎn)程教育中的成功案例分析
- 教育心理學(xué)在微課制作中的挑戰(zhàn)與機(jī)遇
- 教育機(jī)構(gòu)品牌建設(shè)中的危機(jī)公關(guān)
- 教育技術(shù)在防止網(wǎng)絡(luò)成癮中的作用
- 智慧城市安防合作論壇共筑安全防線
- 家具建材店面運(yùn)營(yíng)方案
- 幼兒健康教育活動(dòng)體系構(gòu)建
- 青貯發(fā)酵池修建方案
- 電廠照明采購(gòu)方案
- 道路改擴(kuò)建工程施工方案與技術(shù)措施
- 十八項(xiàng)核心制度解讀醫(yī)療質(zhì)量安全核心制度要點(diǎn)
- 新媒體創(chuàng)作匯報(bào)
- 《中國(guó)北斗衛(wèi)星導(dǎo)航系統(tǒng)》白皮書
- 臨床用血管理制度課件
- 2025-2030全球智能工廠MOM解決方案行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 《古巴導(dǎo)彈危機(jī)》課件
- 低鉀血癥的治療護(hù)理
- 偏癱足內(nèi)翻的治療
- (商務(wù)星球2024版)地理七年級(jí)上學(xué)期教學(xué)計(jì)劃(新教材)
- 【MOOC】電路原理-東北大學(xué) 中國(guó)大學(xué)慕課MOOC答案
評(píng)論
0/150
提交評(píng)論