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

Kỹ thuật vi xử lý - Chương 6 pdf

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 (486.95 KB, 18 trang )

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

92

http://
www.ebook.edu.vn
Chơng 6 Ngắt và xử lý ngắt trong hệ vi xử lý 8088

1. Sự cần thiết phải ngắt CPU
Nh đã biết, với cách tổ chức trao đổi dữ liệu với thiết bị ngoại vi bằng cách thăm dò
trạng thái sẵn sàng của thiết bị ngoại vi, trớc khi thực hiện bất kỳ một lệnh (hay một nhóm
lệnh) trao đổi dữ liệu thì CPU phải dành toàn bộ thời gian vào việc kiểm tra (thăm dò) để
xác định trạng thái sẵn sàng làm việc của thiết bị ngoại vi. Trong một hệ vi xử lý với cách
làm việc nh vậy, thông thơng bộ vi xử lý (CPU) chủ yếu là đợc dành cho việc vào/ra dữ
liệu và thực hiện một vài xử lý liên quan.
Nhng thực tế thì sức mạnh của CPU trong một hệ vi xử lý là rất lớn, nó làm việc với
tốc độ rất cao và tập lệnh phong phú (khả năng xử lý dữ liệu lớn) mà công việc vào/ra dữ
liệu thì không tốn nhiều thời gian (thời gian thực hiện các lệnh vận chuyển dữ liệu). Để tận
dụng khả năng làm việc của CPU để làm thêm đợc nhiều công việc khác nữa, ngời ta
mong muốn: CPU không tốn nhiều thời gian vào việc thăm dò trạng thái sẵn sàng của thiết
bị ngoại vi, chỉ khi nào thiết bị ngoại vi sẵn sàng và cần trao đổi dữ liệu với hệ thống (CPU)
thì thiết bị ngoại vi chủ động yêu cầu (thông báo) CPU tạm dừng công việc hiện tại để
phục vụ cho việc trao đổi dữ liệu. Sau khi hoàn thanh công việc trao đổi dữ liệu thì CPU
quay về thực hiện tiếp công việc đang thực hiện (công việc bị gián đoạn). Cách làm việc
theo kiểu này gọi là ngắt CPU (gián đoạn sự hoạt động của CPU) để thực hiện trao đổi dữ
liệu. Treen cơ sở nh vậy, ngắt đợc mở rộng cho hầu hết các ứng dụng khác nhằm
độc lập hoá với công việc của CPU và tăng thêm hiệu suất của hệ thống (nh các phục vụ
của DOS và của BIOS).
Để có thể thực hiện đợc phơng pháp ngắt CPU cho vào/ra dữ liệu thì ta phải có
cách tổ chức hệ thống phần cứng và phần mềm sao cho có thể tận dụng đợc khả năng


thực hiện các chơng trình con phục vụ ngắt (ISR Interrupt Service Routine) tại các địa
chỉ xác định của CPU. Khi nghiên cứu các chân tín hiệu của 8088, ta thấy vi mạch này có
các chân tiếp nhận yêu cầu ngắt che đợc INTR và không che đợc NMI, chính các chân
này sẽ đợc sử dụng vào việc đa các yêu cầu ngắt từ bên ngoài tới CPU 8088.
2. Ngắt trong vi xử lý 8088
a. Các loại ngắt trong hệ 8088
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 nguyên 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
Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

93

http://
www.ebook.edu.vn
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 (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 toán, và một số lỗi khi tính toá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 yê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:
INTA

Hình vẽ: Chu kỳ trả lời ngắt của 8088

ALE

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


Hình vẽ: Một cách đơn giản để đa số hiệu ngắt N vào bus dữ liệu

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

94

http://
www.ebook.edu.vn
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 nhng
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 lu 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

INTA

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

95

http://
www.ebook.edu.vn
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
để lu CS, 2 byte khác để lu 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)


Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

96

http://
www.ebook.edu.vn
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 đó, nhng 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
Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

97

http://

www.ebook.edu.vn
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 thứ nhất.
INTA



