Chương 4: Ghép nối bộ nhớ và tổ chức vào ra dữ liệu cho 80x86
4.4. Truy nhËp trùc tiÕp bé nhí DMA
4.4.1.Nguyên tắc 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)
4.4.2. Các bước thực hiện DMA của 80x86
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:
D0÷D7 Reset
CLK C/D RD WR CS
DSR DTR CTS RTS
Đệm dữ
liệu
Đệm phát TxD
TxRDY TxEMPTY TxC
RxD RxRDY RxC
SynDet/BrkDet Kênh
thông tin
§iÒu khiÓn phát
Đệm thu
§iÒu khiÓn
thu
§iÒu khiÓn Modem
Lôgic Đọc/
ghi
+ 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 . - 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:
+ 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ớ,...
+ Khi thiết bị ngoại vi có yêu cầu trao đổi dữ liệu, nó đưa DRQ =1 đến DMAC . + 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 .
+ 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.
+ 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 .
+ 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).
+ 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.
4.4.3. Bé ®iÒu khiÓn DMA 8237
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 làm việc ở chế độ kiểm tra thì tùy đị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 .
Hình 4.16 Sơ đồ ghép nối DMA 8237 với vi xử lý
Ngoài ra mạch 8237 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
đi 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).
Mạch DMAC 8237 chứa 4 kênh trao đổi dữ liệu DMA với mức ưu tiên lập trình
được. MAC 8237 có tốc độ truyền 1 MB/s cho mỗi kênh , một kênh có thể truyền một mảng có độ dài 64KB .
8088 8086
Memory I/O
HLDA (Hold Acknowledge) Bus địa chỉ Bus dữ liệu
®/khiÓnBus
HRQ (Hold request)
DREQ DACK
(DMA acknowledge) HACKDACK
8237
HRQDRQ
Câu hỏi và bài tập chương 4
Câu 1: Vẽ sơ đồ kết nối CPU 8086 với bộ xung nhịp 8284 và phân tích hoạt
động của mạch.
Câu 2: Vẽ sơ đồ kết nối CPU 8086 với bộ điều khiển bus 8288 và phân tích hoạt
động của mạch.
Câu 3: Vẽ sơ đồ kết nối CPU 8086 với bộ định thời 8254 và phân tích hoạt động của mạch.
Câu 4: Vẽ sơ đồ kết nối CPU 8086 với mạch ghép nối vào ra song song lập trình
được 8255A và phân tích hoạt động của mạch.
Câu 5: Vẽ sơ đồ kết nối CPU 8086 với bộ xung nhịp 8284 và phân tích hoạt
động của mạch
Câu 6: Hãy thiết kế một hệ thống nhớ có dung lượng 64 KB với 16 KB đầu dùng cho EPROM, 48 KB tiếp theo dùng cho SRAM. Cho chíp nhớ có dung lượng là 8 KB và có OE = ‘0’, CS =’0’, WE = ‘0’, các tín hiệu điều khiển từ CPU đã biết.
Câu 7: Hãy thiết kế một hệ thống nhớ có dung lượng 2K*16 B dùng điều khiển 16 bóng đèn. Chỉ sử dụng chíp nhớ có dung lượng là 2K*8B và có OE = ‘0’, CS =’0’, WE = ‘0’, các tín hiệu điều khiển từ CPU đã biết.
Câu 8: Vẽ sơ đồ khối của mạch điều khiển truy cập bộ nhớ trực tiếp(DMAC).
Trình bày nguyên tắc DMA và nguyên lý hoạt động của mạch điều khiển truy cập bộ nhí trùc tiÕp
Câu 9: Viết chương trình cho VXL 8086 điều khiển 8 Led đơn nối với cổng máy in ( LPT) của máy tính để bàn với yêu cầu 8 led đơn chớp tắt lặp lại liên tục. Biết rằng địa chỉ của thanh ghi dữ liệu là 378H, đầu ra tích cực ở mức cao.
Câu 10: Viết chương trình cho VXL 8086 điều khiển 8 Led đơn nối với cổng máy in ( LPT) của máy tính để bàn với yêu cầu 8 led đơn sáng dần từ phải qua trái lặp lại liên tục. Biết rằng địa chỉ của thanh ghi dữ liệu là 378H, đầu ra tích cực ở mức cao
Câu 11: Viết chương trình cho VXL 8086 để hiển thị số đếm trên Led 7 đoạn nối với cổng máy in ( LPT) của máy tính để bàn với yêu cầu đếm lên từ 0 - 9. Biết rằng
địa chỉ của thanh ghi dữ liệu là 378H, thanh ghi trạng thái là 37AH, đầu ra tích cực ở mức cao