động tới các yêu cầu ngắt đ−ợc chỉ đích danh với mức −u tiên đ−ợc mã hoá bởi 3 bit L2, L1, L0 (L2L1L0).
Một số chế độ làm việc của 8259:
(a)Chế độ −u tiên cố định: Đây là chế độ làm việc ngầm định của 8259 sau khi nó đã đ−ợc nạp các từ điều khiển khởi đầu. Trong chế độ này, các đầu vào yêu cầu ngắt IRQ7 – IRQ0 đ−ợc gán cho các mức −u tiên cố định. Cụ thể: IRQ0 đ−ợc gán mức −u tiên cao nhất, – IRQ7 đ−ợc gán mức −u tiên thấp nhất. Thứ tự mức −u tiên này đ−ợc giữ cố định (không thay đổi) cho đến khi mạch 8259 đ−ợc lập trình khác đi thông qua việc ghi từ điều khiển hoạt động OCW2. Trong chế độ −u tiên cố định, tại một thời điểm chỉ có một yêu cầu ngắt i đ−ợc phục vụ (bit ISRi = 1), lúc này tất cả các yêu cầu ngắt khác có mức −u tiên cao hơn nào đó có thể ngắt các yêu cầu ngắt có mức −u tiên thấp hơn.
(b)Chế độ quay mức −u tiên tự động (−u tiên luân phiên): ở chế độ này, sau khi một yêu cầu ngắt nào đó đ−ợc phục vụ xong, 8259 sẽ xoá bit t−ơng ứng của nó trong thanh ghi ISR và gán cho đầu vào của nó (IRQ) 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 (với mức −u tiên thấp) có cơ hội (thời cơ) đ−ợc phục vụ.
(c) Chế độ quay (đổi) mức −u tiên chỉ đích danh: ở chế độ này ta cần chỉ rõ (chỉ đích danh) đầu vào yêu cầu ngắt IRQi nào với i = L2L1L0 đ−ợc gán mức −u tiên thấp nhất, đầu vào IRQi+1 sẽ đ−ợc tự động gán mức −u tiên cao nhất. Đó là 3 chế độ làm việc tiêu biểu của 8259. Trên cơ sở đó, nhìn lại sự phối hợp giữa các bit R, SL, EOI nh− thế nào để tạo ra các lệnh quy định các cách thức kết thúc yêu cầu ngắt cho các chế độ làm việc khác nhau nh− đã nói qua.
(1)Kết thúc yêu cầu ngắt th−ờng: Trong 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 IRQi vừa đ−ợc phục vụ và xoá bit ISRi t−ơng ứng của nó để tạo
Hình vẽ: Thanh ghi hoạt động OCW2 0 R SL EOI 0 0 L2 L1 L0
D7 D6 D5 D4 D3 D2 D1 D0
R SL EOI ý nghĩa 0 0 1 Lệnh EOI th−ờng 0 0 1 Lệnh EOI th−ờng 0 1 1 Lệnh EOI chỉ đích danh (*) 1 0 1 Đổi mức −u tiên khi có EOI th−ờng 1 0 0 Lập chế độ quay khi có EOI tự động 0 0 0 Xoá chế độ quay khi có EOI tự động 1 1 1 Đổi mức −u tiên khi có EOI chỉ đích danh (*) 1 1 0 Lệnh lập mức −u tiên (*)
0 1 0 Không làm gì Kết thúc Kết thúc
ngắt (EOI)
A0
Đổi mức −u tiên đích danh (đặc biệt) Đổi mức −u tiên tự động (quay vòng)
Mã hoá mức −u tiên ngắt bị tác động 000: mức 0
001: mức 1 ... ...
111: mức 7
điều kiện cho chính yêu cầu ngắt này hoặc các ngắt có mức −u tiên thấp hơn có thể đ−ợc tác động (phục vụ).
(2)Kết thúc yêu cầu ngắt chỉ đích danh: Trong ch−ơng trình con phục vụ ngắt phải có lệnh EOI chỉ đích danh đặt tr−ớc lệnh trở về IRET cho 8259. Mạch 8259 sẽ xoá đúng bit ISRi (i = L2L1L0) để tạo điều kiện cho chính yêu cầu ngắt này hoặc các yêu cầu ngắt có mức −u tiên thấp hơn có thể đ−ợc tác động.
(3)Quay (đổi) mức −u tiên khi kết thúc yêu cầu ngắt th−ờng: Trong 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 thứ i vừa đ−ợc phục vụ, xoá bit ISRi t−ng ứng và gán luôn mức −u tiên thấp nhất cho đầu vào IRQi này, còn đầu vào IRQi+1 sẽ đ−ợc gán mức −u tiên cao nhất.
Ví dụ:
Thanh ghi ISR tr−ớc khi IRQ4 đ−ợc chấp nhận (0: mức −u tiên cao nhất, 7: mức −u tiên thấp nhất)
Các bit IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0
Trạng thái của ISR 0 1 0 1 0 0 0 0
Mức −u tiên 7 6 5 4 3 2 1 0
Thanh ghi ISR sau khi IRQ4 đ−ợc chấp nhận và sau khi có lệnh quay đổi
Các bit IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0
Trạng thái của ISR 0 1 0 0 0 0 0 0
Mức −u tiên 2 1 0 7 6 5 4 3
Thanh ghi ISR tr−ớc khi IRQ5 đ−ợc chấp nhận (0: mức −u tiên cao nhất, 7: mức −u tiên thấp nhất)
Các bit IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0
Trạng thái của ISR 0 0 1 0 0 1 0 0
Mức −u tiên 7 6 5 4 3 2 1 0
Thanh ghi ISR sau khi IRQ4 đ−ợc chấp nhận và sau khi có lệnh quay đổi
Các bit IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0
Trạng thái của ISR 0 0 0 0 0 1 0 0
Mức −u tiên 1 0 7 6 5 4 3 2
(4)Quay (đổi) mức −u tiên trong chế độ kết thúc ngắt tự động: Trong chế độ này chỉ cần một lần đ−a lệnh chọn chế độ mức −u tiên khi kết thúc yêu cầu
ngắt từ động. Có thể chọn lệnh này bằng lập –chế độ quay khi có EOI tự động–. Từ đó trở đi 8259 sẽ đổi mức −u tiên mỗi khi kết thúc yêu cầu ngắt tự động t−ơng tự mục tr−ớc. Muốn loạ bỏ chế độ này ta có thể dùng lệnh xoá –chế độ quay khi có EOI tự động–.
(5)Quay (đổi) mức −u tiên khi kết thúc yêu cầu ngắt chỉ đích danh: Trong ch−ơng trình con phục vụ ngắt phải có lệnh EOI đích danh cho 8259 đặt tr−ớc lệnh trở về IRET. Mạch 8259 sẽ xoá đúng bit ISRi (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 yêu cầu ngắt IRQi chỉ đích danh ứng với tổ hợp mã i = L2L1L0. Yêu cầu ngắt IRQi+1 sẽ đ−ợc gán mức −u tiên cao nhất.
OCW3:
Từ điều khiển hoạt động OCW3 sau khi đ−ợc nạp vào 8259 cho phép: • Chọn ra các thanh ghi để đọc (trạng thái)
• Thăm dò trạng thái yêu cầu ngắt bằng cách đọc trạng thái của đâu vào yêu cầu ngắt IRQi với mức −u tiên cao nhất cùng với mã của đầu vào đó. • Thao tác với mặt nạ đặc biệt.
Các thanh ghi IRR và ISR có thể đ−ợc nạp sau khi nạp từ điều khiển OCW3 vào 8259 với bit ERIS = 1 (D1). Bit (D0) RIS = 0, cho phép đọc IRR ở lần đọc sau; RIS = 1, cho phép đọc ISR ở lần đọc sau.
Bằng việc đ−a vào 8259 từ điều khiển hoạt động OCW3 với bit P = 1, ta có thể đọc đ−ợc trên bus dữ liệu ở lần đọc tiếp ngay sau đấy từ thăm dò, trong đó các thông tin về yêu cầu ngắt với mức −u tiên cao nhất đang hoạt động và mã t−ơng ứng với yêu cầu ngắt đó theo dạng sau:
Hình vẽ: Thanh ghi hoạt động OCW3 D7 D6 D5 D4 D3 D2 D1 D0 Chế độ mặt nạ đặc biệt 10: Xoá chế độ mặt nạ đặc biệt 11: Lặp chế độ mặt nạ đặc biệt A0 10: Đọc IRR ở lần đọc sau 11: Đọc ISR ở lần đọc sau
0 0 ESMM SMM 0 1 P ERIS RIS
Thăm dò hiện trạng của yêu cầu ngắt 1: Đọc mã mức −u tiên cao nhất ở lần đọc sau
D7 D6 D5 D4 D3 D2 D1 D0
IRi=0: Đầu vào IRQi không có yêu cầu ngắt IRi=1: Đầu vào IRQi không có yêu cầu ngắt (a) Thanh ghi yêu cầu ngắt: IRR
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
D7 D6 D5 D4 D3 D2 D1 D0
ISi=0: Yêu cầu ngắt i không đ−ợc phục vụ ISi=1: Yêu cầu ngắt i đang đ−ợc phục vụ (a) Thanh ghi phục vụ ngắt: IRR
Ta có thể coi đây là chế độ thăm dò yêu cầu ngắt và chế độ này th−ờng đ−ợc ứng dụng trong tr−ờng hợp có nhiều ch−ơng trình con phục vụ ngắt giống nhau cho một yêu cầu ngắt và việc chọn ch−ơng trình nào để sử dụng là (trách
nhiệm) công việc của ng−ời sử dụng (ng−ời lập trình).
Vậy, muốn dùng chế độ thăm dò của 8259 để xác định yêu cầu ngắt hiện thời ta cầ thực hiện lần l−ợt dãy thao tác sau:
• Cấm các yêu cầu ngắt che đ−ợc bằng lệnh CLI (xoá IF). • Ghi từ lệnh OCW3 với bit P=1.
• Đọc từ thăm dò trạng thái yêu cầu ngắt trên bus dữ liệu.
Bit ESMM = 1: Cho phép 8259 thao tác với chế độ mặt nạ đặc biệt. Bit SMM = 1: cho phép chế độ mặt nạ đặc biệt. Chế độ mặt nạ đặc biệt đ−ợc dùng để thay đổi thứ tự −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 con phục vụ ngắt với từ điều khiển hoạt động 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 m−c −u tiên của yêu cầu ngắt bị cấm đó đ−ợc tác động thì ta sẽ dùng chế độ mặt nạ đặc biệt. Nếu đã đ−ợc thiết lập, chế độ mặt nạ đặc biệt sẽ tồn tại cho đến khi xoá đi bằng cách ghi vào 8259 một từ điều khiển OCW3 khác với bit SMM = 0. Mặt nạ đặc biệt không ảnh h−ởng tới các yêu cầu ngắt có mức −u tiên cao hơn.
Tóm l−ợc hoạt động của 8259 trong hệ vi xử lý 8088:
(1)Khi có yêu cầu ngắt từ thiết bị ngoại vi tác động vào chân IRQi nào đó của 8259 thì nó sẽ gửi xung INT = 1 đến chân INTR của CPU 8088.
(2)Nếu chấp nhận, 8088 sẽ đ−a xung INTA (low active) đầu tiên đến 8259. (3)8259 dùng xung INTA đầu này nh− là thông báo để nó hoàn tất các xử lý nội
bộ cần thiết, kể cả việc xử lý −u tiên nếu có nhiều yêu cầu ngắt cùng tác động.
(4)8088 đ−a xung INTA thứ hai khiến 8259 đ−a ra bus dữ liệu 1 byte là số hiệu ngắt của yêu cầu ngắt vừa đ−ợc chấp nhận (yêu cầu ngắt có mức −u tiên cao nhất (nếu có nhiều yêu cầu ngắt cùng tác động) – tuỳ theo chế độ làm việc của 8259).
(5)8088 tính toán địa chỉ của ch−ơng trình con phục vụ ngắt dựa trên số hiệu ngắt, cụ thể nh− sau:
• Cất FR; xoá IF, TF; cất CS, IP vào Stack
• Lấy CS, IP của ch−ơng trình con phục vụ ngắt từ bảng vector ngắt và thực hiện nó.
Tuỳ theo những yêu cầu khác nhau về sự hoạt động của 8259 mà trong ch−ơng trình con phục vụ ngắt có lệnh ghi OCW1, OCW2 hay OCW3 vào 8259.
Hình vẽ: Dạng thức của từ thăm dò trạng tháI yêu cầu ngắt D7 D6 D5 D4 D3 D2 D1 D0