Tải bản đầy đủ (.pdf) (18 trang)

Chương 8 - Vào/ra Dữ liệu bằng DMA pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (298.52 KB, 18 trang )

Chơng 8
Vo/ra Dữ liệu bằng DMA
1. Nguyên tắc của việc trao đổi dữ liệu với thiết bị ngoại vi bằng cách
thâm nhập trực tiếp vo bộ nhớ (DMA)
Trong các cách điều khiển việc trao đổi dữ liệu giữa thiết bị ngoại vi v hệ vi
xử lý bằng cách thăm dò trạng thái sẵn sng của thiết bị ngoại vi hay bằng cách ngắt
bộ vi xử lý đã đợc nói đến ở các chơng trớc, dữ liệu thờng đợc chuyển từ bộ nhớ
qua bộ vi xử lý để rồi từ đó ghi vo thiết bị ngoại vi hoặc ngợc lại, từ thiết bị ngoại vi
nó đợc đọc vo bộ vi xử lý để rồi từ đó đợc chuyển đến bộ nhớ. Vì thế tốc độ trao đổi
dữ liệu phụ thuộc rất nhiều vo tốc độ thực hiện của các lệnh MOV, IN v OUT của
bộ vi xử lý v do đó việc trao đổi dữ liệu không thể tiến hnh nhanh đợc.
Trong thực tế có những khi ta cần trao đổi dữ liệu thật nhanh với thiết bị
ngoại vi: nh khi cần đa dữ liệu hiện thị ra mn hình hoặc trao đổi dữ liệu với bộ
điều khiển đĩa. Trong các trờng hợp đó ta cần có đợc khả năng ghi/đọc dữ liệu trực
tiếp với bộ nhớ (direct memory access, DMA - thâm nhập vo bộ nhớ trực tiếp không
thông qua CPU) thì mới đáp ứng đợc yêu cầu về tốc độ trao đổi dữ liệu. Để lm đợc
điều ny các hệ vi xử lý nói chung đều phải dùng thêm mạch chuyên dụng để điều
khiển việc thâm nhập trực tiếp vo bộ nhớ (direct memory access controller, DMAC).
Có thể lấy 1 thí dụ cụ thể để minh hoạ điều ny. Trong khi một mạch DMAC
nh 8237A-5 của Intel có thể điều khiển việc chuyển 1 byte trong 1 mảng dữ liệu từ

232
bộ nhớ ra thiết bị ngoại vi chỉ hết 4 chu kỳ đồng hồ thì bộ vi xử lý 8088 phải lm hết
cỡ 40 chu kỳ:

; Số chu kỳ đồng hồ
Lap: MOV AL,[SI] ; 10
OUT PORT,AL ; 10
inc SI ; 2
Looop Lap ; 17
;Cộng: 39 chu kỳ




Để hỗ trợ cho việc trao đổi dữ liệu với thiết bị ngoại vi bằng cách thâm nhập
trực tiếp vo bộ nhớ, tại mỗi vi mạch CPU thờng tồn tại chân yêu cầu treo HOLD để
thiết bị ngoại vi, mỗi khi có yêu cầu dùng bus cho việc trao đổi dữ liệu với bộ nhớ thì
thông qua chân ny m báo cho CPU biết. Đến lợt CPU, khi nhận đợc yêu cầu treo
thì nó tự treo lên (tự tách ra khỏi hệ thống bằng cách đa các bus vo trạng thái trở
kháng cao) v đa xung HLDA ra ngoi để thông báo CPU cho phép sử dụng bus.
Sơ đồ khối của một hệ vi xử lý có khả năng trao đổi dữ liệu theo kiểu DMA
đợc thể hiện trên hình 8.1.



Bus A

Bus D





Bus C (các tín hiệu quan trọng: IOR, IOW, MEMR, MEMW)
CPU



HOLD

HLDA



Hình 8.1. Hệ vi xử lý với DMAC.

Ta nhận thấy trong hệ thống ny, khi CPU tự tách ra khỏi hệ thống bằng việc
tự treo (ứng với vị trí hiện thời của các công tắc chuyển mạch) để trao quyền sử dụng
bus cho DMAC thì DMAC phải chịu trách nhiệm điều khiển ton bộ hoạt động trao
đổi dữ liệu của hệ thống. Để lm đợc điều đó DMAC phải có khả năng tạo ra đợc
các tín hiệu điều khiển cần thiết giống nh các tín hiệu của CPU v bản thân nó phải

DMAC
HRQ D RQ

HACK DACK
MEM.
I/O
DRQ

DACK

233
l một thiết bị lập trình đợc (để CPU "dặn dò" nó bằng cách đa vo các từ điều
khiển trớc khi nó có thể hoạt động độc lập).
Quá trình hoạt động của hệ thống trên có thể đợc tóm tắt nh sau:
Khi thiết bị ngoại vi có yêu cầu trao đổi dữ liệu kiểu DMA với bộ nhớ, nó đa
yêu cầu DRQ=1 đến DMAC, DMAC sẽ đa yêu cầu treo HRQ=1 đến chân HOLD của
CPU. Nhận đợc yêu cầu treo, CPU sẽ treo các bus của mình v trả lời chấp nhận
treo qua tín hiệu HLDA=1 đến chân HACK của DMAC. DMAC sẽ thông báo cho thiết
bị ngoại vi thông qua tín hiệu DACK=1 l nó cho phép thiết bị ngoại vi trao đổi dữ
liệu kiểu DMA. Khi quá trình DMA kết thúc thì DMAC đa ra tín hiệu HRQ=0.
Trong thực tế tồn tại 3 kiểu trao đổi dữ liệu bằng cách thâm nhập trực tiếp

vo bộ nhớ nh sau:

+ Treo CPU một khoảng thời gian để trao đổi cả mảng dữ liệu.
+ Treo CPU để trao đổi từng byte.
+ Tận dụng thời gian không dùng bus của CPU để trao đổi dữ liệu.

Ta sẽ lần lợt giới thiệu qua các kiểu trao đổi dữ liệu ny.

Trao đổi cả một mảng dữ liệu
Trong chế độ ny CPU bị treo trong suốt quá trình trao đổi mảng dữ liệu. Chế
độ ny đợc dùng khi ta có nhu cầu trao đổi dữ liệu với ổ đĩa hoặc đa dữ liệu ra hiện
thị. Các bớc thủ tục để chuyển một mảng dữ liệu từ bộ nhớ ra thiết bị ngoại vi:

1. CPU phải ghi từ điều khiển v từ chế độ lm việc vo DMAC để
quy định cách thức lm việc, địa chỉ đầu của mảng nhớ, độ di của mảng nhớ
2. Khi thiết bị ngoại vi có yêu cầu trao đổi dữ liệu, nó đa DRQ=1 đến
DMAC.
3. DMAC đa ra tín hiệu HRQ đến chân HOLD của CPU để yêu cầu
treo CPU. Tín hiệu HOLD phải ở mức cao cho đến hết quá trình trao đổi dữ liệu.
4. Nhận đợc yêu cầu treo, CPU kết thúc chu kỳ bus hiện tại, sau đó
nó treo các bus của mình v đa ra tín hiệu HLDA báo cho DMAC đợc ton quyền
sử dụng bus.
5. DMAC đa ra xung DACK để báo cho thiết bị ngoại vi biết l có thể
bắt đầu trao đổi dữ liệu.
6. DMAC bắt đầu chuyển dữ liệu từ bộ nhớ ra thiết bị ngoại vi bằng
cách đa địa chỉ của byte đầu ra bus địa chỉ v đa ra tín hiệu MEMR=0 để đọc 1
byte từ bộ nhớ ra bus dữ liệu. Tiếp đó DMAC đa ra tín hiệu IOW=0 để ghi dữ liệu ra
thiết bị ngoại vi. DMAC sau đó giảm bộ đếm số byte còn phải chuyển, cập nhật địa
chỉ của byte cần đọc tiếp, v lặp lại các động tác trên cho tới khi hết số đếm (TC).


234
7. Khi quá trình DMA kết thúc, DMAC cho ra tín hiệu HRQ=0 để báo
cho CPU biết để CPU dnh lại quyền điều khiển hệ thống.

Treo CPU để trao đổi từng byte
Trong cách trao đổi dữ liệu ny CPU không bị treo lâu di trong một lần
nhng thỉnh thoảng lại bị treo trong một khoảng thời gian rất ngắn đủ để trao đổi 1
byte dữ liệu (CPU bị lấy mất một số chu kỳ đồng hồ). Do bị lấy đi một số chu kỳ đồng
hồ nh vậy nên tốc độ thực hiện một công việc no đó của CPU chỉ bị suy giảm chứ
không bị dừng lại. Cách hoạt động cũng tơng tự nh phần trớc, chỉ có điều mỗi lần
DMAC yêu cầu treo CPU thì chỉ có 1 byte đợc trao đổi.

Tận dụng thời gian CPU không dùng bus để trao đổi dữ liệu
Trong cách trao đổi dữ liệu ny, ta phải có các logic phụ bên ngoi cần thiết
để phát hiện ra các chu kỳ xử lý nội bộ của CPU (không dùng đến bus ngoi) v tận
dụng các chu kỳ đó vo việc trao đổi dữ liệu giữa thiết bị ngoại vi với bộ nhớ. Trong
cách lm ny thì DMAC v CPU luân phiên nhau sử dụng bus v việc thâm nhập
trực tiếp bộ nhớ kiểu ny không ảnh hởng gì tới hoạt động bình thờng của CPU.

2. DMAC 8237A-5 trong hệ vi xử lý 8088
2.1. Tín hiệu HOLD v HLDA trong CPU 8088
Hai tín hiệu dùng để yêu cầu treo v trả lời chấp nhận yêu cầu treo trong chế
độ MIN của CPU 8088 l HOLD v HLDA. Quan hệ giữa 2 tín hiệu đó đợc thể hiện
trên hình 8.2.


T4 hoặc T1


CLK



HOLD


HLDA
Hình 8.2. Quan hệ giữa HOLD v HLDA.




235
Tín hiệu yêu cầu treo HOLD đợc lấy mẫu tại sờn lên của xung đồng hồ
trớc chu kỳ T4 hoặc T1. Khi nhận đợc yêu cầu treo, CPU kết thúc chu kỳ bus hiện
tại, đa ra tín hiệu HLDA v treo các tín hiệu của bus A, bus D v bus C (trừ tín hiệu
ALE=0) để nhờng quyền sử dụng các bus ny cho DMAC. Cần lu ý rằng đầu vo
HOLD có mức u tiên cao hơn các đầu vo yêu cầu ngắt INTR v NMI nhng lại thấp
hơn so với đầu vo RESET.
Để đảm bảo việc đồng bộ tín hiệu yêu cầu treo của thiết bị ngoại vi với tín
hiệu đồng hồ của hệ thống trớc khi đa vo chân HOLD của 8088 ngời ta thờng
dùng mạch trên hình 8.3.



yêu cầu treo +5V
từ thiết bị ngoại vi
đến HOLD của 8088
CLK
RESET



Hình 8.3. Đồng bộ tín hiệu yêu cầu treo để đa đến CPU 8088

