CHƯƠNG 8
VÀO /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 vào 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 sàng 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 vào thiết bị ngoại vi hoặc ngược lại , từ thiết bị ngoại vi nó
được đọc vào 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 vào 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 hành 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 màn 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ó khả
năng ghi /đọc dữ liệu trực tiếp với bộ nhớ (diret memory acces
.DMA- thâm nhập vào 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 .để làm được điều này
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 vào bộ nhớ ( dircet memory
access con troller.DMAC)
Có thể lấy một ví dụ cụ thể để minh hoạ điiêù này .trong khi một
mạch DMAC như 8237A của inter có thể điều khiển việc chuyển một
byte trong một mảng dữ liệu từ 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 làm hết cỡ 4 chu kỳ :
; số chu kỳ đồng hồ
LAP: MOV AL, (SI );10
OUT PORT ,AL ; 10
INC SI ; 2
LOOP 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 vào 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 bú cho việc trao đổi dữ liệu với bộ nhớ thì thông qua chân này
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 bit vào
trạng thái trở kháng cao )và đưa xung HLDA ra ngoài để thông báo
CPU cho phép sử dụng bú .
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
Ta nhận thấy trong hệ thống này , khi CPU tự tách ra khỏi hệ thống
bặng 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 phải chịu trách nhiệm điều
khiển toàn bộ hoạt động trao đổi dữ liệu của hệ thống . để làm được
điều đó DMAC phải có khả năng tạo ra được các tín hiệu điiêù 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 là một
thiết bị lập trình được (để CPU “dăn dò ” nó bằng cách đưa vào các từ
điều khiển trước khi nó có thể hoạt động độc lập ).
Qua trinh 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 vào 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 để trao đổi dữ liệu .
ta sẽ lần luợt giới thiệu qua các kiểu trao đổi dữ liệu này .
Trao đổi cả môt mảng dữ liệu
Trong chế độ này CPU bị treo trong suốt quá trình trao đổi mảng
dữ liệu .Chế độ này đượ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ế độ làm việc vào DMAC để
quy định cách thức làm việc , địa chỉ đầu của mảng nhớ , độ dài của
mảng nhớ ,
2.khi thiết bị ngoại vi co 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 dó
nó treo cá bus của mình và đưa ra tín hiệu HLDA báo cho DMAC
được toàn 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=O để đọc một byte từ bộ nhớ ra bus dữ liệu .tiếp đó DMAC
đưa ra tín hiệu IOW =0 để ghi đưa 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).
7. quá trình DMA kết thúc , DMAC cho ra tín hiệu HRQ=0 để báo
cho CPU biết để CPU dành 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 này CPU không bị treo lâu dài
trong một lần nhưng thỉnh thoảng lại bị treo trong 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 lên tốc độ thực hiện một công việc nào đó của CPU chỉ bị
suy giảm chứ không 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
thi chỉ có một 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 này , ta phải có các logic phụ bên
ngoài 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 ngoài )và tận dụng các chu kỳ đó vào việc trao
đổi dữ liệu giữa thiết bị ngoại vi với bộ nhớ . Trong cách làm này 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 này 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à HLDA.quan hệ giữa hai tín
hiệu đó được thể hiện trên hình 8.2.
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 .busd và bus c (trừ tín hiệu ALE=O)để nhường quyền
sử dụng các bus này choDMAC . Cần lưu ý rằng đầu vào HOLD có
mức ưu tiên cao hơn các đầu vào yêu cầu ngắt INTR và MNI nhưng
lại thấp hơn so với đầu vào 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 vào chân
HOLD của 8088 người ta thường dùng mạch trên hình 8.3.
2.2. Mạch DMAC 8237A -5của Inter
Trước khi trình bày kỹ về mạch DMAC 8237A của Inter 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 làm DMAC
Như trên hình 8.1 đã thể hiện tương đối rõ , để thể hiện được
chức năng DMA trong hệ ,bus điều của hệ vi xử lý 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 lkhác hoạt động .đó chinhd là việc các tín hiệu RD.WD và IO/M
được sử dụng để taọ 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 bày 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 74LS 257 gồm 4 mạch
dồn kênh 2 đường . các tín hiệu RD.WD và IO/M được bố trí sao cho
khi đầu vào của mạch 74LS 257 là B=1 thì ta làm việc với thiết bị
ngoại nhập với các xung IORvà IOW ,ngược lại khi B=0 thì ta làm
việc với bộ nhớ với các xung MEMR.MEMW.
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.
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 vào bộ nhớ . khi 8237A -5 làm
việc ở chế độ kiểm tra thì tuy địa chỉ được đưa đến bộ nhớ nhưng
DMAC không tạo ra các xung điều khiển để tiến hành các thao tác
ghi/đọc bộ nhớ hay thiết bị ngoại vi .
Ngoài ra mạch 8237 A-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ế độ làm
việc này , dữ liệu cần trao đổi mới phải di qua DMAC nhưng với tốc
độ cao hơn khi đi qua CPU nhưng với tốc độ cao hơn khi đi qua CPU
(trong trường hợp này 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 .MAC 8237A -5 có tốc độ truyền 1
MB/s cho mỗi kênh , một kênh co thể truyền môt mảng có độ dài
64KB .
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ể làm 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 vào CLK của 8237A-5
+CS {I}:TÍN HIỆU CHỌN VỎ CỦA 8237a-5 chân này thường
được nối với đầu ra của bộ giải mã địa chỉ .bộ giải mã địa chỉ
này không cần dùng đến đầu vào IO/M vì bản thân DMAC đã
được cung cấp các xung điều khiển mới của hên thống .
+RESET{I}:tín hiệu nối với tín hiệu khởi động của hệ thống .
khi mạch 8237A -5 ĐƯỢC KHỞI ĐỘNG RIÊNG THANH
GHI MẶT LẠ ĐƯỢC LẬP CÒN CÁC BỘ PHẬN SAU ĐAY
BỊ XOÁ :
thanhghi 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 (Firsst/Last)
+READY{I}:tín hiệu sẵn sàng , 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 và cá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
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 này có thể lâp trình được . sau khi khpởi
động các tín hiệunày được định nghĩ a là các tín hiệu kích hoạt
mức cao .
+DBO-BD7{I,O}:tín hiệu hai chiều nối đến bus địa chỉ và bus
dữ lliệu của hệ thống các tín hiệu này được dùng khi lâp trình
cho DMAC và khi DMAC hoạt động các chân này chứa 8 bit
địa chỉ cao A8-A15 của mảng nhớ dữ liệu lịch 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 này 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 hai 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 HAI CHIỀU .KHI LÀ ĐẦU VÀO
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 ngoài biết
một kênh nào đó đã chuyển xong số byte theo yêu cầu , luc nay
nó thường dùng như một yêu cầu ngắt để CPU xử lý việc kết
thúc quá trinh DMA
+A0-A3{I,O}:là các tín hiệu hai chiều dùng để chọn các thanh
ghi trong 8237A 5 khi lập trình và khi đọc(đầu vào), hoặc để
chuqá 4 bit địa chỉ thấp nhất của địa chỉ mảng nhớ cần chuyển
(đầu ra)
A4-A7[0]:các chân để chứa 4 bít địa chỉ phần cao trong byte
địa chỉ thấp của địa chỉ mảng nhớ cần chuyển
HRQ[0]:tín hiệu yêu cầu treo đến CPU. Tín hiệu này 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
[0]: 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 này 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í
hiệu này được định nghĩa là các xung tích cực thấp.
AEN[0]: tín hiệu cho phép mạch nối vào 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
này cũng cho phép cấm các mạch đệm bú đị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 vào các bú
tươn ứng khi DMAC hoạt động.
ADSTB[0]: xung cho phép chốt các bit địa chỉ phần cao A8-
A15 có mặt trên DB0-DB7.
MẺM[0] và MEMƯ[0]: 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
để làm 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ản trên có thể được ghi.đcj hoặc chỉ ghi
vào và chúng chứa các thông tin khác nhau liên quan đến cách
thức làm 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
Bảng 8.1. Địa chỉ các thanh ghi bên trong của 8237A5
Bảng8.2. Địa chỉ các thanh ghi trong để ghi/ đọc địa chỉ và ssố
từ cần chuyển.
Bảng 8.3.Địa chỉ các thanh ghi cho điều khiển và trạng thái.
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 bít dùng để
chứa địa chỉ của vùng nhớ phải chuyển.Mỗi kênh có riêng
thanh ghi ày để chứa địa chỉ .Khi 1 byte được truyền đi. Các
thanh ghi này tự dộng tăng hay giảm tuỳ theo trước nó được lập
trình như thế nào.
Thanh ghi số đếm hiện thời: Thanh ghi 16 bít này dùng để chứâ
số byte mà kênh phải truyền( nhiều nhất là 16KB). Mỗi kênh có
thanh ghi số byte của mình. Các thanh ghi này được ghi bằng
số đếm nhỏ nhất 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 này được dùng để chứa địa chỉ và số đeems cho mỗi kênh
khi chế độ tự động khởi đầu được sử dụng.
Trong chế độ này 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ế dộ tự khởi đầu có được sử dụng hay
không.
Thanh ghi lệnh: Thanh ghi này 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á toàn 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.
Các bít của thanh ghi này quyết định các phương thức làm 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 đích được
chứa trong thanh ghi địa chỉ của kênh 1. Số byte 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 vào 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 nhưng 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 giữ liệu giữa 2 vùng nhớ. Điều này khiến cho
toàn 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 4hay 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 này đượ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ở thành kênh có mức
ưu tiên cao nhất )
Bit D5 cho phép chọn thời gian ghibình thường hay kéo dài
cho tiế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.
+ thanh ghi chế độ: dùng đặt chế độ làm 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 chế độ DMA theo yêu cầu. DMAC tiến hành chuyển dữ
liệu cho đến khi có tín hiệu EOP từ bên ngoài 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 nào 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 sang 1 byte.
Sau đó nó lại đưa ra HRQ=1. Cứ như vậy DMAC và CPU luân
phiên nhau xữ 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 1 lúc. Chân yêu
cầu chuyển dữ liệu DRQ không cần phải giữ được ở mức tích
cực suốt trong quá trình chuyển.
Chế độ nối tần đượ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 này 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
này 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
7 6 5 4 3 2 1 0
X X X X X
1.Thiết lập yêu cầu 00: chọn kênh 0
0: xóa theo yêu cầu 01: chọn kênh 1
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 này ta
có thể lập trình để cấm (cho Bit mặt nạ tương ứng = 1) thay
cho phép hoạt động (cho Bit mặt nạ tương ứng = 0) đối với
từng kênh một .
Dạng thức của thanh ghi mặt nạ riêng lẻ 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 này ta có thể lập
trình để cấm (cho Bit mặt nạ tương ứng = 1) thay cho phép
hoạt động (cho Bit mặt nạ tương ứ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
1.Thiết lập mặt nạ 00: chọn kênh 0
0: xóa theo mặt nạ 01: chọn kênh 1
10: chọn kênh 2
11: chọn kênh 3
(X: không quan tâm)
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: xóa mặt nạ cho kênh 3 0 Xóa 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: Xóa mặt nạ cho kênh 2 0: xóa 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.
- Thanh ghi trạng thái : Thanh ghi này cho phép xác định trạng
thái của các kênh trong DMAC. Kênh nào đã trền xong (đạt số
đếm. TC) kênh nào đang có yêu cầu DMA để trao đổi dữ liệu.
Khi một kênh nào đó đạ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 này chỉ thực hiện bằng các lệnh OUT với các địa
chỉ cổng xác định thì theo 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 xóa mạch lật byte đầu/byte cuối (First/Lát, F/L) : F/L là
một mạch lật bên trong DMAC để chỉ ra byte nào trong các thanh ghi
16 bit để chỉ ra byte nào trong các thanh ghi 16bit (thanh ghi địa chỉ
hoặc thanh ghi số đếm được chọn làm việc .nếu F/L=1 thi số đó là
MSB , còn nếu F/L=O ) thì số đó 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=O
lệnh xoá toàn bộ các thanh ghi : lệnh này có tác động như thao
tác khởi động . tất cả các thanh ghji đề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 này 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 . ngoài 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. Có thể tuân theo các bước sau đây để lập trình
cho DMAC 8237A -5:
+ xoá mặt 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 AEN-=O khi CPU kiểm soát hoạt động của toàn
hệ . các bit địa chỉ A 16 -A 19 và AO-A7 sẽ được chốt bởi U1 và U3
để đưa ra bit đị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 U3
vàU4 mở thông từ CPU ra bus . nhưng 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 ADSSTB sẽ cho phép mở mạch chốt U4 để đưa các bit địa chỉ
A8-A15 . được chốt từ bit D của 8237A -5.
Vì DMAC 8237A -5 chỉ có khả năng cung cấp các bit địa chỉ
A16-A19 được ghi vào 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ỉ này đồ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ác cách tạo ta địa chỉ cao nhất cho một kênh ta có thể dùng vi mạch
chuyên dụng 74LS 670 để làm thanh ghi trang DMA cho cả 4 kênh
của DMAC . tat 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 hai vùng nhớ
Việc dùng chế đọ DMA để chuểyn dữ liệu giữa các vùng klhác
nhau của bộ cho phép đạt được tốc độ truyền cao hơn so với việc dùng
các lệnh chuyển dữ liệu REP MOV SB của CPU nếu lấy ví dụ với
trường hợp DMAC 8237A -5 và CPU 8088 5MH
Z
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 số một số byte số liệu từ vùng nhớ có
địa chỉ là 10000H sang vùng nhớ khác có chỉ đầu là 14000H trong
một hệ thống có sơ đồ phầnDMAC và CPU dựa trên hình 8.12.
Ta có thể dùng chương trình Mem Trans.asm để giải quyết
công việc này .
Trong chương trình này , đầu tiên ta gửi 4 bit địa chỉ cao 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 o và 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 làm việc
oqr chế độ chuyển cả mảng .Kênh 0 sau đó được cho phép hoạt động
và kích hoạt động 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).
CHƯƠNG TRÌNH Mem Trans.asm
m