Tải bản đầy đủ (.pdf) (27 trang)

Chương 7 - Ngắt và xử lý ngắt trong hệ 8088 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (400.66 KB, 27 trang )

Chơng 7
ngắt v xử lý ngắt trong hệ 8088

1. Sự cần thiết phải ngắt CPU
Trong cách tổ chức trao đổi dữ liệu thông qua việc thăm dò trạng thái sẵn
sng của thiết bị ngoại vi nh đã đợc trình by ở chơng trớc, trớc khi tiến hnh
bất kỳ một cuộc trao đổi dữ liệu no CPU phải để ton bộ thời gian vo việc xác định
trạng thái sẵn sng lm việc của thiết bị ngoại vi. Trong hệ thống vi xử lý với cách
lm việc nh vậy, thông thờng CPU đợc thiết kế chủ yếu chỉ l để phục vụ cho việc
vo/ra dữ liệu v thực hiện các xử lý liên quan.
Trong thực tế ngời ta rất muốn tận dụng khả năng của CPU để lm thêm
đợc nhiều công việc khác nữa, chỉ khi no có yêu cầu trao đổi dữ liệu thì mới yêu cầu
CPU tạm dừng công việc hiện tại để phục vụ việc trao đổi dữ liệu. Sau khi hon
thnh việc trao đổi dữ liệu thì CPU lại phải quay về để lm tiếp công việc hiện đang
bị gián đoạn. Cách lm việc theo kiểu ny gọi l ngắt CPU (gián đoạn hoạt động của
CPU) để trao đổi dữ liệu. Một hệ thống với cách hoạt động theo kiểu ny có thể đáp
ứng rất nhanh với các yêu cầu trao đổi dữ liệu trong khi vẫn có thể lm đợc các công
việc khác. Muốn đạt đợc điều ny ta phải có cách tổ chức hệ thống sao cho có thể tận
dụng đợc khả năng thực hiện các chơng trình phục vụ ngắt tại các địa chỉ xác định
của CPU. Khi nghiên cứu các tín hiệu của CPU 8088, chúng ta đã thấy vi mạch ny
có các chân tín hiệu cho các yêu cầu ngắt che đợc INTR v không che đợc NMI,

205
chính các chân ny sẽ đợc sử dụng vo việc đa các yêu cầu ngắt từ bên ngoi đến
CPU.
2. Ngắt trong hệ vi xử lý 8088
2.1. Các loại ngắt trong hệ 8088
Trong hệ vi xử lý 8088 có thể xếp các nguyên nhân gây ra ngắt CPU vo 3
nhóm nh sau:
+ nhóm các ngắt cứng: đó l các yêu cầu ngắt CPU do các tín hiệu đến
từ các chân INTR v NMI.


Ngắt cứng NMI l yêu cầu ngắt không che đợc tơng đơng với ngắt mềm
INT 2. Các lệnh CLI (xoá cờ IF) v STI (lập cờ IF) không có ảnh hởng đến việc nhận
biết 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 v STI có ảnh hởng
trực tiếp tới trạng thái của cờ IF trong bộ vi xử lý, tức l ảnh hởng tới việc CPU có
nhận biết yêu cầu ngắt tại chân ny hay không. Yêu cầu ngắt tại chân INTR có thể có
kiểu ngắt N nằm trong khoảng 0-FFH. Kiểu ngắt ny phải đợc đa vo bus dữ liệu
để CPU có thể đọc đợc khi có xung INTA trong chu kỳ trả lời chấp nhận ngắt.
Biểu đồ thờì gian của các xung liên quan đến quá trình trên đợc mô tả trên
hình 7.1.



T1 T2 T3 T4 T1 T1 T1 T2 T3 T4


ALE

LOCK


N

INTA

AD0-AD7 bus bị thả nổi (kiểu ngắt)


Hình 7.1. Chu kỳ trả lời ngắt của CPU 8088.



206
+ nhóm các ngắt mềm: khi CPU thực hiện các lệnh ngắt dạng INT N,
trong đó N l số hiệu (kiểu) ngắt nằm trong khoảng 00-FFH (0-255).
+ nhóm các hiện tợng ngoại lệ: đó l các ngắt do các lỗi nảy sinh
trong quá trình hoạt động của CPU nh phép chia cho 0, xảy ra trn khi tính toán
Yêu cầu ngắt sẽ đợ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.
Trên hình 7.2 trình by một cách đơn giản để đa đợc số hiệu ngắt N vo
bus dữ liệu trong khi cũng tạo ra yêu cầu ngắt đa vo chân INTR của bộ vi xử lý
8088.












+5v
8088
AD7
AD6
AD5
AD4
AD3

AD2
AD1
AD0

INTA



INTR
OC1
OC2 'LS244





IR0 IR3 IR6

Hình 7.2. Một cách đơn giản để đa số hiệu ngắt vo bus dữ liệu

Giả thiết trong một thời điểm nhất định chỉ có một yêu cầu ngắt IRi đợc tác
động v khi đó ở đầu ra của mạch NAND sẽ có xung yêu cầu ngắt đến CPU. Tín hiệu
IRi đợ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 ny sẽ đợc CPU đọc vo khi nó đa ra tín hiệu trả lời
INTA.
Bảng 7.1 cho ta quan hệ giữa IRi v số hiệu ngắt N tơng ứng.

Bảng 7.1 Quan hệ giữa IRi v số hiệu ngắt N

AD7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 N

1 1 1 1 1 1 1 0 FEH (254)
1 1 1 1 1 1 0 1 FDH (253)

207
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)
Ta sẽ còn đề cập đến việc xử lý trờng hợp có 2 yêu cầu ngắt IRi cùng một lúc
v cách đa các giá trị N của INT N vo bus dữ liệu một cách tự động bằng mạch điều
khiển ngắt PIC ở phần sau.

2.2. Đáp ứng của CPU khi có yêu cầu ngắt
Khi có yêu cầu ngắt kiểu N đến chân CPU v nếu yêu cầu đó đợc phép, CPU
thực hiện các công việc sau:
1. SP SP-2, {SP} FR, trong đó {SP} l ô nhớ do SP chỉ ra.
(chỉ ra đỉnh mới của ngăn xếp, cất thanh ghi cờ vo đỉnh ngăn xếp)
2. IF 0 , TF 0.
(cấm các ngắt khác tác động vo CPU, cho CPU chạy ở chế độ bình
thờng)
3. SP SP-2, {SP} CS.
(chỉ ra đỉnh mới của ngăn xếp, cất phần địa chỉ đoạn của địa chỉ trở
về vo đỉnh ngăn xếp)
4. SP SP-2, {SP} IP.
(chỉ ra đỉnh mới của ngăn xếp, cất phần địa chỉ lệch của địa chỉ trở
về vo đỉnh ngăn xếp)
5. {N*4} IP, {N*4+2} CS.
(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
tơng ứng trong bảng vectơ ngắt)