2.2 Mạch DMAC 8237A-5 của Intel
Trớc khi trình by kỹ về mạch DMAC 8237A-5 của Intel ta nói qua về các
thay đổi cần có trong nhóm tín hiệu điều khiển ghi/đọc của hệ vi xử lý với CPU 8088 ở
chế độ MIN để sử dụng đợc mạch 8237A-5 lm DMAC.
Nh trên hình 8.1 đã thể hiện tơng đối rõ, để thực hiện đợc chức năng
DMA trong hệ, bus điều của hệ vi xử lý với CPU 8088 phải đợc thay đổi chút ít để có
đợc các tín hiệu cần thiết cho DMAC v các bộ phận khác hoạt động. Đó chính l
việc các tín hiệu RD, WR v IO/M đợc sử dụng để tạo các tín hiệu điều khiển mới
IOR, IOW, MEMR, MEMW tơng thích với các tín hiệu của DMAC 8237A-5.

Hình 8.4 trình by một khả năng tạo ra các tín hiệu điều khiển nh vậy
dùng mạch dồn kênh 74LS257. Trong 74LS257 gồm 4 mạch đồn kênh 2 đờng. Các
tín hiệu RD, WR v IO/M đợc bố trí sao cho khi đầu vo của mạch 74LS257 l B=1
thì ta lm việc (ghi/đọc) với thiết bị ngoại vi với các xung IOR v IOW, ngợc lại khi
B=0 thì ta lm việc với bộ nhớ với các xung MEMR v MEMW.
pr
D Q


clk
clr

Trên hình 8.4 ta còn thấy tín hiệu AEN của DMAC cũng đợc dùng để khoá
các tín hiệu điều khiển mới do CPU tạo ra khi DMAC đã nắm quyền điều khiển bus.


236


+5V
IOR

IOW
RD
MEMR
WR
MEMW


IO/M
từ AEN của 8237A-5



Hình 8.4. Một cách tạo các tín hiệu điều khiển mới cho hệ thống 8088 để lm việc
với DMAC 8237A-5


DMAC 8237A-5 thờng đợc dùng để điều khiển việc truyền dữ liệu giữa bộ
nhớ v thiết bị ngoại vi. Mạch 8237A-5 có thể điều khiển truyền dữ liệu theo 3 kiểu.





A
0
-A

3
EOP
RESET
CS
READY A
4
-A
7
CLK
AEN
ADSTB
MEMW
MENR
IOR
IOW


A
8
-A
15


HLDA DB
B
0
-DB
7
HRQ
DRQ

0
-
DRQ
3

DACK
0
-
DACK
3





Hình 8.5. Sơ đồ khối cấu trúc của DMAC 8237A-5.
A0
B0 Y0
A1
B1 Y1
A2 '257
B2 Y2
A3
B3 Y3
B OE
Bộ giảm
Thanh ghi tạm
Bộ tăng

Thanh ghi tạm

Đệm I/O

Khối

tạo nhịp

v

điều
khiển
bộ đếm số từ cho địa chỉ
Đệm ra
Đệm đọc
cơ sở cơ sở
Đệm ghi/đọc
hiện tại hiện tại

Địa chỉ Số từ Địa chỉ Số từ

Đệm đọc
Đệm ghi
Bộ mã hoá
Đệm
T.g. lệnh
mức u tiên
v logic
tạo u tiên
luân phiên
Tg mặt nạ
Th.ghi

Chế độ
Thanh
ghi tạm
T.
g
.trạn
g

thái
Tg yêucầu
I/O

237
Trong chế độ truyền kiểu đọc thì dữ liệu đợc đọc từ bộ nhớ rồi đa ra thiết bị
ngoại vi. Trong chế độ truyền kiểu ghi thì dữ liệu đợc đọc từ thiết bị ngoại vi rồi đa
vo bộ nhớ. Khi 8237A-5 lm việc ở chế độ kiểm tra thì tuy địa chỉ đợc đa đến bộ
nhớ nhng DMAC không tạo ra các xung điều khiển để tiến hnh các thao tác ghi/đọc
bộ nhớ hay thiết bị ngoại vi.
Ngoi ra mạch 8237A-5 còn hỗ trợ việc trao đổi dữ liệu giữa các vùng khác
nhau của bộ nhớ v cũng chỉ riêng trong chế độ lm việc ny, dữ liệu cần trao đổi mới
phải đi qua DMAC nhng với tốc độ cao hơn khi đi qua CPU (trong trờng hợp ny ta
có thể đọc đợc dữ liệu đó trong thanh ghi tạm).
Sơ đồ khối cấu trúc bên trong của mạch 8237A-5 đợc thể hiện trên hình 8.5.
Mạch DMAC 8237A-5 chứa 4 kênh trao đổi dữ liệu DMA với mức u tiên lập
trình đợc. DMAC 8237A-5 có tốc độ truyền 1 MB/s cho mỗi kênh, một kênh có thể
truyền 1 mảng có độ di 64 KB.


Giới thiệu các chân tín hiệu của 8237A-5


+ CLK[I]: tín hiệu đồng hồ của mạch. Để mạch có thể lm việc tốt với hệ 8088
thì tín hiệu CLK của hệ thống thờng đợc đảo trớc khi đa vo CLK của 8237A-5.
+ CS [I]: tín hiệu chọn vỏ của 8237A-5. Chân ny thờng đợc nối với đầu ra
của bộ giải mã địa chỉ. Bộ giải mã địa chỉ ny không cần dùng đến đầu vo IO/M vì
bản thân DMAC đã đợc cung cấp các xung điều khiển mới của hệ thống.
+ RESET[I]: tín hiệu nối với tín hiệu khởi động hệ thống. Khi mạch 8237A-5
đợc khởi động riêng thanh ghi mặt nạ đợc lập còn các bộ phận sau đây bị xoá:

- thanh ghi lệnh
- thanh ghi trạng thái
- thanh ghi yêu cầu DMA
- thanh ghi tạm thời
- mạch lật byte đầu/byte cuối (First/Last)
.
+ READY [I]: tín hiệu sẵn sng, nối với READY của hệ thống để gây ra các
chu kỳ đợi đối với các thiết bị ngoại vi hoặc bộ nhớ chậm.
+ HLDA [I]: tín hiệu báo chấp nhận yêu cầu treo từ CPU.
+ DRQ
0
-DRQ
3
[I]: các tín hiệu yêu cầu treo từ thiết bị ngoại vi. Cực tính của
các tín hiệu ny có thể lập trình đợc. Sau khi khởi động các tín hiệu ny đợc định
nghĩa l các tín hiệu kích hoạt mức cao (tích cực cao).
+ DB0-DB7 [I,O]: tín hiệu 2 chiều nối đến bus địa chỉ v bus dữ liệu của hệ
thống, các tín hiệu ny đợc dùng khi lập trình cho DMAC v khi DMAC hoạt động.
Khi DMAC hoạt động các chân ny chứa 8 bit địa chỉ cao A8-A15 của mảng nhớ dữ

238
liệu cần chuyển. Trong chế độ chuyển dữ liệu giữa các vùng của bộ nhớ tại các chân

ny có các dữ liệu đợc chuyển.
+ IOR [I,O] v IOW [I,O]: l các chân tín hiệu 2 chiều dùng trong khi lập
trình cho DMAC v trong các chu kỳ đọc v ghi.
+ EOP [I,O]: l tín hiệu 2 chiều. Khi l đầu vo nó đợc dùng để bắt buộc
DMAC kết thúc quá trình DMA. Khi l đầu ra nó đợc dùng để báo cho bên ngoi
biết một kênh no đó đã chuyển xong số byte theo yêu cầu (Terminal count, TC), lúc
ny nó thờng đợc dùng nh một yêu cầu ngắt để CPU xử lý việc kết thúc quá trình
DMA.
+A0-A3 [I,O]: l các tín hiệu 2 chiều dùng để chọn các thanh ghi trong 8237A-
5 khi lập trình v khi đọc (đầu vo), hoặc để chứa 4 bit địa chỉ thấp nhất của địa chỉ
mảng nhớ cần chuyển (đầu ra).
+A4-A7 [O]: các chân để chứa 4 bit địa chỉ phần cao trong byte địa chỉ thấp
của địa chỉ mảng nhớ cần chuyển.
+ HRQ [O]: tín hiệu yêu cầu treo đến CPU. Tín hiệu ny thờng đợc đồng bộ
với tín hiệu CLK của hệ thống rồi đợc đa đến chân HOLD của 8088.
+DACK
0
-DACK
3
[O]: l các tín hiệu trả lời các yêu cầu DMA cho các kênh.
Các tín hiệu ny có thể đợc lập trình để hoạt động theo mức thấp hoặc mức cao. Sau
khi khởi động, các tín hiệu ny đợc định nghĩa l các xung tích cực thấp.
+ AEN [O]: tín hiệu cho phép mạch chốt nối vo DB0-DB7 chốt lấy địa chỉ của
vùng nhớ cần trao đổi theo kiểu DMA. Tín hiệu ny cũng cho phép cấm các mạch đệm
bus địa chỉ v dữ liệu hoặc mạch tạo tín hiệu điều khiển của CPU nối vo các bus
tơng ứng khi DMAC hoạt động.
+ ADSTB [O]: xung cho phép chốt các bit địa chỉ phần cao A8-A15 có mặt trên
DB0-DB7.
+ MEMR [O] v MEMW [O]: l các chân tín hiệu do DMAC tạo ra v dùng
khi đọc/ghi bộ nhớ trong khi hoạt động.



Các thanh ghi bên trong của DMAC 8237A-5
Các thanh ghi bên trong DMAC 8237A-5 đợc CPU 8088 chọn để lm việc
nhờ các bit địa chỉ thấp A0-A3. Bảng 8.1 chỉ ra cách thức chọn ra các thanh ghi đó.
Các thanh ghi trong bảng trên có thể đợc ghi, đọc hoặc chỉ ghi vo v chúng
chứa các thông tin khác nhau liên quan đến cách thức lm việc v các thông số của
mỗi kênh DMA.
Trong bảng 8.2 v 8.3 liệt kê các thanh ghi trên theo các quan điểm ứng dụng
khác nhau để dễ tra cứu địa chỉ cho chúng khi lập trình với DMAC 8237A-5.




239
Bảng 8.1. Địa chỉ các thanh ghi bên trong của 8237A-5.

Bit địa chỉ
A3A2A1A0
Địa chỉ
Hex
Chọn chức năng R/W?
0 0 0 0 x0 Thanh ghi địa chỉ bộ nhớ kênh C0 R/W
0 0 0 1 x1 Thanh ghi đếm số từ kênh C0 R/W
0 0 1 0 x2 Thanh ghi địa chỉ bộ nhớ kênh C1 R/W
0 0 1 1 x3 Thanh ghi đếm số từ kênh C1 R/W
0 1 0 0 x4 Thanh ghi địa chỉ bộ nhớ kênh C2 R/W
0 1 0 1 x5 Thanh ghi đếm số từ kênh C2 R/W
0 1 1 0 x6 Thanh ghi địa chỉ bộ nhớ kênh C3 R/W
0 1 1 1 x7 Thanh ghi đếm số từ kênh C3 R/W

1 0 0 0 x8 Thanh ghi trạng thái/lệnh R/W
1 0 0 1 x9 Thanh ghi yêu cầu DMA W
1 0 1 0 xA Thanh ghi mặt nạ cho 1 kênh W
1 0 1 1 xB Thanh ghi chế độ W
1 1 0 0 xC Xoá mạch lật First/Last W
1 1 0 1 xD Xoá ton bộ các thanh ghi /đọc thanh ghi tạm W/R
1 1 1 0 xE Xoá thanh ghi mặt nạ cho 4 kênh W
1 1 1 1 xF Thanh ghi mặt nạ cho 4 kênh W

