7 vi mạch nhớ SRAM 8Kx8 còn lại BE000-BFFFF
ALE N: Kiểu ngắt
N: Kiểu ngắt LOCK INTA AD0-AD7 T1 T2 T3 T4 T1 T1 T1 T2 T3 T4 Bus bị thả nổi CLK 8088 74LS245 +5V D Bus IRQ0 ... IRQ6 OC1 OC2 INTA INTR A/D0 A/D7 A/D1 NAND
AD7 IRQ6 IRQ5 IRQ4 IRQ3 IRQ2 IRQ1 IRQ0 N 1 1 1 1 1 1 1 0 FEh (245) 1 1 1 1 1 1 0 1 FDh (253) 1 1 1 1 1 0 1 1 FBh (251) 1 1 1 1 0 1 1 1 F7h (247) 1 1 1 0 1 1 1 1 EFh (239) 1 1 0 1 1 1 1 1 DFh (223) 1 0 1 1 1 1 1 1 BFh (191)
Bảng quan hệ giữa IRQi và số hiệu ngắt N
Tại một thời điểm nếu có 1 tín hiệu yêu cầu ngắt nào đó tác động (mức thấp – low) thì đầu ra của mạch NAND sẽ có xung yêu cầu ngắt đến CPU. Tín hiệu IRQi đ−ợc đồng thời đ−a qua mạch khuếch đại đệm để tạo ra số hiệu ngắt t−ơng ứng, số hiệu ngắt này sẽ đ−ợc CPU đọc vào khi nó đ−a tín hiệu trả lời (xung thứ hai). Trong tr−ờng hợp có 2 hay nhiều hơn các yêu cầu ngắt tác động thì với mạch ví dụ trên không thể đáp ứng đ−ợc vì vỡi một xung yêu cầu ngắt nhận đ−ợc từ chân INTR nh−ng số hiệu ngắt thì không thuộc (không t−ơng ứng) yêu cầu ngắt nào cả! Vì vậy cần có sự xử lý tr−ớc tình huống đó. Sẽ đ−ợc nói rõ trong phần sau.
b. Đáp ứng của CPU khi có yêu cầu ngắt
Khi có yêu cầu ngắt với số hiệu ngắt N tác động đến chân tiếp nhận yêu cầu ngắt của CPU và nếu yêu cầu ngắt đó đ−ợc chấp nhận (với những yêu cầu ngắt che đ−ợc) thì CPU sẽ thực hiện dãy công việc sau:
(a)SP SP-2; {SP} FR (*chỉ ra đỉnh mới của Stack, cất thanh ghi cờ vào stack, trong đó {SP} là ô nhớ do SP l−u giữ địa chỉ (trỏ tới)*)
(b)IF 0; TF 0; (*cấm các ngắt che đ−ợc, chạy suốt*)
(c) SP SP-2; {SP} CS; (*chỉ ra đỉnh mới của Stack, cất địa chỉ segment của địa chỉ trở về vào stack*)
(d)SP SP-2; {SP} IP; (*chỉ ra đỉnh mới của Stack, cất địa chỉ offset của địa chỉ trở về vào stack*)
(e)IP {N*4}; CS {N*4+2}; (*lấy lệnh tại địa chỉ mới của ch−ơng trình con phục vụ ngắt kiểu N (số hiệu ngắt N) t−ơng ứng trong bảng vector ngắt*)
(f) Tại cuối ch−ơng trình con phục vụ ngắt, khi gặp lệnh IRET, CPU sẽ thực hiện dãy các công việc trên theo thứ tự ng−ợc lại, cụ thể:
• {SP} IP; SP SP+2 • {SP} CS; SP SP+2 • {SP} FR; SP SP+2
(*Bộ vi xử lý quay lại thực hiện ch−ơng trình chính tại địa chỉ với giá trị cũ và thanh ghi cờ đ−ợc lấy ra từ stakc*)
IRQi
Trong thực tế, các ngắt mềm INT N đã bao trùm các loại ngắt khác nhau bởi vì Intel đã quy định một số kiểu ngắt đặc biệt đ−ợc xếp vào đầu dãy ngắt mềm nh− sau:
• INT 0: Ngắt mềm do phép chia cho 0 gây ra.
• INT 1: Ngắt mềm để chạy từng lệnh với tr−ờng hợp cờ TF=1. • INT 2: Ngắt cứng do tín hiệu tích cực tại chân NMI gây ra.
• INT 3: Ngắt mềm để đặt điểm dừng của ch−ơng trình tại một địa chỉ nào đó. • INT 4: (Hoặc lệnh INTO) là ngắt mềm ứng với tr−ờng hợp tràn (OF=1).
Các kiểu ngắt khác còn lại đ−ợc dành cho Intel và ng−ời sử dụng (IBM không hoàn toàn tuân thủ các quy định này khi chế tạo các máy tính PC/XT, PC/AT):
• INT 5 – INT 1Fh: Dành riêng cho Intel trong các bộ vi xử lý cao cấp.
• INT 20h – INT FFh: Dành cho ng−ời sử dụng (trong đó hệ điều hành và BIOS đã sử dụng một phần).
Các kiểu ngắt N (trong INT N) đều t−ơng ứng với các địa chỉ xác định của ISR mà ta có thể tra (lấy – hoặc đọc trực tiếp) trong bảng vector ngắt. Intel quy định bảng này nằm trong RAM bắt đầu từ địa chỉ 00000h và kéo dài 1 KB (kích th−ớc này là vì: 8088 và 80x86 có 256 kiểu ngắt, mỗi kiểu ngắt ứng với một vector ngắt, một vector ngắt cần 4 byte để chứa địa chỉ đầy đủ cho CS và IP của ch−ơng trình con phục vụ ngắt, 2 byte để l−u CS, 2 byte khác để l−u IP nên: 256 (byte) x 4 = 1024 (byte) = 1 KB).
Bảng vector ngắt tại 1 KB đầu tiên c. Xử lý −u tiên ngắt
Nh− đã đề cập đến, vấn đề trở nên phức tạp là tại cùng một thời điểm mà có nhiều tín hiệu yêu cầu ngắt tác động đến CPU (thuộc các kiểu ngắt khác nhau). Khi đó CPU sẽ xử lý nh− thế nào? Thực hiện (phục vụ) ch−ơng trình con phục vụ ngắt nào? Thực ra CPU xử lý các yêu cầu ngắt theo mức −u tiên (theo thiết kế) với nguyên tắc ngắt nào có mức −u tiên cao nhất sẽ đ−ợc CPU nhận biết và phục vụ tr−ớc.
Ngay từ khi thiết kế và chế tạo (th−ờng gọi là ngầm định) CPU 8088 có khả năng phân biệt các mức −u tiên khác nhau cho các loại ngắt theo thứ tự từ cao xuống thấp nh− sau:
Yêu cầu ngắt
Ch−ơng trình hiện tại của CPU
CPU tự: •Cất FR •Xoá IF, TF •Cất CS, IP •Lấy địa chỉ IR CPU tự: •Cất FR •Xoá IF, TF •Cất CS, IP •Lấy địa chỉ IR ISR Lệnh cất các thanh ghi Thân ISR
Lệnh lấy các thanh ghi IRET
Hình vẽ: Minh hoạ về mặt cấu trúc ch−ơng trình có ngắt xảy ra và sự liên hệ giữa ch−ơng trình chính (CTC) và ch−ơng trình con phục vụ ngắt (ISR)
Các ngắt Mức −u tiên Ngắt nội bộ: INT 0 (phép chia 0, INT N, INTO 0: Cao nhất
Ngắt NMI 1
Ngắt INTR 2
Ngắt để chạy từng lệnh (INT 1) 3: Thấp nhất
Để thấy rõ sự hoạt động của CPU trong cơ chế ngắt −u tiên này, ta có thể lấy môtj ví dụ cụ thể nh− sau: Giả sử tại một thời điểm nào đó, khi CPU (ở trạng thái cho phép ngắt với cờ IF=1) đang thực hiện phép chia và có lỗi xảy ra do số chia bằng 0, tai thời điểm này CPU cũng nhận đ−ợc yêu cầu ngắt từ đầu bào INTR. Theo thứ tự −u tiên ngầm định trong việc xử lý ngắt của 8088 thì INT o có mức −u tiên cao hơn ngắt che đ−ợc INTR nên CPU sẽ thực hiện ISR t−ơng ứng INT 0 để đáp ứng với lỗi đặc biệt do phép chia 0 gây ra và cờ IF đ−ợc xoá về 0 yêu cầu ngắt INTR sẽ (tự động) bị cấm cho tới khi ISR t−ơng ứng INT 0 kết thúc và trở về nhờ lệnh IRET, cờ IF đ−ợc khôi phục trở lại (toàn bộ thanh ghi cờ). Tiếp đó CPU sẽ đáp ứng yêu cầu ngắt INTR bằng cách thực hiện ISR t−ơng ứng INTR đó.
d. Mạch điều khiển ngắt −u tiên PPI 8259A
Khi vào/ra dữ liệu với thiết bị ngoại vi theo nguyên tắc ngắt (ngắt cứng), tín hiệu yêu cầu ngắt (yêu cầu phục vụ ngắt) hay tín hiệu sẵn sàng (ready) từ phía thiết bị ngoại vi nối với lối vào tiếp nhận yêu cầu ngắt INTR của CPU. Theo đó (mà) máy tính có thể thực hiện đ−ợc các công việc khác cho tới khi nó bị ngắt bởi tín hiệu này từ một thiết bị ngoại vi nào đó. Ch−ơng trình con phục vụ ngắt t−ơng ứng sẽ nhập hoặc xuất dữ liệu trong vòng một vài micro giây rồi kết thúc để CPU quay trở về ch−ơng trình (công việc) đã bị gián đoạn. Nh− vậy, các thao tác nhập/xuất dữ liệu chỉ chiếm một phần nhỏ thời gian của bộ vi xử lý. Có nhiều ứng dụng đ−ợc sử dụng ngắt cứng nh− việc đọc vào mã ASCII các ký tự của các phím trên bàn phím.
• Đếm số ngắt từ một bộ định thời để tạo thành một đồng hồ thời gian thực theo giờ, phút, giây.
• Phát hiện các tình huống khẩn cấp hay kiểm tra công việc dựa trên cơ chế ngắt, –
Bề nguyên tắc, mỗi ứng dụng này yêu cầu một lối vào ngắt riêng biệt (cụ thể) để CPU nhận biết đúng ứng dụng đó, nh−ng với bộ vi xử lý 8088 và 80x86 nói chung chỉ có 2 chân (lối vào) tiếp nhận yêu cầu ngắt là INTR và NMI. Nếu (hầu hết) dành lối vào NMI cho ngắt khi mất nguồn nuôi (sụt áp) thì còn lại duy nhất một lối vào INTR cho tất cả các ứng dụng còn lại (Các ngắt INTR chỉ là một mức −u tiên trong 4 mức −u tiên ngầm định mà 8088 có thể xử lý đ−ợc). Do đó, khi có nhiều yêu cầu ngắt che đ−ợc của các thiết bị ngoại vi khác nhau cùng gửi đến CPU yêu cầu phục vụ (trao đổi dữ liệu) thì CPU không thể nhận biết đ−ợc yêu cầu đó là của thiết bị nào. Trong tr−ờng hợp đó, phải sử dụng một mạch bổ trợ để –dồn– các tín hiệu ngắt cứng từ các thiết bị ngoại vi khác nhau vào một lối vào duy nhất INTR của bộ vi xử lý, đồng thời có thể xử lý −u tiên cho các tín hiệu yêu cầu ngắt đó gọi là bộ điều khiển ngắt −u tiên: PIC – Priority Interrupt Controller.
Trong các máy tính IBM PC, PC XT/AT, – (và các hệ vi xử lý khác nói chung) th−ờng dùng vi mạch PIC có sẵn 8259. Đó là một vi mạch cỡ lớn lập trình đ−ợc, nó có thể xử lý đ−ợc 8 yêu cầu ngắt đồng thời gửi đến với 8 mức −u tiên khác nhau để tạo ra
một yêu cầu ngắt duy nhất (có mức −u tiên cao nhất trong số đó) đ−a tới chân INTR của CPU (là yêu cầu ngắt che đ−ợc ứng với một thiết bị nào đó.
Khi hệ thống có số l−ợng thiết bị ngoại vi lơn hơn 8, cần mở rộng khả năng tiếp nhận và xử lý ngắt thì 8259 cho phép nối tầng. Nếu nối tầng một mạch 8259 chủ và 8 mạch 8259 thợ thì có thể xử lý đ−ợc 64 ngắt đồng thời gửi đến với 64 mức −u tiên khác nhau (Với các máy PC XT/AT: th−ờng nối tầng một 8259 chủ và một 8259 thợ).
Một số ký hiệu trên sơ đồ:
IRQ0 – IRQ7 (IRQi) – Interrupt ReQuest: các yêu cầu ngắt. IRR – Interrupt Request Register: thanh ghi yêu cầu ngắt. PR – Priority Resolver: bộ xử lý −u tiên.
SP/EN – Slave Program/ENable buffer: lập trình thành mạch thợ/mở đệm bus dữ liệu.
ISR – In Service Register: thanh ghi yêu cầu ngắt đang đ−ợc phục vụ. Cas0 – Cas2: tín hiệu nối tầng giữa các PIC với nhau.
Các khối chức năng chính của 8259A bao gồm
(Các) yêu cầu ngắt từ các thiết bị ngoại vi gửi tới IRQi đ−ợc xử lý bởi 3 thanh ghi 8 bit, mỗi bit t−ơng ứng với một yêu cầu ngắt IRQi (i=0-7).
(1) IMR (Interrupt Mask Register – Thanh ghi che ngắt): Thanh ghi này dùng để cấm (che) hoặc cho phép (không che) từng lối vào yêu cầu ngắt riêng biệt. Mỗi bit của nó t−ơng ứng với một lối vào có cùng chỉ số i. Để cho phép một lối vào ngắt, phải gửi đi (ghi) một từ lệnh có bit t−ơng ứng lối vào ấy bằng 0.
(2) IRR (Interrupt Request Register – Thanh ghi yêu cầu ngắt): Thanh ghi này có nhiệm vụ ghi nhớ để theo dõi các yêu cầu ngắt đang yêu cầu phục vụ (có tại các IRQi). Tín hiệu yêu cầu ngắt có tại lối vào nào thì bit t−ơng ứng với lối vào đó của IRR sẽ đ−ợc lập. Tín hiệu yêu cầu ngắt phải tồn tại trên lối vào IRRQ cho tới khi xuất hiện s−ờn xuống của xung INTA thứ nhất.
Logic điều khiển