Logic điều khiển



ISR



PR



IRR
IMR

(Interrupt Mask Register)

Đệm
bus

Logic
Ghi/đọc


Đệm nối
tầng và
so sánh

IRQ0
IRQ1

IRQ7
INT

INTA

D7
-
D0

A0

RD

WR

CS

SP/EN

Cas0

Cas1

Cas2

Internal bus
Hình vẽ: Sơ đồ khối và sơ đồ đóng vỏ DIP của PIC 8259A

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính


98

http://
www.ebook.edu.vn
(3) ISR (In Service Register Thanh ghi ngắt đang đợc phục vụ): Thanh ghi
này ghi nhớ yêu cầu ngắt nào đang đợc phục vụ trong số các yêu cầu ngắt IRQi. Với
mỗi IRQi đang đợc phục vụ thì bit thứ i tơng ứng với nó trong ISR sẽ đợc lập (=1).
(4) PR (Priority Resolver Bộ xử lý u tiên): Đây là mạch xử lý u tiên ngắt dựa
trên nội dung 3 thanh ghi: IRR, ISR và IMR để quyết định một yêu cầu ngắt IRQi nào
đó có đợc gửi tới CPU 8088 thông qua chân INT của khối logic điều khiển tại (một)
thời điểm hiện tại hay bắt nó phải chờ.
(5) Control Logic Logic điều khiển: Khối này có nhiệm vụ gửi các yêu cầu ngắt
IRQi tới chân INTR của CPU 8088 khi có tín hiệu tại các lối vào IRQi và nhận trả lời
chấp nhận yêu cầu ngắt từ CPU để rồi điều khiển việc đa ra số hiệu ngắt N
trên bus dữ liệu (tại xung thứ hai).
(6) Đệm bus dữ liệu: Dùng để phối ghép 8259A với bus dữ liệu của CPU.
(7) 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.
(8) Khối đệm nối tầng và so sánh: Ghi nhớ và so sánh các số hiệu của các mạch
8259A có mặt trong hệ thống vi xử lý.
Các tín hiệu của PIC 8259:
Một số tín hiệu trong mạch PIC 8259A có tên gọi giống nh các tín hiệu tiêu
chuẩn của hệ vi xử lý 8088 (hình vẽ sơ đồ khối), ngoài ra còn có một số tín hiệu đặc
biệt sau:
Cas0 Cas2 [I/O]: Đây là đầu vào đối với mạch PIC thợ và là đầu ra đối với
mạch PIC chủ. Chúng đợc sử dụng khi nối tầng để tăng thêm số lợng các yêu cầu
ngắt cần xử lý.
SP/EN [I/O]: Khi 8259 làm việc ở chế độ không có đệm bus dữ liệu thì đây là tín
hiệu vào để lập trình cho mạch 8259 thành mạch thợ (SP = 0) hoặc mạch chủ (SP =1).

Khi 8259 làm việc trong hệ vi xử lý ở chế độ có đệm bus dữ liệu thì đây là tín hiệu EN
dùng để mở đệm bus dữ liệu cho 8259 (và 8088) thông vào bus dữ liệu của hệ thống.
Lúc này việc định nghĩa mạch 8259 là mạch chủ hay mạch thợ phải thực hiện thông
qua từ điều khiển ICW4 (sẽ nói kỹ ở phần sau).
INT [O]: Là tín hiệu yêu cầu ngắt đến chân INTR của 8088.
INTA [I]: Nối với chân báo chấp nhận ngắt của CPU. 8259 sử dụng xung
thứ nhất phát ra từ 8088 để thực hiện một số thao tác nội bộ (xử lý u tiên), tuỳ thuộc
vào mode hoạt động mà nó đợc lập trình. Khi nhận đợc xung thứ hai từ 8088,
8259 sẽ xuất số hiệu ngắt N tơng ứng yêu cầu ngắt IRQi lên bus dữ liệu. Số hiệu ngắt
này đợc xác định: thứ nhất là IRQi, thứ hai là số hiệu ngắt mà ngời lập trình viết cho
8259 khi khởi động nó.
RD/WR [I]: Các tín hiệu điều khiển đọc/ghi sẽ điều khiển các quá trình truyền,
nhận từ điều khiển và từ trạng thái giữa 8088 và 8259 thông qua bus dữ liệu khi CS ở
mức thấp.


