第8章 DMA接口技術(shù)8237_第1頁
第8章 DMA接口技術(shù)8237_第2頁
第8章 DMA接口技術(shù)8237_第3頁
第8章 DMA接口技術(shù)8237_第4頁
第8章 DMA接口技術(shù)8237_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

8.1DMA技術(shù)概述8.2DMA控制器82378.38237編程及應(yīng)用第8章DMA接口技術(shù)本章要點(diǎn):8237的編程結(jié)構(gòu)和工作原理8237的工作方式8237的初始化命令字、操作命令字及其使用8237的初始化流程和初始化編程8.1DMA技術(shù)概述

DMA(DirectMemoryAccess)方式即為直接存儲(chǔ)器存取方式,DMA方式是用硬件實(shí)現(xiàn)存儲(chǔ)器與存儲(chǔ)器之間或存儲(chǔ)器與I/O設(shè)備之間直接進(jìn)行高速數(shù)據(jù)傳送,不需要CPU的干預(yù)。這種方式通常用來傳送數(shù)據(jù)塊。DMA傳送包括:數(shù)據(jù)存儲(chǔ)器RAM→I/O端口的DMA讀傳送;I/O端口→數(shù)據(jù)存儲(chǔ)器RAM的DMA寫傳送;數(shù)據(jù)存儲(chǔ)器RAM→數(shù)據(jù)存儲(chǔ)器RAM的存儲(chǔ)單元傳送。

DMA概述地址總線HRQDREQDMACHLDADACK總線請(qǐng)求總線響應(yīng)

HOLDHLDACPUDMA請(qǐng)求DMA響應(yīng)I/O設(shè)備控制總線數(shù)據(jù)總線DMA系統(tǒng)組成及工作過程?DMA系統(tǒng)組成

I/O向DMACDMAC向CPU響應(yīng)DMAC向發(fā)請(qǐng)求CPU發(fā)請(qǐng)求DMAC請(qǐng)求I/O發(fā)響應(yīng)DMA傳送結(jié)束DMA傳送進(jìn)行DMAC發(fā)出控制信號(hào)DMAC發(fā)出內(nèi)存地址?DMA工作過程DMA控制器的一般結(jié)構(gòu)和概要1、8237的基本功能(1)一片8237有4個(gè)獨(dú)立的DMA通道。(2)每一個(gè)通道的DMA請(qǐng)求都可以被允許或禁止。(3)每一個(gè)通道的DMA請(qǐng)求有不同的優(yōu)先級(jí),既可以是固定優(yōu)先級(jí),也可以是循環(huán)優(yōu)先級(jí)。(4)每一個(gè)通道一次傳送的最大字節(jié)數(shù)為64KB。(5)8237提供4種傳送方式:單字節(jié)傳送方式、數(shù)據(jù)塊傳送方式、請(qǐng)求傳送方式和級(jí)連傳送方式。8.2DMA控制器82378237A可編程DMA控制器框圖狀態(tài)寄存器(8)控制寄存器(8)暫存寄存器(8)先/后觸發(fā)器主屏蔽方式寄存器(6)基地址寄存器(16)基字節(jié)計(jì)數(shù)器(16)暫存地址寄存器(16)暫存字節(jié)寄存器(16)命令控制邏輯當(dāng)前地址寄存器(16)當(dāng)前字節(jié)計(jì)數(shù)器(16)請(qǐng)求位屏蔽位通道0時(shí)序與控制邏輯

EOPCSRESETREADYCLKAENADSTBMEMRMEMWIORIOW地址數(shù)據(jù)緩沖地址緩沖地址緩沖通道1通道2通道3優(yōu)先級(jí)編碼邏輯