6. Tại cuối chơng trình phục vụ ngắt, khi gặp lệnh IRET
{SP} IP, SP SP+2
{SP} CS, SP SP+2
{SP} FR, SP SP+2
(bộ vi xử lý quay lại chơng trình chính tại địa chỉ trở về v với giá
trị cũ của thanh ghi cờ đợc lấy ra từ ngăn xếp).

Về mặt cấu trúc chơng trình, khi có ngắt xảy ra thì chơng trình chính
(CTC) liên hệ với chơng trình con phục vụ ngắt (CTCPVN) nh mô tả trên hình 7.3.
Trong thực tế các ngắt mềm INT N đã bao trùm các loại khác bởi vì Intel đã
quy định một số kiểu ngắt đặc biệt đợc xếp vo đầu dãy ngắt mềm INT N nh sau:
+ INT 0: Ngắt mềm do phép chia cho số 0 gây ra,
+ INT 1: Ngắt mềm để chạy từng lệnh ứng với trờng hợp cờ TF=1,

208
+ 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ỉ no đó
+ INT 4 (hoặc lệnh INTO): ngắt mềm ứng với trờng hợp cờ trn OF=1.
Các kiểu ngắt khác còn lại thì đợc dnh cho Intel v cho ngời sử dụng (IBM
không hon ton tuân thủ các quy định ny khi chế tạo các máy PC/XT v PC/AT):
+ INT 5-INT 1FH: dnh riêng cho Intel trong các bộ vi xử lý cao cấp khác,
+ INT 20H-INT FFH: dnh cho ngời sử dụng.

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
CTCPVN m ta có thể tra đợc trong bảng các vectơ ngắt. Intel quy định bảng ny
nằm trong RAM bắt đầu từ địa chỉ 00000H v di 1 KB (vì 8088 có tất cả 256 kiểu
ngắt, mỗi kiểu ngắt ứng với 1 vectơ ngắt, 1 vectơ ngắt cần 4 byte để chứa địa chỉ đầy
đủ cho CS:IP của CTCPVN).



CTC


(Thân CTC) ctcpvn
CPU tự: + cất thanh ghi F
+ xoá IF v TF lệnh cất các thanh ghi
+ cất CS, IP
+ lấy địa chỉ chơng
trình phục vụ ngắt

(Thân ctcpvn)

CPU tự: + lấy lại IP, CS
+ lấy lại thanh ghi F

lệnh lấy các thanh ghi
IRET

Hình 7.3. Liên hệ giữa CTC v CTCPVN khi có ngắt

Bảng 7.2. Bảng vectơ ngắt của 8088 tại 1KB RAM đầu tiên

03FEH-03FFH CS của CTPVN INT FFH
03FCH-03FDH IP của CTPVN INT FFH

0082H- 0083H CS của CTPVN INT 20H
0080H- 0081H IP của CTPVN INT 20H

000AH- 000BH CS của CTCPVN INT 2


209
0008H- 0009H IP của CTCPVN INT 2
0006H- 0007H CS của CTCPVN INT 1
0004H- 0005H IP của CTCPVN INT 1
0002H- 0003H CS của CTCPVN INT 0
0000H- 0001H IP của CTCPVN INT 0
Trên bảng 7.2 giới thiệu một phần của bảng vectơ ngắt của CPU 8088.

2.3. Xử lý u tiên khi ngắt
Có một vấn đề rất thực tế đặt ra l nếu tại cùng một thời điểm có nhiều yêu
cầu ngắt thuộc các loại ngắt khác nhau cùng đòi hỏi CPU phục vụ thì CPU xử lý các
yêu cầu ngắt đó nh thế no? Câu trả lời l CPU xử lý các yêu cầu ngắt theo thứ tự
u tiên với nguyên tắc ngắt no 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 đợc 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:

Mức u tiên

+ ngắt nội bộ: INT 0 (phép chia cho 0), INT N, INTO cao nhất
+ ngắt không che đợc NMI
+ ngắt che đợc INTR
+ ngắt để chạy từng lệnh INT 1 thấp nhất

Để thấy rõ hoạt động của CPU trong cơ chế ngắt u tiên ny ta có thể lấy một
ví dụ cụ thể nh sau.
Giả thiết tại một thời điểm no đó, trong 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ố bị chia bằng 0, đúng vo
lúc đó CPU cũng nhận đợc yêu cầu ngắt từ đầu vo INTR. CPU sẽ xử lý ra sao trong

trờng hợp ny?
Theo thứ tự u tiên ngầm định trong việc xử lý ngắt của CPU 8088 thì INT 0
có mức u tiên cao hơn INTR, vì vậy đầu tiên CPU sẽ thực hiện chơng trình phục vụ
ngắt INT 0 để đáp ứng với lỗi đặc biệt do phép chia cho 0 gây ra v cờ IF bị xoá về 0.
Yêu cầu ngắt INTR sẽ tự động bị cấm cho tới khi chơng trình phục vụ ngắt INT 0
đợc hon tất v trở về nhờ IRET, cờ IF cũ đợc trả lại. Tiếp theo đó CPU sẽ đáp ứng
yêu cầu ngắt INTR bằng cách thực hiện chơng trình phục vụ ngắt dnh cho INTR.


210
2.4. Mạch điều khiển ngắt u tiên 8259A
Trong trờng hợp có nhiều yêu cầu ngắt che đợc từ bên ngoi phải phục vụ
ta thờng dùng vi mạch có sẵn 8259A để giải quyết vấn đề u tiên. Mạch 8259A đợc
gọi l mạch điều khiển ngắt u tiên (priority interrupt controller, PIC). Đó l một vi
mạch cỡ lớn lập trình đợc, có thể xử lý trớc đợc 8 yêu cầu ngắt với 8 mức u tiên
khác nhau để tạo ra một yêu cầu ngắt đa đến đầu vo INTR (yêu cầu ngắt che đợc)
của CPU 8088. Nếu nối tầng 1 mạch 8259A chủ với 8 mạch 8259A thợ ta có thể nâng
tổng số các yêu cầu ngắt với các mức u tiên khác nhau lên thnh 64.



Bus nội bộ INTA INT

D0-D7




RD
Đệm

bus D

Logic điều khiển

Logic
ghi/đọc
WR IR
0

A0 IR1
:
CS
IR7
Cas
0

Cas
1
Cas
2

SP/EN


Ghi chú:
IR0-IR7: Các yêu cầu ngắt
IRR: Thanh ghi yêu cầu ngắt
PR: Bộ xử lý u tiên
SP/EN: Slave program/Enable buffer (lập trình thnh mạch thợ/mở đệm bus
dữ liệu)

ISR: Thanh ghi các 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