Ghi chú: x do cs quyết định



Bảng 8.2. Địa chỉ các thanh ghi trong để ghi/đọc địa chỉ v số từ cần chuyển.

Kênh CS IOR IOW A3 A2 A1 A0 Thanh ghi R /W?
C0 0 1 0 0 0 0 0 địa chỉ cơ sở v địa chỉ hiện tại W
0 0 1 0 0 0 0 địa chỉ hiện tại R
0 1 0 0 0 0 1 bộ đếm cơ sở v bộ đếm hiện tại W
0 0 1 0 0 0 1 bộ đếm hiện tại R
C1 0 1 0 0 0 1 0 địa chỉ cơ sở v địa chỉ hiện tại W
0 0 1 0 0 1 0 địa chỉ hiện tại R
0 1 0 0 0 1 1 bộ đếm cơ sở v bộ đếm hiện tại W
0 0 1 0 0 1 1 bộ đếm hiện tại R
C2 0 1 0 0 1 0 0 địa chỉ cơ sở v địa chỉ hiện tại W
0 0 1 0 1 0 0 địa chỉ hiện tại R
0 1 0 0 1 0 1 bộ đếm cơ sở v bộ đếm hiện tại W
0 0 1 0 1 0 1 bộ đếm hiện tại R
C3 0 1 0 0 1 1 0 địa chỉ cơ sở v địa chỉ hiện tại W
0 0 1 0 1 1 0 địa chỉ hiện tại R

0 1 0 0 1 1 1 bộ đếm cơ sở v bộ đếm hiện tại W
0 0 1 0 1 1 1 bộ đếm hiện tại R



240
Bảng 8.3. Địa chỉ các thanh ghi cho điều khiển v trạng thái.

A3 A2 A1 A0 IOR IOW Thao tác
1 0 0 0 0 1 đọc thanh ghi trạng thái
1 0 0 0 1 0 ghi thanh ghi lệnh
1 0 0 1 0 1 không hợp lệ
1 0 0 1 1 0 ghi thanh ghi yêu cầu DMA
1 0 1 0 0 1 không hợp lệ
1 0 1 0 1 0 ghi thanh ghi mặt nạ cho 1 kênh
1 0 1 1 0 1 không hợp lệ
1 0 1 1 1 0 ghi thanh ghi chế độ
1 1 0 0 0 1 không hợp lệ
1 1 0 0 1 0 xoá mạch lật First/Last
1 1 0 1 0 1 đọc thanh ghi tạm
1 1 0 1 1 0 xoá ton bộ các thanh ghi bên trong
1 1 1 0 0 1 không hợp lệ
1 1 1 0 1 0 xoá thanh ghi mặt nạ của 4 kênh
1 1 1 1 0 1 không hợp lệ
1 1 1 1 1 0 ghi thanh ghi mặt nạ cho 4 kênh


Ta sẽ giới thiệu qua các đặc điểm của một số trong các thanh ghi kể trên.

+ Thanh ghi địa chỉ hiện thời: Đây l thanh ghi 16 bit dùng để chứa địa chỉ

của vùng nhớ phải chuyển. Mỗi kênh có riêng thanh ghi ny để chứa địa chỉ. Khi 1
byte đợc truyền đi, các thanh ghi ny tự động tăng hay giảm tuỳ theo trớc đó nó
đợc lập trình nh thế no.
+ Thanh ghi số đếm hiện thời: Thanh ghi 16 bit ny dùng để chứa số byte m
kênh phải truyền (nhiều nhất l 64KB). Mỗi kênh có thanh ghi số byte của mình. Các
thanh ghi ny đợc ghi bằng số đếm nhỏ hơn 1 so với số byte thực chuyển.
+ Thanh ghi địa chỉ cơ sở v thanh ghi số đếm cơ sở: các thanh ghi ny đợc
dùng để chứa địa chỉ v số đếm cho mỗi kênh khi chế độ tự khởi đầu đợc sử dụng.
Trong chế độ ny khi một quá trình DMA kết thúc thì các thanh ghi địa chỉ hiện thời
v số đếm hiện thời đợc nạp lại giá trị cũ lấy từ thanh ghi địa chỉ cơ sở v thanh ghi
số đếm cơ sở. Khi các thanh ghi địa chỉ hiện thời v số đếm hiện thời đợc lập trình
thì các thanh ghi địa chỉ cơ sở v thanh ghi số đếm cơ sở cũng đợc lập trình bất kể
chế độ tự khởi đầu có đợc sử dụng hay không.
+ Thanh ghi lệnh: Thanh ghi ny dùng để lập trình cho DMAC. Nó bị xoá khi
khởi động hoặc khi ta sử dụng lệnh xoá ton bộ các thanh ghi.

Dạng thức của thanh ghi lệnh đợc biểu diễn trên hình 8.6.



241
7 6 5 4 3 2 1 0

1: DACK 1: truyền bộ nhớ bộ nhớ
0: DACK 0: Cấm truyền bộ nhớ bộ nhớ
1:
Kênh 0 đợc giữ nguyên địa chỉ
1: DRQ dạng 0: Cấm kênh 0 giữ nguyên địa chỉ
0: DRQ dạng x: Nếu bit0 = 0
1: Ghi bình thờng 1: DMAC đợc phép hoạt động

0: Ghi kéo di 0: DMAC bị cấm hoạt động
x: Nếu bit3 =1 1: Nhịp rút ngắn
1: Mức u tiên đặt sẵn 0: Nhịp bình thờng
0: Mức u tiên luân phiên x: Nếu bit0 =1




Hình 8.6. Dạng thức của thanh ghi lệnh.

