You are on page 1of 45

M¹ch ®iÒu khiÓn th©m nhËp trùc tiÕp -

DMA
Truy nhËp bé nhí trùc tiÕp (DMA)
Kh¸i niÖm vÒ DMA
Khi m¸y tÝnh cÇn ph¶i chuyÓn mét sè lîng lín sè liÖu
gi÷a thiÕt bÞ ngo¹i vi vµ bé nhí. NÕu dïng CPU ®Ó
thùc hiÖn th× ®Çu tiªn CPU nhËn th«ng tin råi sau
®ã míi chuyÓn ®Õn n¬i nhËn. Qu¸ tr×nh nhËn vµ
gi¶i m· lÖnh cßn cÇn thªm c¸c th«ng tin bæ xung do
®ã c«ng viÖc nµy sÏ rÊt chËm. V× vËy Intel thiÕt kÕ
bé ®iÒu khiÓn vµ truy cËp trùc tiÕp 8237 víi chøc
n¨ng bá qua CPU vµ truyÒn sè liÖu trùc tiÕp gi÷a bé
nhí vµ ngo¹i vi, nhê vËy mµ lµm cho qu¸ tr×nh sÏ
nhanh lªn nhiÒu.
DMA (Direct Memory Access – Truy cËp bé nhí trùc
tiÕp). Lµ mét d¹ng cña ph¬ng ph¸p vµo ra, trong ®ã
d÷ liÖu ®îc di chuyÓn trùc tiÕp gi÷a bé nhí m¸y tÝnh
vµ m¹ch ngoµi mµ kh«ng dïng bé vi xö lý.
Ta cã thÓ so s¸nh: nÕu 8237 cã thÓ truyÒn byte d÷
liÖu gi÷a thiÕt bÞ ngo¹i vi I/O vµ bé nhí trong 4 chu
kú ®ång hå th× 8088 ph¶i thùc hiÖn trong 39 chu kú
®ång hå.
Sè chu kú ®ång

BACK: MOV AL,[SI] 10
OUT PORT,AL 10
INC SI 2
LOOP BACK 17
.
Bè trÝ ch©n cña vi m¹ch dma 8237a
IOR 1 40 A7 DREQ0
IOW 2 39 A6
DB0-DB7 DMA0
MEMR 3 38 A5 Bé ®Öm DACK0
MEMW 4 37 A4 d÷ liÖu
Data
+5v 5 36 EOP
READY 6 35 A3 DREQ1
HLDA 7 34 A2 DMA1
ADSTB 8 33 A1 A0-A7 DACK1
AEN 9 32 A0 Bé ®Öm
HRQ 10 31 VCC Address ®Þa
CS DREQ2
11 30 DB0 chØ
CLK DMA2
12 29 DB1
DACK2
RESET 13 28 DB2
DACK2 14 27 DB3
DACK3 15 26 DB4 Bé thêi
DREQ3
DREQ3 16 25 DACK Control gian vµ
DMA3
DREQ2 17 24 0 ®/khiÓn DACK3
DREQ1 18 23 DACK
DREQ0 19 22 1
GND 20 21 DB5 §Þnh quyÒn u
DB6 tiªn
DB7
Bè trÝ ch©n cña vim¹ch DMA
8237A S¬ §å KHèI ®¬n gi¶n cña 8237
Kh¸c víi qu¸ tr×nh Add Bus
HLDA HAC
truyÒn sè liÖu qua DAC
CPU, DMA chØ truyÒn CPU 8237
Data Bus
sè liÖu mµ kh«ng cã
qu¸ tr×nh gi¶i m· vµ DR
thùc hiÖn lÖnh vµ khi HR
CPU nhËn tÝn hiÖu HOLD

HOLD nã sÏ kÕt thóc


chu kú BUS hiÖn hµnh
DREQ
®Ó trao quyÒn ®iÒu Memory I/O

hµnh BUS cho 8237


Control Bus DACK
kh¸c víi ng¾t cøng
CPU cÇn kÕt thóc TiÕn tr×nh DMA
lÖnh hiÖn hµnh tríc khi
ph¸t tÝn hiÖu INTA.
Bèn kªnh DMA ®îc ®Þnh c¸c møc u tiªn kh¸c nhau
b»ng lËp tr×nh. Mçi kªnh DMA tríc khi sö dông ph¶i
®îc khëi t¹o ®Ó x¸c ®Þnh ®Þa chØ vµ kÝch tríc
cña khèi sè liÖu. Qu¸ tr×nh khëi t¹o lµ ghi vµo tõng
kªnh c¸c néi dung:
§Þa chØ ®Çu cña khèi sè liÖu cÇn truyÒn ®i (§Þa
chØ c¬ së)
Sè lîng byte cÇn truyÒn (Sè tõ)
§Ó ®Æt chÕ ®é lµm viÖc cho c¸c kªnh cña 8237 cÇn
ph¶i lËp tr×nh b»ng c¸ch ghi gi¸ trÞ vµo c¸c thanh
ghi cña 8237 qua bèn ch©n ®Þa chØ A0 - A3. Mçi
kªnh DMA cã ®Þa chØ c¬ së riªng vµ cã sè tõ riªng
nªn 8237 cÇn 8 cæng.
§Þa chØ cña t¸m cæng vµo/ra ®ã nh sau:
CH CS IOR IOW A3 A2 A1 A0
0 §Þa chØ hiÖn hµnh vµ c¬ 0 1 0 0 0 0 0