D7-D0(A15-A8)A7-A4A3-A0DREQ0-DREQ3DACK0~DACK3HRQHLDA(1)控制寄存器:用來設(shè)置8237A的工作方式。(2)8位狀態(tài)寄存器:讀命令時(shí)低4位表示每個(gè)通道的字節(jié)數(shù)是否為0,高4位表示每個(gè)通道是否還有未處理的DMA請(qǐng)求。(3)4位請(qǐng)求寄存器:每一位對(duì)應(yīng)一個(gè)通道的請(qǐng)求位,8237A可通過硬件引腳DREQ來進(jìn)行DMA請(qǐng)求外,也可通過軟件對(duì)請(qǐng)求寄存器的編程設(shè)計(jì)產(chǎn)生DMA請(qǐng)求。(4)4位屏蔽寄存器:對(duì)應(yīng)通道DMA屏蔽請(qǐng)求標(biāo)志位,編程決定。(5)4位綜合屏蔽寄存器:對(duì)應(yīng)4個(gè)通道,一起設(shè)置屏蔽或一起復(fù)位。8237A的內(nèi)部寄存器(6)暫時(shí)字節(jié)計(jì)數(shù)器:暫時(shí)存放當(dāng)前字節(jié)計(jì)數(shù)器的內(nèi)容,僅供芯片內(nèi)部使用。(7)暫時(shí)地址寄存器:暫時(shí)存放當(dāng)前地址計(jì)數(shù)器的內(nèi)容,僅供芯片內(nèi)部使用。(8)8位暫存寄存器:暫時(shí)存放從源單元讀出的數(shù)據(jù)。(9)工作方式寄存器:保存通道方式控制字,規(guī)定通道操作方式。(10)基地址寄存器:保存通道當(dāng)前地址寄存器的初值,其值與當(dāng)前地址寄存器同時(shí)寫入,不被CPU讀出,設(shè)置為自動(dòng)初始化,當(dāng)有效時(shí),用來使當(dāng)前地址寄存器恢復(fù)初值。8237A的內(nèi)部寄存器(11)當(dāng)前地址寄存器:保存DMA傳送過程中的地址,每次傳送其地址要自動(dòng)+1或-1,設(shè)置為自動(dòng)初始化,當(dāng)有效時(shí)可恢復(fù)初值(12)基字節(jié)計(jì)數(shù)器:保存通道當(dāng)前字節(jié)數(shù)寄存器的初值,其值與當(dāng)前地址寄存器同時(shí)寫入,不被CPU讀出,自動(dòng)初始化時(shí),用來使當(dāng)前字節(jié)計(jì)數(shù)器恢復(fù)初值。(13)當(dāng)前字節(jié)計(jì)數(shù)器:保存當(dāng)前字節(jié)數(shù),每次傳送后,其值自動(dòng)-1,設(shè)置為自動(dòng)初始化,當(dāng)有效時(shí),可恢復(fù)初值。表8237內(nèi)部寄存器8237外部引腳8237引腳信號(hào)的定義CLK,時(shí)鐘輸入信號(hào),片選信號(hào)(ChipSelect),低電平有效有效時(shí)允許CPU對(duì)

8237進(jìn)行編程

8237引腳信號(hào)的定義

RESET,復(fù)位(Reset)信號(hào)

READY,準(zhǔn)備就緒輸入端,高電平表示已準(zhǔn)備好。若把邏輯0加到準(zhǔn)備就緒輸入上,則使8237進(jìn)入等待狀態(tài),以等待較慢的存儲(chǔ)器或I/O設(shè)備準(zhǔn)備就緒后,8237才繼續(xù)操作DREQ3~DREQ0,DMA請(qǐng)求(DMARequest)輸入信號(hào)。用于為4個(gè)DMA通道中的每一個(gè)請(qǐng)求DMA傳輸。由于這些輸入的極性是可編程的,所以它們可以是高有效輸入也可以是低有效輸入。當(dāng)DMAC向I/O設(shè)備送來DMA響應(yīng)信號(hào)DACK以后,I/O接口才撤除DREQ有效電平DACK,DMA控制器送出I/O接口的回答信號(hào)。DMA控制器獲得CPU送來的總線允許信號(hào)HLDA以后,便產(chǎn)生DACK信號(hào)送到相應(yīng)的外設(shè)的接口