Các bit của thanh ghi ny quyết định các phơng thức lm việc khác nhau
của 8237A-5. Ta sẽ giải thích sau đây ý nghĩa của các bit.
Bit D0 cho phép DMAC dùng kênh 0 v kênh 1 để chuyển dữ liệu giữa 2 vùng
nhớ. Địa chỉ của byte dữ liệu ở vùng gốc đợc chứa trong thanh ghi địa chỉ của kênh
0, còn địa chỉ của byte dữ liệu ở vùng đích đợc chứa trong thanh ghi địa chỉ của kênh
1. Số byte cần chuyển đợc để trong thanh ghi đếm của kênh 1. Byte cần chuyển lúc
đầu đợc đọc từ vùng gốc vo thanh ghi tạm để rồi từ đó nó đợc gửi đến vùng đích
trong bớc tiếp theo (hoạt động nh lệnh MOVSB nhng với tốc độ cao).
Bit D1=1 dùng để cho phép kênh 0 giữ nguyên địa chỉ trong chế độ truyền dữ
liệu giữa 2 vùng nhớ. Điều ny khiến cho ton bộ các ô nhớ vùng đích đợc nạp cùng
một byte dữ liệu.
Bit D2 cho phép DMAC hoạt động hay không.
Bit D3 quyết định byte cần chuyển đợc truyền với 4 hay 2 chu kỳ đồng hồ.
Bit D4 cho phép chọn chế độ u tiên cố định (kênh 0 có mức u tiên cao nhất,
kênh 3 có mức u tiên thấp nhất) hoặc chế độ u tiên luân phiên (kênh 0 lúc đầu có
mức u tiên cao nhất, sau khi kênh ny đợc chọn để chuyển dữ liệu thì nó đợc
nhận mức u tiên thấp nhất, kênh 1 lại trở thnh kênh có mức u tiên cao nhất ).
Bit D5 cho phép chọn thời gian ghi bình thờng hay kéo di cho thiết bị ngoại
vi chậm.
Các bit D6 v D7 cho phép chọn cực tính tích cực của các xung DRQ0-DRQ4

v DACK0-DACK4.



242

7 6 5 4 3 2 1 0

00: DMA theo yêu cầu 00: Chọn kênh 0
01: Chế độ chuyển 1byte 01: Chọn kênh 1
10: Chế độ chuyển mảng 10: Chọn kênh 2
11: Chế độ nối tầng 11: Chọn kênh 3

00: Chế độ kiểm tra
1: Địa chỉ giảm 01: Chế độ ghi
0: Địa chỉ tăng 10: Chế độ đọc
11: Không hợp lệ
1: Cho phép tự khởi đầu xx: Khi D7D6 =11
0: Cấm tự khởi đầu



Hình 8.7. Dạng thức của thanh ghi chế độ.


+ Thanh ghi chế độ: Dùng đặt chế độ lm việc cho các kênh của DMAC. Mỗi
kênh của DMAC có một thanh ghi chế độ riêng. Dạng thức của thanh ghi chế độ đợc
biểu diễn trên hình 8.7.
Trong hế độ DMA theo yêu cầu, DMAC tiến hnh chuyển dữ liệu cho đến khi
có tín hiệu EOP từ bên ngoi hoặc cho đến khi không còn yêu cầu DMA nữa (DRQ trở

nên không tích cực).
Trong chế độ DMA chuyển từng byte, chừng no vẫn còn yêu cầu DMA (DRQ
vẫn l tích cực) thì DMAC đa ra HRQ=0 trong thời gian 1 chu kỳ bus sau mỗi lần
chuyển xong một byte, sau đó nó lại đa ra HRQ=1. Cứ nh vậy DMAC v CPU luân
phiên nhau sử dụng bus cho đến khi đếm hết (TC).
Trong chế độ DMA chuyển cả mảng, cả một mảng gồm một số byte bằng nội
dung bộ đếm đợc chuyển liền một lúc. Chân yêu cầu chuyển dữ liệu DRQ không cần
phải đợc giữ ở mức tích cực suốt trong quá trình chuyển.
Chế độ nối tầng đợc dùng khi có nhiều bộ DMAC đợc dùng trong hệ thống
để mở rộng số kênh có thể yêu cầu DMA.

+ Thanh ghi yêu cầu: Yêu cầu DMA có thể đợc thiết lập/xoá theo ý muốn
bằng chơng trình. Điều ny rất có lợi khi ta muốn chuyển dữ liệu giữa các vùng khác
nhau của bộ nhớ. Lúc ny các kênh liên quan phải đợc lập trình ở chế độ chuyển cả
mảng. Dạng thức của thanh ghi yêu cầu đợc biểu diễn trên hình 8.8.



243

7 6 5 4 3 2 1 0
x x x x x
00: Chọn kênh 0
1: Thiết lập yêu cầu 01: Chọn kênh 1
0: Xoá yêu cầu 10: Chọn kênh 2
11: Chọn kênh 3



Hình 8.8. Dạng thức của thanh ghi yêu cầu.


+ Thanh ghi mặt nạ riêng cho từng kênh: Bằng thanh ghi ny ta có thể lập
trình để cấm (cho bit mặt nạ tơng ứng bằng 1) hay cho phép hoạt động (cho bit mặt
nạ tơng ứng bằng 0) đối với từng kênh một.
Dạng thức của thanh ghi mặt nạ riêng rẽ cho từng kênh đợc biểu diễn trên
hình 8.9.
+ Thanh ghi mặt nạ tổng hợp: Với thanh ghi ny ta có thể lập trình để cấm
(cho bit mặt nạ tơng ứng bằng 1) hay cho phép hoạt động (cho bit mặt nạ tơng ứng
bằng 0) đối với từng kênh chỉ bằng một lệnh.
Dạng thức của thanh ghi mặt nạ tổng hợp đợc biểu diễn trên hình 8.10.