Hình 7.4. Sơ đồ khối của PIC 8259A.


Các khối chức năng chính của 8259A
Đệm nối
tầng v
so sánh
IMR
(thanh ghi mặt nạ ngắt)


ISR


PR


IRR

211

+ Thanh ghi IRR: ghi nhớ các yêu cầu ngắt có tại đầu vo IRi.
+ Thanh ghi ISR: ghi nhớ các yêu cầu ngắt đang đợc phục vụ trong số các
yêu cầu ngắt IRi.
+ Thanh ghi IMR: ghi nhớ mặt nạ ngắt đối với các yêu cầu ngắt IRi.
+ Logic điều khiển: khối ny có nhiệm vụ gửi yêu cầu ngắt tới INTR của 8088
khi có tín hiệu tại các chân IRi v nhận trả lời chấp nhận yêu cầu ngắt INTA từ CPU

để rồi điều khiển việc đa ra kiểu ngắt trên bus dữ liệu.
+ Đệm bus dữ liệu: dùng để phối ghép 8259A với bus dữ liệu của CPU.
+ Logic điều khiển ghi/đọc: dùng cho việc ghi các từ điều khiển v đọc các từ
trạng thái của 8259A.
+ Khối đệm nối tầng v so sánh: ghi nhớ v so sánh số hiệu của các mạch
8259A có mặt trong hệ vi xử lý.


Các tín hiệu của 8259A:
Một số tín hiệu trong mạch 8259 có tên giống nh các tín hiệu tiêu chuẩn của
hệ vi xử lý 8088. Ta có thể thấy rõ v hiểu đợc ý nghĩa của chúng ngay trên hình 7.4.
Ngoi các tín hiệu ny ra, còn có một số tín hiệu đặc biệt khác của 8259A cần phải
giới thiệu thêm gồm:

+ Cas
0
-Cas
2
[I,O]: l các đầu vo đối với các mạch 8259A thợ hoặc các đầu ra
của mạch 8259A chủ dùng khi cần nối tầng để tăng thêm các yêu cầu ngắt cần xử lý.
+ SP/EN[I,O]: Khi 8259A lm việc ở chế độ không có đệm bus dữ liệu thì đây
l tín hiệu vo dùng lập trình để biến mạch 8259A thnh mạch thợ (SP=0) hoặc chủ
(SP=1); khi 8259A lm việc trong hệ vi xử lý ở chế độ có đệm bus dữ liệu thì chân ny
l tín hiệu ra EN dùng mở đệm bus dữ liệu để 8088 v 8259A thông vo bus dữ liệu
hệ thống. Lúc ny việc định nghĩa mạch 8259A l chủ hoặc thợ phải thực hiện thông
qua từ điều khiển khởi đầu ICW4.
+ INT [O]: Tín hiệu yêu cầu ngắt đến chân INTR của CPU 8088.
+ INTA [I]: Nối với tín hiệu báo chấp nhận ngắt INTA của CPU.



PIC 8259A chủ (ở chế độ không đệm) nối với CPU 8088 ở chế độ MIN
Trên hình 7.5 l sơ đồ nối mạch PIC 8259A lm việc độc lập (mạch chủ) với
bus của CPU 8088 lm việc ở chế độ MIN.


PIC 8259A chủ nối với CPU 8088 ở chế độ MAX
Nếu hệ vi xử lý 8088 lm việc ở chế độ MAX thờng ta phải dùng mạch điều
khiển bus 8288 v các đệm bus để cung cấp các tín hiệu thích hợp cho bus hệ thống.
Mạch 8259A phải lm việc ở chế độ có đệm để nối đợc với bus hệ thống ny.

212
Trên hình 7.6 l ví dụ một sơ đồ CPU 8088 chế độ MAX nối với PIC 8259A.
Trong mạch ny ta nhận thấy tín hiệu địa chỉ cho 8259A đợc lấy ra từ bus hệ thống,
trong khi đó tín hiệu dữ liệu của nó đợc nối với bus dữ liệu của vi xử lý v từ đó đợc
thông qua các đệm để nối vo bus hệ thống.




D0-D7
Bus :
hệ RD : các yêu cầu ngắt
thống WR
của A0
8088
ở INTR +5V
8259A

D0-D7 IR0


RD
WR IR7
A0

INTA

CS
chế INTA
độ A1-A7
MIN IO/M


Hình 7.5. Nối BUS 8088 chế độ MIN với PIC 8259A (địa chỉ cổng FE-FFH)


+5V
Bus hệ thống


A0-A19







D0-D7





A0 Xung chọn


+ 5V
các
+5V yêu cầu
ngắt








AEN2
Res

8284
RDY1 AEN1
CLK

READY
Reset
CSYNC F/C
RESET A16-19
READY A8-15


AD0-AD7

8088


S0-S2

MN/MX INTR
CLK



DI0-DI7
DO0-DO7
OC
G 3X'373

'245

DIR
G
CEN
S0-S2 AEN
ALE
8288 DT/R
IORDC

DEN
CLK AIOWC
IOB INTA

A0 CS
D0-D7 IR0
8259A :
IR7



CAS2
RD
SP/EN CAS0
CAS1
WR
INTA

INT
INT SP/EN

213





Hình 7.6. Nối CPU 8088 chế độ MAX với PIC 8259A


Lập trình cho PIC 8259A
Để mạch PIC 8259A có thể hoạt động đợc theo yêu cầu, sau khi bật nguồn
cấp điện PIC cần phải đợc lập trình bằng cách ghi vo các thanh ghi (tơng đơng
với các cổng) bên trong nó các từ điều khiển khởi đầu (ICW) v tiếp sau đó l các từ

điều khiển hoạt động (OCW).
Các từ điều khiển khởi đầu dùng để tạo nên các kiểu lm việc cơ bản cho PIC,
còn các từ điều khiển hoạt động sẽ quyết định cách thức lm việc cụ thể của PIC. Từ
điều khiển hoạt động sẽ đợc ghi khi ta muốn thay đổi hoạt động của PIC.
Các từ điều khiển nói trên sẽ đợc giới thiệu cụ thể trong các mục sau.

Các từ điều khiển khởi đầu ICW