8237引腳信號(hào)的定義

8237引腳信號(hào)的定義HRQ,總線請(qǐng)求信號(hào)。當(dāng)外設(shè)的I/O接口要求DMA傳輸時(shí),往DMA控制器發(fā)送DREQ信號(hào),如果相應(yīng)通道的屏蔽位為0,則DMA控制器的HRQ端輸出為有效電平,從而向CPU發(fā)總線請(qǐng)求HLDA,總線保持回答(HoldAcknowledge)信號(hào)。DMAC向CPU發(fā)總線請(qǐng)求信號(hào)HRQ以后,至少再過一個(gè)時(shí)鐘周期,CPU才能發(fā)出總線保持回答信號(hào)HLDA,通知8237可以獲得對(duì)地址、數(shù)據(jù)及控制總線的控制權(quán)DB7~DB0,8位數(shù)據(jù)線。當(dāng)DMAC為主模塊時(shí),DB7~DB0輸出當(dāng)前地址寄存器中的高8位地址,并通過ADSTB打入鎖存器,和地址線A7~A0輸出的低8位地址一起構(gòu)成16位的存儲(chǔ)器地址;當(dāng)DMAC為從模塊時(shí),CPU通過DB7~DB0對(duì)DMAC進(jìn)行讀寫操作。存儲(chǔ)器讀信號(hào)。此信號(hào)有效時(shí),所選中的存儲(chǔ)器單元的內(nèi)容被讀到數(shù)據(jù)總線上

8237引腳信號(hào)的定義存儲(chǔ)器寫信號(hào)。此信號(hào)有效時(shí),數(shù)據(jù)總線上的內(nèi)容被寫入選中的存儲(chǔ)單元輸入輸出設(shè)備寫信號(hào)。在DMA控制器作為主模塊時(shí),的方向是由DMA控制器送出的,此信號(hào)有效時(shí),存儲(chǔ)器中讀出的數(shù)據(jù)被寫入I/O接口中;在DMA控制器作為從模塊時(shí),方向是送入DMA控制器,此信號(hào)有效時(shí),CPU往DMA控制器的內(nèi)部寄存器中寫入信息,即進(jìn)行初始化編程。

8237引腳信號(hào)的定義

8237引腳信號(hào)的定義

,輸入輸出設(shè)備讀信號(hào),低電平有效。在DMA控制器作為主模塊時(shí),作為輸出控制信號(hào)由DMA控制器送出,此信號(hào)有效時(shí),I/O接口部件中的數(shù)據(jù)被讀出送往數(shù)據(jù)總線;在DMA控制器作為從模塊時(shí),作為輸入控制信號(hào)送入DMA控制器,此信號(hào)有效時(shí),CPU讀取DMA控制器中內(nèi)部寄存器的值

,DMA傳輸過程結(jié)束信號(hào)。是雙向的:當(dāng)由外部往DMA控制器送一個(gè)信號(hào)時(shí),DMA傳輸過程被外部強(qiáng)迫性地結(jié)束;另一方面,當(dāng)DMA控制器的任一通道中計(jì)數(shù)結(jié)束時(shí),會(huì)從 引腳輸出一個(gè)有效電平,作為DMA傳輸結(jié)束信號(hào)。不論是從外部終止DMA過程,還是由內(nèi)部計(jì)數(shù)結(jié)束引起終止DMA過程,都會(huì)使DAM控制器的內(nèi)部寄存器復(fù)位

8237引腳信號(hào)的定義A3~A0,最低的4位地址線,它們是雙向信號(hào)端。在DMA控制器作為從模塊時(shí),A3~A0作為輸入端,對(duì)DMA控制器的內(nèi)部寄存器進(jìn)行尋址,這樣,CPU

