Giáo trình Các phương pháp điều khiển vào ra dữ liệu

khởi động bằng các từ đều khiển ICW.

 OCW1:

 OCW1 dùng để ghi giá trị của các bit mặt nạ vào thanh ghi mặt nạ IMR. Khi một bit mặt nạ nào đó của IMR được lập thì yêu cầu tương ứng với ngõ vào đó sẽ không được phục vụ. Từ điều khiển này phải được ghi tới 8259 ngay sau các từ ICW. Cũng có thể đọc lại IMR để xem tại thời điểm hiện tại ngõ vào nào có yêu cầu bị che.

 OCW2:

 Các bit R, SL, EOI cho phép chúng ta chọn cách thức kết thúc ngắt khác nhau. Một vài cách kết thúc ngắt còn tác động tới các yêu cầu ngắt được chỉ định với mức ưu tiên được mã hóa bởi 3 bit L3L2L1.

Các chế độ kết thúc ngắt bao gồm:

- Chế độ ưu tiên cố định:

 Đây là chế độ làm việc mặc định của 8259 sau khi đã được nạp các từ làm việc khởi đầu. Trong chế độ này có mức ưu tiên tại các ngõ vào mặc định giảm dần từ IR0 tới IR7. Các ngõ vào có mức ưu tiên thấp hơn sẽ bị cấm, và các yêu cầu có mức ưu tiên cao hơn sẽ ngắt các yêu cầu có mức ưu tiên thấp hơn.

- Chế độ quay mức ưu tiên.

 Ở chế độ này khi một yêu cầu ngắt được phục vụ xong nó sẽ được gán mức ưu tiên thấp nhất để tạo điều kiện cho các yêu cầu ngắt khác có cơ hội được phục vụ.

- Chế độ quay mức ưu tiên chỉ định.

 Trong chế độ này cần phải chỉ rõ ngõ vào nào được gán mức ưu tiên thấp nhất bằng các bit L2L1L0. Ngõ vào có chỉ số kế tiếp nó sẽ được gán mức ưu tiên cao nhất.

 Với các chế độ ưu tiên trên các bit R, SL,EOI trong OCW2 được mã hóa để chỉ thị các chế độ kết thúc ngắt khác nhau như sau:

1. Kết thúc ngắt thông thường: Chương trình con phục vụ ngắt phải có lệnh EOI đặt trước lệnh trở về IRET cho 8259. Mạch 8259 sẽ xác định yêu cầu ngắt vừa được phục vụ và xóa bit tương ứng với nó trong thanh ghi ISR, tạo điều kiện cho yêu cầu ngắt ở chính ngõ vào này hoặc các ngắt có yêu cầu thấp hơn được phục vụ.

2. Kết thúc yêu cầu ngắt chỉ định: chương trình con phục vụ ngắt cũng phải có lệnh EOI đặt trước lệnh IRET. Mạch 8259 sẽ xóa đích danh bit ISR được chỉ định bởi các bit L2L1L0 để tạo điều kiện cho yêu cầu ngắt ở chính ngõ vào này hoặc các ngõ vào có yêu cầu thấp hơn được phục vụ.

3. Quay đổi mức ưu tiên khi kết thúc ngắt thông thường: chương trình con phục vụ ngắt cũng cần lệnh EOI. Mạch 8259 sẽ xác định ngõ vào vừa được phục vụ, xóa bit tương ứng trong ISR và gán cho ngõ vào này mức ưu tiên thấp nhất, còn đầu vào có chỉ số kế tiếp (i+1) sẽ được gán mức ưu tiên cao nhất.

4. Quay đổi mức ưu tiên trong chế độ kết thúc ngắt tự động: chỉ cần cung cấp lệnh chọn chế độ này một lần bằng cách chọn chế độ quay khi EOI tự động. Từ đó trở đi 8259 sẽ đổi mức ưu tiên mỗi khi kết thúc ngắt như mô tả trong phần 3. Muốn xóa bỏ chế độ này chỉ việc lập trình lại chế độ khác cho 8259.

5. Quay đổi mức ưu tiên khi kết thúc yêu cầu ngắt chỉ định: chương trình phục vụ ngắt phải có lệnh EOI chỉ đích danh trước lệnh IRET. Mạch 8259 sẽ xóa bit tương ứng trong thanh ghi ISR và gán mức ưu tiên thấp nhất cho ngõ vào có chỉ số chỉ định bởi L2L1L0.

6. Lập mức ưu tiên: chế độ này cho phép thay đổi mức ưu tiên cố định hoặc mức ưu tiên gán trước bằng cách gán mức ưu tiên thấp nhất cho ngõ vào chỉ định bởi L2L1L0, yêu cầu ngắt có chỉ số kế tiếp (i+1) sẽ có mức ưu tiên cao nhất.

 