PIC 8259A có tất cả 4 từ điều khiển khởi đầu l ICW1-ICW4. Trong khi lập
trình cho PIC không phải lúc no ta cũng cần dùng cả 4 từ điều khiển đó. Tuỳ theo
các trờng hợp ứng dụng cụ thể m có lúc ta cần ghi liên tiếp cả 4 từ điều khiển khởi
đầu nhng có lúc ta chỉ cần ghi vo đó 2 hay 3 từ l đủ (xem hình 7.7 để thấy rõ thứ
tự ghi v điều kiện để ghi các từ điều khiển ICW vo 8259A).
Dạng thức của các thanh ghi điều khiển khởi đầu ICW đợc biểu diễn trên
hình 7.8.
Trên hình ny ta thấy bên cạnh các bit dữ liệu của từ điều khiển khởi đầu
ICW ta còn ghi rõ thêm cả giá trị cụ thể của A0 tơng ứng cho mỗi ICW đó. Đầu vo
địa chỉ A0 v thứ tự ghi sẽ giúp ta phân biệt ra các thanh ghi khác nhau bên trong
PIC để ghi dữ liệu cho các từ điều khiển. Ví dụ A0=0 l dấu hiệu để nhận biết rằng
ICW1 đợc đa vo thanh ghi có địa chỉ chẵn trong PIC, còn khi A0=1 thì các từ điều
khiển khởi đầu ICW2, ICW3, ICW4 sẽ đợc đa vo các thanh ghi có địa chỉ lẻ trong
mạch PIC.

ICW1
Bit D0 của ICW1 quyết định 8259A sẽ đợc nối với họ vi xử lý no. Để lm
việc với hệ 16 - 32 bit (8088 hoặc họ 80x86) thì ICW1 nhất thiết phải có IC4 =1 (tức l
ta luôn cần đến ICW4), còn đối với hệ 8 bit nh họ 8080/85 thì phải có IC4 = 0 (v nh
vậy các bit của ICW4 sẽ bị xoá về 0). Các bit còn lại của ICW1 định nghĩa cách thức
tác động của xung yêu cầu ngắt (tác động theo sờn hay theo mức) tại các chân yêu


214
cầu ngắt IR của mạch 8259A v việc bố trí các mạch 8259A khác trong hệ lm việc
đơn lẻ hay theo chế độ nối tầng.
Các bit đợc đánh dấu x l không quan trọng v thờng đợc lấy giá trị 0 để
lập trình cho các ứng dụng sau ny.
ICW1
ICW2







ICW3





















Hình 7.7. Thứ tự v điều kiện ghi các từ điều khiển khởi đầu ICW.


ICW2
Từ điều khiển khởi đầu ny cho phép chọn kiểu ngắt (số hiệu ngắt) ứng với
các bit T3-T7 cho các đầu vo yêu cầu ngắt. Các bit T0-T2 đợc 8259A tự động gán
giá trị tuỳ theo đầu vo yêu cầu ngắt cụ thể IRi. Ví dụ nếu ta muốn các đầu vo của
mạch 8259A có kiểu ngắt l 40-47H ta chỉ cần ghi 40H vo các bit T3-T7. Nếu lm
nh vậy thì IR0 sẽ có kiểu ngắt l 40H, IR1 sẽ có kiểu ngắt l 41H

ICW1(2)=1?
ICW1(1)=1?
ICW4
Sẵn sng
nhận yêu cầu
ngắt
đ
S
S
đ

215
ICW3
Từ điều khiển khởi đầu ny chỉ dùng đến khi bit SNGL thuộc từ điều khiển
khởi đầu ICW1 có giá trị 0, nghĩa l trong hệ có các mạch 8259A lm việc ở chế độ nối

tầng. Chính vì vậy tồn tại 2 loại ICW3: 1 cho mạch 8259A chủ v 1 cho mạch 8259A
thợ.

ICW1

A0 D7 D6 D5 D4 D3 D2 D1 D0
0 x x x 1 LTIM ADI SNGL IC4

1: cần ICW4
Không cần để ý đối với hệ 16 -32 bit 0: bỏ ICW4
1: chỉ có 1 mạch PIC
0: có nhiều mạch PIC
Cách tác động của xung yêu cầu ngắt: Khoảng cách giữa các vector ngắt:
1: theo mức dơng 1: cách 4 byte (80x86/88)
0: theo sờn dơng 0: cách 8 byte (8080/85)



ICW2

A0 D7 D6 D5 D4 D3 D2 D1 D0
1 T7 T6 T5 T4 T3 T2 T1 T0

để chọn kiểu (số hiệu) ngắt cho ứng với mã của yêu cầu
mạch 8259A ngắt IR0-IR7


ICW3
chủ


A0 D7 D6 D5 D4 D3 D2 D1 D0
1 S7 S6 S5 S4 S3 S2 S1 S0

1: đầu vo IRi nối với mạch 8259A thợ
0: đầu vo IRi không nối với mạch thợ



ICW3
thợ

A0 D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 0 ID2 ID1 ID0

Mã hoá số hiệu của mạch thợ 0-7 nối vo IR0-IR7



ICW4


A0 D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 SFNM BUF M/S AEOI PM

1: cho họ 80x86/88
1: chế độ u tiên cố định đặc biệt 1: EOI tự động

216
0: không phải chế độ u 0: EOI thờng
tiên cố định đặc biệt

0x: 8259A ở chế độ không đệm
10: mạch 8259A thợ ở chế độ đệm
11: mạch 8259A chủ ở chế độ đệm


Hình 7.8. Dạng thức của các từ điều khiển khởi đầu ICW.
ICW3 cho mạch chủ: dùng để chỉ ra đầu vo yêu cầu ngắt IRi no của nó có
tín hiệu INT của mạch thợ nối vo.
ICW3 cho mạch thợ: dùng lm phơng tiện để các mạch ny đợc nhận biết,
vì vậy từ điều khiển khởi đầu ny phải chứa mã số i ứng với đầu vo IRi của mạch
chủ m mạch thợ đã cho nối vo. Mạch thợ sẽ so sánh mã số ny với mã số nhận đợc
ở Cas2-Cas0. Nếu bằng nhau thì số hiệu ngắt sẽ đợc đa ra bus khi có INTA.

Ví dụ: Trong một hệ vi xử lý ta có một mạch 8259A chủ v hai mạch 8259A
thợ nối vo chân IR0 v IR1 của mạch chủ.
Tìm giá trị phải gán cho các từ điều khiển khởi đầu ICW ?

Giải: Nh trên đã nói, để các mạch ny lm việc đợc với nhau ta sẽ phải ghi
các từ điều khiển khởi đầu nh sau: ICW3=03H cho mạch chủ, ICW3=00H cho mạch
thợ thứ nhất v ICW3=01H cho mạch thợ thứ hai.