可以對(duì)DMA控制器進(jìn)行編程;在DMA控制器作為主模塊時(shí),這4個(gè)信號(hào)端工作于輸出狀態(tài),以提供低4位地址。A7~A4,這4位地址線始終工作于輸出狀態(tài)或浮空狀態(tài)。它們?cè)贒MA傳輸時(shí)提供高4位地址。

8237引腳信號(hào)的定義表

軟件操作及對(duì)應(yīng)的寄存器地址

8237引腳信號(hào)的定義ADSTB,地址選通輸出信號(hào)。此信號(hào)有效時(shí),DMA控制器的當(dāng)前地址寄存器中的高8位地址通過8位數(shù)據(jù)線DB7~DB0送到外部鎖存器AEN,地址輸出允許信號(hào)。AEN使地址鎖存器中的高8位地址送到地址總線上,與芯片直接輸出的低8位地址共同構(gòu)成內(nèi)存單元地址的偏移量。AEN信號(hào)也使與CPU相連的地址鎖存器無效,這樣,就保證了地址總線上的信號(hào)是來自DMA控制器,而不是來自CPU的

8237的工作方式8237的各個(gè)通道在進(jìn)行DMA傳送時(shí),有單字節(jié)傳送方式、數(shù)據(jù)塊傳送、請(qǐng)求傳送、級(jí)聯(lián)方式四種工作方式:(1)單字節(jié)傳送方式每次DMA請(qǐng)求只傳送一個(gè)字節(jié)的數(shù)據(jù),傳送后當(dāng)前字節(jié)計(jì)數(shù)器自動(dòng)減1,當(dāng)前地址寄存器加1或減1修改,撤消HRQ信號(hào),釋放系統(tǒng)總線控制權(quán)。(2)數(shù)據(jù)塊傳送每次DMA請(qǐng)求獲準(zhǔn)后連續(xù)地傳送一個(gè)數(shù)據(jù)塊,直到當(dāng)前字節(jié)計(jì)數(shù)器減為0或外部產(chǎn)生EOP信號(hào),使DMA傳送終止。(3)請(qǐng)求傳送以下三種情況均終止DMA傳送:(1)當(dāng)前字節(jié)計(jì)數(shù)器減至0。(2)外部有效的EOP信號(hào)。(3)外設(shè)的DREQ請(qǐng)求信號(hào)無效。(4)級(jí)聯(lián)方式利用這種方式可以把多個(gè)8237連接在一起,以便擴(kuò)充系統(tǒng)的DMA通道數(shù)。下一級(jí)的HRQ接到上一級(jí)的某一通道的DREQ上,而上一級(jí)的響應(yīng)信號(hào)DACK可接下一級(jí)的HLDA上,其連接如圖所示。在級(jí)聯(lián)方式下,當(dāng)?shù)诙?jí)8237的請(qǐng)求得到響應(yīng)時(shí),第一級(jí)8237僅應(yīng)輸出HRQ信號(hào)而不能輸出地址及控制信號(hào),因?yàn)?,第二?jí)的8237才是真正的主控制器,而第一級(jí)的8237僅應(yīng)起到傳遞DREQ請(qǐng)求信號(hào)及DACK應(yīng)答信號(hào)的作用。8237的DMA傳輸類型(1)I/O接口到存儲(chǔ)器的傳送(2)存儲(chǔ)器到I/O接口(3)存儲(chǔ)器到存儲(chǔ)器8237各個(gè)通道的優(yōu)先級(jí)及傳輸速率優(yōu)先級(jí)(1)固定優(yōu)先級(jí)規(guī)定各通道的優(yōu)先級(jí)是固定的,即通道0的優(yōu)先級(jí)最高,依次降低,通道3的優(yōu)先級(jí)最低。(2)循環(huán)優(yōu)先級(jí)規(guī)定剛被服務(wù)通道的優(yōu)先級(jí)最低,依次循環(huán)。傳送速率在一般情況下,8237進(jìn)行一次DMA傳送需要4個(gè)時(shí)鐘周期(不包括插入的等待周期SW)。例如,PC機(jī)的時(shí)鐘周期約210ns,則一次DMA傳送需要210ns*4+2l0ns=1050ns。多加一個(gè)210ns是考慮到人為插入一個(gè)SW的緣故。另外,8237為了提高傳送速率,可以在壓縮定時(shí)狀態(tài)下工作。在壓縮定時(shí)狀態(tài)下,每個(gè)DMA總線周期僅用2個(gè)時(shí)鐘周期就可以實(shí)現(xiàn)。模式寄存器的格式8.38237編程及應(yīng)用D4:若允許自動(dòng)初始化,則在DMA操作結(jié)束時(shí),分別將基地址和基本字計(jì)數(shù)寄存器的內(nèi)容重新裝入當(dāng)前地址和當(dāng)前計(jì)數(shù)寄存器內(nèi)?!鬒/O地址A3-A0=1011,初始化由CPU寫入,分別設(shè)置通道0—通道3的工作方式控制寄存器的格式和有關(guān)問題◆I/O地址A3-A0=1000,初始化由CPU寫入,

