Truy nhập trực tiếp vào bộ nhớ (Direct Memory Access-DMA)

Một phần của tài liệu ôn tập kỹ thuật vi xử lý (Trang 31)

Trong các phương pháp vào/ra trình bày trên có các nhược điểm sau: 1) Sử dụng phương pháp vào/ra điều khiển bằng chương trình ta thấy:

- Đọc dữ liệu vào bằng chương trình phải chuyển số liệu giữa thiết bị vào/ra và bộ nhớ thông qua ACC:

Bộ nhớ  [CPU_ACC]  [ Cổng ]  [Thiết bị] Trong đó có hai bước cần thực hiện:

1. [DATA_ghép nối_từ thiết bị] → ACC 2. [ACC] → MEM

- Tương tự khi ghi dữ liệu ra thiết bị phải đưa nội dung của ô nhớ tới TB vào/ra, cũng phải qua 2 bước:

1. [MEM] → ACC

2. [ACC] → [DATA_ghép nối_ra thiết bị]

Như vậy việc chuyển số liệu giữa thiết bị ngoại vi và bộ nhớ cần hai bước, tốc độ chậm. Ở đây chứ tính thêm bước kiểm tra trạng thái READY của thiết bị.

2) Phương pháp vào/ra bằng ngắt bảo đảm thiết bị vào/ra được phục vụ gần như tức thời (trong thời gian ngắn). Nhưng trong chương trình con phục vụ ngắt, quá trình chuyển số liệu được thực hiện bằng lệnh chương trình nên tốc độ trao đổi cũng không thể cao được vì khâu này cũng không khác gì 1).

Tuy nhiên trong máy tính, việc phải trao đổi một khối lượng lớn dữ liệu giữa bộ nhớ RAM và thiết bị ngoài không thể sử dụng 2 cách nói trên được. Ví dụ khi ghi/đọc đĩa cứng, cập nhật cho video RAM để tạo ảnh trên màn hình là các loại ứng dụng kiểu như vậy. Kĩ thuật vào/ra thâm nhập

bộ nhớ trực tiếp sẽ khắc phục các nhược điểm trên. Bản chất của kĩ thuật

này như sau: khi cần trao đổi khối dữ liệu giữa RAM và thiết bị, thì tác vụ này phải xảy ra nhanh nhất có thể và chỉ phụ thuộc vào khả năng của thiết bị và phải thực hiện hoàn toàn bằng cơ chế điện tử, không sử dụng tới các lệnh máy qua chương trình. Nói vậy có mâu thuẩn ? Hay nói cách khác đẻ làm được, “ Hãy loại bỏ tạm thời CPU và nắm lấy quyền khống chế BUS hệ thống trong thời gian trao đổi dữ liệu !”. Quá trình thiết kế của giải pháp này như sau:

Cần có một vi mạch khả trình, có khả năng thay thế CPU, tạo ra các tín hiệu giống như CPU tạo (BUS địa chỉ, BUS dữ liệu, BUS điều khiển) và kiểm soát BUS hệ thống trong suốt thời gian thực hiện DMA. Có các tín hiệu đối thọai với CPU (HRQ, HLDA), các tín hiệu đối thoại với thiết bị ngoài (DREQx, DACKx, ..). Vi mạch như vậy gọi là DMA Controller, hay DMAC, vi mạch phổ biến có tên Intel 8237A. Sơ đồ nguyên lí như sau:

Hình 2.65 Nguyên lí DMA Quá trình thực hiện DMA:

1) CPU làm việc bình thường

2) Khi thiết bị ngoại vi muốn chuyển số liệu trực tiếp với bộ nhớ thì gửi yêu cầu tới DMAC qua tín hiệu DRQx ( DMA Reqest thứ x, mỗi DMAC có khả năng nhận 4 DRQ).

3) Bộ điều khiển DMAC chuyển yêu cầu này tới CPU qua tín hiệu HRQ: Yêu cầu CPU “tách ra “ khỏi BUS hệ thống.

4) CPU thực hiện nốt chu kỳ máy đang thực hiện, treo BUS và trả lời DMAC bằng tín hiệu HLDA: Chấp nhận và đã treo BUS.

5) DMAC trả lời thiết bị vào/ra bằng tín hiệu DACKx, DMAC quản lí BUS hệ thống và phát sinh các tín hiệu địa chỉ lên BUS địa chỉ, hướng tới bộ nhớ,

6) Phát các tín hiệu điều khiển: MEMRD/, MEMWR/, IORD/, IOWR/, để thực hiện DMA vào: đọc thiết bị/ghi bộ nhớ hay DMA ra: dọc bọ nhớ/ghi ra thiết bị.

7) Điều khiển chuyển số liệu giữa bộ nhớ và thiết bị vào/ra, chạy đồng bộ theo BUS-clock. Số liệu chuyển giữa bộ nhớ và thiết bị vào/ra thường là cả một khối, có độ dài tùy ý qua lập trình.

8) Khi chuyển xong số liệu DMAC đưa tín hiệu TC hay EOP (Terminal Count, End of Operation-EOP) thành tích cực để báo một quá trình DMA kết thúc (tín hiệu TC đóng vai trò một ngắt khi sử dụng để

thông báo cho CPU). DMAC treo BUS, DMAC hũy HRQ. CPU hũy HLDA, CPU trở lại quản lí BUS hệ thống. Chu kì DMA hoàn tất. Qui trình chạy DMA xảy ra rất nhanh, chỉ phụ thuộc vào khả năng trao đổi của thiết bị. Có một vài thủ thuật DMA xảy ra trong máy tính, tham khảo thêm tài liệu, ví dụ Intel 8237 DMAC, để hiểu thêm.

DMA kết hợp với ngắt bằng tín hiệu TC, hay EOP khi kết thúc chu kì DMA. Ví dụ ứng dụng: ghi đọc dữ liệu RAM  Đĩa cứng, RAM  NIC.

Hình 2.66 DMA và hoạt động của CPU là độc lập

Ví du: Thiết kế với DMAC: Sử dụng Intel DMAC 8237

Có hai phương pháp thực hiện DMA:

 Cách như đã mô tả, CPU trao quyền sử dụng BUD hệ thống cho DMAC;

 Cách thứ hai gọi là DMAC lấy lén chu kì: DMAC tận dụng những khoản thời gian trong một chu kì BUS mà khi đó CPU không có truy nhập bộ nhớ, ví dụ các chu kì CPU phát địa chỉ cho các chu kì đọc hay ghi bộ nhớ).

Một khi DMA hoạt động, có một số cách trao đổi dữ liệu sau đây:

 Chế độ trao đổi đơn,

 Chế đọ theo yêu cầu,

 Chế độ mở rộng các vi mạch DMAC theo đa mức (cascade).

Khi thiết kế với DMAC xem chi tiết hướng dẫn cách ghép và lập trình cho DMAC.

Một phần của tài liệu ôn tập kỹ thuật vi xử lý (Trang 31)