INTA

INTA

INTA

INTA

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

99

http://

www.ebook.edu.vn
Hình vẽ: PIC 8259 làm việc độc lập (mạch chủ ở chế độ không đệm bus) nối với
8088 làm việc ở chế độ MIN thông qua bus hệ thống, địa chỉ mạch PIC 8259A tại
0FEh 0FFh.
ở sơ đồ này ta thấy chân SP/EN của 8259 đợc nối với +5V, CS đợc lấy từ
mạch giải mã địa chỉ. Vì chỉ có một mạch PIC trong hệ thống nên có thể xử lý đợc 8
yêu cầu ngắt đồng thời: IRQ0 IRQ7.
Nếu hệ vi xử lý 8088 làm 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 hệ thống.
Mạch PIC 8259 phải làm việc ở chế độ có đệm bus để nối đợc với bus hệ thống này.
Theo hình vẽ ví dụ (8088 chế độ MAX nối với PIC 8259) ta thấy tín hiệu địa chỉ
cho 8259 đợc lấy ra từ bus hệ thống (chứ không lấy trực tiếp từ 8088), trong khi đó tín
hiệu dữ liệu của nó đợc nối với bus dữ liệu của bộ vi xử lý và từ đó đợc thông qua
các đệm để nối vào bus hệ thống.





PIC 8259
RD

WR

A0

IR
Q0

INTA


INT

A7
-
A1

IO/M

CS

IRQ1

IRQ7

+5V

SP/EN

.

.

.

D7
-
D0



Bus hệ
thống của
8088 ở
chế độ
MIN


+5V


+5V




+5V

CS

IRQ0

IRQ1

IRQ7

A19
-
A0

AD7

-
AD0

CEN

AEN

ALE

DT/R

DT/R

DEN

IORDC

IOWDC

CLK

INTA

INT

WR

RD

SP/EN


A0

D7
-
D0

Cas0

Cas1

Cas2

A19
-
A15

AD7
-
AD0

S2
-
S0

INTR

Reset

READY


CLK

CSYNC

READY

RDY1

AEN2

RES

8284

8088

8259

DIR

G

OC

245

3x373

Reset


F/C

CLK

8288

G

Hình vẽ: 8259 chủ (làm việc độc lập) nối với 8088 ở chế độ MAX

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

100

http://
www.ebook.edu.vn
Lập trình cho PIC 8259
Vi mạch điều khiển ngắt u tiên PIC 8259A là vi mạch lập trình cỡ lớn lập trình
đợc. Để mạch PIC 8259 hoạt động đợc theo yêu cầu, sau khi bật nguồn cấp điện
cho nó, PIC cần phải đợc lập trình (thiết lập chế độ hoạt động) bằng cách ghi vào 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
(Initialization Control Word) và tiếp sau đó là các từ điều khiển hoạt động OCW
(Operation Control Word).
Các từ điều khiển khởi đầu dùng để tạo nên các kiểu làm việc cơ bản ho PIC, còn
các từ điều khiển hoạt động sẽ quyết định cách
thức hoạt động cụ thể của PIC. Từ điều khiển
khởi đầu cần đợc ghi trớc khi PIC làm việc
(tức là trớc khi PIC nhận đợc các yêu cầu ngắt

để xử lý) còn từ điều khiển hoạt động sẽ đợc
ghi khi ta muốn thay đổi (cách thức) hoạt động
của PIC 8259.
Cụ thể các từ điều khiển nói trên nh sau:
i, Các từ điều khiển khởi đầu:
PIC 8259 có tất cả 4 từ điều khiển khởi đầu
là ICW1 ICW4. Trong khi lập trình cho 8259
không phải lúc nào ta cũng cần dùng cả 4 từ
điều khiển khởi đầu đó (tức là ghi tất cả chúng).
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 2 hoặc 3 từ điều
khiển khởi đầu (trong số đó) là đủ. Thứ tự và
điều kiện ghi các từ điều khiển khởi đầu ICW
vào 8259 đợc thực hiện theo lu đồ sau:

ICW1:
Nh đã biết, PIC 8259 chỉ có một đờng địa chỉ vào (A0), trong khi đó nó có rất
nhiều thanh ghi điều khiển và trạng thái tơng đơng (tơng ứng) với các cổng. Tuy
nhiên để phân biệt các thanh ghi trong đó (trong 8259) thì đầu vào địa chỉ A0 và thứ tự
ghi sẽ giúp ta phân biệt ra cá thanh ghi khác nhau bên trong 8259 để 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 (ghi) đa vào
thanh ghi có địa chỉ chẵn trong PIC, còn khi A0 = 1 thì các từ điều khiển ICW2, ICW3
và ICW4 sẽ đợc (ghi) đa vào các thanh ghi có địa chỉ lẻ trong PIC.
Khi giới thiệu từng thanh ghi cụ thể với ý nghĩa các bit dữ liệu, ta còn ghi rõ thêm
cả giá trị A0 tơng ứng cho mỗi ICWi đó.
Bit D0 của ICW1 (IC4) quyết định 8259 sẽ đợc nối với hệ vi xử lý nào. Để làm
việc với hệ 16, 32 bit (8088/x86) thì trong ICW1 nhất thiết phải có IC4 = 1 (tức là ta
luôn cần đến từ điều khiển khởi đầu ICW4), còn đối với hệ vi xử lý 8 bit (nh khi xử
dụng 8080/8085) thì ta phải có IC4 = 0 (và nh vậy các bit của ICW4 sẽ vị xoá về 0).

Hình vé: L
u đồ ghi các từ điều khiển

khởi đầu cho PIC 8259

ICW1(2)=0?

ICW1

T

F

ICW2

ICW3

ICW1(1)=1?

ICW4

Sẵn sàng nhận

các yêu cầu ngắt

T

F

Trờng đại học kỹ thuật Công Nghiệp

Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

101

http://
www.ebook.edu.vn
Các bit còn lại của ICW1 định nghĩa cách thức làm 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 cầu ngắt IRQi của 8259 và
việc bố trí các mạch PIC 8259 khác trong hệ làm việc đơn lẻ hay theo chế độ nối tầng.
Khi sử dụng 8259 trong hệ 16 32 bit (8088/x86), bit D2 (ADI) có thể nhận các
giá trị tuỳ ý, nó chỉ có ý nghĩa khi làm việc với hệ 8 bit nên thờng đợc chọn là 0.
Nếu chỉ sử dụng 1 vi mạch PIC 8259 trong hệ, đặt bit D1 = 1 (SNGL (S) = 1).
Còn nếu có nhiều mạch PIC nối tầng trong hệ thống thì bit D1 của ICW1 trong các
mạch PIC phải đợc xoá về 0.
Bit D3 (LTIM) đợc dùng để xác lập trigger theo mức hay trigger theo sờn xung.
Trong chế độ trigger theo mức, chơng trình ngắt (yêu cầu ngắt) đợc yêu cầu mỗi khi
xuất hiện mức điện áp cao trên lối vào yêu cầu ngắt IRQ. Trong chế độ trigger theo
sờn xung, tín hiệu yêu cầu ngắt trên các lối vào IRQ phải đợc chuyển từ mức thấp
lên mức cao và duy trì ở mức cao cho đến khi chơng trình con phục vụ ngắt thực hiện.
Vì vậy có thể nói bit này quy định cách thức tác động của xung yêu cầu ngắt là theo
mức hay theo sờn (dơng).
Khi hoạt động trong hệ 16 32 bit thì không cần quan tâm tới các bit D5, D6 và
D7 do đó thờng đặt chúng bằng 0 cho đơn giản.
Ngày nay, thờng sử dụng bộ vi xử lý 8088 hoặc cao hơn khi xây dựng các hệ vi
xử lý nên có thể sử dụng giá trị: 0000 1010 để ghi cho ICW1.
ICW2:
Trong một hệ vi xử lý 16 32 bit, từ điều
khiển khởi đầu này đợc dùng để (cho phép)
chọn kiểu ngắt (số hiệu ngắt N) tơng ứng với
các bit T7 T3 cho các đầu vào yêu cầu ngắt.