RESET或清除命令清除

在存儲(chǔ)器之間傳送數(shù)據(jù)時(shí),由通道0和通道1進(jìn)行操作。由通道0從源地址單元中讀出數(shù)據(jù)存放到暫存寄存器中,再由通道1從暫存寄存器中讀出數(shù)據(jù)寫入目的單元中,當(dāng)通道1的當(dāng)前字節(jié)計(jì)數(shù)器減為0時(shí),產(chǎn)生EOP信號(hào),結(jié)束DMA傳送。D1:當(dāng)D0=1時(shí)是可以使源地址內(nèi)的同一個(gè)數(shù)據(jù)傳送到一組目的存儲(chǔ)單元中去。當(dāng)D0=0時(shí),才有意義。內(nèi)存到內(nèi)存的傳輸

8237A的典型時(shí)序8237A的工作時(shí)序

DMA的每一個(gè)時(shí)鐘周期稱為一個(gè)S狀態(tài)。

1、SI狀態(tài):空閑狀態(tài)。

2、S0狀態(tài):等待HLDA。

3、S1狀態(tài):先產(chǎn)生AEN信號(hào),使CPU連接的地址總線無效,產(chǎn)生ADSTB信號(hào),從當(dāng)前地址鎖存器中讀出的A15~A8經(jīng)DB7~DB0鎖存在外部鎖存器中。

4、S2狀態(tài)產(chǎn)生DACK給I/O接口,代替CPU的片選信號(hào),使該I/O接口被選中,A15~A0確定要訪問的存儲(chǔ)器單元。

5、S3狀態(tài)產(chǎn)生MEMR或IOR讀信號(hào),使DB7~DB0上的數(shù)據(jù)至S4狀態(tài),穩(wěn)定寫入目的地。6、S4狀態(tài)產(chǎn)生MEMW或IOW寫信號(hào),將數(shù)據(jù)寫入目的單元。塊傳送,則回到S2(或S1),繼續(xù)。若單字節(jié)或傳送完畢,則發(fā)EOP,撤消HRQ,結(jié)束DMA過程。◆壓縮讀方式:塊傳送時(shí),只有S2和S4兩個(gè)時(shí)鐘,讀信號(hào)和寫信號(hào)均在S4狀態(tài)時(shí)產(chǎn)生,適用于高速電路。◆擴(kuò)展寫(超前寫):S2、S3、S4三個(gè)狀態(tài),但寫信號(hào)在S3時(shí)即產(chǎn)生,目的是用其下降沿觸發(fā)READY信號(hào),使低速I/O在普通時(shí)序仍不能完成讀寫時(shí),插入等待狀態(tài)SW。以上兩種方式均可在方式控制字中進(jìn)行設(shè)定。8237A的工作時(shí)序狀態(tài)寄存器的格式