7 6 5 4 3 2 1 0
x x x x x
00: Chọn kênh 0
1: Thiết lập mặt nạ 01: Chọn kênh 1
0: Xoá mặt nạ 10: Chọn kênh 2
(x: không quan tâm) 11: Chọn kênh 3


Hình 8.9. Dạng thức của thanh ghi mặt nạ riêng cho mỗi kênh.


7 6 5 4 3 2 1 0
x x x x
1: Lập mặt nạ cho kênh 3 1: Lập mặt nạ cho kênh 0
0: Xoá mặt nạ cho kênh 3 0: Xoá mặt nạ cho kênh 0
1: Lập mặt nạ cho kênh 2 1: Lập mặt nạ cho kênh 1
0: Xoá mặt nạ cho kênh 2 0: Xoá mặt nạ cho kênh 1




Hình 8.10. Dạng thức của thanh ghi mặt nạ tổng hợp.

244
+ Thanh ghi trạng thái: Thanh ghi ny cho phép xác định trạng thái của các
kênh trong DMAC: kênh no đã truyền xong (đạt số đếm, TC), kênh no đang có yêu
cầu DMA để trao đổi dữ liệu. Khi một kênh no đó đạt TC, kênh đó sẽ tự động bị cấm.
Dạng thức của thanh ghi trạng thái đợc biểu diễn trên hình 8.11.


Các lệnh đặc biệt cho DMAC 8237A-5
Có 3 lệnh đặc biệt để điều khiển hoạt động của DMAC 8237A-5. Các lệnh ny
thực hiện chỉ bằng các lệnh OUT với các địa chỉ cổng xác định tuỳ theo các thanh ghi
m không cần đến giá trị cụ thể của thanh ghi AL.



7 6 5 4 3 2 1 0

1: Kênh 0 có yêu cầu 1: Kênh 0 đạt số đếm
1: Kênh 1 có yêu cầu 1: Kênh 1 đạt số đếm
1: Kênh 2 có yêu cầu 1: Kênh 2 đạt số đếm
1: Kênh 3 có yêu cầu 1: Kênh 3 đạt số đếm



Hình 8.11. Dạng thức của thanh ghi trạng thái.

+ Lệnh xoá mạch lật byte đầu/byte cuối (First/Last, F/L): F/L l một mạch