ICW4
Từ điều khiển khởi đầu ny chỉ dùng đến khi trong từ điều khiển ICW1 có
IC4=1 (cần thêm ICW4).
Bit PM cho ta khả năng chọn loại vi xử lý để lm việc với 8259A. Bit PM=1
cho phép các bộ vi xử lý từ 8086/88 hoặc cao hơn lm việc với 8259A.
Bit SFNM=1 cho phép chọn chế độ u tiên cố định đặc biệt. Trong chế độ ny
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 thợ lm 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ải phục vụ
một yêu cầu ngắt ở mạch thợ khác nhng 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 trở về (IRET) đa đến cho mạch 8259A chủ.
Khi bit SFNM=0 thì chế độ u tiên cố định đợc chọn (IR0: mức u tiên cao
nhất, IR7: mức u tiên thấp nhất). Thực ra đối với mạch 8259A không dùng đến
ICW4 thì chế độ ny đã đợc chọn nh l ngầm định. 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 ny tất cả các
yêu cầu khác với mức u tiên thấp hơn đều bị cấm, tất cả các yêu cầu khác với mức
u tiên cao hơn có thể ngắt yêu cầu khác với mức u tiên thấp hơn.
Bit BUF cho phép định nghĩa mạch 8259A để lm việc với CPU trong trờng
hợp có đệm hoặc không có đệm nối với bus hệ thống. Khi lm việc ở chế độ có đệm

217
(BUF=1), bit M/S =1/0 cho phép ta chọn mạch 8259A để lm việc ở chế độ chủ/thợ.
SP/EN trở thnh đầu ra cho phép mở đệm để PIC v CPU thông với bus hệ thống.
Bit AEOI=1 cho phép chọn cách kết thúc yêu cầu ngắt tự động. Khi AEOI=1
thì 8259A tự động xoá ISRi=0 khi xung INTA cuối cùng chuyển lên mức cao m
không lm thay đổi thứ tự u tiên. Ngợc lại, khi ta chọn cách kết thúc yêu cầu ngắt
thờng (AEOI=0) thì chơng trình phục vụ ngắt phải có thêm lệnh EOI đặt trớc
lệnh IRET để kết thúc cho 8259A.

Các từ điều khiển hoạt động OCW
Các từ điều khiển hoạt động OCW sẽ quyết định mạch 8259A sẽ hoạt động
nh thế no sau khi nó đã đợc khởi đầu bằng các từ điều khiển ICW. Tất cả các từ
điều khiển hoạt động sẽ đợc ghi vo các thanh ghi trong PIC khi A0=0, trừ OCW1
đợc ghi khi A0=1.
Dạng thức của OCW đợc trình by trên hình 7.9.

OCW1
OCW1 dùng để ghi giá trị của các bit mặt nạ vo thanh ghi mặt nạ ngắt IMR.
Khi một bit mặt nạ no đó của IMR đợc lập thì yêu cầu ngắt tơng ứng với mặt nạ

đó sẽ không đợc 8259A nhận biết nữa (bị che). Từ điều khiển ny phải đợc đa đến
8259A ngay sau khi ghi các ICW vo 8259A.
Ta cũng có thể đọc lại IMR để xác định tình trạng mặt nạ ngắt hiện tại (xem
trong thời điểm hiện tại yêu cầu ngắt no bị che).

OCW2
Các bit R, SL v EOI phối hợp với nhau cho phép chọn ra các cách thức kết
thúc yêu cầu ngắt khác nhau. Một vi cách kết thúc yêu cầu ngắt còn tác độ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 L
2
L
1
L
0
.

Trớc khi nói về các cách kết thúc yêu cầu ngắt cho các chế độ ta cần mở dấu
ngoặc ở đây để giới thiệu các chế độ lm việc của 8259A:

a. Chế độ u tiên cố định:
Đây l chế độ lm việc ngầm định của 8259A sau khi nó đã đợc nạp các từ
điều khiển khởi đầu.
Trong chế độ ny, các đầu vo IR7-IR0 đợc gán cho các mức u tiên cố định:
IR0 đợc gán cho mức u tiên cao nhất, còn IR7 mức u tiên thấp nhất. Mức u tiên
nyđợc giữ không thay đổi cho đến khi ghi mạch 8259A bị lập trình khác đi do
OCW2.

218
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 ny tất cả các yêu cầu khác với mức u tiên thấp hơn đều bị

cấm, tất cả các yêu cầu khác với mức u tiên cao hơn có thể ngắt yêu cầu khác với
mức u tiên thấp hơn.



OCW1

A0 D7 D6 D5 D4 D3 D2 D1 D0
1 M7 M6 M5 M4 M3 M2 M1 M0

Mặt nạ ngắt tại các yêu cầu ngắt
1: có mặt nạ
0: không có mặt nạ

mã hoã mức u tiên


OCW2

A0 D7 D6 D5 D4 D3 D2 D1 D0
0 R SL EOI 0 0 L2 L1 L0

0 0 1
0 1 1
1 0 1
1 0 0
0 0 0
1 1 1
1 1 0
0 1 0

ngắt bị tác động

000 mức 0
:
111 mức 7
Kết thúc
ngắt(EOI)
Đổi mức
u tiên tự
động
Đổi m..t.
đích danh







OCW3

A0 D7 D6 D5 D4 D3 D2 D1 D0
0 0 ESMM SMM 0 1 P ERIS RIS
Lệnh EOI thờng
Lệnh EOI chỉ đích danh(*)
Đổi mức u tiên khi có EOI thờng
Lập chế độ quay khi có EOI tự động
Xoá chế độ quay khi có EOI tự động
Đổi mức u tiên khi có EOI đích danh(*)
Lệnh lập mức u tiên(*)

Không lm gì

(*): dùng tổ hợp L
2
L
1
L
0

10: đọc IRR ở lần đọc sau
11: đọc ISR ở lần đọc sau

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

219
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


Hình 7.9. Dạng thức của các từ điều khiển hoạt động OCW.
b. Chế độ quay mức u tiên (u tiên luân phiên) tự động:
ở chế độ ny sau khi một yêu cầu ngắt đợc phục vụ xong, 8259A sẽ xoá bit
tơng ứng của nó trong thanh ghi ISR v gán cho đầu vo của 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ó thời cơ đợc phục vụ.
c. Chế độ quay (đổi) mức u tiên chỉ đích danh:
ở chế độ ny ta cần chỉ rõ (đích danh) đầu vo IRi no, với i= L
2
L

1
L
0
, đợc
gán mức u tiên thấp nhất, đầu vo IR
i+1
sẽ đợc tự động gán mức u tiên cao nhất.

Bây giờ ta đóng dấu ngoặc đã đợc ra mở ở trên v trở lại các vấn đề liên
quan đến OCW2. Ta sẽ nói rõ việc các bit R, SL v EOI phối hợp với nhau nh thế
no để 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ế độ
lm việc khác nhau đã nói đến ở phần trên (xem thêm hình 7.9).
1. Kết thúc yêu cầu ngắt 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 8259A. Mạch 8259A sẽ xác định yêu cầu ngắt IRi
vừa đợc phục vụ v xoá bit ISRi tơng ứng của nó để tạo điều kiện cho chính yêu cầu
ngắt ny hoặc các ngắt khác có mức u tiên thấp hơn có thể đợc tác động.
2. Kết thúc yêu cầu ngắt chỉ đích danh: 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 8259A. Mạch 8259A xoá đích
danh bit ISRi, với i= L
2
L
1
L
0
, để tạo điều kiện cho chính yêu cầu ngắt ny hoặc các
ngắt khác 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: 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 8259A. Mạch 8259A 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 vo IR