D3D2D1D0:對(duì)應(yīng)表示通道3、2、1、0的終止計(jì)數(shù)狀態(tài)。當(dāng)某通道終止計(jì)數(shù)(計(jì)數(shù)達(dá)“0”)或外部EOP有效,則相應(yīng)位置1;復(fù)位或CPU讀后被清除。D7D6D5D4:對(duì)應(yīng)表示通道3、2、1、0的請(qǐng)求信號(hào)DREQ輸入是否有效。1:對(duì)應(yīng)通道有請(qǐng)求◆I/O地址A3-A0=1000,CPU讀出即為各端口的狀態(tài)DMA請(qǐng)求寄存器◆I/O地址A3-A0=1001,初始化由CPU寫入,分別設(shè)置通道0—通道3的DMA請(qǐng)求觸發(fā)器,可以通過DREQ有效或軟件(設(shè)置請(qǐng)求觸發(fā)器)使該觸發(fā)器置1,表示有DMA請(qǐng)求發(fā)生。在執(zhí)行存儲(chǔ)器到存儲(chǔ)器DMA傳送時(shí),由通道0讀出數(shù)據(jù),由通道1將數(shù)據(jù)寫入目的單元,此時(shí)啟動(dòng)DMA過程不是由外部的DREQ請(qǐng)求實(shí)現(xiàn)的,而是由內(nèi)部軟件DMA請(qǐng)求實(shí)現(xiàn)的。即對(duì)通道0的請(qǐng)求寄存器寫入DMA請(qǐng)求04H,通過產(chǎn)生軟件DREQ請(qǐng)求使8237A產(chǎn)生總線請(qǐng)求信號(hào)HRQ,啟動(dòng)DMA傳送。屏蔽寄存器每一個(gè)通道有一個(gè)屏蔽觸發(fā)器,當(dāng)該觸發(fā)器為1時(shí),屏蔽該通道的DMA請(qǐng)求,屏蔽位可用下列三種命令字來置位或清除.◆單通道屏蔽字:I/O地址A3-A0=10108237A綜合屏蔽命令的格式I/O地址A3-A0=1111D3D2D1D0分別對(duì)應(yīng)通道3、2、1、0的屏蔽位標(biāo)志,若為1,禁止DMA請(qǐng)求;若為0,允許DMA請(qǐng)求。

◆清除屏蔽寄存器:屏蔽寄存器的I/O地址中A3-A0=1110,對(duì)其進(jìn)行一次寫0操作即可開放所有通道的屏蔽位清除命令主清除命令:向A3-A0=1101的I/O地址執(zhí)行一次寫操作即可實(shí)現(xiàn)復(fù)位功能,除屏蔽寄存器各位置1外,其余寄存器的內(nèi)容均為0清除先/后觸發(fā)器:向A3-A0=1100的I/O地址執(zhí)行一次寫操作,使先/后觸發(fā)器為0

先/后觸發(fā)器:用來控制讀寫16位寄存器的高字節(jié)還是低字節(jié)清除屏蔽觸發(fā)器:如前所述,向A3-A0=1110的I/O地址執(zhí)行一次寫0操作即可*在8237A復(fù)位之后,所有的屏蔽位都被置“1”,即禁止所有的DMA請(qǐng)求。在非自動(dòng)預(yù)置方式下,一旦某通道的DMA傳送結(jié)束,該通道的屏蔽位也被置“1”。

在DMA通道初始化時(shí),為了開放通道的DMA請(qǐng)求,必須清除屏蔽位。即對(duì)端口地址A3~A0=1110,(指屏蔽寄存器)進(jìn)行一次寫“0”操作,即可清除4個(gè)通道的屏蔽位,開放全部通道的DMA請(qǐng)求。例如,設(shè)8237A的端口地址為00H~0FH,可用下列指令清除屏蔽寄存器。MOVAL,0;清除四通道的屏蔽位