Các bit T2 T0 đợc 8259 tự động gán giá trị
tuỳ theo đầu vào yêu cầu ngắt IRQi cụ thể.
Thực chất chúng có ý nghĩa nh sau: Toàn bộ
các bit của ICW2 sẽ báo cho 8259 biết số hiệu ngắt phải gửi (đi) ra bus dữ liệu để đáp
ứng tín hiệu yêu cầu ngắt IRQ0. Để đáp ứng các yêu cầu ngắt khác (IRQ1 IRQ7),
8259 sẽ tự động cộng chỉ số lối vào với giá trị cơ sở này (không trừ) và gửi kết quả
cho 8088 dùng làm số hiệu ngắt cho các tín hiệu yêu cầu ngắt đó. Do các ngắt có số
hiệu ngắt từ 0 31 hoặc là các ngắt chuyên dụng hoặc là để dự trữ nên số 32 (20h) là
số ngắt thấp nhất cho các ứng dụng mở rộng của ngời sử dụng. Giả sử, cho ICW2 =
Hình vẽ: Thanh ghi khởi đầu ICW1

0

x

x

x

1

LTIM

ADI

SNGL

IC4

D7


D6

D5

D4

D3

D2

D1

D0

Địa chỉ của vector ngắt

(chơng trình con), không
cần để ý đối với hệ 16
-
32 bit

Cách tác động của xung yêu cầu ngắt:

1: Tác động theo mức dơng


0: Tác động theo sờn dơng

Khoảng cách giữa các vector ngắt:


1: Cách 4 byte (8088/x86)


0: Cách 8 byte (8080/8085)

Single

1: Chỉ có 1 mạch PIC



0: Có nhiề
u mạch PIC


1: Cần ICW4



0: Bỏ ICW4

A0

Hình vẽ: Thanh ghi khởi đầu ICW2

1

T7


T6

T5

T4

T3

T2

T1

T0

D7

D6

D5

D4

D3

D2

D1

D0


Để chọn kiểu (số hiệu) ngắt

cho mạch PIC

ứng với mã của yêu cầu

ngắt IRQ0
-
IRQ7

A0

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

102

http://
www.ebook.edu.vn
0010 0000 = 32d, 8259 sẽ gửi số hiệu ngắt này lên bus dữ liệu cho 8088 làm số hiệu
ngắt cho IRQ0. Với tín hiệu yêu cầu ngắt trên IRQ1, 8259 sẽ gán cho số hiệu ngắt
0010 0001 = 33d (tiếp tục), tơng tự nh vậy có: IRQ2 = 0010 0010 = 34d, IRQ3 =
0010 0011 = 34d,
Trong bất kỳ ICW2 nào nạp vào 8259, 3 bit thấp nhất luôn luôn bằng 0 vì 8259 sẽ
tự động cấp phát các bit này sao cho tơng ứng với chỉ số lối vào yêu cầu ngắt IRQi.
ICW3:
Từ điều khiển khởi đầu này chỉ sử dụng đến khi bit D2 (SNGL S) thuộc từ điều
khiển khởi đầu ICW1 có giá trị = 0, có nghĩa là trong hệ thống có nhiều mạch PIC 8259
làm việc trong chế độ nối tầng (chủ tớ). Chính vì vậy mà tồn tại (có) 2 loại ICW3:
ICW3 cho mạch 8259 chủ: từ điều khiển này để chỉ ra đầu vào yêu cầu ngắt IRQi