doc30 trang | Chia sẻ: trungkhoi17 | Lượt xem: 428 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Giáo trình Các phương pháp điều khiển vào ra dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
) phục vụ các ngõ vào yêu cầu ngắt. Mỗi bit trong thanh ghi này sẽ tương ứng với một ngõ vào yêu cầu ngắt. Có thể không cho phép một ngõ vào đó bằng cách ghi 0 tới bit tương ứng của nó trong IMR. - Thanh ghi yêu cầu ngắt (IRR) sẽ giữ lại các yêu cầu ngắt của các ngõ vào. Khi có tín hiệu yêu cầu ngắt đưa tới ngõ vào nào thì bit tương ứng của nó trong thanh ghi này sẽ được lập lên 1. - Thanh ghi phục vụ ngắt (ISR) sẽ lưu trạng thái các ngõ vào yêu cầu ngắt đang được phục vụ. Bit tương ứng trong thanh ghi sẽ được lập tương ứng với ngõ vào đang được phục vụ. - Khối xử lý ưu tiên (Priority resolver) sẽ đóng vai trò quyết định yêu cầu tại ngõ vào nào được phục vụ, bằng cách xem xét các bit trong các thanh ghi IMR, ISR và IRR. Ví dụ: giả sử IR2 và IR4 không bị che và có một tín hiệu yêu cầu ngắt đưa tới ngõ vào IR4. Yêu cầu trên IR4 sẽ lập bit thứ 4 trong thanh ghi IRR lên 1. Trước tiên bộ xử lý ưu tiên xem bit tương ứng với nó trong thanh ghi IMR, nếu bit này bằng 1 yêu cầu ngắt bị che và sẽ không được phục vụ. Nếu bằng 0 bộ xử lý ưu tiên sẽ kiểm tra các bit trong thanh ghi ISR để xem có ngõ vào nào có mức ưu tiên cao hơn đang được phục vụ hay không. Nếu có một ngõ vào có mức ưu tiên cao hơn đang được phục vụ thì bộ xử lý ưu tiên sẽ không tạo ra tác động nào cả. Ngược lại nếu không có yêu cầu ngắt ưu tiên cao hơn đang được phục vụ thì bộ xử lý ưu tiên sẽ chuyển mạch cho tín hiệu yêu cầu ngắt gửi tới CPU. Khi CPU đáp ứng bằng tín hiệu trả lời INTA, 8259 sẽ gửi số hiệu ngắt đã được lập trình từ trước tới CPU theo Bus dữ liệu. Lập trình cho 8259. Để 8259 có thể hoạt động được, thì sau khi cấp nguồn nó phải được lập trình từ 2 tới 4 từ điều khiển ICW (Input Control Word), và sau đó là các từ điều khiển OCW (Output Control Word). Các từ điều khiển sẽ định nghĩa các chế độ hoạt động cụ thể cho 8259, chúng được định nghĩa như sau: Các từ điều khiển ICW: ICW1 Bit D0 (IC4) xác định 8259 được nối với họ vi xử lý nào. Khi nối với hệ thống 16/32 bit 8086/8088 thì nhất thiết phải cần ICW4 (IC4=1), còn đối với hệ thống 8 bit 8080/8085 thì IC4=0 và như vậy các bit của ICW4 sẽ bị xóa về 0. Bit D1 (SNGL) định nghĩa 8259 hoạt động trong chế độ chỉ có 1 mạch chủ hay có thêm các mạch tớ. D2 (ADI) định nghĩa khoảng cách địa chỉ của bảng vector ngắt. D3 (LITM) định nghĩa ngõ vào yêu cầu ngắt tác động mức hay cạnh. Các bit còn lại là các bit địa chỉ A7A6A5 trong hệ thống 8080/85, đối với các hệ thống 16/32 bit chúng không xác định. ICW1: IC4 SNGL ADI LTIM 1 A5 A6 A7 A0=0 1: Cần ICW4 0: bỏ ICW4 Address Interval: K/c giữa các vector ngắt 1: 4 byte (80x86/88) 0: 8 byte (8080/85) Single: 1: chỉ có 1 mạch 8259 0: nhiều mạch 8259 Là địa chỉ vector đối với 8080/85 Không xác định với hệ 16/32 bit Level Trigger Mode: Chế độ của xung yêu cầu ngắt 1: theo mức dương 0: theo cạnh lên ICW2: T0 T1 T2 T3 T4 T5 T6 T7 A0=1 ICW2 là 8 bit địa chỉ cao của vector ngắt (AD15 - AD8) trong hệ thống 8080/85, là vector ngắt (T7- T3)trong hệ thống 8086/88. ICW3 mạch chủ: S0 S1 S2 S3 S4 S5 S6 S7 A0=1 1: ngõ vào tương ứng có 1 mạch tớ 0: không có mạch tớ ở ngõ vào ICW3 cho mạch tớ: ID0 ID1 ID2 0 0 0 0 0 A0=1 000 cho mạch tớ tại ngõ vào IR0 111 cho mạch tớ tại ngõ vào IR7. ICW2 Từ điều khiển này cho phép chọn kiểu ngắt (số hiệu ngắt) ứng với các bit T7-T3 trong hệ thống 8086/88, khi đó các bit còn lại luôn được gán giá trị 0 ứng với ngõ vào IR0. Các vector ngắt của các ngõ vào tiếp theo sẽ lần lượt tăng lên 1. Ví dụ nếu ICW2 = 40H thì các vector ngắt sẽ lần lượt mang số hiệu từ 40H tới 47H. Trong các hệ thống 8080/85 thì ICW2 sẽ cung cấp các bit địa chỉ cao của địa chỉ vector ngắt. ICW3 Từ điều khiển này chỉ dùng tới khi bit SNGL trong ICW1 = 0 tức là trong hệ thống có nhiều 8259 nối tầng với nhau. Như vậy sẽ tồn tại hai loại ICW3: một cho mạch chủ (master) và 1 cho mạch tớ (slave). Các bit ICW3 của 8259 chủ sử dụng để chỉ định ngõ vào nào có ghép tầng (cascade). Trong 8259 tớ chỉ sử dụng 3 bit thấp để xác định nó được nối tới ngõ vào nào của 8259 chủ. ICW4 mPM AEOI M/S BUF SFNMN 0 0 0 A0=1 mP mode 1: 8086/88 0: 8080/8085 Auto End Of Interrupt: 1: EOI tự động 0: EOI thông thường 0x: Chế độ không đệm 10: Chế đệm mạch tớ 11: Chế độ đệm mạch chủ Special Fully Nested Mode Chế độ lồng hoàn toàn. 1: SFNM ICW4 Từ điều khiển này chỉ dùng đến khi trong từ điều khiển ICW1 có bit D0 =1. Bit mPM cung cấp khả năng chọn vi xử lý làm việc với 8259. Bit SFNM = 1 cho phép chọn chế độ ưu tiên cố định đặc biệt. Trong chế độ này các yêu cầu ngắt với mức ưu tiên cao nhất hiện thời từ một mạch tớ làm việc theo kiểu nối tầng sẽ được mạch chủ nhận biết ngay cả khi mạch chủ còn đang phục vụ một yêu cầu ngắt ở mạch tớ khác nhưng với mức ưu tiên thấp hơn. Sau khi các yêu cầu ngắt được phục vụ xong thì chương trình phục vụ ngắt phải có lệnh kết thúc yêu cầu ngắt EOI đặt trước lệnh IRET đưa đến cho mạch 8259 chủ. Khi SFNM = 0 thì chọn chế độ ưu tiên cố định ( mức ưu tiên giảm từ IR0 tới IR7). Nếu 8259 không dùng tới ICW4 thì chế độ này cũng được coi như mặc định. Trong chế độ này nếu chỉ có một yêu cầu ngắt đang được phục vụ thì các yêu cầu có mức ưu tiên thấp hơn sẽ bị cấm, và các yêu cầu có mức ưu tiên cao hơn sẽ ngắt các yêu cầu có mức ưu tiên thấp hơn. Bit BUF cho phép chọn chế độ làm việc giữa 8259 và CPU là có đệm hay không có đệm. Khi BUF =1 M/S = 0/1 sẽ chọn đệm ở mạch chủ hoặc mạch tớ. Bit AEOI = 1 cho phép kết thúc yêu cầu ngắt tự động. Lúc này 8259 sẽ tự động xóa ISRi = 0 khi xung INTA chuyển lên mức cao mà không làm thay đổi thứ tự ưu tiên. Ngược lại khi AEOI = 0 chương trình phục vụ ngắt phải có thêm lệnh EOI trước IRET đưa tới cho 8259. Các từ điều khiển ICW được lập trình cho 8259 theo giải thuật hình 6.8: ICW1 ICW2 ICW4 ICW3 D1 (ICW1) = 1 ? D1 (ICW1) = 1 ? Sẵn sàng nhận yêu cầu ngắt Hình 6.8: Giải thuật lập trình các từ điều khiển ICW cho 8259. Các từ điều khiển hoạt động OCW: OCW1 M0 M1 M2 M3 M4 M5 M6 M7 A0=1 Mặt nạ các ngắt tại các ngõ vào yêu cầu: 1: có mặt nạ 0: không có mặt nạ OCW2 L0 L1 L2 0 0 EOI SL R A0=0 Mã hóa mức ưu tiên ngắt bị tác động 000: mức 0; ; 111: mức 7 Mã hóa chế độ kết thúc ngắt OCW3 RIS ERIS P 1 0 SMM ESM 0 A0=0 10: đọc IRR ở lần sau 11: đọc ISR ở lần sau Thăm dò trạng thái hiện tại của yêu cầu ngắt.1: đọc mã ưu tiên cao nhất ở lần đọc sau Special Mask Mode 10:xóa chế độ mặt nạ đặc biệt 11:lập chế độ mặt nạ đặc biệt Các từ điều khiển OCW sẽ quyết định 8259 hoạt động như thế nào khi nó đã được khởi động bằng các từ đều khiển ICW. OCW1: OCW1 dùng để ghi giá trị của các bit mặt nạ vào thanh ghi mặt nạ IMR. Khi một bit mặt nạ nào đó của IMR được lập thì yêu cầu tương ứng với ngõ vào đó sẽ không được phục vụ. Từ điều khiển này phải được ghi tới 8259 ngay sau các từ ICW. Cũng có thể đọc lại IMR để xem tại thời điểm hiện tại ngõ vào nào có yêu cầu bị che. OCW2: Các bit R, SL, EOI cho phép chúng ta chọn cách thức kết thúc ngắt khác nhau. Một vài cách kết thúc ngắt còn tác động tới các yêu cầu ngắt được chỉ định với mức ưu tiên được mã hóa bởi 3 bit L3L2L1. Các chế độ kết thúc ngắt bao gồm: Chế độ ưu tiên cố định: Đây là chế độ làm việc mặc định của 8259 sau khi đã được nạp các từ làm việc khởi đầu. Trong chế độ này có mức ưu tiên tại các ngõ vào mặc định giảm dần từ IR0 tới IR7. Các ngõ vào có mức ưu tiên thấp hơn sẽ bị cấm, và các yêu cầu có mức ưu tiên cao hơn sẽ ngắt các yêu cầu có mức ưu tiên thấp hơn. Chế độ quay mức ưu tiên. Ở chế độ này khi một yêu cầu ngắt được phục vụ xong nó sẽ được gán mức ưu tiên thấp nhất để tạo điều kiện cho các yêu cầu ngắt khác có cơ hội được phục vụ. Chế độ quay mức ưu tiên chỉ định. Trong chế độ này cần phải chỉ rõ ngõ vào nào được gán mức ưu tiên thấp nhất bằng các bit L2L1L0. Ngõ vào có chỉ số kế tiếp nó sẽ được gán mức ưu tiên cao nhất. Với các chế độ ưu tiên trên các bit R, SL,EOI trong OCW2 được mã hóa để chỉ thị các chế độ kết thúc ngắt khác nhau như sau: Kết thúc ngắt thông thường: Chương trình con phục vụ ngắt phải có lệnh EOI đặt trước lệnh trở về IRET cho 8259. Mạch 8259 sẽ xác định yêu cầu ngắt vừa được phục vụ và xóa bit tương ứng với nó trong thanh ghi ISR, tạo điều kiện cho yêu cầu ngắt ở chính ngõ vào này hoặc các ngắt có yêu cầu thấp hơn được phục vụ. Kết thúc yêu cầu ngắt chỉ định: chương trình con phục vụ ngắt cũng phải có lệnh EOI đặt trước lệnh IRET. Mạch 8259 sẽ xóa đích danh bit ISR được chỉ định bởi các bit L2L1L0 để tạo điều kiện cho yêu cầu ngắt ở chính ngõ vào này hoặc các ngõ vào có yêu cầu thấp hơn được phục vụ. Quay đổi mức ưu tiên khi kết thúc ngắt thông thường: chương trình con phục vụ ngắt cũng cần lệnh EOI. Mạch 8259 sẽ xác định ngõ vào vừa được phục vụ, xóa bit tương ứng trong ISR và gán cho ngõ vào này mức ưu tiên thấp nhất, còn đầu vào có chỉ số kế tiếp (i+1) sẽ được gán mức ưu tiên cao nhất. Quay đổi mức ưu tiên trong chế độ kết thúc ngắt tự động: chỉ cần cung cấp lệnh chọn chế độ này một lần bằng cách chọn chế độ quay khi EOI tự động. Từ đó trở đi 8259 sẽ đổi mức ưu tiên mỗi khi kết thúc ngắt như mô tả trong phần 3. Muốn xóa bỏ chế độ này chỉ việc lập trình lại chế độ khác cho 8259. Quay đổi mức ưu tiên khi kết thúc yêu cầu ngắt chỉ định: chương trình phục vụ ngắt phải có lệnh EOI chỉ đích danh trước lệnh IRET. Mạch 8259 sẽ xóa bit tương ứng trong thanh ghi ISR và gán mức ưu tiên thấp nhất cho ngõ vào có chỉ số chỉ định bởi L2L1L0. Lập mức ưu tiên: chế độ này cho phép thay đổi mức ưu tiên cố định hoặc mức ưu tiên gán trước bằng cách gán mức ưu tiên thấp nhất cho ngõ vào chỉ định bởi L2L1L0, yêu cầu ngắt có chỉ số kế tiếp (i+1) sẽ có mức ưu tiên cao nhất. Các bit R,SL và EOI được mã hóa cho các chế độ như mô tả trong bảng sau: 001 Lệnh EOI thông thường 011 Lệnh EOI chỉ định 101 Đổi mức ưu tiên khi có EOI thường 100 Lập chế độ quay khi có EOI tự động 000 Xóa chế độ quay khi có EOI tự động 111 Đổi mức ưu tiên khi có EOI chỉ định 110 Lập mức ưu tiên 010 Không làm gì cả Kết thúc ngắt EOI Đổi mức ưu tiên tự động Đổi mức ưu tiên chỉ định Từ điều khiển hoạt động OCW3 sau khi ghi vào 8259 cho phép thực hiện các công việc sau: + Chọn ra các thanh ghi để đọc. + Thăm dò trạng thái yêu cầu ngắt bằng cách đọc trạng thái của ngõ vào có mức ưu tiên cao nhất cũng với mã đầu vào của nó. + Thao tác với mặt nạ đặc biệt. Khi đọc các thanh ghi IRR và ISR có thể biết được các ngõ vào nào đang có yêu cầu phục vụ, và ngõ vào nào đang được phục vụ. Bằng việc cho bit P của OCW3 = 1 có thể đọc được trên bus dữ liệu ở lần đọc ngay sau đó từ thăm dò, trong từ thăm dò này sẽ có các thông tin về yêu cầu ngắt có mức ưu tiên cao nhất như hình sau: W0 W1 W2 x x x x I Mã hóa số hiệu ngõ vào có mức ưu tiên cao nhất 1: Đang có yêu cầu ngắt 0: không có yêu cầu ngắt Chú ý trước khi đọc từ thăm dò cần phải cấm các yêu cầu ngắt bằng lệnh CLI. Bit ESM = 1 cho phép thao tác với chế độ mặt nạ đặc biệt. Chế độ mặt nạ đặc biệt được dùng để thay đổi chế độ ưu tiên ngay bên trong chương trình con phục vụ ngắt. Ví dụ trong trường hợp có một yêu cầu ngắt bị cấm (bị che bởi chương trình phục vụ ngắt với từ lệnh OCW1) mà ta lại muốn cho phép các yêu cầu ngắt với mức ưu tiên thấp hơn so với yêu cấu ngắt bị cấm đó được tác động, khi đó cần phải sử dụng chế độ mặt nạ đặc biệt. Khi đã được thiết lập thì chế độ mặt nạ đặc biệt sẽ tồn tại cho đến khi xóa bằng cách ghi vào 8259 một từ OCW3 khác có bit SMM = 0. Mặt nạ đặc biệt không ảnh hưởng tới các yêu cấu ngắt với mức ưu tiên cao hơn. Hình 6.9 biểu diễn việc kết nối 8259 chủ với CPU 8088 ở chế độ MIN. 8259 D0-D7 D0-D7 RD WR A0 INT INTA CS RD WR A0 INTR INTA A1 -A7 IO/M Hình 6.9: Kết nối một 8259 với CPU 8088 ở chế độ MIN. VÀO RA DỮ LIỆU BẰNG DMA. (Direct Memory Access ). Nguyên tắc chung. Trong các nguyên tắc vào ra quét vòng và ngắt đã biết, dữ liệu được truyền trực tiếp giữa CPU và các cổng vào ra, tốc độ truyền dữ liệu sẽ tùy thuộc vào các lệnh của CPU, vì thế sẽ không thể thực hiện việc truyền dữ liệu một cách nhanh chóng. Để truyền dữ liệu với tốc độ nhanh hơn người ta sử dụng phương pháp vào ra bằng cơ chế thâm nhập trực tiếp bộ nhớ (DMA - Direct Memory Access). Trong cơ chế này thiết bị ngoại vi sẽ truyền dữ liệu theo khối với bộ nhớ mà không thông qua sự điều khiển của CPU, bộ điều khiển DMA tạo ra các địa chỉ một cách tuần tự để truyền trực tiếp dữ liệu giữa bộ nhớ và vào ra, mà không phải thực hiện các chu kỳ đọc ghi như CPU, do đó tốc độ truyền sẽ rất nhanh. ADDRESS LATCHES (IOR, IOW, MEMR,MEMW) HOLD HLDA HLDA HRQ DACK DREQ PERIPHERAL DEVICE MEMORY DMA CONTROLLER CONTROL BUS DATA BUS DATA BUS CONTROL BUS CONTROL BUS DATA BUS CPU AD0-AD15 ALE Hình 6.10: Nguyên tắc vào ra bằng DMA trong hệ thống vi xử lý. Sơ đồ khối của hệ thống vào ra dữ liệu theo nguyên tắc DMA có thể mô tả như hình 6.10: Trong sơ đồ này CPU và DMAC sẽ luôn phiên sử dụng các BUS địa chỉ, dữ liệu, và điều khiển thông qua việc điều khiển chuyển mạch ba công tắc lên phía trên hoặc xuống phía dưới. Khi hệ thống bắt đầu hoạt động các công tắc nằm ở phía trên, vì thế các Bus sẽ nối ghép giữa CPU với bộ nhớ và các thiết bị ngoại vi. Hệ thống sẽ hoạt động bình thường cho đến khi cần thực hiện một chu kỳ truy cập DMA (ví dụ đọc 1 file từ đĩa từ trong hệ thống máy vi tính PC). Để đọc một khối dữ liệu từ thiết bị, cần phải gửi một chuỗi lệnh tới thiết bị để xác định vị trí của khối dữ liệu. Khi thiết bị đã có dữ liệu sẵn sàng để truyền nó sẽ gửi tín hiệu yêu cầu DMA bằng tín hiệu DREQ tới bộ điều khiển DMA (DMAC). Nếu DMAC được lập trình không che (cho phép hoạt động khi có yêu cầu ), nó sẽ gửi tín hiệu yêu cầu treo bus HRQ tới ngõ vào HOLD của CPU. Lúc này CPU sẽ treo các bus của nó lên trạng thái trở kháng cao (tương đương với việc chuyển mạch các công tắc xuống phía dưới, ngắt CPU ra khỏi các Bus), và trả lời chấp nhận yêu cầu treo bus bằng tín hiệu HLDA cho bộ điều khiển DMA. Khi nhận được tín hiệu chấp nhận HLDA từ CPU, bộ điều khiển DMA sẽ bắt đầu thực hiện việc điều khiển các Bus. Nó sẽ gửi địa chỉ tới bộ nhớ để xác định vị trí mà byte đầu tiên sẽ được ghi vào. Tiếp theo DMAC sẽ gửi tín hiệu chấp nhận DMA bằng tín hiệu DACK tới cho thiết bị, tín hiệu này sẽ thông báo cho thiết bị trạng thái sẵn sàng cho thiết bị gửi ra một byte dữ liệu. Cuối cùng DMAC sẽ tạo ra cả hai tín hiệu ghi bộ nhớ (MEMW) và đọc vào ra (IOR) một cách đồng thời, IOR sẽ cho phép thiết bị cung cấp dữ liệu ra data Bus, MEMW cho phép bộ nhớ nhận dữ liệu từ data Bus. Như vậy DMA đã điều khiển việc ghi trực tiếp dữ liệu từ thiết bị tới bộ nhớ mà không thông qua CPU. Khi đã hoàn thành việc truyền dữ liệu, DMAC sẽ giải phóng Bus và dừng tác động tín hiệu HOLD. CPU sẽ quay về điều khiển BUS trở lại cho đến khi có một yêu cầu DMA mới. CPU sẽ tiếp tục thực hiện tiếp chương trình tại nơi mà nó đã dừng lại để thực hiện yêu cầu DMA. Quá trình ghi trực tiếp dữ liệu từ bộ nhớ tới thiết bị sẽ được thực hiện hoàn toàn tương tự. Khi đó DMAC sẽ tạo ra các tín hiệu điều khiển đọc bộ nhớ (MEMR) và ghi vào ra (IOWC) một cách đồng thời. Trong thực tế có 3 chế độ trao đổi dữ liệu theo nguyên tắc DMA: - Treo CPU một khoảng thời gian để trao đổi cả mảng dữ liệu. - Treo CPU một số chu kỳ máy để trao đổi từng byte - Tận dụng thời gian CPU không sử dụng Bus để truyền dữ liệu. Để hiểu rõ các nguyên tắc này chúng ta có thể xem xét bộ điều khiển DMA 8237 của hãng Intel. Vi mạch DMAC 8237 - A. 1. Các đặc tính cơ bản. Điều khiển cho phép hoặc không cho phép các kênh DMA một cách riêng biệt. Có 4 kênh DMA độc lập nhau. Có khả năng truyền dữ liệu từ bộ nhớ tới bộ nhớ. Có thể truyền theo chiều tăng hoặc giảm địa chỉ. Hiệu suất truyền dữ liệu rất cao: với xung nhịp 5Mhz có thể truyền 1.6MB/1 giây. Có khả năng ghép tầng (cascade) để tăng số kênh DMA. Có tín hiệu ngõ vào kết thúc việc truyền dữ liệu. Có khả năng nhận yêu cầu DMA bằng phần mềm. 2. Sơ đồ khối và chức năng các khối. Như hình 6.11, sơ đồ khối của 8237 bao gồm nhiều khối logic và các thanh ghi. Bus nội nối các thanh ghi cho phép thay đổi các tín hiệu điều khiển giữa các khối. 8237 có tất cả 324 bit nhớ bên trong tạo thành các thanh ghi bao gồm: - 4 thanh ghi địa chỉ cơ sở 16 bit. - 4 thanh ghi đếm số từ cơ sở 16 bit. - 4 thanh ghi địa chỉ hiện hành 16 bit. - 4 thanh ghi đếm số từ hiện hành 16 bit. - 1 thanh ghi địa chỉ tạm thời 16 bit. - 1 thanh ghi đếm số từ tạm thời 16 bit. - 1 thanh ghi trạng thái 8 bit. - 1 thanh ghi lệnh 8 bit. - 1 thanh ghi tạm thời 8 bit. - 4 thanh ghi chế độ 6 bit. - 1 thanh ghi mặt nạ 4 bit. - 1 thanh ghi yêu cầu 4 bit. Khối tạo nhịp và điều khiển Bộ giảm Thanh ghi đếm số từ tạm thời Bộ tăng Thanh ghi địa chỉ tạm thời Đệm I/O Đệm ra Đệm I/O Đệm đọc Đệm ghi T.ghi tạm T.ghi T/thái T.ghi C/độ T.ghi yêu cầu T.ghi mặt nạ T.ghi lệnh Bộ đệm đọc Thanh ghi đếm số từ cơ sở / địa chỉ cơ sở Bộ đệm đọc/ghi Thanh ghi đếm số từ hiện tại / địa chỉ hiện tại Bộ mã hóa mức ưu tiên và logic tạo ưu tiên luân phiên A0-A3 EOP RESET A4-A7 CS READY CLK AEN A0-A15 ADSTB MEMW MEMR IOR IOW DB0-DB7 DACK0 - DACK3 DRQ0 - DRQ3 HRQ HLDA Hình 6.11: Sơ đồ khối bộ điều khiển DMA 8037, 8237 có 3 khối điều khiển logic bao gồm: - Khối điều khiển định thời có chức năng tạo các tín hiệu định thời bên trong và bên ngoài cho 8237. - Khối điều khiển lệnh chương trình có chức năng mã hóa các lệnh gửi tới từ CPU để phục vụ một chu kỳ DMA. Nó cũng giải mã từ chế độ để chọn kiểu DMA trong suốt chu kỳ phục vụ. - Khối mã hóa ưu tiên sẽ giải quyết các tranh chấp ưu tiên giữa các kênh DMA có ưu cầu phục vụ tại cùng một thời điểm. 3. Các tín hiệu của 8237. + Vcc, Vss: cấp nguồn +5 Vdc + CLK (Clock): Ngõ vào cung cấp xung nhịp cho 8237 để điều khiển định thời toàn bộ hoạt động bên trong của 8237, và nó sẽ quyết định tốc độ truyền dữ liệu của 8237. Có thể cấp Clock 3 MHz với 8237A, và 5 MHz với 8237 -5. + CS (Chip Select): tín hiệu chọn mạch, sử dụng để CPU chọn 8237 như một địa chỉ vào ra trong suốt chu kỳ nó làm việc, cho phép CPU truyền dữ liệu với 8237. + RESET: Ngõ vào tác động mức cao xóa toàn bộ các thanh ghi lệnh, thanh ghi trạng thái, thanh ghi yêu cầu và thanh ghi tạm thời, nó cũng xóa toàn bộ các bit che phục vụ. Thiết lập lại toàn bộ trạng thái ban đầu của 8237. + READY: Ngõ vào cung cấp từ bộ nhớ tới 8237 trong các chu kỳ đọc ghi, tín hiệu này sử dụng để bộ nhớ thông báo trạng thái sẵn sàng của nó tới 8237 cho phép 8237 giao tiếp được với các bộ nhớ chậm. + HLDA (Hold Acknowledge): Ngõ vào tác động mức cao nhận tín hiệu chấp yêu cầu treo bus gửi tới từ CPU. Khi nhận được tín hiệu này 8237 sẽ bắt đầu chiếm bus của CPU để thực hiện chu kỳ DMA. + DREQ0 - DREQ3: (DMA REQUEST) là các ngõ vào nhận các yêu cầu DMA từ thiết bị. Trong chế độ ưu tiên cố định (fixed) DREQ0 sẽ có mức ưu tiên cao nhất, cho tới DREQ3 có mức ưu tiên thấp nhất. Yêu cầu gửi tới kênh nào thì sẽ được trả lời trên đường DACK tương ứng. Cực tính yêu cầu ở các ngõ vào này có thể lập trình được, khi RESET nó sẽ tác động mức cao. Tín hiệu yêu cầu cần được duy trì cho tới khi DACK tác động. + DB0 - DB7 (Data Bus): là bus dữ liệu hai chiều 3 trạng thái, nối tới bus hệ thống. Bus này có thể sử dụng ghi các từ điều khiển lập trình các thanh ghi của 8237, và đọc trạng thái hiện hành của các thanh ghi trạng thái, tạm thời, và thanh ghi đếm số từ. Trong các chu kỳ DMA 8 bit địa chỉ cao sẽ được cung cấp ra các ngõ ra này, chứa vào bộ cài bên ngoài bằng tín hiệu ADSTB. Trong chu kỳ truyền dữ liệu giữa các ô nhớ (Memory - Memory), dữ liệu sẽ được đọc vào 8237 thông qua data bus trong chu kỳ đọc, rồi chuyển ra data bus để chứa vào vị trí mới trong chu kỳ ghi. + IOR (Input / Output Read): là đường tín hiệu hai chiều 3 trạng thái. Trong chu kỳ rỗi (Idle) nó được cung cấp tới từ CPU để đọc giá trị các thanh ghi điều khiển. Trong chu kỳ hoạt động DMA, tín hiệu này là ngõ ra sử dụng để 8237 đọc dữ liệu từ thiết bị ngoại vi trong chu kỳ DMA ghi. + IOW(Input / Output Write) là đường tín hiệu hai chiều 3 trạng thái. Trong chu kỳ rỗi (Idle) nó được cung cấp tới từ CPU, để CPU có thể ghi các thông tin cần thiết tới 8237. Trong chu kỳ hoạt động DMA, tín hiệu này là ngõ ra sử dụng để 8237 ghi dữ liệu tới thiết bị ngoại vi, trong chu kỳ DMA đọc. + EOP (End Of Process) : Là tín hiệu hai chiều tác động mức thấp, cho phép kết thúc phục vụ DMA hiện hành. Khi thiết bị bên ngoài muốn kết thúc phục vụ DMA hiện hành nó cung cấp tới ngõ vào này một xung mức thấp. Khi 8237 thực hiện xong một chu kỳ DMA nó sẽ cung cấp tín hiệu thông báo tới ngõ ra này. Tóm lại khi có mức thấp tại ngõ này quá trình phục vụ DMA sẽ kết thúc, trạng thái của 8237 cần được tạo lập lại. Nếu 8237 được lập trình cho phép tự động khởi động (auto initialize), thì thanh ghi cơ sở sẽ được ghi tới thanh ghi hiện hành của kênh đó. Bit che (mask) và bit TC (Terminal Count) của kênh hiện hành trong thanh ghi trạng thái sẽ được lập, trừ khi kênh đó đã được lập trình tự động khởi động. + A0 - A3 (Address): là các tín hiệu hai chiều 3 trạng thái, trong chu kỳ rỗi (không phục vụ DMA) các tín hiệu này là các ngõ vào sử dụng để CPU định vị các thanh ghi điều khiển bên trong 8237. Trong trạng thái phục vụ DMA chúng là các ngõ ra cung cấp các bit địa chỉ thấp ra bus địa chỉ, sử dụng cho các bộ nhớ và thiết bị ngoại vi. + A4 - A7 (Address) : là các ngõ ra 3 trạng thái cung cấp 4 bit địa chỉ trong các chu kỳ phục vụ DMA. + HRQ (Hold Request) : là ngõ ra gửi yêu cầu treo bus tới CPU, nó được tác động khi có yêu cầu trên một kênh vào DREQ không che. Ngõ vào HLDA cần phải tác động sau HRQ ít nhất sau 1 chu kỳ xung nhịp. + DACK0 - DACK3 (DMA Acknowledge): là các ngõ ra thông báo cho thiết bị ngoại vi biết yêu cầu DMA của nó được chấp nhận. Mức tác động của các ngõ này có thể lập trình được, khi khởi động lại nó sẽ tác động mức thấp. + AEN (Address Enabl

Các file đính kèm theo tài liệu này:

  • docgiao_trinh_cac_phuong_phap_dieu_khien_vao_ra_du_lieu.doc