OUT0EH,AL;送入端口地址A3~A0=1110,CS=0暫存寄存器:

8237進(jìn)行從存儲(chǔ)器到存儲(chǔ)器傳送操作時(shí),源存儲(chǔ)單元中的數(shù)據(jù)讀出送到暫存寄存器中暫存。對(duì)A3-A0=1101進(jìn)行讀操作,可讀暫存寄存器先/后觸發(fā)器在8237芯片內(nèi)還有一個(gè)名為先/后觸發(fā)器的內(nèi)部觸發(fā)器。該觸發(fā)器標(biāo)識(shí)將哪一個(gè)字節(jié)寫入基址寄存器。如果這個(gè)內(nèi)部觸發(fā)器的開始狀態(tài)是邏輯0,那么軟件必須向該寄存器寫入地址字的低字節(jié);相反,如果它為邏輯1,必須將高字節(jié)寫入該寄存器例如,為了把地址1234H寫入DMA控制器通道0的基址和當(dāng)前地址寄存器中,且該DMA控制器的基本I/O地址為ADDER,這里ADDER≤F0H,并且由8237的信號(hào)如何產(chǎn)生來決定,那么可以通過執(zhí)行下列指令來初始化基址寄存器和當(dāng)前地址寄存器MOVAL,34H;寫低字節(jié)

OUTADDER+0,ALMOVAL,12H;寫高字節(jié)

OUTADDER+0,AL

假定該內(nèi)部觸發(fā)器已初始化為0

8237的每個(gè)DMA通道還配備有兩個(gè)字計(jì)數(shù)寄存器,被分別稱之為基本字計(jì)數(shù)寄存器和當(dāng)前字計(jì)數(shù)寄存器。兩個(gè)寄存器的長度也均為16位?;咀钟?jì)數(shù)寄存器的值規(guī)定DMA操作期間所傳送的數(shù)據(jù)字節(jié)數(shù)。實(shí)際傳送的字節(jié)數(shù)總是比編程寫入該寄存器的值多1。這是因?yàn)镈MA傳送的結(jié)束是通過檢測(cè)當(dāng)前字計(jì)數(shù)值從0000H到FFFFH的變化來實(shí)現(xiàn)的。在DMA操作周期的任何時(shí)刻,當(dāng)前字計(jì)數(shù)寄存器中的值總是表示還剩多少個(gè)字節(jié)尚未傳送對(duì)計(jì)數(shù)寄存器的編程方法與上面介紹的對(duì)地址寄存器的編程方法相同。例如,要把計(jì)數(shù)值0FFFH寫入到DMA控制器通道1的基本字計(jì)數(shù)寄存器和當(dāng)前字計(jì)數(shù)寄存器中,設(shè)DMAC的基I/O地址為ADDER,且ADDER≤F0H,則可通過執(zhí)行下列指令來實(shí)現(xiàn)MOVAL,0FFH ;寫低字節(jié)

OUTADDER+3,AL MOVAL,0FH ;寫高字節(jié)

OUTADDER+3,AL8237A的內(nèi)部寄存器通道寄存器:基地址寄存器、當(dāng)前地址寄存器通道0:A3A2A1A0=0000;通道1:A3A2A1A0=0010

通道2:A3A2A1A0=0100;通道3:A3A2A1A0=0110

基字節(jié)寄存器、當(dāng)前字節(jié)寄存器通道0:A3A2A1A0=0001;通道1:A3A2A1A0=0011

通道2:A3A2A1A0=0101;通道3:A3A2A1A0=0111公用寄存器:控制寄存器:設(shè)定工作方式及請(qǐng)求控制狀態(tài)寄存器:存放狀態(tài)信息,供CPU查詢8237A的編程輸出主清命令(軟件復(fù)位)寫基地址寄存器寫方式寄存器寫命令寄存器寫基字節(jié)寄存器