§Þa chØ hiÖn hµnh 0 0 1 0 0 0 0
§Õm tõ hiÖn hµnh vµ c¬ së 0 1 0 0 0 0 1
§Õm tõ hiÖn hµnh 0 0 1 0 0 0 1
1 §Þa chØ hiÖn hµnh vµ c¬ 0 1 0 0 0 1 0

§Þa chØ hiÖn hµnh 0 0 1 0 0 1 0
§Õm tõ hiÖn hµnh vµ c¬ së 0 1 0 0 0 1 1
§Õm tõ hiÖn hµnh 0 0 1 0 0 1 1
2 §Þa chØ hiÖn hµnh vµ c¬ 0 1 0 0 1 0 0

§Þa chØ hiÖn hµnh 0 0 1 0 1 0 0
§Õm tõ hiÖn hµnh vµ c¬ së 0 1 0 0 1 0 1
§Õm tõ hiÖn hµnh 0 0 1 0 1 0 1
3 §Þa chØ hiÖn hµnh vµ c¬ 0 1 0 0 1 1 0

§Ó lËp tr×nh cho 8237 truyÒn sè liÖu cÇn
cã:
§Þa chØ byte ®Çu tiªn cña khèi sè liÖu cÇn
truyÒn
Sè lîng byte sè liÖu cÇn truyÒn.
§Ó x¸c ®Þnh ®Þa chØ byte ®Çu tiªn cña
khèi sè liÖu cÇn truyÒn ®©y lµ mét sè 16
bits trong khi bus sè liÖu lµ 8 bits cho nªn
cÇn ph¶i göi 2 byte sè liÖu ë cïng mét
®Þa chØ. §Ó x¸c ®Þnh sè lîng th«ng tin
cÇn truyÒn, cÇn ph¶i ghi th«ng tin vµo
thanh ghi ®Õm. Sè ®Õm cùc ®¹i cña
VÝ dô: M¹ch ®iÒu khiÓn DMA cÇn truyÒn 2048 byte
sè liÖu bé nhí tõ ®Þa chØ 3400 h. Gi¶ thiÕt ®Þa
chØ gi¶i m· cña 8237 lµ 90H. LËp tr×nh ®Ó kªnh 2
thùc hiÖn truyÒn sè liÖu.
§Þa chØ thanh ghi ®Þa chØ bé nhí kªnh 2 vµ ®Þa chØ
thanh ghi ®Õm kªnh 2 lµ 94H vµ 95H.
Mov ax, 3400h ; N¹p ®Þa ®Çu cña vïng nhí
nguån
out 94h, al ; N¹p byte ®Þa chØ thÊp
mov al,ah
out 94h, al ; N¹p byte ®Þa chØ cao
mov ax, 2048 ; N¹p sè ®Õm
out 95h, al ; N¹p phÇn thÊp cña sè ®Õm
mov al,ah
C¸c thanh ghi ®iÒu khiÓn cña 8237.
8237 cã 4 kªnh DMA ®îc lËp tr×nh riªng biÖt nhng nã chØ cã
mét thanh ghi ®iÒu khiÓn dïng chung cho tÊt c¶ c¸c kªnh. 8237
cã tÊt c¶ 8 thanh ghi ®îc m« t¶ nh sau: (x lµ tæ hîp ®Þa chØ
gi¶i m· ®Ó chän ).
A3 A2 A1 A0 Thao t¸c IOR IOW §Þa
chØ
1 0 0 0 §äc thanh ghi tr¹ng th¸i 0 1 x8H
1 0 0 0 Ghi vµo thanh ghi lÖnh 1 0 x8H
1 0 0 1 Ghi vµo thanh yªu cÇu 1 0 x9H
1 0 1 0 Ghi bit thanh ghi mÆt n¹ ®¬n 1 0 xAH
1 0 1 1 Ghi vµo thanh ghi chÕ ®é 1 0 xBH
1 1 0 0 Xo¸ con trá byte 1 0 xCH
1 1 0 1 §äc thanh ghi t¹m 0 1 xDH
1 1 0 1 Xo¸ thiÕt bÞ chñ 1 0 xDH
1 1 1 0 Xo¸ thanh ghi mÆt n¹ 1 0 xEH
1. Thanh ghi lÖnh: Lµ thanh ghi 8 bits ®iÒu khiÓn
ho¹t ®éng cña 8237 . Thanh ghi nµy ®îc ghi b»ng
lÖnh Out vµ ®îc xãa bëi tÝn hiÖu RESET cña CPU
hay lÖnh xãa cña DMA
D7 D6 D5 D4 D3 D2 D1 D0

0 = DACK tÝch cùc 0 = Khãa Bé nhí-Bé