nào của nó có (tín hiệu INT của) mạch tớ nối vào. Cần phải ghi ICW3 vào mạch chủ
để nó biết với các lối vào IRQ thì phải xuất ID của các vi mạch 8259 tớ lên các đờng
Cas0 Cas2.
ICW3 cho mạch 8259 tớ: dùng làm phơng tiện để các mạch tớ này đợc nhận
biết, vì vậy từ điều khiển này (phải) chứa mã số i ứng với đầu vào IRQi của mạch
chủ mà mạch 8259 tớ đã nối vào. Mã số i (chính là ID) đợc sử dụng khi yêu cầu ngắt
từ 8259 tớ. Khi vi mạch 8259 chủ nhận một yêu cầu ngắt từ mạch tớ nào đó nó sẽ
biết đợc yêu cầu ngắt đó là t mạch tớ nào thông qua IRQ tơng ứng. Khi yêu cầu ngắt
đó đã đợc chấp nhận, mạch chủ sẽ yêu cầu mạch tớ đó xuất số hiệu ngắt lên bus dữ
liệu bằng cách nó đa số ID ra các chân Cas0 Cas 2, vi mạch 8259 tớ sẽ so sánh ID
của nó với số ID trên Cas0 Cas2, vi mạch tớ nào thấy trùng (có nghĩa là nó đã nhận
ra ID của nó) thì nó sẽ đa số hiệu ngắt lên bus dữ liệu (Sự xử lý u tiên ở đây có
nghĩa là: Tại một thời điểm có thể có nhiều yêu cầu ngắt (từ các thiết bị ngoại vi) gửi
tới mạch tớ. Trớc hết chúng cùng gửi các yêu cầu ngắt tới mạch chủ và chờ xung
INTA. Nhận đợc các yêu cầu ngắt từ các mạch tớ, mạch chủ cũng gửi xung yêu cầu
ngắt qua chân INT tới 8088. Nếu yêu cầu ngắt này đợc chấp nhận thì 8088 sẽ gửi
xung chấp nhận ngắt thứ nhất INTA tới tất cả các mạch 8259 (chân này tại các mạch
PIC chủ và tớ đợc nối chung). Nhận đợc xung INTA này, tất cả các mạch PIC đều
có những xử lý u tiên để chuẩn bị đa số hiệu ngắt (của ngắt có chứa mức u tiên
cao nhất) lên bus dữ liệu khi có xung INTA thứ hai. Nhng khi có xung INTA thứ hai,
các mạch tớ còn phải xem xét xem có đợc sự cho phép từ mạch chủ hay không
thông qua việc so sánh ID của nó với ID của mạch chủ chỉ định qua các chân Cas0
Cas2. Số hiệu ID này trùng với một trong những chỉ số i của IRQi trên mạch chủ mà
trớc đó có tín hiệu yêu cầu ngắt từ mạch tớ gửi đến. Nh vậy khi xung INTA thứ hai
xuất hiện thì số hiệu ngắt (của ngắt nào đó) từ mạch thợ đợc chấp nhận nào đó sẽ
đợc đa lên bus dữ liệu để 8088 đọc đợc.
Hình vẽ: Thanh ghi khởi đầu ICW2

1










D7

D6

D5

D4

D3

D2

D1

D0

1: Đầu vào IRQi nối với mạch 8259 thợ (tớ)

0: Đầu vào IRQi không nối với mạch 8259 thợ

A0


ICW2 của mạch chủ

1

0

0

0

0

0

D7

D6

D5

D
4

D3

D2

D1

D0


Mã hoá số hiệu ID của mạch thợ

0
-
7 nối vào IRQ0
-
IRQ7

A0

ID2

ID1

ID0

ICW2 của mạch thợ

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

103

http://
www.ebook.edu.vn
Ví dụ: Trong một hệ
vi xử lý ta có một mạch
PIC 8259A chủ và 2 mạch
8259A thợ nối vào chân

IRQ0 và IRQ2 của mạch
chủ. Tìm giá trị các từ điều
khiển khởi đầu ICW3 để
gán cho các mạch PIC.
Giải:
Mạch chủ: ICW3 =
0000 0101b = 05h
Mạch thợ 1 (nối vào
IRQ0 của mạch chủ):
ICW3 = 0000 0000b = 00h
Mạch thợ 2 (nối vào
IRQ2 của mạch chủ):
ICW3 = 0000 0010b = 02h






ICW4:
Từ điều khiển khởi đầu này chỉ dùng đến khi trong từ điều khiển khởi đầu ICW1
có bit IC4 = 1 (cần thêm ICW4).
Bit àPM (Microprocessor Mode): Cho phép các bộ vi xử lý 8088/86 hoặc cao hơn
(80x86) làm việc với 8259. Nếu àPM = 0 thì cho phép các bộ vi xử lý 8080/85 làm việc
với 8259.
Bit SFNM = 1, cho phép ta chọn chế độ u tiên cố định đặc biệt. Trong chế độ
này 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ợ 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 thợ khác nhng với mức u tiên thấp hơn (nh đã biết, khi
8088 nhận đợc yêu cầu ngắt, nếu yêu cầu ngắt đó đợc chấp nhận thì trong các công

việc nó làm để chuẩn bị thực hiện ISR có công đoạn: Xoá cờ IF và TF, điều này có



Cas0

Cas1

Cas2

Cas0

Cas1

Cas2

Cas0

Cas1

Cas2

INT

INTA

INTA

INTA


8259 chủ
8259 thợ1
8259 thợ2
INT

To 8088

From 8088

Hình vẽ: Sơ đồ theo đầu bài

Hình vẽ: Thanh ghi khởi đầu ICW4

1

0

0

0

SFNM

BUF

M/S

AEOI

mPM


D7

D6

D5

D4

D3

D2

D1

D0


1: Chế độ u tiên cố định đặc biệt
(Chế độ u tiên vòng cố định)
0: Không phải chế độ u tiên cố định

đặc biệt (chế độ khác)


0x: Mode không đệm
10: 8259 thợ mode đệm




11: 8259 chủ

mode đệm

1: EOI tự động


1: Mode 8088/x86


0: Mode MCS, 8080/8085

A
0

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

104

http://
www.ebook.edu.vn
nghĩa là khi nó đang thực hiện một ISR thì nó cấm các ngắt che đợc khác tác động.
Tuy nhiên, nếu ngay đầu ISR lại có các lệnh lập cờ IF thì nó vẫn có thể nhận biết các
yêu cầu ngắt che đợc khác ngay khi đang thực hiện một ISR nào đó, vấn đề này còn
đợc đề cập đến trong phần sau). Sau khi các yêu cầu ngắt đợc phục vụ xong thì
chơng trình con phục vụ ngắt phải có lệnh kết thúc yêu cầu ngắt (EOF) đặt trớc lệnh
(IRET) trở về để đa đến cho mạch PIC chủ.
Khi bit SFNM = 0 thì chế độ u tiên cố định đợc chọn (IRQ0: mức u tiên cao
nhất, , IRQ7: mức u tiên thấp nhất). Thực ra đối với mạch 8259 nếu không dùng

ICW4 thì chế độ này đợ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 này tất cả các
yêu cầu ngắt khác với mức u tiên thấp hơn đều bị cấm và các yêu cầu ngắt khác với
mức u tiên cao hơn có thể ngắt yêu cầu ngắt khác với mức u tiên thấp hơn.
Bit BUF (Buffer): Cho phép định nghĩa mạch 8259 để làm 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 BUF = 1: 8259 làm
việc ở chế độ có đệm bus, bit M/S = 1/0 cho phép ta chọn mạch 8259 để làm việc ở
chế độ chủ/thợ (Master/Slave). SP/EN trở thành đầu ra cho phép mở đệm bus để PIC
8259 và CPU thông với bus hệ thống.
Bit AEOI (Automatic End Of Interrupt): Cho phép chọn cách kết thúc yêu cầu
ngắt tự động.
AEOF = 1 thì 8259 tự động xoá ISRi = 0 khi xung INTA cuối cùng chuyển
lên mức cao mà không làm 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 (AEOF = 0) thì
chơng trình con phục vụ ngắt phải có thêm lệnh EOI đặt trớc lệnh IRET
để kết thúc cho 8259.
Những vấn đề liên quan đến chế độ u tiên và kết thúc yêu cầu ngắt còn đợc
nói thêm trong phần giới thiệu về các thanh ghi từ điều khiển hoạt động.
ii, Các từ điều khiển hoạt động:
Các từ điều khiển hoạt động OCWi sẽ quyết định 8259 hoạt động nh thế nào
sau khi nó đã đợc khởi đầu bằng các từ điều khiển khởi đầu ICWi. Tất cả các từ điều
khiển hoạt động sẽ đợc ghi vào các thanh ghi trong PIC khi A0 = 0, trừ OCW1 đợc hi
khi A0 = 1 (chỉ số các thanh ghi và địa chỉ là ngợc lại với các thành ghi điều khiển
khởi đầu).
OCW1:

Thanh ghi này để ghi các bit mặt nạ
vào thanh ghi mặt nạ ngắt IMR. Khi một bit
mặt nạ nào đó của thanh ghi IMR đợc lập
thì yêu cầu ngắt tơng ứng với mặt nạ đó

sẽ không đợc 8259 nhận biết nữa (bị
che). Từ điều khiển này phải đợc (ghi)
đa đến 8259 ngay sau khi các từ điều
khiển khởi đầu ICWi đợc ghi vào 8259 để
cho các lối vào yêu cầu ngắt IRTQi muốn
đáp ứng. Ta cũng có thể đọc lại IMR bất kỳ lúc nào để xác định tình trạng mặt nạ ngắt
hiện tại (có nghĩa, kiểm tra xem trong thời điểm hiện tại yêu cầu ngắt nào đợc phép,
yêu cầu ngắt nào bị che).
Hình vẽ: Thanh ghi hoạt đ
ộng OCW1

D7

D6

D5

D4

D3

D2

D1

D0

Mặt nạ ngắt tại các yêu cầu ngắt

1: Có mặt nạ (yêu cầu ngắt tơng ứng bị che)

0: Không có mặt nạ (yêu cầu ngắt tơng ứng đợc nhận biết)

A0

1

M7

M6

M5

M4

M3

M2

M1

M0

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

105

http://
www.ebook.edu.vn
OCW2:

Các bit: R, SL và EOI (theo bảng) phối hợp nhau cho phép chọn ra cách thức kết
thúc yêu cầu ngắt khác nhau. Trong đó, một vài 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
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ẽ: Than

h 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

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

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
Trong đó: (*): dùng tổ hợp L2L1L0

Trờng đại học kỹ thuật Công Nghiệp

Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

106

http://
www.ebook.edu.vn
đ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 tng ứ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
Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

107

http://
www.ebook.edu.vn
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ẽ: Tha
nh 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

IS7

IS6

IS5

IS4

IS3

IS2

IS1

IS0


Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

108

http://
www.ebook.edu.vn
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 mc 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

D
2

D1

D0

1: Đang có yêu cầu ngắt

0: Không có yêu cầu ngắt

I

X

X

X

X

W2

W1

W0

Mã số của yêu cầu

ngắt

X: Dont care

Trờng đại học kỹ thuật Công Nghiệp
Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy tính

109

http://
www.ebook.edu.vn
Chơng 7 Vào ra dữ liệu bằng DMA

1. Nguyên tắc của việc trao đổi dữ liệu với thiết bị ngoại vi bằng cách thâm nhập
trực tiếp vào bộ nhớ (DMA)
2. DMAC 8237-5 trong hệ vi xử lý 8088
a. Tín hiệu HOLD và HLDA trong CPU 8088
b. Mạch DMAC 8237-5 của Intel

×