lật bên trong DMAC để chỉ ra byte no trong các thanh ghi 16 bit (thanh ghi địa chỉ
hoặc thanh ghi số đếm đợc chọn lm việc. Nếu F/L=1 thì đó l MSB, còn nếu F/L=0
thì đó l LSB. Mạch lật F/L tự động thay đổi trạng thái khi ta ghi/đọc các thanh ghi
đó. Khi khởi động xong thì F/L=0.
+ Lệnh xoá ton bộ các thanh ghi: lệnh ny có tác động nh thao tác khởi
động. Tất cả các thanh ghi đều bị xoá riêng thanh ghi mặt nạ tổng hợp thì đợc lập để
cấm các yêu cầu trao đổi dữ liệu.
+ Lệnh xoá thanh ghi mặt nạ tổng hợp: lệnh ny cho phép các kênh của
DMAC bắt đầu yêu cầu trao đổi dữ liệu.

Lập trình cho các thanh ghi địa chỉ v thanh ghi số đếm
Việc lập trình cho các thanh ghi địa chỉ v thanh ghi số đếm đợc thực hiện
riêng cho mỗi kênh. Cần phải định trớc giá trị logic của F/L để thao tác chính xác
đợc với LSB v MSB của các thanh ghi trên. Ngoi ra còn phải cấm các yêu cầu
DMA của các kênh trong khi lập trình cho chúng.

245
Có thể tuân theo các bớc sau đây để lập trình cho DMAC 8237A-5:

+ Xoá mạch lật F/L
+ Cấm các yêu cầu của các kênh
+ Ghi LSB rồi MSB của thanh ghi địa chỉ
+ Ghi LSB rồi MSB của thanh ghi số đếm

Nối DMAC 8237A-5 với CPU 8088 ở chế độ MIN
Việc phối ghép mạch 8237A-5 với 8088 đợc thể hiện trên hình 8.12.
Tín hiệu của 8237A-5 AEN=0 khi CPU kiểm soát hoạt động của ton hệ. Các
bit địa chỉ A16-A19 v A0-A7 sẽ đợc chốt bởi U1 v U3 để đa ra bus địa chỉ. Các
tín hiệu điều khiển dẫn xuất từ CPU cũng đợc đa ra bus điều khiển bởi mạch dồn
kênh U5 (74LS257). Khi DMAC nắm quyền chỉ huy hệ thống thì AEN=1 sẽ cấm các

chốt U1 v U3 mở thông từ CPU ra bus, nhng lại cho phép chốt U2 v mở chốt U4
của DMAC để cung cấp các bit địa chỉ A16-A19 v A8-A15. Các bit địa chỉ khác l
A0-A7 v các tín hiệu MEMR, MEMR, IOR, IOW sẽ đợc lấy trực tiếp từ DMAC.
Xung ADSTB sẽ cho phép mở mạch chốt U4 để đa ra các bit địa chỉ A8-A15
đợc chốt từ bus D của 8237A-5.
Vì DMAC 8237A-5 chỉ có khả năng cung cấp các bit địa chỉ A0-A15, giá trị
của các bit A16-A19 đợc ghi vo chốt U2 (74LS373) nhờ lệnh OUT với địa chỉ cổng
đợc giải mã nhờ mạch giải mã địa chỉ U6, mạch giải mã địa chỉ ny đồng thời cũng
cung cấp xung chọn vỏ cho 8237A-5. Trên hình 8.12 để cho việc giải thích trở nên đơn
giản mới chỉ biểu diễn cách tạo ra các bit địa chỉ cao nhất cho một kênh. Trong thực
tế để lm việc ny cho tất cả các kênh (nh trong các máy IBM-PC), ta có thể dùng vi
mạch chuyên dụng 74LS670 (4 thanh ghi x 4 bit) để lm thanh ghi trang DMA cho cả
4 kênh của DMAC. Tất nhiên ta phải nối lại các tín hiệu cho đúng.

Một ví dụ truyền dữ liệu giữa 2 vùng nhớ
Việc dùng chế độ DMA để chuyển dữ liệu giữa các vùng khác nhau của bộ nhớ
cho phép đạt đợc tốc độ truyền cao hơn so với với việc dùng các lệnh chuyển dữ liệu
Rep MOVSB của CPU. Nếu lấy ví dụ với trờng hợp DMAC 8237A-5 v CPU 8088
5MHz thì tốc độ truyền của DMAC cao hơn cỡ 2 lần.
Sau đây l một ví dụ sử dụng 8237A-5 để chuyển dữ liệu giữa 2 vùng nhớ.
Giả thiết ta phải chuyển một số byte dữ liệu từ vùng nhớ có địa chỉ đầu l
10000H sang vùng nhớ khác có chỉ đầu l 14000H trong một hệ thống có sơ đồ phần
DMAC v CPU dựa trên hình 8.12.
Ta có thể dùng chơng trình MemTrans.asm để giải quyết công việc ny.



246
U1
A

16
/So - A
16
-A
19
A
19
/S
3

8088 U2


IOW
A
8
-A
15
A
8
-A
15


U3

Ao-A
7



ALE

ADo-AD
7
Do-D
7


U4





A
4
-A
7

HLDA
U6
HOLD



clk vμ reset
CLK tõ 8284 U5
WR
RD IOR,IOW
MN/MX IO/M MEMR, MEMW


'373

G OC

'373

OC G
'373


G OC
'373


G OC
D0-D7 AEN ADSTB A0-A7
HLDA
HRQ Dmac 8237A-5 CS

MEMR,IOR
CLK RESET AEN MEMW,IOW
+5V
H×nh 8.12. S¬ ®å phèi ghÐp 8088 ë chÕ ®é min víi 8237A-5.
OE
'257
B


Gi¶i m·

'138


Q D
clk
cl
r


247
Trong chơng trình ny, đầu tiên ta gửi 4 bit địa chỉ cao nhất ra chốt U1, sau
đó ta xoá mạch lật F/L rồi gửi địa chỉ của vùng gốc v vùng đích ra các thanh ghi
tơng ứng của kênh 0 v kênh 1. Số byte cần chuyển phải đợc đa vo bộ đếm của
kênh 1. Tiếp theo ta chọn chế độ cho mỗi kênh. Ta phải đa ra từ điều khiển để cho
DMAC lm việc ở chế độ chuyển cả mảng. Kênh 0 sau đó đợc cho phép hoạt động v
kích hoạt bằng chơng trình. Trong quá trình chuyển dữ liệu ta kiểm tra thanh ghi
trạng thái để dừng chơng trình khi đạt số đếm (TC).

0 Chơng trình MemTrans.asm

Model Small
.Stack 100
.Data
CHOT_U2 EQU 10H ; địa chỉ chốt U2
ML_FL EQU 7CH ; địa chỉ mạch lật F/L
DCHI_C0 EQU 70H ; địa chỉ của tgdc kênh 0
DCHI_C1 EQU 72H ; địa chỉ của tgdc kênh 1
TGDEM_C1 EQU 73H ; địa chỉ tg đếm kênh 1
TGCHEDO EQU 7BH ; địa chỉ tg chế độ
TGLENH EQU 78H ; địa chỉ tg lệnh

TGMATNA EQU 7FH ; địa chỉ tg mặt nạ
TGYEUCAU EQU 79H ; địa chỉ tg yêu cầu
TGTTHAI EQU 78H ; địa chỉ tg trạng thái
SOBYTE DW 100H ; số byte phải chuyển
A16_A19 DB 01H ; 4 bit địa chỉ cao nhất
DCHIGOC DW 0000H ; 16 bit địa chỉ của gốc
DCHIDIC DW 4000H ; 16 bit địa chỉ của đích

.Code
Main Proc
Mov AX,@Data ; khởi đầu DS
Mov DS,AX
MOV AL,A16_A19 ; ghi địa chỉ cao vo chốt
OUT CHOT_U2,AL
OUT ML_FL,AL ; xoá mạch lật F/L
Mov AX,DCHIGOC ; địa chỉ cho kênh 0
OUT DCHI_C0,AL
MOV AL,AH
OUT DCHI_C0,AL
Mov AX,DCHIDIC ; địa chỉ cho kênh 1
OUT DCHI_C1,AL
MOV AL,AH
OUT DCHI_C1,AL
DEC SOBYTE ; giảm số đếm cho kênh 1
Mov AX,SOBYTE
OUT TGDEM_C1,AL

248
MOV AL,AH
OUT TGDEM_C1,AL

MOV AL,88H ; thiết lập chế độ kênh 0
OUT TGCHEDO,AL
MOV AL,85H ; thiết lập chế độ kênh 1
OUT TGCHEDO,AL
MOV AL,1 ; chế độ chuyển mảng
OUT TGLENH,AL
MOV AL,0CH ; bỏ mặt nạ cho kênh 0,1
OUT TGMATNA,AL
MOV AL,4 ; cho kênh 0 yêu cầu DMA
OUT TGYEUCAU,AL
LAP:IN AL,TGTTHAI ; đọc thanh ghi trạng thái
TEST AL,2 ; kênh 1 đạt TC ?
JZ LAP ; chờ cho tới khi xong
Main Endp
End Main


249

×