thÊp nhí
1= DACK tÝch cùc 1= Më Bé nhí-Bé nhí
cao
0 = DREQ tÝch cùc 0 = Khãa gi÷ ®/c kªnh
cao 0
1= DREQ tÝch cùc 1= Më gi÷ ®Þa chØ
thÊp kªnh 0
0 = Chän ghi trÔ x= NÕu D0 = 0
1= Chän ghi më 0 = Më bé ®iÒu khiÓn
réng 1= Khãa Bé ®iÒu
khiÓn
x= NÕu D3 = 1
0 = §Þnh thêi b×nh th-
0 = Møc u tiªn cè êng
®Þnh 1= §Þnh thêi nÐn
1= Møc u tiÖn quay x= NÕu D0 = 1
VÝ dô: LËp tr×nh cho 8237 lµm viÖc ë chÕ
®é: Kh«ng truyÒn bé nhí sang bé nhí, ®Þnh
thêi b×nh thêng, møc u tiÖn ®Þnh tríc, ghi
chËm, DREQ vµ DACK cã møc tÝch cùc cao.
Ta cã byte lÖnh lµ 1000 0000 = 80H
Mov al, 80h
Out x8h,al
Hay khi CPU ®ang thùc hiÖn mét qu¸ tr×nh
cÇn ph¶i cÊm DMA. Khi ®ã D2 = 1
Mov al, 04h
out x8h, al
Thanh ghi tr¹ng th¸i:
Lµ thanh ghi 8 bits ®îc CPU ®äc t¹i cïng ®Þa chØ víi thanh
ghi lÖnh (x8). Thanh ghi nµy chøa c¸c th«ng tin vÒ tr¹ng th¸i
lµm viÖc cña 4 kªnh DMA. Bèn bits thÊp D0 – D3 ®îc dïng ®Ó
x¸c ®Þnh c¸c kªnh tõ 0 ®Õn 3 ®¹t ®îc sè ®Õm cuèi (TC). TC
cã møc cao khi thanh ghi ®Õm b»ng 0. Bèn bits cao tõ D4 –
D7 dïng ®Ó dù tr÷.
D7 D6 D5 D4 D3 D2 D1 D0

1= Kªnh 7 ®¹t TC 1= Kªnh 0 ®¹t TC

1= Kªnh 6 ®¹t TC 1= Kªnh 1 ®¹t TC

1= Kªnh 5 ®¹t TC 1= Kªnh 2 ®¹t TC

1= Kªnh 4 ®¹t TC 1= Kªnh 3 ®¹t TC


3. Thanh ghi chÕ ®é: Cã ®Þa chØ ghi lµ xBH
Hai bit D7 D6 x¸c ®Þnh chÕ ®é lµm viÖc cña 8237 lµ:
D7 D6 = 00: ChÕ ®é yªu cÇu: TruyÒn sè liÖu x¶y ra liªn tôc cho tíi khi
DREQ kh«ng cßn ®îc kÝch ho¹t hoÆc TC = 0.
D7 D6 = 01: ChÕ ®é khèi: Gièng nh chÕ ®é theo yªu cÇu chØ kh¸c lµ
DREQ kh«ng cÇn gi÷ ë møc cao trong qu¸ tr×nh truyÒn d÷ liÖu.
D7 D6 = 10: ChÕ ®é ®¬n: NÕu DREQ tÝch cùc th× DMA thùc hiÖn
truyÒn 1 byte sau ®ã CPU chiÕm l¹i quyÒn ®iÒu khiÓn Bus. Qu¸ tr×nh nµy
x¶y ra xen kÏ cho ®Õn khi TC = 0.
D7 D6 = 11: ChÕ ®é nèi tÇng: C¸c bé ®iÒu khiÓn 8237 cã thÓ nèi
tÇng víi nhau ®Ó t¨ng kªnh DMA nhiÒu h¬n 4. ChÕ ®é nµy dïng trong c¸c m¸y
AT.
D7 D6 D5 D4 D3 D2 D1 D0
00 = Chän chÕ ®é yªu cÇu 00 = Chän kªnh 0
01 = Chän chÕ ®é ®¬n 01 = Chän kªnh 1
10 = Chän chÕ ®é khèi 10 = Chän kªnh 2
11 = Chän chÕ ®é nèi tÇng 11 = Chän kªnh 3

0 = Khãa khëi t¹o tù ®éng 00 = ChuyÓn kiÓm


1= Më khëi t¹o tù ®éng tra
0 = Chän ®Þa chØ t¨ng 01 = ChuyÓn ghi
1 = Chän ®Þa chØ gi¶m 10 = ChuyÓn ®äc
11 = CÊm
4. Thanh ghi mÆt n¹ ®¬n: Cã ®Þa chØ ghi lµ xAH
ChØ dïng 3 bit lµ D2 D1 D0.

D7 D6 D5 D4 D3 D2 D1 D0

00 = Chän bit mÆt n¹ kªnh 0


01 = Chän bit mÆt n¹ kªnh 1
Kh«ng quan t©m 10 = Chän bit mÆt n¹ kªnh 2
11 = Chän bit mÆt n¹ kªnh 3

0 = Bit xãa mÆt n¹


1 = Bit ®Æt mÆt n¹
5. Thanh ghi mÆt n¹ ®Çy ®ñ: Cã ®Þa chØ ghi lµ
xFH
Thanh ghi nµy t¬ng tù nh thanh ghi mÆt n¹ ®¬n chØ
kh¸c lµ tÊt c¶ 4 kªnh cã thÓ che ®îc hoÆc kh«ng che
®îc:
D7 D6 D5 D4 D3 D2 D1 D0

0 = Xãa bit mÆt n¹ kªnh


