DIV nguồn (Unsigned Divide)
G A8 A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 O3 O4 O5 O6 O7 00010110000111
6.2.1. Các loại ngắt trong hệ
Trong hệ vi xử lý có bộ vi xử lý 8088 (và 80x86 family) có thể phân loại các ngắt theo ngun nhân gây ngắt CPU thành 3 nhóm:
• Ngắt cứng: Đây là các yêu cầu ngắt CPU do mạch ngoài (thiết bị ngoại vi hoặc các vi mạch điều khiển khác) tác động đến chân INTR và NMI của 8088.
Ngắt cứng NMI (Non Maskable Interrupt) là yêu cầu ngắt không che được tương ứng với ngắt mềm INT 2. Trong hệ thống, các nguyên nhân gây lỗi như lỗi bộ nhớ, chẵn lẻ, sự cố hệ thống như sụt điện áp, cháy máy, … sẽ được chuyển thành tín hiệu báo về chân NMI của bộ vi xử lý. Các lệnh như CLI (xoá cờ IF) STI (lập cờ IF) khơng ảnh hưởng tới sự nhận biết của tín hiệu yêu cầu ngắt NMI.
Ngắt cứng INTR là yêu cầu ngắt che được. Các lệnh CLI, STI có ảnh hưởng trực tiếp tới trạng thái của cờ IF trong thanh ghi cờ của bộ vi xử lý, tức là ảnh hưởng tới việc CPU có thể nhận biết được các yêu cầu ngắt tại chân này hay khơng. Cụ thể, nếu IF=1 thì CPU nhận biết được các yêu cầu ngắt tác động chân INTR của nó; IF=0, ngược lại. Yêu cầu ngắt tại
chân INTR có thể có kiểu ngắt N nằm trong khoảng 00h – FFh, kiểu ngắt này phải được đưa vào bus dữ liệu của hệ thống để CPU có thể đọc được khi có xung INTA (Interrupt Acknowledge) trong chu kỳ trả lời chấp nhận ngắt.
• Ngắt mềm: Khi CPU thực hiện các lệnh ngắt dạng INT N (lệnh gọi ngắt trong assembly) – trong đó N là số hiệu (kiểu) ngắt nằm trong khoảng 00h –
FFh. Dựa vào số hiệu ngắt, theo cách thiết kế mà CPU sẽ tìm được chương trình con (phục vụ) ngắt để thực hiện thơng qua bảng vector ngắt (sẽ nói trong phần sau).
• Ngắt ngoại lệ: Đây là các ngắt xuất hiện do các lỗi sinh ra trong quá trình hoạt động của CPU. Ví dụ như chia cho 0, tràn khi tính tốn, … và một số lỗi khi tính tốn với số thực dấu chấm động (trong các bộ vi xử lý tiên tiến).
Các yêu cầu ngắt, cuối cùng cũng dẫn đến: CPU thực hiện một đoạn chương trình (chương trình con) – nó được coi như những “điều kiện cho rẽ nhánh” sự hoạt động của CPU. Các yêu cầu này được CPU kiểm tra thường xuyên tại chu kỳ đồng hồ cuối cùng của mỗi lệnh.
Để đưa số hiệu ngắt vào bus dữ liệu khi có tín hiệu u cầu ngắt tác động vào CPU (INTR hoặc NMI) của một thiết bị ngoại vi nào đó (đay là ngắt cứng), giả thiết trong một thời điểm nhất định chỉ có một yêu cầu ngắt IRQi (Interrupt ReQuest i) được tác động và khi đó CPU sẽ tiếp nhận được yêu cầu ngắt và đọc số hiệu ngắt N. Ta có thể sử dụng sơ đồ đơn giản sau:
AD7 IRQ6 IRQ5 IRQ4 IRQ3 IRQ2 IRQ1 IRQ0 N
Hình vẽ: Chu kỳ trả lời ngắt của 8088
ALE E N: Kiểu ngắt LOCK INT A 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
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 u cầu ngắt IRQi 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 /INTA (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) 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.