8237初始化流程圖寫屏蔽寄存器例編寫外設(shè)到內(nèi)存DMA傳送的初始化程序。要求:利用8237通道1,將外設(shè)長度為1000個(gè)字節(jié)的數(shù)據(jù)塊傳送到內(nèi)存2000H開始的連續(xù)的存儲(chǔ)單元中。采用塊傳送,外設(shè)的DREQ1為高電平有效,DACK1為低電平有效,允許請(qǐng)求,設(shè)8237的I/O地址為70H~7FH。初始化程序如下:START:MOVAL,00H

OUT7DH,AL;軟件復(fù)位,先/后觸發(fā)器為0MOVAL,00HOUT72H,AL;2000H寫入基(當(dāng)前)地址寄存器

MOVAL,20HOUT72H,ALMOVAX,1000;傳輸?shù)淖止?jié)數(shù)1000DECAX;計(jì)數(shù)值調(diào)整為1000-1

OUT73H,AL;計(jì)數(shù)值寫入基(當(dāng)前)字節(jié)計(jì)數(shù)器

MOVAL,AHOUT73H,ALMOVAL,85H;塊傳送,地址增1,寫傳送

OUT7BH,AL;寫方式字

MOVAL,01HOUT7AH,AL;寫屏蔽字,允許通道1請(qǐng)求

MOVAL,00H;DACK1=0,DREQ1=1,允許8237工作

OUT78H,AL;寫命令字注意:當(dāng)傳送的數(shù)據(jù)塊的字節(jié)數(shù)為n時(shí),寫入計(jì)數(shù)器的值應(yīng)調(diào)整為n-1。這是因?yàn)楫?dāng)計(jì)數(shù)器的值從初值減到“0”后,還要繼續(xù)傳送一個(gè)字節(jié)才發(fā)送傳送結(jié)束信號(hào)EOP。

編寫存儲(chǔ)器到存儲(chǔ)器DMA傳送的初始化程序。要求:將內(nèi)存2000H開始的1000H個(gè)字節(jié)的數(shù)據(jù)塊傳送到4000H開始的目的單元中,由通道0和通道1完成傳送(設(shè)8237的I/O地址為70H~7FH)。初始化程序如下:

START:MOVAL,00H

OUT7DH,AL;軟件復(fù)位,先/后觸發(fā)器為0MOVAL,00H;源地址寫入通道0OUT70H,AL;基(當(dāng)前)地址寄存器

MOVAL,20HOUT70H,ALMOVAX,1000H;字節(jié)數(shù)1000H寫入通道0

;基(當(dāng)前)字節(jié)計(jì)數(shù)器

DECAX;調(diào)整計(jì)數(shù)值

OUT71H,AL

MOVAL,AHOUT71H,ALMOVAL,00H;目的地址寫入通道1

;基(當(dāng)前)地址寄存器

OUT72H,AL;寫低位地址

MOVAL,40HOUT72H,AL;寫高位地址

MOVAX,1000H;字節(jié)數(shù)1000H寫入通道1

;基(當(dāng)前)字節(jié)計(jì)數(shù)器

DECAX;調(diào)整計(jì)數(shù)值

OUT73H,AL;寫低位計(jì)數(shù)值

MOVAL,AH

OUT73H,AL;寫高位計(jì)數(shù)值

MOVAL,88H;塊傳送,地址增1,讀傳送

OUT7BH,AL;寫通道0工作方式字

MOVAL,85H;塊傳送,地址增1,寫傳送

OUT7BH,AL;寫通道1工作方式字

MOVAL,81H;允許存儲(chǔ)器到存儲(chǔ)器傳送

OUT78H,AL;寫命令寄存器

MOVAL,04H;通道0請(qǐng)求DMA傳送

OUT79H,AL;寫請(qǐng)求寄存器

MOVAL,00H;開放全部DMA請(qǐng)求

OUT0FH,AL;寫屏蔽寄存器

END8237A工

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論