0
Kh«ng quan t©m 1 = §Æt bit mÆt n¹ kªnh
0
0 = Xãa bit mÆt n¹ kªnh
1
1 = §Æt bit mÆt n¹ kªnh
0 = Xãa bit mÆt n¹ kªnh 3
1
1 = §Æt bit mÆt n¹ kªnh 3
0 = Xãa bit mÆt n¹ kªnh 2
1 = §Æt bit mÆt n¹ kªnh 2
6. Thanh ghi ®Öm/Xãa chñ: Cã ®Þa chØ ghi lµ xDH
Thanh ghi nµy xãa thanh ghi tr¹ng th¸i, thanh ghi
lÖnh, thanh ghi yªu cÇu, thanh ghi mÆt n¹ vµ buéc
DMA chuyÓn sang chu kú nghØ. Thanh ghi nµy cã
chøc n¨ng gièng nh ch©n RESET cña 8237.
7. Thanh ghi mÆt n¹ xãa: Cã ®Þa chØ ghi lµ xEH
Thanh ghi nµy cã chøc n¨ng xãa c¸c bit mÆt n¹ cho
c¶ 4 kªnh DMA ®Ó cho phÐp chóng nhËn yªu cÇu
DMA qua c¸c ch©n DREQ.
VÝ dô: LËp tr×nh ®Ó kªnh 2 cña 8237 truyÒn
sè liÖu tõ bé nhí sang I/O ë chÕ ®é tù ®éng
khëi t¹o, ®Þa chØ t¨ng vµ truyÒn tõng byte.
Thanh ghi mÆt n¹ ®¬n cho phÐp kªnh 2 thùc
hiÖn DMA lµ 0000 0010 = 02 vµ thanh ghi chÕ
®é cã gi¸ trÞ 01011010 = 5AH. §Þa chØ thanh
ghi lÖnh lµ xBH.
mov al, 02h
out xAH,al
mov al, 5Ah
out xBH, al
GhÐp nèi vi m¹ch 8237 trªn m¸y tÝnh IBM PC/XT
C¸c ch©n ®Þa chØ cña 8237 tõ A0 – A7, bèn ®êng tõ A0 – A3
lµ c¸c ®êng hai chiÒu cïng víi cho phÐp 8237 chän mét trong
sè 16 thanh ghi. Trong ®ã c¸c ®Þa chØ cæng tõ x0H – x7H ®îc
g¸n cho 4 kªnh DMA vµ c¸c ®Þa chØ tõ x8H – xFH ®îc g¸n cho
c¸c thanh ghi ®iÒu khiÓn ®îc tÊt c¶ c¸c kªnh sö dông.
8237 cã Bus sè liÖu hai chiÒu 8 bits tõ D0 – D7 ®îc nèi vµo
Bus hÖ thèng.
8237 còng cung cÊp ®ñ 4 ®êng ®iÒu khiÓn IOR IOW, MEMR ,
vµ MEMW
Víi Bus ®Þa chØ chØ cã 8 bits tõ A0 – A7 nªn khi cÇn truyÒn
khèi sè liÖu cã kÝch thíc lín ph¶i cÇn thªm c¸c ®êng ®Þa chØ
tõ A8 – A15, 8237 sÏ dïng 8 bits sè liÖu D0 – D7 ®Ó t¹o phÇn
cao cña ®Þa chØ vµ dïng mét m¹ch chèt 74LS373. Khi ®ã tÝn
hiÖu ADSTB (Address strobe) cã vai trß nh tÝn hiÖu ALE ë
m¹ch chèt ®Þa chØ khi nèi ghÐp CPU víi Bus ®Þa chØ..
Nèi ghÐp DMA controller víi bus hÖ
thèng

Bus d÷
HRQ liÖu
DREQ

HLDA §iÒu
DMA Bé nhí khiÓn
CPU DAC ®Üa
8088 K

Bus ®Þa chØ

Bus ®iÒu khiÓn (IOR, IOW,


MEMR, MEMW)
CPU chØ sö dông BUS khi 8237 kh«ng ho¹t ®éng. TÝn hiÖu
AEN ®¶m b¶o ®iÒu kiÖn nµy:
•AEN = 0: CPU 80x86 ®iÒu khiÓn bus hÖ thèng.
•AEN = 1: Vi m¹ch 8237 ®iÒu khiÓn bus hÖ thèng.
C¸c ch©n cßn l¹i cña 8237:
•RESET: Lµ ®Çu vµo ®îc nèi tíi tÝn hiÖu RESET cña 8284.
•READY lµ ch©n vµo tõ RDYDMA cña m¹ch ph¸t tr¹ng th¸i ®îi
víi môc ®Ých kÐo dµi chu kú bé nhí cña DMA
•CLK ®îc nèi ®Õn ch©n CLK cña 8284 vµ cã tÇn sè lµm viÖc
4,7 Mhz.
•HOLD vµ HLDA ®îc nèi víi c¸c ch©n HOLD vµ HLDA cña
80x86.
•EOP ®îc ®¶o pha thµnh TC. TÝn hiÖu nµy ®îc kÝch häat mçi
khi thanh ghi ®Õm cña mét trong 4 kªnh DMA b»ng 0.
•DREQ0 vµ DACK0 lµ c¸c tÝn hiÖu cña kªnh 0 ®îc dïng ®Ó
lµm t¬i DRAM.
•DREQ1 – DREQ3 vµ DACK0 – DACK3 lµ c¸c tÝn hiÖu cña
kªnh 1 ®Õn 3 ®îc bè trÝ trªn r·nh ISA
Từ đệm địa chỉ AEN =1

