Cấu trúc máy tính là một mảng kiến thức nghiên cứu về cách xử lý của một hệ thống máy tính dưới cách nhìn của một lập trình viên. Cách nhìn này thực tế cũng có nhiều khía cạnh
Trang 1Bµi 5
Ng¾t vµ Chip ®iÒu khiÓn ng¾t 8259
Trang 2
1 Giíi thiÖu
2 Tæ chøc ng¾t ë m¸y tÝnh XT
3 Chip ®iÒu khiÓn ng¾t 8259
4 Tõ lÖnh khëi t¹o vµ Tõ lÖnh ®iÒu khiÓn
Trang 4 Máy tính IBM PC XT thực hiện vào/ra qua các cổng nhờ có hệ thống hỗ trợ vào/ra.
Hệ thống hỗ trợ vào/ra chủ yếu gồm:
- Chip điều khiển ngắt 8259
- Chip điều khiển vào ra 8255
- Chip định thời 8253
Có 2 ph ơng pháp thực hiện vào/ra:
- Ph ơng pháp thăm dò
- Ph ơng pháp ngắt
Trang 5Ph ơng pháp thăm dò:
Bộ VXL liên tục kiểm tra t ì nh trạng của thiết bị qua cổng I/O và khi có thiết bị yêu cầu th ì tiến hành phục
vụ thiết bị
Phục vụ xong, bộ VXL chuyển sang kiểm tra trạng thái của thiết bị tiếp theo cho đến khi tất c ả đều đ ợc phục
vụ
Trang 6Nh ợc điểm của ph ơng pháp thăm dò:
Chiếm nhiều thời gian của bộ
VXL.
Phục vụ thiết bị không theo thứ
tự u tiên mà theo thứ tự định sẵn
Trang 7Ph ơng pháp ngắt:
Khi có một thiết bị cần đ ợc phục vụ thì thiết bị sẽ báo cho bộ VXL bằng cách gửi một tín hiệu ngắt
Khi nhận đ ợc tín hiệu này, bộ VXL ngừng mọi công việc đang thực hiện để chuyển sang phục vụ thiết bị.
Mỗi ngắt có Ch ơng trình con phục vụ ngắt ISR (Interrupt Service Routine) đ
ợc đặt trong bộ nhớ.
Trang 8¦u ®iÓm cña ph ¬ng ph¸p ng¾t:
Bé VXL phôc vô thiÕt bÞ dùa theo møc u tiªn ® îc g¸n cho thiÕt bÞ
Khi thiÕt bÞ cã yªu cÇu ® îc phôc
vô, bé VXL vÉn cã thÓ bá qua.
TiÕt kiÖm thêi gian cho bé VXL
Bé VXL cã thÓ thùc hiÖn ® îc nhiÒu c«ng viÖc kh¸c tr íc khi phôc vô thiÕt bÞ.
Trang 900018 00014 00010 0000C 00008 00004 00000
INT FF
INT 06 INT 05 INT 04 INT 03 INT 02 INT 01 INT 00
Bè trÝ ng¾t cña bé vi xö lý 8088/8086
CS IP
CS IP CS IP CS IP
2 Tæ chøc Ng¾t cña m¸y tÝnh IBM PC XT
Trang 10Ngắt của máy tính XT
8088/86 có tất cả 256 ngắt đ ợc đặt tên từ INT 00, INT 01, , INT FFH
Khi thực hiện một ngắt, CPU tự động:
L u các thanh ghi cờ, con trỏ lệnh và thanh ghi đoạn mã vào ngăn xếp
Chuyển điều khiển tới địa chỉ xác
định trong bộ nhớ để thực hiện ch ơng trình con phục vụ ngắt gọi là ISR
Trang 11Ch ơng trình con phục vụ ngắt ISR (Interrupt Service Routine)
Mỗi ngắt có một trình phục vụ ngắt t
ơng ứng, gọi là ISR
Mỗi ISR có một vị trí cố định trong bộ nhớ (gọi là bảng vectơ ngắt) để l u giá trị CS:IP trỏ đến ISR đó
Trong bảng vectơ ngắt của máy tính
XT, 2 byte thấp l u IP, 2 byte cao tiếp theo l u CS
Trang 12Bảng vectơ ngắt
Tập hợp các ô nhớ l u địa chỉ của tất cả các ISR đ ợc gọi là bảng vector ngắt
Máy tính XT có 256 ngắt, bảng vectơ ngắt chiếm 1KB bộ nhớ có
địa chỉ từ 0-3FFH.
OFFSET l u địa chỉ trong bảng vectơ ngắt luôn bằng 4 lần số hiệu ngắt
Trang 130000:0000 0000:0004 0000:0008 0000:000C 0000:0010 0000:0014
B¶ng vect¬ ng¾t m¸y tÝnh XT
Trang 14Bảng 11.2 Địa chỉ ISR của các ngắt ở máy tính XT
F000:FEA5 F000:E987
F000:EF57 F070:0147 F000:F065 F000:F84D F000:F841
Địa chỉ VL 03EA2 068ED FE2C3 068E6 07147 FFF54 FFEA5 FE987 FEF57 00847 FF065 FF84D FF841
Chức năng Lỗi phép chia Chạy từng lệnh (lệnh dò trong DEBUG) Ngắt không che đ ợc
Điểm dừng Tràn khi làm việc với số có dấu
In màn hình (BIOS)
Dự trữ
IRQ0 của 8259 (ngắt định thời BIOS) IRQ1 của 8259 (ngắt bàn phím BIOS) IRQ2 của 8259 (dự trữ)
IRQ3 của 8259 (dự trữ cho cổng COM2) IRQ4 của 8259 (dự trữ cho cổng COM1) IRQ5 của 8259 (dự trữ cho đĩa cứng MT XT) IRQ6 của 8259 (đĩa mềm)
IRQ7 của 8259 (cổng LPT1) Vào/ra cho Video (BIOS) Kiểm tra cấu hình thiết bị (BIOS) Kiểm tra kích th ớc bộ nhớ (BIOS)
Trang 1514
15
F000:EC59 F000:E739 F000:F859
FEC59 FE739 FF859 16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
F000:E82E F000:EFD2 F600:0000 F000:E6F2 F000:FE6E 0070:0140 F000:FF53 F000:F0A4 0000:0522 00E3:0B07 PSP:0000
Có thể đặt lại
PSP:000A PSP:000E PSP:0012
FE82E FEFD2 F6000 FE6F2 FFE6E 00840 FFF53 FF0A4 00522 01937
-Vào/ra bàn phím (BIOS) Vào/ra máy in song song (BIOS) Nạp ROM BASIC
Nạp bẫy-khởi động (BIOS) Thời gian hệ thống (BIOS)
Điều khiển Ctrl-Brk Kiểm soát bộ định thời Bảng các tham số video Bảng các tham số đĩa mềm Bảng ký tự đồ hoạ ((DOS 3.0 trở lên) Kết thúc ch ơng trình DOS
Gọi chức năng DOS
Địa chỉ kết thúc DOS
Địa chỉ thoát Ctrl-Brk DOS Vec tơ xử lý lỗi
Vào/ra đĩa (BIOS) Vào/ra RS-232 (BIOS) Vào/ra cassette (BIOS)
Trang 1641
42-5F
60-66
67
68-7F
80-85
86-F0
F1-FF
25
26
27
28-2E
2F
30-3F
Có thể đặt lại
Có thể đặt lại
Có thể đặt lại
Có thể đặt lại
FEC59 FE401
-Vào/ra đĩa (XT) Các tham số đĩa cứng
Dự trữ cho DOS
Ng ời dùng định nghĩa Quản lý bộ nhớ mở rộng Không sử dụng
Dự trữ cho BASIC Trình dịch BASIC Không sử dụng
Đọc đĩa DOS Viết đĩa tuyệt đối DOS Kết thúc ch ơng trình và th ờng trú
Dự trữ cho DOS Ngắt phép nhân
Dự trữ cho DOS
Trang 17 INTR (interrupt request).
NMI (nonmaskable interrupt)
INTA (interrupt acknowledge)
INTR lµ ch©n vµo, cã thÓ bÞ che/hñy che b»ng c¸c lÖnh CLI/STI (Xo¸/LËp cê ng¾t IF)
NMI còng lµ tÝn hiÖu vµo, song ng¾t nµy kh«ng thÓ
vµ STI.
Trang 18 Khi kÕt thóc ISR, CPU sÏ lÊy l¹i c¸c byte
FR vµ CS:IP tõ ng¨n xÕp vµ tiÕp tôc thùc hiÖn ch ¬ng tr×nh tõ vÞ trÝ bÞ ng¾t.
Trang 19Gán địa chỉ ngắt cứng
NMI đ ợc gán INT 02
Mỗi khi NMI đ ợc kích hoạt, CPU sẽ nhảy đến
ô nhớ 08 l u địa chỉ ISR của NMI.
INTR có thể đ ợc dùng cho nhiều ngắt cứng.
Sử dụng chip điều khiển ngắt 8259 có thể
mở rộng số ngắt cứng có thể lên đến 64 ngắt
Mỗi chip 8259 có thể nối 8 ngắt cứng.
2 chip 8259 có thể quản lý đến 16 ngắt
cứng
Trang 20 Ví dụ: INT 21, INT 10
Ngoài các ngắt INT 0 - INT 04 đã đ ợc
định sẵn, các ngắt còn lại từ INT 05 đến INT FF có thể đ ợc dùng để thực hiện các ngắt cứng hoặc ngắt mềm
Trang 21Ngắt và thanh ghi cờ
Có 2 cờ liên quan đến ngắt, đó là:
Cờ IF (Interrupt enable flag)
Cờ TF (trap flag).
Cờ ngắt đ ợc dùng để che hoặc cho phép
ngắt cứng nối tới INTR.
Nếu IF=0 mọi ngắt qua INTR đều bị cấm.
Xóa IF=0 bằng lệnh CLI
Nếu IF=1 cho phép ngắt qua INTR
Đặt IF=1 bằng lệnh STI (set interrupt)
Trang 22Mét sè ng¾t th êng gÆp
INT 00 (phÐp chia 0)
Thuéc nhãm ng¾t ngo¹i lÖ (exception
interrupts).
Khi gÆp phÐp chia 0, CPU gäi INT 0
INT0 hiÓn thÞ th«ng b¸o DIVIDE ERROR“DIVIDE ERROR” ”
VÝ dô:
MOV AL,92
SUB CL,CL
DIV CL
Trang 23INT 02 (ngắt không che đ ợc NMI)
Mỗi khi NMI đ ợc kích hoạt, CPU sẽ nhảy đến
ô nhớ 08 l u địa chỉ ISR của NMI và chạy ISR
Trang 24INT 12: Kiểm tra dung l ợng RAM
Ch ơng trình POST BIOS (power-on self-test)
có chức năng kiểm tra và đếm số K byte của
bộ nhớ RAM quy ớc đ ợc lắp đặt rồi ghi vào các ngăn nhớ dành riêng 00413H và 00414H trong vùng dữ liệu BIOS
INT 12H có nhiệm vụ là ghi giá trị đó từ các ngăn nhớ 00413H và 00414H vào thanh ghi
AX.
ì
Trang 25VÝ dô: ViÕt ®o¹n ch ¬ng tr×nh kh¶o s¸t
bé nhí qui íc m¸y tÝnh IBM PC XT
INT 12HINT 3HINT 20 H
Trang 26Số ngắt (H) Địa chỉ (H) Phục vụ
13 4C Phục vụ đĩa
14 50 Chuyển nối tiếp
Trang 27Hàm 1h: Thay đổi kích th ớc của con trỏ.
Vào: CH = dòng bắt đầu của con trỏ (các bit từ 4 - 0)
CL = dòng kết thúc của con trỏ (các bit từ 4 - 0)
Trang 28Hàm 2h: đặt vị trí con trỏ tại trang, dòng, cột
DL = cột
CH = dòng quét đầu
CL = dòng quét cuối
Trang 29Vector
ngắt (Hex)
Địa chỉ (Hex)
23 8C Địa chỉ cần đến khi có Ctrl-Breack
24 90 Địa chỉ cần đến khi có lỗi
Trang 30Mét sè hµm cña INT 21H cña DOS
Trang 31Logic điều khiển
Khối logic (đọc ghi)
Bộ đệm
3 Chip điều khiển ngắt 8259
Trang 32Vcc GND
8259A
IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7
D0-D7 RD WR CS A0 INTR INTA CAS0- CAS2 SP/EN
H×nh 11.3 Bé ®iÒu khiÓn ng¾t lËp tr×nh 8259A
Vcc A0 INTA IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 INTR SP/EN CAS 2
CS
WR RD D7 D6 D5 D4 D3 D2 D1 D0 CAS 0 CAS 1 GND
1 2 3 4 5 6 7 8 9 10 11 12 13 14
28 27 26 25 24 23 22 21 20 19 18 17 16 15
8 2 5 9 A
Trang 33Cã 4 tõ lÖnh khëi t¹o ICW1-ICW4
4 Tõ lÖnh khëi t¹o ICW
(Initialization Command Word)
Trang 34T7-T0 là ngắt gán cho IR0 của 8259
1 T7 T6 T5 T4 T3 T2 T1 T0
A0 D7 D6 D5 D4 D3 D2 D1 D0 ICW2
Hình 11-6 Tổ chức ICW1, ICW2 của 8259
ICW1
1=Chân vào kích phát mức 0= Chân vào kích phát s ờn
Luôn luôn bằng
0 đối với x86
1= ICW4 có dùng 0=không cần ICW4 1= chế độ đơn 0=chế độ nối tầng
0 0 0 0 1 LTIM 0 SNGL IC4
A0 D7 D6 D5 D4 D3 D2 D1 D0
=0 với x86
Trang 350 X Không đệm
1 0 Đệm tớ
1 1 Đệm chủ
1= for x86 0= for 8085 1= Auto EOI 0=Normal EOI
1 0 0 0 SFNM BUF MS AEOI PM
A0 D7 D6 D5 D4 D3 D2 D1
D0
Lồng hoàn toàn=1 Không lồng = 0
Trang 36 AEOI - Automatic End of Interrupt.
Khi D1=1, không cần lệnh EOI có tr ớc lệnh IRET Khi D1=0, cần phát lệnh EOI tr ớc lệnh IRET.
8259 có thể làm việc ở chế độ có hoặc không có
đệm dữ liệu.
D2 và D3 cần cho các hệ thống có đệm bus dữ liệu khi dùng bộ thu phát hai chiều
SFNM (Special fully nested mode)
đặc biệt
Gán mức u tiên cao nhất cho IR0 và mức thấp
nhất cho IR7
Trang 37Ví dụ 8
a) Xác định địa chỉ cổng của 8259 nếu chân CS
của 8259 đ ợc kích hoạt bởi A7-A1=0101010
IR kích phát mức, chế độ đơn, IR0 đ ợc gán "INT
50H", chế độ chủ có đệm, kết thúc ngắt (EOI) b ì nh
th ờng, có ICW4, lồng hòan toàn.
c) Viết ch ơng tr ì nh khởi tạo 8259 có địa chỉ cổng nêu trên
d) T ì m địa chỉ ở b ả ng vectơ ngắt t ơng ứng với IR1, IR6 và IR7.
(Chú ý: Ví dụ này chủ yếu để làm bài tập, chứ
không đề cập tới máy tính t ơng thích với IBM PC)
Trang 40d) NÕu "INT 50H" ® îc g¸n cho IR0, INT 51H cho IR1
vµ INT 52H cho IR2 th × c¸c vÞ trÞ nhí øng víi
Trang 41Bảng 6.5 Định địa chỉ OCW của 8259
CS A0 Từ lệnh điều khiển hoạt động
Trang 42Mặt nạ ngắt 1= mặt nạ (che) 0= Xoá mặt nạ
1 M7 M6 M5 M4 M3 M2 M1 M0
A0 D7 D6 D5 D4 D3 D2 D1 D0 OCW1
Quay ở chế độ EOI tự động (xoá) 0 0 0
Quay riêng EOI 1 1 1
0= No Poll Command
OCW3
Trang 43Các chế độ gán mức u tiên
Chế độ lồng hoàn toàn
Gán mức u tiên cao nhất cho IR0 và mức
thấp nhất cho IR7
Chế độ tự động
Khi một IR đ ợc phục vụ nó sẽ chiếm quyền u tiên thấp nhất và sẽ không đ ợc phục vụ nếu vẫn còn IR khác yêu cầu
Chế độ tr ình tự riêng
Là chế độ 8259 đ ợc lập trình để thực hiện theo trình tự riêng chứ không theo trình tự ngầm định IR0 - IR7
Trang 446 nèI GHÐP 8259 ë M¸Y TÝNH ibm pc xt
A
B Y1 C
E1 E2 E3
H×nh 11-8 M¹ch chän chip cña 8259A
Trang 451 0 0 0 0 1 x x x x 1 21 § Þa chØ cæng ICW2, ICW3, ICW4
1 0 0 0 0 1 x x x x 0 20 § Þa chØ cæng OCW2, OCW3
1 0 0 0 0 1 x x x x 1 21 § Þa chØ cæng OCW1
B¶ng 11-6 §Þa chØ cæng cña c¸c ICW vµ OCW
AEN
Trang 46B ¶ ng 11-7 Ng¾t cøng cña m¸y tÝnh IBM PC/XT
D¹ng nhÞ ph©n cña ICW2 8259 Interrupt
Input
INT D7 D6 D5 D4 D3 D2 D1 D0
Trang 47Bộ định thời kênh 0 của 8253
Cho phép
Com2 Com1 Cổng Lpt2 Đĩa mềm Cổng Lpt1
INTA
IR0 INTR IR1
IR2 IR3 IR4 IR5 IR6 IR7
8259
Bus dữ liệu
Trang 48Trình tự thực hiện ngắt ở máy tính XT
1 Khi một IR đ ợc kích hoạt, 8259 sẽ
đáp lại bằng cách đặt INTR (8259) lên mức cao để thông báo cho CPU biết có yêu cầu ngắt
Trang 494 8259 nhận INTA đầu tiên, thực hiện
6 Xung INTA thứ hai kích 8259 chuyển
byte dữ liệu lên bus dữ liệu, trong đó
có thông tin về số hiệu ngắt đ ợc kích hoạt
Trang 507 8088/86 sử dụng byte này để xác
định vị trí của vector ngắt Giá trị đó
là gấp 4 lần của số hiệu ngắt
8 8088/86 đẩy thanh ghi cờ vào ngăn
xếp, xoá cờ ngắt IF và cờ bẫy TF, vì
vậy sẽ khoá các yêu cầu ngắt khác,
và cuối cùng đẩy các thanh ghi CS:IP vào ngăn xếp
9 8088/86 đọc CS:IP của ISR trong
bảng vectơ ngắt và bắt đầu thực hiện ISR này
Trang 518088
PRE
D Q CLR C
KiÓm tra cho phÐp
A0H
Tõ ch©n RESET
cña CPU
Trang 52 TÊt c¶ c¸c m¸y tÝnh thÕ hÖ sau nh
386, 486, Pentium vÉn duy tr× sù t ¬ng
thÝch nµy
Trang 54IRQ8 IRQ9 IRQ10
IRQ3 IRQ4 IRQ5 IRQ6 IRQ7
Vcc
CAS0 CAS1 CAS2
Kiểm tra chẵn lẻ board
hệ thống Kiểm tra chẵn lẻ kênh I/O (khe cắm mở rộng)
INTR
8259 tớ
IRQ2 INTR
8259 chủ
INTR
80286 80386 80486 Pentium
NMI
Hình 6.11 Chip 8259 ở chế độ chủ-tớ
trong các máy từ 80286 trở lên
D7 hoặc cổng 70H
Trang 55Bảng 6.9 Bố trí ngắt cứng ở máy tính PC dùng bus ISA
IRQ Số hiệu Sử dụng
IRQ0 INT 08 Chân OUT0 bộ định thời 8254 IRQ1 INT 09H Bàn phím
IRQ2 INT 0AH Ngắt từ 8259 thứ 2
IRQ3 INT 0BH Cổng COM2 (COM4)
IRQ4 INT 0CH Cổng COM1 (COM3)
IRQ5 INT 0DH Cổng song song LPT2
IRQ6 INT 0EH Bộ điều khiển đĩa mềm
IRQ7 INT 0FH Cổng song song LPT1
Trang 56IRQ8 INT 70H Đồng hồ thời gian thực
IRQ9 INT 71H Phần mềm đ ợc định địa chỉ lại
theo INT0AH
Trang 57
Chia sẽ ngắt ở máy PC
ở máy tính IBM PC/AT, mỗi IRQ chỉ đ ợc gán cho một thiết bị Hạn chế này gây thiếu IRQ khi có nhiều thiết bị nối ghép.
Các IRQ của PC/AT đ ợc kích phát bằng s ờn d
ơng nên chúng dễ bị ngắt sai do nhiễu gây ra.
Do vậy, với các bus mới nh EISA hoặc MC đã chuyển từ kích phát s ờn sang kích phát mức
Mỗi IRQ có thể đ ợc dùng cho nhiều thiết bị với
ý t ởng t ơng tự nh với NMI
Nhiệm vụ của BIOS là phát hiện nguồn kích hoạt và chỉ đáp ứng cho nguồn đó mà thôi.
Trang 58Bảng 10.4 Vùng dữ liệu bộ đệm bàn phím của BIOS
Đ ầu
Đầu u Đ ầu Đ ầu Đ ầu Đ ầu
Đuôi
Đuôi
Đuôi
Đuôi
Đ ầu
Đuôi
Đuôi
Đuôi
Hình 10.7 Con trỏ Đầu & Đuôi bộ đệm bàn phím
7 MINH HOạ HOạT ĐộNG NGắT BàN PHíM Và NHậP Dữ LIệU Từ BáN PHíM
Trang 60Nh vậy:
INT 09H chèn ký tự vào bộ đệm bàn phím thì làm tăng con trỏ đuôi
INT16H đọc ký tự ở bộ đệm bàn phím thì làm tăng con trỏ đầu
Khi các con trỏ tăng đến phần cuối của bộ đệm bàn phím, chúng sẽ vòng trở lại và tạo ra một vòng tròn 16 từ
Trang 61Ví dụ 10.3
Chạy trong DEBUG và xem vùng nhớ bộ đệm bàn phím
-d0:400
0000:0400 F8 03 F8 02 00 00 00 00-78 03 00 00 00 00 0F 02 .x
0000:0410 27 D4 00 80 02 80 00 00-00 00 2E 00 2E 00 0D E0 '
0000:0420 64 20 30 0B 3A 27 34 05-30 0B 30 0B 0D 1C 67 22 d 0.:'4.0.0 g" 0000:0430 67 22 31 02 31 02 0D 1C-0D 1C 00 00 00 00 00 80 g"1.1
0000:0440 00 00 C0 00 00 00 00 00-00 03 50 00 00 10 00 00 .P
0000:0450 00 06 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .
0000:0460 0E 0D 00 D4 03 29 30 76-07 C9 1C FF C9 29 11 00 .)0v )
0000:0470 00 00 00 00 00 01 00 00-14 14 14 3C 01 01 01 01 .<
Trang 62VÝ dô:
Trang 63jz thoat mov dl,al sub dl,1fh mov ah,2 int 21h jmp start thoat:
mov ah,4ch int 21h
end start