i
ny, còn đầu vo IR
i+1
sẽ đợc gán mức u tiên
cao nhất.

Thanh ghi ISR trớc khi IR4 đợc chấp nhận:
(0: mức u tiên cao nhất, 7: mức u tiên thấp nhất)

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 IR4 đợc chấp nhận v sau khi có lệnh quay:
(0: mức u tiên cao nhất, 7: mức u tiên thấp nhất)

220

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

Hình 7.10. ISR v mức u tiên với lệnh quay khi kết thúc ngắt thờng.
Có thể theo rõi cách thức hoạt động của mạch 8259A trong chế độ quay (đổi)
mức u tiên khi kết thúc yêu cầu ngắt thờng thông qua ví dụ minh hoạ trình by
trên hình 7.10.

4. Quay (đổi) mức u tiên trong chế độ kết thúc yêu cầu ngắt tự động: chỉ cần
một lần đa lệnh chọn chế độ đổi mức u tiên khi kết thúc yêu cầu ngắt tự động. Có
thể chọn chế độ ny bằng lệnh lập "chế độ quay khi có EOI tự động". Từ đó trở đi
8259A sẽ đổi mức u tiên mỗi khi kết thúc ngắt tự động theo cách tơng tự nh ở mục
3. Muốn bỏ chế độ ny 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 danh: chơng trình
con phục vụ ngắt phải có lệnh EOI đích danh cho 8259A đặt trớc lệnh trở về IRET.
Mạch 8259A sẽ xoá bit ISRi của yêu cầu ngắt tơng ứng v gán luôn mức u tiên
thấp nhất cho đầu vo IRi, với i=L
2
L
1
L
0
.
6. Lập mức u tiên: chế độ ny 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 IRi
chỉ đích danh ứng với tổ hợp mã i= L
2
L
1
L
0
. Yêu cầu ngắt IR
i+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 ghi vo 8259A cho phép:

+ chọn các ra thanh ghi để đọc,
+ thăm dò trạng thái yêu cầu ngắt bằng cách trạng thái của đầu vo yêu cầu
ngắt IRi với mức u tiên cao nhất cùng mã của đầu vo đó, v
+ thao tác với mặt nạ đặc biệt.



D7 Đ6 D5 D4 D3 D2 D1 D0
IR7 IR6 IR5 IR4 IR3 IR2 IR0 IR0

a) IRR IRi=0: đầu vo i không có yêu cầu ngắt
IRi=1: đầu vo i có yêu cầu ngắt


D7 Đ6 D5 D4 D3 D2 D1 D0

221
IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0

b) ISR 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ụ

Hình 7.11. Dạng thức của thanh ghi yêu cầu ngắt v thanh ghi phục vụ.
Các thanh ghi IRR v ISR có thể đọc đợc sau khi nạp vo 8259A từ điều
khiển OCW3 với bit ERIS=1; bit RIS=0 sẽ cho phép đọc IRR, bit RIS=1 sẽ cho phép
đọc ISR. Dạng thức của các thanh ghi nyđợc biểu diễn trên hình 7.11a v 6.11b.
Bằng việc đa vo 8259A từ điều khiển OCW3 với bit P=1 ta có thể đọc đợc
trên bus dữ liệu ở lần đọc tiếp ngay sau đó từ thăm dò, trong đó có 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 ấy theo dạng thức đợc biểu diễn trên hình 7.12.



D7 Đ6 D5 D4 D3 D2 D1 D0
I x x x x W2 W1 W0

1: đang có yêu cầu ngắt Mã hoá số của yêu cầu ngắt
0: không có yêu cầu ngắt
(x: không để ý)

Hình 7.12. Dạng thức của từ thăm dò trạng thái yêu cầu ngắt.


Có thể gọi đây l chế độ thăm dò yêu cầu ngắt v chế độ ny thờng đợc ứng
dụng trong trờng hợp có nhiều chơng trình 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 no để sử dụng l trách nhiệm của ngời lập
trình.
Tóm lại, muốn dùng chế độ thăm dò của 8259A để xác định yêu cầu ngắt hiện
tại ta cần lm các thao tác lần lợt nh sau:

- Cấm các yêu cầu ngắt bằng lệnh CLI
- 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 8259A thao tác với chế độ mặt nạ đặc biệt. Bit SMM=1
cho phép lậ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 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

222

ngắt bị cấm đó đợc tác động thì ta sẽ dùng chế độ mặt nạ đặc biệt. Một khi đã đợc
lập, chế độ mặt nạ đặc biệt sẽ tồn tại cho tới khi bị xoá bằng cách ghi vo 8259A một
từ lệnh 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 với mức u tiên cao hơn.

Cuối cùng để có cái nhìn một cách có hệ thống về hoạt động của hệ vi xử lý với
CPU 8088 v PIC 8259A khi có yêu cầu ngắt, ta tóm lợc hoạt động của chúng nh
sau:
1. Khi có yêu cầu ngắt từ thiết bị ngoại vi tác động vo một trong các chân IR
của PIC, 8259A sẽ đa INT=1 đến chân INTR của 8088.
2. 8088 đa ra xung INTA đầu đến 8259A.
3. 8259A dùng xung INTA đầu nh l thông báo để nó hon tất các xử lý nội
bộ cần thiết, kể cả xử lý u tiên nếu nh có nhiều yêu cầu ngắt cùng xảy ra.
4. 8088 đa ra xung INTA thứ hai đến 8259A.
5. Xung INTA thứ hai khiến 8259A đa ra bus dữ liệu 1 byte chứa thông tin
về số hiệu ngắt của yêu cầu ngắt vừa đợc nhận biết.
6. 8088 dùng số hiệu ngắt để tính ra địa chỉ của vectơ ngắt tơng ứng.
7. 8088 cất FR, xoá các cờ IF v TF v cất địa chỉ trở về CS:IP vo ngăn xếp.
8. 8088 lấy địa chỉ CS:IP của chơng trình phục vụ ngắt từ bảng vectơ ngắt
v thực hiện chơng trình đó.

Một số ví dụ lập trình với 8259A

Ví dụ 1
Lập trình cho 8259A để lm việc với CPU 8088 ở chế độ chủ (đơn lẻ), trong hệ
có đệm bus, chế độ u tiên cố định v với EOI thờng, IR kích theo mức, tín hiệu IR
0

đợc gán số hiệu ngắt l 50H.


Giải
Từ hình 7.8 v căn cứ theo các yêu cầu của bi toán ta có các từ điều khiển
khởi đầu nh sau:

ICW1=00011011=1BH
D0=1 cần thêm ICW4
D1=1 lm việc đơn lẻ, không cần ICW3
D2=0 lm việc với hệ 8086/88
D3=1 đầu vo IR ăn theo mức
D4=1 bắt buộc với ICW1
D5=D6=D7=0 gán bằng 0 cho hệ 8086/88


223
ICW2=01010000=50H
Vì các bit T
7
-T
3
của ICW2 phải mã hoá trị số 50H để IR
0
-IR
7
đợc mã hoá tiếp
bởi các bit T
2
-T
0
=000.
ICW3 không cần đến

ICW4=00001101=0DH
D0=1 lm việc với hệ 8086/88
D1=0 EOI thờng (phải có EOI trớc IRET)
D3D2=11 lm việc ở chế độ chủ trong hệ có đệm bus
D4=0 chế độ u tiên cố định
D5=D6=D7=0 luôn bằng 0 cho ICW4

Ví dụ 2
Viết chơng trình để khởi đầu cho mạch 8259A ở ví dụ trên nếu nó đợc nối
với 8088 theo sơ đồ trên hình 7.6 với địa chỉ F0H v F1H.

Giải
Đoạn chơng trình để khởi đầu cho mạch ny có thể l:

MOV AL,1BH ;ICW1
OUT 0F0H,AL ;ICW1 đa ra cổng F0H
MOV AL,50H ;ICW2
OUT 0F1H,AL ;ICW2 đa ra cổng F1H
MOV AL,0DH ;ICW4
OUT 0F1H,AL ;ICW4 đa ra cổng F1H


Ví dụ 3
Giả thiết tại chân IR3 của mạch 8259A ở trên có tín hiệu yêu cầu ngắt. Tại
chơng trình con phục vụ cho yêu cầu ngắt ny có cần phải có lệnh kết thúc ngắt
(EOI) không? Nếu có thì hãy viết ra các lệnh đó.

Giải
Giả thiết tại IR
3

có tín hiệu yêu cầu ngắt v CPU đã trả lời chấp nhận ngắt,
8259A sẽ lập bit ISR
3
=1 để ghi nhớ l yêu cầu ngắt IR
3
đang đợc phục vụ. Vì trớc
đó ta đã định nghĩa chế độ kết thúc ngắt bình thờng cho 8259A, nên trong chơng
trình con phục vụ ngắt của yêu cầu ngắt ny ta phải có lệnh kết thúc ngắt EOI đa
đến 8259A để xoá bit ISR
3
đợc lập trớc đó, 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 hơn hoặc cho chính yêu cầu ngắt mới tại chân IR
3
có thời cơ đợc
phục vụ.
Dạng thờng thấy của một chơng trình con phục vụ ngắt kiểu ny có thể
nh sau (ta chỉ chú ý nhấn mạnh tới các lệnh cuối liên quan đến EOI):

224


PhucvuIR3 Proc

; thân của chơng trình con phục vụ ngắt



MOV AL,20 ;OCW2 với EOI để kết thúc
OUT 0F0H,AL ;đa OCW2 đến 8259A
IRET ;trở về chơng trình chính

PhucvuIR3 Endp

Ví dụ 4
Giả thiết vẫn sử dụng sơ đồ trên hình 7.6 v các số liệu nh ở các ví dụ trớc.
Hệ ny bình thờng lm một công việc gì đó, nhng khi có yêu cầu ngắt ở IR
3
ta phải
đọc 100 dữ liệu ở cổng 70H, nhân đôi mỗi dữ liệu đọc đợc rồi đa ra cổng 71H (để cho
đơn giản ta coi dữ liệu khi đọc vo v cả khi đã nhân đôi vẫn chứa đợc trong 1 byte).


Khởi đầu

cho 8259A
Thân của

CT chính
Bắt đầu
đ
s
Đọc cổng v
xử lý dữ liệu
s
đ

Còn
dữ liệu?

Có IR3?



















Hình 7.13. Lu đồ của chơng trình cho ví dụ 4.

Giải
Hình 7.13 biểu diễn lu đồ của chơng trình thực hiện công việc nói trên.

225
Để chuẩn bị cho công việc trên chơng trình chính phải đợc bắt đầu bằng các
lệnh khởi đầu cho 8259A nh trong các ví dụ trớc, tiếp theo đó l công việc cụ thể
đặt ra cho chơng trình chính. Trong chơng trình con phục vụ ngắt ta phải đọc các
giá trị vo v nhân đôi rồi đa ra cổng. Trớc khi kết thúc chơng trình con để trở lại
chơng trình chính ta phải có các lệnh kết thúc yêu cầu ngắt (EOI) cho 8259A nh ở
ví dụ 3.
Giả thiết rằng chơng trình con phục vụ ngắt sau khi đã dịch ra mã máy sẽ

đợc nạp vo ROM v để tại địa chỉ C0000H. Khi muốn cho chạy chơng trình ta
phải vo địa chỉ ứng với vectơ ngắt 53H v thay đổi nội dung của vectơ ny sao cho 2
ô 0014CH, 0014DH chứa 0000H v 2 ô tiếp theo 0014EH, 0014FH chứa C000H (địa
chỉ chơng trình con phục vụ ngắt). Nhờ vậy mỗi khi có yêu cầu ngắt tới chân IR
3
của
8259A thì chơng trình con phục vụ ngắt đợc kích hoạt.
Thân của chơng trình chính sẽ phải chứa các lệnh nh sau:


CLI ;cấm các ngắt
MOV AL,1BH ;ICW1
OUT 0F0H,AL ;ICW1 đa ra cổng F0H
MOV AL,50H ;ICW2
OUT 0F1H,AL ;ICW2 đa ra cổng F1H
MOV AL,0DH ;ICW4
OUT 0F1H,AL ;ICW4 đa ra cổng F1H
MOV AL,0 ;tháo mặt nạ cho các IR
OUT OF1H,AL ;OCW1 đa đến 8259A
STI ;cho phép ngắt
;các công việc của chơng trình chính ở đây


Chơng trình con phục vụ ngắt IR
3
có dạng sau:

PhucvuIR3 Proc
PUSH AX ;cất các thanh ghi
PUSH BX

PUSH CX
IN AL,0F1H ;đọc mặt nạ ngắt
MOV BL,AL ;cất mặt nạ
MOV AL,0F7H ;chỉ cho phép yêu cầu IR3
OUT 0F1H,AL ;đợc tác động
MOV CL,100 ;100 số liệu phải thao tác
TIEP: IN AL,70H ;đọc vo 1 số liệu
SHL AL,1 ;nhân đôi rồi
OUT 71H,AL ;đa ra cổng
LOOP TIEP
MOV AL,BL ;lấy lại mặt nạ cũ
OUT 0F1H,AL ;đa mặt nạ cũ đến 8259A
MOV AL,20 ;OCW2 với EOI để kết thúc