RESET A0
RE A1
Tõ gi¶I m· A0
CS A2
Tõ RDY ®Õn 74244 A3
DMA RDY A3 A4
§ång hå DMA CLK A4 A5
HLDA HLDA
IOR A6
A7
IOW
§Öm BUS ®iÒu MEMW
A7
MEMR HRQ DMA
khiÓn
TC
DREQ0
DACK0
DREQ1
DREQ2 DACK0 BRP
D0 DREQ3 DACK1
DACK2
D7 DACK3
D0 A8
74373

D7 A15
GhÐp nèi 8237 trªn
74 670
D0
RA
m¸y IBM - PC
D1
RB A16
A0 D2 A17
A1 D3 Q0 A18
DMA AEN WA Q1 A19
Tõ cæng WB
80H Q2
Trªn m¸y tÝnh IBM PC – XT c¸c kªnh DMA ®îc sö dông nh
sau:
Kªnh 0 ®îc dïng lµm t¬i DRAM. Trong c¸c m¸y PC/AT
kh«ng cßn chøc n¨ng nµy.
Kªnh 1 kh«ng ®îc sö dông, ngêi ta dïng kªnh nµy cho
m¹ng.
Kªnh 2 dïng cho bé ®iÒu khiÓn ®Üa mÒm.
Kªnh 3 dïng cho bé ®iÒu khiÓn ®Üa cøng.
C¸c kªnh 1,2 vµ 3 ®îc khëi t¹o nhê lËp tr×nh thanh ghi
chÕ ®é (xBH)
D1 D0 = 0 1 : Chän kªnh 1.
D3 D2 = 00 : KiÓm tra truyÒn.
D4 = 0: Bá chÕ ®é khëi t¹o tù ®éng.
D5 = 0: T¨ng ®Þa chØ.
D7 D6 = 01 : ChÕ ®é tõng byte.
Nh vËy ®Ó lËp tr×nh cho kªnh, thanh ghi chÕ ®é cã gi¸
trÞ lµ 41H. T¬ng tù gi¸ trÞ ®ã lµ 42H, 43H víi kªnh 2 vµ 3.
; N¹p ®Þa chØ thanh ghi chÕ RW
®é.
Mov dx, 00xBH
Gi¶i m· 2 x4
; §Æt chÕ ®é cho kªnh 1. RA

mov al, 41H RB

out dx, al D0 Q0
Thanh ghi 4 x 4
; §Æt chÕ ®é cho kªnh 2. D1 Q1
D2 Q2
mov al, 42H D3 Q3

out dx, al
WA
; ®Æt chÕ ®é cho kªnh 3. Gi¶i m· 2 x 4
WB CÊu tróc 74LS670
mov al,43h
out dx,al.
RD

Thanh ghi trang DMA


Vi m¹ch 8237 cung cÊp ®îc 16 ®êng ®Þa chØ tõ A0 – A15. §Ó
cÊp ®îc 20 ®êng ®Þa chØ, m¸y tÝnh IBM PC-XT sö dông vi
m¹ch 74LS670 cã bèn thanh ghi trang (segment) ®Ó cung cÊp
c¸c ®êng ®Þa chØ cßn l¹i A16-19 cho 4 kªnh DMA. C¸c thanh
ghi nµy ®îc CPU ghi b»ng lªnh OUT qua Bus D0 – D3. Trong
s¬ ®å hai tÝn hiÖu A0 A1 cña bus ®Þa chØ ®îc nèi ®Õn hai
ch©n WA vµ WB , c¸c tÝn hiÖu
DACK2 DACK3
vµ trªn ®Çu ra cña 8237 còng ®îc nèi ®Õn ch©n
RA vµ RB cña vi m¹ch 74LS670 ®Ó chän kªnh.
DACK2 DACK3
RA RB
1 1 Kªnh 1
1 0 Kªnh 3
0 1 Kªnh 2
0 0 CÊm
Tèc ®é truyÒn sè liÖu cña 8237.
Khi sö dông DMA, m¹ch t¹o tr¹ng th¸i chê
bæ xung thªm mét chu kú ®ång hå vµo
chu kú bé nhí cña kªnh 1 – 3 b»ng tÝn
hiÖu . Qu¸ tr×nh DMA cÇn 5 xung ®ång
hå do ®ã cÇn ph¶i mÊt 6 xung ®ång hå
cho kªnh 1 – 3 cña DMA. Mçi chu kú DMA
cã mét chu kú bé nhí cña CPU. V× vËy
mét Qu¸ tr×nh DMA sÏ cÇn 10 chu kú
®ång hå. Trªn m¸y IBM PC-XT (4,7 Mhz)
cã 1 chu kú ®ång hå lµ 210 ns. Do ®ã tèc
®é truyÒn DMA lµ 1: (10 x 210) = 476190
byte/s.
Lµm t¬i DRAM b»ng kªnh 0 cña 8237.
M¸y tÝnh IBM PC – Xt sö dông kªnh DREQ0 ®Ó
lµm t¬i DRAM. T¹i thêi ®iÓm bËt nguån, BIOS
khëi t¹o kªnh 0 cña 8237:
Thanh ghi ®Þa chØ bé nhí lµ 0000
Thanh ghi ®Õm b»ng FFFFH cho tÊt c¶ 64KB
nhí qua ®Þa chØ cæng 01
Thanh ghi chÕ ®é ®îc göi ë ®Þa chØ 0BH cã
gi¸ trÞ lµ 58H:
D1 D0 = 00: Chän Kªnh 0.
D3 D2 = 01: Cho truyÒn ®äc
D4 = 1: Khëi t¹o tù ®éng
D5 = 0: T¨ng ®Þa chØ
D7 D6 = 01: ChÕ ®é tõng byte
Thanh ghi lÖnh ®îc göi ë ®Þa chØ cæng 08H cã gi¸
trÞ 00H:
D0 = 0: Kh«ng cho phÐp bé nhí – bé nhí
D1 = x:
D2 = 0: Cho phÐp bé ®iÒu khiÓn DMA
D3 = 0: §Þnh thêi b×nh thêng
D4 = 0: Møc u tiªn ®Þnh tríc
D5 = 0: Ghi chËm
D6 = 0: TÝn hiÖu DREQ ®îc kÝch ho¹t ë møc cao
D7 = 0: TÝn hiÖu DACK ®îc kÝch ho¹t ë møc thÊp
Thanh ghi mÆt n¹ ®¬n ghi qua cæng 0AH cã gi¸ trÞ
00
D1 D0 = 00: Chän kªnh 0
D2 = 0: Xo¸ mÆt n¹ cho phÐp DREQ cã t¸c
Qu¸ tr×nh khëi t¹o nh sau:
mov al, 0ffh ; Gi¸ trÞ thanh ghi ®Õm
out 01,al ; Göi byte thÊp tíi thanh ghi
®Õm
out 01, al ; Göi byte cao tíi thanh ghi
®Õm
mov al, 58h ; Gi¸ trÞ thanh ghi chÕ ®é
out 0bh, al ; ghi vµo thanh ghi chÕ ®é
mov al, 00 ; Gi¸ trÞ thanh ghi lÖnh
out 08h, al ; Ghi vµo thanh ghi lÖnh
mov al, 00 ; Gi¸ trÞ thanh ghi mÆt n¹ ®¬n
out 0ah,al ; ghi vµo thanh ghi mÆt
Sö dông 8237 lµm t¬i DRAM
Bé nhí DRAM cÇn ®îc lµm t¬i víi chu kú 15,6 s.
Nguyªn t¾c nµy ®îc ¸p dông cho mäi bé nhí DRAM
vµ kh«ng lÖ thuéc vµo dung lîng cña m¸y tÝnh. Bé
nhí cña m¸y tÝnh ®îc s¾p xÕp theo c¸c ma trËn (n
hµng x n cét) vµ khi lµm t¬i DRAM ngêi ta chØ cÇn
lµm t¬i theo hµng hoÆc theo cét. Ma trËn DRAM ®îc
s¾p xÕp sao cho trong vßng 2ms cã thÓ lµm t¬i ®îc
128 hµng (Lµm t¬i mét hµng hÕt 2ms : 128 = 15,6
s. §©y lµ chuÈn c«ng nghiÖp cho tÊt c¶ c¸c m¹ch
DRAM. VÝ dô víi chip DRAM co dung lîng lµ 64k-bit
th× cÇn 2ms ®Ó lµm t¬i 128 hµng. Víi chip DRAM
256 K-bit cã 256 hµng cÇn 4ms ®Ó lµm t¬i (4ms :
256 = 15,6 s. Víi chip DRAM 1 MB bit cã 512 hµng
®îc lµm t¬i trong 8 ms
Dung lîng KÝch thíc ma trËn Sè Thêi gian lµm t¬i Thêi gian lµm t-
DRAM hµng c¸c hµng ¬i mét hµng

64 K- bit 4-128 x 128 128 2ms 15,6 s


256 K-bit 4- 256 x 256 256 4ms 15,6 s
1 M-bit 4- 512 x 512 512 8ms 15,6 s
4 M-bit 4 - 1024 x 102 16ms 15,6 s
1024 4
Lµm t¬i trong m¸y tÝnh IBM PC – XT
TÝn hiÖu DREQ0 trªn m¸y tÝnh IBN PC – XT ®îc
kÝch ho¹t b»ng xung cã chu kú 15,6 s. Kªnh 0 cña
DMA ®îc BIOS khëi t¹o ®Ó ®Õm 65536 « nhí theo
c¸ch t¨ng ®Þa chØ, b¾t ®Çu tõ ®Þa chØ 00 víi lùa
chän: ChÕ ®é tõng byte, ®Þa chØ t¨ng, khëi t¹o tù
®éng vµ truyÒn ®äc. Bé ®iÒu khiÓn DMA liªn tôc
thùcMEMR
hiÖn chu kú truyÒn ®äc b»ng c¸ch kÝch ho¹t tÝn
hiÖu cung cÊp ®Þa chØ tíi c¸c chËn cña DRAM
vµ kÝch ho¹t RAS, nhê vËy mµ quay vßng tuÇn tù hÕt
128 hµng cña DRAM. Trong qu¸ tr×nh
MEMR IOWtruyÒn tÝn hiÖu
READ, DMA cung cÊp c¸c tÝn hiÖu ®iÒu khiÓn
MEMR
vµ nhng
IOW chØ cã tÝn hiÖu ®îc dïng vµo
viÖc lµm t¬i.
TÝn hiÖu kh«ng ®îc dïng v× kh«ng cã s½n sè
Chu kú DMA cña kªnh 0
Kªnh 0 ®îc dïng ®Ó lµm t¬i DRAM vµ kh«ng cã
tr¹ng th¸i ®îi trong qu¸ tr×nh lµm t¬i. Do ®ã chu
kú cña 8237 lµ 4 chu kú vµ thêi gian lµm t¬i cña
DRAM lµ 128 hµng x 4 chu kú x 210ns =
0,10752ms chØ b»ng 5% thêi gian lµm t¬i cña
chu kú lµm t¬i lµ 2ms.
DMA ë m¸y tÝnh IBM PC AT 80x86
Trªn m¸y IBM PC XT cã 3 kªnh DMA ®îc ®a ra
trªn r·nh ISA. TÊt c¶ c¸c kªnh nµy lµ DMA 8 bits.
Tõ m¸y IBM PC AT dïng BVXL 08286 trë ®i cã
bæ xung thªm vi m¹ch 8237 thø hai ®Ó thùc
hiÖn DAM truyÒn sè liÖu 16 bits.
Vi m¹ch 8237 #1.
DREQ1, DREQ2, DREQ3 cña 8237 thø nhÊt thùc
hiÖn chøc n¨ng nh trªn m¸y XT (Thùc hiÖn DMA 8
bits cho m¹ch vµo/ra vµ víi bé nhí 16 MB cña m¸y
AT). M¸y tÝnh AT cã m¹ch lµm t¬i DRAM riªng mµ
kh«ng sö dông kªnh 0 cña 8237#1. vµ DREQ0 vµ
DACK0 ®îc cung cÊp trªn phÇn 36 ch©n më réng
cña ISA Bus .
C¸c kªnh 0 ,1, 2, 3 ®îc dïng ®Ó truyÒn sè liÖu 8
bits gi÷a I/O vµ bé nhí.
Thanh ghi ®Õm cã ®é dµi 16 bits do ®ã c¸c kªnh 0
,1, 2, 3 cã thÓ truyÒn ®îc khèi sè liÖu cã ®é dµi
®Õn 64KB.
Mçi kªnh 0 ,1, 2, 3 cã thÓ truyÒn sè liÖu theo khèi
64 KB qua kh«ng gian ®Þa chØ bé nhí 16 MB cña
m¸y AT. §Þa chØ bé nhí ®îc bè trÝ nh sau:
A23 A16 A15 A0
Thanh ghi trang DMA cung Do DMA 8237#1 cung cÊp
cÊp
§Þa chØ cæng c¸c kªnh DMA 0 ,1, 2, 3 ®îc x¸c ®Þnh cô thÓ:

Thanh ghi trang §Þa chØ cæng I/O


Kªnh DMA0 0087
Kªnh DMA1 0083
Kªnh DMA2 0081
Kªnh DMA3 0082
Vi m¹ch 8237#2 ®îc dïng lµm m¹ch chñ vµ kªnh 0 ®îc
sö dông ®Ó nèi tÇng víi 8237#1. Ba kªnh cãn l¹i
DREQ5 - DREQ7 vµ DACK 5 – DACK7 ®îc bè trÝ ë
phÇn 36 ch©n cña Bus ISA. Ba kªnh nµy ®îc dïng
®Ó truyÒn sè liÖu 16 bits.
DRQ0 DRQ0
DACK0 DACK0 PhÇn 36 ch©n
DRQ1 DRQ1
DACK1 DACK1
DRQ2 DRQ2
DACK2 DACK2
DRQ3 DRQ3
PhÇn 62 ch©n
DACK3 DACK3
HLDQR DRQ0

HOLDA DACK0
DRQ1
DACK1 DRQ5
DRQ2 DACK5
80286 DRQ6
DACK2
DRQ3 DACK6 PhÇn 36 ch©n
DACK3 DRQ7
DACK7

GhÐp kªnh DMA trªn m¸y IBM PC AT


§Þa chØ cæng cña 8237 #2

§Þa chØ §Þa chØ


C¸c kªnh DMA 5, 6, 7 cña 8237#2 ®îc dïng
®Ó truyÒn sè liÖu 16 bits gi÷a bé nhí 16
MB vµ I/O.
Víi thanh ghi ®Õm lµ thanh ghi 16 bits nªn
víi sè liÖu 16 bits mçi kªnh DMA cã thÓ
truyÒn ®îc 65536 tõ hay 128 KByte gi÷a
I/O vµ bé nhí.
§Þa chØ bé nhí cña khèi sè liÖu truyÒn
DMA lµ ®Þa chØ ch½n.
C¸c kªnh 5, 6, 7 truyÒn sè liÖu sang bé nhí
hÖ thèng 16 Mb theo khèi, c¸c khãi nµy cã
kÝch thíc tèi ®a lµ 128 KByte
V× c¸c kªnh 5, 6, 7 kh«ng thÓ truyÒn sè liÖu ë ®Þa
chØ lÎ nªn A0 vµ BHE cã møc 0. PhÇn cßn l¹i cña ®Þa
chØ nh sau:
A23 A16 A15
A0
Thanh ghi trang DMA cung Do DMA 8237#2 cung cÊp
cÊp
Vi m¹ch 8237 #2 cã thÓ ®îc nhiÒu thiÕt bÞ chñ
kh¸c truy cËp qua ISA Bus vµ dïng tÝn hiÖu vµo
MASTER cña Bus ISA phÇn 36 ch©n.
Møc u tiªn c¸c kªnh DMA trªn m¸y IBM PC AT ®îc
lËp tr×nh víi kªnh 0 cã møc u tiªn cao nhÊt vµ gi¶m
dÇn víi kªnh 1, 2, 3, 5, 6, 7.
§Þa chØ cña DMA trªn m¸y IBM PC AT
M¹ch ®iÒu khiÓn ng¾t kh¶ tr×nh 8259

 Chøc n¨ng: hç trî ng¾t cøng, më réng sè ng¾t


cøng cho CPU, s¾p xÕp thø tù u tiªn.
 §¸p øng cña CPU: Khi nhËn ®îc tÝn hiÖu ng¾t
(INTR hoÆc NMI) CPU hoµn thµnh lÖnh ®ang
thùc hiÖn råi quyÕt ®Þnh cã b¸o nhËn yªu cÇu
ng¾t hay kh«ng. Cã 2 trêng hîp x¶y ra:
1.NÕu yªu cÇu ng¾t lo¹i kh«ng che ®îc (NMI) th×
buéc CPU ph¶i b¸o nhËn vµ phôc vô yªu cÇu ®ã.
2.NÕu lµ lo¹i ng¾t b×nh thêng (INTR) th× bé vi xö lý
tiÕn hµnh kiÓm tra thanh ghi cê ®Ó biÕt ng¾t cã
bÞ che hay kh«ng. Sau ®ã míi phôc vô ng¾t.
S¬ ®å khèi 8259

INT INTA
Bé ®Öm
D0-D7
d÷ liÖu
Logic ®iÒu khiÓn

RD WR
AO.CS Khèi
logic
(®äc ghi)
ISR PR IRR
CAS 0.12
SP/EN IR0-IR7
Bé ®Öm
C¸c yªu cÇu ng¾t
cascad
IMR

Internal
Bus

M¹ch ®iÒu khiÓn ng¾t ch¬ng tr×nh ho¸ 8259


CS
Vcc GND
1 28 Vcc
WR 2 27 A0
RD 3 26 INTA
D7 4 25 IR7 D0-D7
8 R0
D6 5 24 IR6 RD
2 R1
D5 6 23 IR5 WR R2
D4 7
5 IR4 CS 8259A
22 R3
D3 8 9 21 IR3 A0 R4
A INT R5
D2 9 20 IR2 INTA R6
D1 10 19 IR1 R7
D0 11 18 IR0 CS0 -
CAS 0 12 17 INT CS2
CAS 1 13 16 SP / EN SP/EN
GND 14 15 CAS 2

H×nh 2.24 Bé ®iÒu khiÓn ng¾t lËp tr×nh 8259A

Ghi chó:
CS : Chip select A0 : ®- êng ®Þa chØA0
SP/EN : Slave Program Enable Buffer D0-D7 : Bus d÷ liÖu 2 chiÒu
ISR : In Service PR : Prioryty
IRR : Interrupt Request CAS : Cascad
IMR : Thanh ghi mÆ t n¹ ®Óche hay kh«ng che ng¾t ISR : L- u ng¾t ®- î c phôc vô.
Phèi ghÐp 8259 trong m¸y PC/XT
Tr×nh tù thùc hiÖn ng¾t cøng víi 8259
1. Sau khi IR ®îc kÝch ho¹t, 8259 sÏ ®¸p l¹i b»ng c¸ch ®Æt INTR
lªn møc cao ®Ó th«ng b¸o cho CPU yªu cÇu ng¾t.
2. 8088/86 ®Æt c¸c tÝn hiÖu t¬ng øng lªn S0, S1, S2 ®Ó x¸c
nhËn 8288 r»ng ng¾t ®· ®îc yªu cÇu (S2S1S0=000).
3. 8288 ph¸t ra INTA ®Çu tiªn cho 8259.
4. 8259 nhËn INTA ®Çu tiªn vµ thùc hiÖn chøc n¨ng gi¸m s¸t kÓ
c¶ viÖc x¸c ®Þnh møc u tiªn.
5. Chip 8288 sÏ ph¸t INTA thø 2 tíi 8259.
6. Xung INTA thø 2 kÝch 8259 chuyÓn mét byte vÐc-t¬ ng¾t lªn
bus d÷ liÖu, vµ byte nµy sÏ ®îc 8088/86 chèt l¹i.
7. 8088/86 sö dông byte nµy ®Ó x¸c ®Þnh vÞ trÝ cña vÐc-t¬
ng¾t. Gi¸ trÞ ®ã gÊp 4 lÇn cña sè hiÖu ng¾t.
8. 8088/86 sÏ PUSH thanh ghi cê vµo ng¨n xÕp, xo¸ IF vµ TF v×
vËy sÏ kho¸ c¸c yªu cÇu ng¾t bªn ngoµi vµ chÕ ®é tõng bíc,
vµ cuèi cïng ®Èy thanh ghi CS:IP vµo ng¨n xÕp.
9. 8088/86 ®äc CS:IP cña ch¬ng tr×nh con phôc vô ng¾t tõ
b¶ng vÐc t¬ ng¾t vµ b¾t ®Çu ch¬ng tr×nh con phôc vô ng¾t