226
OUT 0F0H,AL ;đa OCW2 đến 8259A
POP CX ;lấy lại các thanh ghi
POP BX
POP AX
STI ;cho phép ngắt trở lại
IRET ;trở về chơng trình chính
PhucvuIR3 Endp
Trong chơng trình con ở trên ta xử lý mặt nạ ngắt khá cẩn thận. Vì ở trong
chơng trình chính, sau khi khởi đầu cho mạch 8259A ta đã cho phép tất cả các ngắt
có thể tác động v vì chơng trình chính khi hoạt động có thể thay đổi các mặt nạ
khác của 8259A (trừ mặt nạ của IR3), nên tại chơng trình con trong khi phục vụ yêu
cầu ngắt IR
3
ta đã cất giá trị của các mặt nạ ngắt hiện thời rồi dùng lệnh để che các
yêu cầu ngắt khác đi v chỉ để yêu cầu ngắt IR

3
đợc nhận biết. Sau khi xử lý xong
các công việc ta phải trả lại giá trị mặt nạ ngắt cũ cho 8259A rồi mới trở về chơng
trình chính.

3. Ngắt trong máy IBM PC
Vì các máy IBM PC đợc sử dụng rất rộng rãi nên tại cuối chơng ny ta sẽ
trình by sơ lợc cấu trúc ngắt trong các máy đó.
3.1. Ngắt trong máy IBM PC/XT

Bảng 7. 3. Các ngắt của chính của IBM PC/XT
INT N? Đ

a chỉ Dnh cho
0 00E3:3072 phép chia cho 0
1 0600:08ED chạy từng lệnh
2 F000:E2C3 NMI
3 0600:08E6 điểm dừng
4 0700:0174 trn khi lm việc với số có dấu
5 F000:FF34 in mn hình (BIOS)
6,7 để dnh
8 F000:FEA5 IRQ0 của 8259A (ngắt BIOS của đồng hồ)
9 F000:E987 IRQ1 của 8259A (ngắt BIOS của bn phím)
A IRQ2 của 8259A (để dnh)
B IRQ3 của 8259A (để dnh cho COM2)
C IRQ4 của 8259A (để dnh cho COM1)
D IRQ5 của 8259A (để dnh cho đĩa cứng)
E F000:EF57 IRQ6 của 8259A (cho ổ đĩa mềm)
F 0070:0147 IRQ7 của 8259A (cho máy in LPT1)



227
60-66 dnh cho ngời sử dụng


Trong máy IBM PC/XT cách tổ chức ngắt có thể tóm lợc nh ở trên bảng 7.3.

Máy IBM PC/XT có sử dụng 1 mạch PIC 8259A. Các đầu vo IRi của mạch
ny đ
ợc sử dụng hết để gán cho các thiết bị ngoại vi cụ thể nh bn phím, mạch
đồng hồ thời gian thực Khi khởi động, mạch PIC 8259A của máy IBM PC/XT đợc
ghi với các từ điều khiển khởi đầu sau (ghi vo cổng 20H v 21H):

+ ICW1=13H ;kích sờn, đơn lẻ; cần ICW4
+ ICW2=08H ;kiểu ngắt 8
+ ICW3 không cần
+ ICW4=09H ;có đệm, 8086, EOI trớc IRET

Các ngắt dnh cho ngời sử dụng ứng với INT 60H - INT 66H. Nếu sử dụng
các ngắt ny cho các công việc của mình, ngời sử dụng phải có thêm các mạch phụ
để đa yêu cầu ngắt đến CPU v để đa số hiệu ngắt N vo bus dữ liệu cho CPU đọc
khi có trả lời chấp nhận yêu cầu ngắt
INTA.

3.1. Ngắt trong máy IBM PC/AT
Trong các máy IBM PC/AT (với các CPU từ 80286 trở đi) cấu trúc ngắt của hệ
thống có một số thay đổi so với các máy XT. Lý do chính l ở các máy thế hệ sau ngời
ta đã sử dụng 2 mạch PIC 8259A (so với 1 PIC ở các máy XT) để mở rộng khả năng
quản lý một số lớn hơn các yêu cầu ngắt thông qua PIC. Sơ đồ nối của các mạch PIC
8259A chủ v thợ nh trên hình 7.14.




IRQ8 IRQ0
IRQ9 IRQ1
IRQ10
IRQ11 IRQ3
IRQ12 IRQ4
IRQ13 IRQ5
IRQ14 IRQ6
IRQ14 IRQ7
+5v
INTA


INTR


80x86,
Pentium

NMI
INTA


INTR

8259A chủ



SE/EN
CAS0-CAS2
INTA


INTR

8259A thợ



SE/EN





228
lỗi parity từ I/O
D7
lỗi parity từ bộ nhớ của cổng 70H


Hình 7.14. Nối 2 mạch PIC 8259A chủ v thợ trong các máy IBM PC/AT.

Việc gán các yêu cầu ngắt IRQ cho các ngắt INT N đợc thể hiện trên bảng
7.4. Các ngắt INT N còn lại cũng giống nh của máy IBM PC/XT.
Bảng 7.4. Các IRQ của các máy PC/AT

IRQ INT N? Dnh cho

IRQ0 INT08H bộ đếm 8254 đạt TC
IRQ1 INT09H bn phím
IRQ2 INT0AH yêu cầu ngắt từ 8259A thợ
IRQ3 INT0BH COM2
IRQ4 INT0CH COM1
IRQ5 INT0DH cổng máy in song song LPT2
IRQ6 INT0EH điều khiển đĩa mềm
IRQ7 INT0FH cổng máy in song song LPT1
IRQ8 INT70H CMOS của đồng hồ thời gian thực
IRQ9 INT71H định hớng lại bằng chơng trình về INT 0AH
IRQ10 INT72H dnh cho ngời sử dụng
IRQ11 INT73H dnh cho ngời sử dụng
IRQ12 INT74H chuột của PS/2
IRQ13 INT75H đồng xử lý toán học
IRQ14 INT76H ổ đĩa cứng
IRQ15 INT77H dnh cho ngời sử dụng

Sau khi khởi động CPU ghi các từ điều khiển vo các PIC nh sau:

PIC chủ (cổng 20H v 21H):
+ ICW1=11H ;kích sờn, chủ, cần ICW4
+ ICW2=8 ;kiểu ngắt 8
+ ICW3=04H ;chủ có thợ ở mức 2
+ ICW4=01H ;chủ không có đệm, 80x86, EOI trớc IRET

PIC thợ (cổng A0H v A1H):
+ ICW1=11H ;kích sờn, thợ, cần ICW4
+ ICW2=70H ;kiểu ngắt 70H
+ ICW3=02H ;thợ có chủ ở mức 2
+ ICW4=01H ;thợ không có đệm, 80x86, EOI trớc IRET


229

×