intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Nguyễn Nhi | Ngày: | Loại File: PDF | Số trang:17

133
lượt xem
12
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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 sàng của thiết bị ngoại vi như đã được trình bày ở chương trước, trước khi tiến hành bất kỳ một cuộc trao đổi dữ liệu nào CPU phải để toàn bộ thời gian vào việc xác định trạng thái sẵn sàng làm việc của thiết bị ngoại vi. Trong hệ thống vi xử lý với cách làm việc như vậy, thông thường CPU được thiết kế chủ yếu...

Chủ đề:
Lưu

Nội dung Text: Kỹ thuật vi xử lý - Chương 7

  1. 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 sàng củ a thiết bị n goại vi như đã được trình bày ở chương trước, trư ớc khi tiến hành bất kỳ mộ t cuộc trao đổi dữ liệu nào CPU ph ải đ ể toàn bộ th ời gian vào việc xác định trạng thái sẵn sàng làm việc củ a thiết bị n goại vi. Trong hệ thống vi xử lý với cách làm 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 vào/ra dữ liệu và thự c h iệ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 để làm th êm được nhiều công việc khác nữa, ch ỉ khi nào có yêu cầu trao đổi dữ liệu th ì mới yêu cầi 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 hoàn thành việc trao đổ i dữliệu thì CPU lại ph ải quay về đ ể làm tiếp công việc hiện đang b ị gián đoạn. Cách làm việc theo kiểu này gọ i là n gắ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 n ày 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ể làm được các công việc khác. Muốn đạt được điều n ày ta phải có cách tổ chức hệ thống ao 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 n ày 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, 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 đế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 vào 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 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 này 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 n ày phải đ ược đưa vào 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ời gian củ a các xung liên quan đ ến quá trình trên được mô tả trên hình 7.1. + 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 tràn 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 bày m ột cách đơn giản để đưa đ ược số hiệu ngắt N vào bus dữ liệu trong khi cũng tạo ra yêu cầu ngắt đưa vào chân INTR của bộ vi xử lý 8088. 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
  2. IRi được đồng thời đưa qua mạch khuếch đại đệm đ ể tạo ra số h iệu ngắt tương ứng, số hiệu ngắt này sẽ được CPU đọc vào 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. 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) 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 INTN vào 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ờ vào đỉnh ngăn xếp) 2. IF  0, TF  0. (cấm các ngắt kh ác tác động vào 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ề vào đỉ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ề vào đỉ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ơ n gắ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ừ n găn xếp). Về m ặt cấu trúc ch ương trình, kh i 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 đã b ao 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 vào đầu d ãy ngắt m ềm INY N như sau: + INT 0 : Ngắt mềm do phép chia cho số 0 gây ra, + IN T1 : Ngắt mềm đ ể chạy từng lệnh ứng với trường h ợp cờ TF=1, + IN T2 : Ngắt cứng do tĩn hiệu tích cực tại chân NM1 gây ra, + IN T3 : Ngắt mềm đ ể đ ặt điểm dừng củ a chương trình tại mộ t địc chỉ nào đó
  3. + IN T4 : (Ho ặc lệnh INTO) : ngắt mềm ứng với trường hợp cờ tràn OF=1. Các kiểu ngắt khác còn lại thì được dành cho Intel và cho 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 PC/XT và PC/AT0: + INT 5-INT 1FH; d ành riêng cho Intel trong các bộ vi xử lý cao cấp khác, + INT 20H-INT FFH: d ành 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ơ n gắt. Intel quy định bảng nà y nằm trong RAM bắt đầu từ đạic h ỉ 00000H và d ài 1 KB (vì 8088 có tất cả 256 kiểu ngắt, mỗi kiểu ngắt ứng với 1 vectơ n gắt, 1 vectơ n gắt cần 4 byte đ ể chứa địa chỉ đầy đủ cho CS:IP của CTCPVN). Bảng 7.2. Bảng vectơ ngắt của 8088 tại 1KB RAM đ ầu tiên 03 FEH-03FFH CS củ a CTPVN INT FFH 03FCH-03FDH IP của CTPVN INT FFH CS củ a CTPVN INT 20H 0082H-0083H IP của CTPVN INT 20H 0080H-0081H CS củ a CTCPVN INT 2 000AH-000BH IP của CTCPVN INT 2 0008H-0009H CS củ a CTCPVN INT 1 0006H-0007H IP của CTCPVN INT 1 0004H-0005H CS củ a CTCPVN INT 0 0002H-0003H IP của CTCPVN INT 0 0000H-0001H Trên bảng 7.2. giới thiệu mộ t ph ần củ a b ảng vectơ n gắ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ế nào? 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 n ào có mứ c ưu tiên và phục vụ trước. Ngay từ khi được ch ế tạo (thường gọi là n gầ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: + 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ệng INT 1 ... thấp nhất Để thấy rõ hoạt động củ a CPU trong cơ ch ế ngắt ưu tiên n ày ta có th ể lấy một ví dụ cụ thể như sau. Giả thiết tại mộ t thời điểm nào đó, trong khi CPU (ở trạng thái cho phép ngắt với cừo 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 vào lúc đó CPU cũng nh ận được yêu cầu từ đầu vào INTR. CPU sẽ xử lý ra sao trong trường hợp này? 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 cho phép chua cho 0 gây ra và cờ IF bị xó a về
  4. 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 hoàn 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 dành cho INTR. 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 ngoài ph ải phục vụ tư 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 vào 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 thành 64. Cá c khối chức nă ng chính của 8259A + Thanh ghi IRR: ghi nh ớ các yêu cầu ngắt có tại đầu vào 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 này 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ý 8080. Ta có thể thấy rõ và hiểu được ý n ghĩa của chúng ngay trên hình 7.4. Ngoài các tín hiệu này 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: + Cas0-Cas2 [I,O]: là các đ ầu vào đố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 làm việc ở chế độ không có đệm bus dữ liệu th ì đâ y là tín hiệu vào dùng lập trình đ ể b iến mạch 8259A thành mạch thợ ( SP  0 ) hoặc chủ ( SP  1 ); khi 8259A làm việc trong hệ vi xử lý ở chế độ có đ ệm bus dữ liệu thì chân này là tín hiệu ra EN dùng m ở đệm bus dữ liệu để 8088 và 8259A th ông vào bus dữ liệu hệ thống. Lúc này 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 đầ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 làm việc độc lập (mạch chủ ) với bus CPU 8088 làm việc ở chế độ MIN. PIC 8259A chủ nối với PCU 8088 ở chế độ MAX. 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 bus hệ thống. Mạch 8259A ph ải làm việc ở chế độ có đệm để nối được với bus hệ thống này.
  5. 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 này 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ý vatf đó được thông qua các đệm để nối vào bus hệ thống. Hình 7.6. Nối CPU 8088 chế độ MAX với PIC8259A 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 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) 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 làm 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 làm 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 ể trogn 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 nào ta cũng cần dùng cả 4 từ điều khiển kh ởi đ ầu những có lúc ta chỉ cần ghi vào đó 2 hay 3 từ là đủ (xem hình 7.7 đ ể th ấy rõ thứ tự ghi và điều kiện đ ể ghi các đ iều khiển ICW vào 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 này 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 vào đ ị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 vào 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 vào các thanh ghi có đ ịa chỉ lẻ trong m ạch PIC. o ICW1 Bit D0 củ a ICW1 quyết định 8259A sẽ đư ợc nối với họ vi xử lý nào. Để làm việc với h ệ 16-32bit (8088 ho ặc họ 8086) thì ICW nh ất thiết ph ải có IC4 = 0 (và như vậy các bit của ICW4 sẽ b ị xó a 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 cầu ngắt IR của mạch 8259A và việc bố trí các m ạch 8259A kh ác trong hệ làm 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 này. o ICW2 Từ điều khiển khởi đầu n ày 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 vào yêu cầu ngắt. Các bit T0-T2 được 8259A tự động gán giá trị tù y theo đầu vào yêu cầu ngắt cụ thể IRi. Ví dụ nếu ta muốn các đầu vào của m ạch 8259A có kiểu ngắt là 40 -47H ta ch ỉ cần ghi 40H vào các bit T3-T7. Nếu làm như vậ y thì IR0 sẽ có kiểu ngắt là 40H, IR1 sẽ có kiểu ngắt là 4 1H... o ICW3 Từ điều khiển khởi đ ầu n ày 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 làm 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 ợ.
  6. ICW3 cho m ạch chủ : dùng để ch ỉ ra đ ầu vào yêu cầu ngắt Iri nào của nó có tín hiệu INT của m ạch thợ nối vào. ICW3 cho mạch thợ : dùng làm phương tiện để các mạch này được nhận biết. Vì vậy từ điều khiển khởi đâùu này ph ải chứa mã số i ứng với đ ầu vào Iri củ a mạch chủ m à m ạch thợ đ ã cho nối vào. Mạch th ợ sẽ so sánh mã số này với m ã số nhận được ở Cas2 -Cas0. Nếu b ằng nhau th ì số hiệu ngắt sẽ được đ ưa ra bú khi có INTA. Ví dụ : Trong mộ t hệ vi xử lý ta có một mạch 8259A chủ và 2 mạch 8259A th ợ nối vào chân 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 này làm việc đư ợc vưói nhau ta sẽ phải gia các từ đ iều khiển khởi đầu như sau: ICW3 = 03H cho mạch chủ . ICW3 = 00H cho mạch thựo thứ nhất và ICW3 = 01H cho mạch thợ thứ hai. ICW4 Từ điều khiển khởi đầu này chỉ d ùng đến khi trong ừt điều kh ểin ICW1 có IC4 = 1 (cần th êm ICW4) Bit MPM cho ta khả năng chọn lo ại vi xử lý để làm việc với 8259A. Bit MPM = 1 cho ph ép các bộ vi xử lý từ 8086/88 hoặc cao hưon làm việc vưói 8259A. Bit SFNM = 1 cho phép 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 ải phục vụ một yêu cầu ngắt ở mạch thợ khác nhưng 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 ICW1 thì chế độ này đã được chọn như là n gầ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 Iri = 1) lú c này ấtt cả các yêu cầu khác vứoi ứmc ưu tiên cao hưon 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 để làm việc với CPU trong trường hợp có đệm ho ặc không có đ ệm nối với bú hệ thống. Khi làm việc ở ch ế độ có đệm (BUF = 1). Bit M/S = 1/0 cho phép ta chọn mạch 8259A đ ể làm việc ở ch ế độ chủ / th ợ. SP/EN trở thành đầu ra cho phép m ở đệm để PIC và CPU thô ng vưó i bú hệ thống. Bit AEOI = 1 cho phép chọn cách kết thcú yêu cầu ngắt tự động. Khi AEOI = 1 thì 8259A tự động xóa 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 (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ừ đ êìu khiển hoạt động OCW sẽ quyết định m ạch 8259A sẽ ho ạt động nh ư thế nào 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ẽ đwowcj ghi vào các thanh ghi trong PIC khi A0 = 0,trừ OCW1 được ghi khi A0 = 1. Dạng thứ c của OCW đwocj trinh bày trên hình 7.9 OCW1
  7. OCW1 dùng để ghi giá trị của 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 đượ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 này ph ải được đư a đến 8259A ngay sau khi ghi các ICW vào 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 nào 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 vài cách thcú 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 giải mã hó a của 3 bit L2,L1,L0 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ế độ làm việc của 8259A. a. Chế độ ưu tiên cố định : Đây là chế độ làm 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ế đ ộ này, các đ ầu vào IR7-IRO được gán cho các mức ưu tiên cố định: IRO đượ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 này được giữ không thay đổi cho đ ến khi ghi mạch 8259A bị lập trình khác đi do OCW2. Trong chế đ ộ ưu tiên cố định tai 1 thời điểm chỉ có 1 yêu cầu ngắt i được phục vụ (bit ISRi = 1) lúc này tất 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 thấp hơn đều 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 I 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ạ OCW2 A0 D7 D6 D5 D4 D3 D2 D1 D0 0 R SL EOI 0 0 L2 L1 L0 0 0 1 Kết thúc Mã hóa mức ưu tiên Lệnh EOI thường Ngắt (EOI 0 1 1 Lệnh EOI chỉ đích danh (*) ngắt bị tác động Đổi mức 1 0 1 Đổi mức ưu tiên khi có EOI thường. ưu tiên tự 1 0 0 Lập chế độ quay khi có EOI tự động 000….mức động 0 0 0 0 Xóa ch ế độ quay khi có EOI tự động Đổi m.ư.t 1 1 1 Đích danh Đổi mức ưu tiên khi có EOI đích danh (*) 1 1 0 Lệnh lập tức ưu tiên (*) ...mức 111 Không làm gì
  8. 010 (*) dùng tổ hợp L2 L1 L0 OCW3 A0 D7 D6 D5 D4 D3 D2 D 1 D0 0 0 ESMM SMM 0 1 P ERIS RIS 10: dọ c IRR ở lần đọc sau 11: đọ c ISR ở lần đọc sau Thăm dò h iệ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 Chế độ mặ t nạ đặc biệt 10: Xó a 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ế độ này 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 vào 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ế độ này ta cần chỉ rõ (đích danh) đ ầu vào IRi n ào ,với i=L2L1L0,được gán mứ c ưu tiên th ấp nhất ,đ ầu vào IRi+1 sẽ đu ợ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 OC WC.ta sẽ nói rõ việc các bit R,Slvà SOI phối hợp với nhau 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 đã nó i đến ở ph ần trên (xem th êm hinh 7.9) . 1. kết thúc yêu cầu ngắt thư ờng : ch ương trình còn phục vụ ngắt ơphải có lệnh EOI đ ặt trước lệnh trở về IRET cho 8259A .mạch 8259 A 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 n ày 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 thường : chương trình còn phục vụ ngắt phải co 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=L2L1L0 đ ể tạo điều kiện cho chính yêu cầu ngắt này 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ụ. Xó a bit ISRi tương ứng và gán luôn mức ưu tiên th ấp nh ất cho đầu vào IR, này cò n đầu vào IRi+1 sẽ đwocj gán mức ưu tiên cao nhất.
  9. Thanh ghi ISR trước khi IR4 được chấp nhận (0: mức ưu tiên cao nhất, : 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: (o: mức ưu tiêncao 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 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 dõi cách tứhc 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 họa trình bày 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ế độ n ày bằn g 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 ế độ này ta có thể dùng lệnh xóa “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 còn 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ẽ xóa 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 vào Iri, với i = L2 L1 L0. Yêu cầu ngắt IRi+1 sẽ được gán m ức ưu tiên cao nhất. OCW3 Từ đ iều khiển hoạt đ ộng sau khi được ghi vào 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 vào yêu cầu ngắt Iri với mức ưu tiên cao nấht cùng m ã của đầu vào đó và. + Thao tác với mặt n ạ đ ặc biệt . D7 D6 D5 D4 D3 D2 D1 D0 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 Isi = 0: yêu cầu ngắt i không được phụ c vụ a) IRR ISi = 1: đầu vào i có yêu cầu ngắt D 7 D6 D5 D4 D3 D2 D1 D0 IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0 Isi = 0: yêu cầu ngắt i không được phụ c vụ b) ISR 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ụ.
  10. Các thanh gh i IRR và ISR có thể đọ c được sau khi nạp vào 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 n ày đwocj biểu diễn trên h ình 7.11a và 6.11b Bằng việc đưa vào 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 D6 D5 D4 D3 D2 D1 D0 I X X X X W2 W1 W0 1: đ ang có yêu cầu ngắt mã số hóa 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ế độ này thư ờng đwocj ứng dụng trong trường h ợp có nhiều chương 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ủ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ắthiện tại ta cần làm 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 cấm (bị che bởi chươn g 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 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ị xóa b ằng cách ghi vào 8259A một từ lệnh OCW3 khác vứoi 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 cso yêu cầu ngắt, ta tóm lượt 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 vào 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ó hoàn 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 ứ h ai đ ến 8259A 5. Xung INTA thứ h ai 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ố h iệu ngắt đ ể tính ra đ ịa ch ỉ ngắt của vectơ n gắt tương ứng . 7. 8088 cất FR, xó a các cờ Ì và TF và cất địa ch ỉ trở về CS:IP vào ngăn xếp.
  11. 8. 8088 lấy địa chỉ CS:IP của chương trình phục vụ n gắ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 đ ể làm việc vứoi CPU 8088 ở chế độ cũ (đơ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 IR0 được gán số h iệ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 bài toán ta có thể từû điều khiển khởi đầu như sau : ICW1 = 00011011 = 1BH Cần thêm ICW4 D0 = 1 Làm việc đơn lẻ, không cần ICW3 D1 = 1 Làm việc với hệ 8086/88 D2 = 0 Đầu vào IR ăn theo mức D3 = 1 Bắt buộ c với ICW1 D4 = 1 D5 = D6 = D7 =0 gán b ằng 0 cho h ệ 8086/88 ICW2 = 01010000 = 50H Vì các bit T1 - T3 của ICW2 phải mã hóa trị số 50H để IR0 - IR7 đ ược m ã hóa tiếp bởi các Bit T2 - T0 = 000 ICW3 không cần đếm ICW4 = 00001101 = 0DH làm việc với hệ số 8086/88 D0 = 1 EOI thường (phải có EOI trước IRET) D1 = 0 D3 D2 = 11 Làm việc ở chế đọ chủ trong hệ có đ ệm Bus Chế độ ưu tiên cố định D4 = 0 D5 = D6 = D 7 = 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 này có thể là: MOV AL,1BH ;ICW1 OFOH, AL ;ICW1 đ ưa ra cổng FOH OUT MOV Al,50H ;ICW2 OF1H,AL ;ICW2 đ ưa ra cổng F1H OUT MOV AL, ODH ;ICW4 OF1H, AL ;ICW4 đ ưa ra cổng F1H OUT Ví d ụ 3:
  12. 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 này 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 IR3 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 ISR3 = 1 để ghi nhớ là yêu cầu ngắt IR3 đ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 này ta phải có lệnh kết thúc ngắt EOI đưa đến 8259A để xó a Bit ISR3 đưpợ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 IR3 có thời cơ được phục vụ. Dạng thường thấy của 1 chương trình con phục vụ ngắt kiểu này có thể như sau (ta chỉ chú ý nhấn mạnh đến các lệnh cuối liên quan đến EOI): Phuc vu IR3 Proc ; thân của chương trình con phục vụ ngắt . ;OCW2 vưó i EOI để kết thúc MOV AL20 OUT OFOH, AL ; đưa OCW2 đến 8259A . ; trở về chương trình chính phuc vu IR3Endp IRET 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ệ này bình thường làm một công việc gì đó , nhưng khi có yêu cầu ngắt ở IR3 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 và cả khi đã nhân đôi vẫn chứa được trong 1 Byte) Giải Hình 7.13 biểu diễn lưu đ ồ của chương trình thực hiện công việc nói trên. Để 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ị vào 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 xong sau khi đã dịch ra mã máy sẽ được nạp vào ROM và đ ể lại địa chỉ C0000H. Khi muố n cho chạy chương trình ta phải vào địa chỉ ứng với Vectơ ngắt 53H và thay đ ổi nội dung của Vectơ này sao cho 2 ô 0 014CH, 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 IR3 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ứa sẽ chứa các lệnh như sau: CLI ;cấm các ngắt
  13. MOV AL, 1BH ; ICW1 OUT OFOH,AL ; ICW1 đưa ra cổng FOH MOV AL, 50H ; ICW2 OUT OF1H, AL ; ICW2 đưa ra cổng F1H MOV AL, ODH ;ICW4 OUT OF1H,Al ; ICW4 đưa ra cổng F1H ; tháo mặt nạ cho các IR MOV AL, 0 OUT OF1H, Al ;OCW1 đưa đến 8259A ; cho phép ngắt STI ; 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 IR3 có dạng sau : Phucvu IR3 Proc ; Cất các thanh ghi PUSH AX PUSH BX PUSH CX ; Đọ c mặt nạ ngắt IN AL,OF1H ; Cất mặt nạ MOV BL, AL ; Chỉ cho phép yêu cầu MOV AL,0F7H IR3 ; được tác động OUT OF1H, AL ; 100 số liệu phải thao MOV CL,100 Tác ; đọc vào mộ t số liệu TIEP: IN AL, 70H ; nhân đôi rồi SHL AL, 1 ; đưa ra cổng OUT 71H,AL LOOP TIEP ; Lấy lại mặt nạ cũ MOV AL, BL ; đưa mặt nạ cũ đ ến OUT 0F1H,AL 8259A ; OCW2 với EOI để kết MOV AL, 20 thúc ; đưa OCW2 đến 8259A OUT OFOH, AL ; lấy lại các thanh ghi POP CX POP BX POP AX ; cho phép ngắt trở lại STI ; trở về chương trình chính IRET Phucvu IR3 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
  14. trong khi phục vụ yêu cầu ngắt IR3 ta đã cất giá trị của các mặt nạ ngắt hiện thời rôid ùng lệnh để che các yêu cầu ngắt khá c đi và chỉ để yêu cầu ngắt IR3 được nhận biết. 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 này ta sẽ trình bày 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 chính của IBM PC/XT Địa chỉ INT N? Dành cho 0 00E3 : 3072 Phép chia cho 0 Chạy từng lệnh 1 0600 : 08ED 2 F000 : E2C3 N MI Đ iểm dừng 3 0600 : 08E6 Tràn khi làm việc với số có dấu 4 0700 : 0174 5 F000 : FF34 In màn hình (BIOS) Đ ể d ành 6.7 IRQ0 của 8259A (ngắt BIOS của 8 F000 : FEA5 đồng hồ) IRQ1 của 8259A (ngắt BIOS của 9 F000 : E987 b àn phím) IRQ2 của 8259A (đ ể dành) A IRQ3 của 8259A (để dành cho B COM 2) IRQ4 của 8259A (để dành cho C COM 1) IRQ5 của 8259A (để d ành cho đĩa D cứng) IRQ6 của 8259A (cho ổ đĩa mềm) E F000 : EF57 IRQ7 của 8259A (cho máy in F 0070 : 0147 LPT1) ... ... ... D ành cho người sử dụng 60 - 66 Trong máy IBM PC/XT các tổ chức ngắt có thể tóm lượt như ở trên bảng 7.3 . Máy IBM PC/XT có sử dụng 1 mạch PIC 8259A. Các đầu vào IRi củ a mạch này đ ược sử dụng hết để gắn cho các thiết b ị ngoại vi cụ thể như bàn 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 vào cổng 20H và 21 H) ; Kích sườn, đơn lẻ, cần 1 ICW4 + ICW1 = 13H ; Kiểu ngắt 8 + ICW2 = 08H
  15. + ICW3 không cần ; Có đ ệm, 8086, EOI trước IRET + ICW4 = 09H Các ngắt d ành cho người sử dụng với INT 60H – INT66H.Nếu sử dụng các ngắt này 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 vào BUS dữ liệu cho CP đọc khi có trả lời ch ấp nh ận yêu cầu ngắt INTA . 3.2 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 củ a hệ thống có một số thay đ ổi so với 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 với các máy XT) để m ở rộng kh ả n ăng quản lý 1 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 Việc gán cắt yêu cầu ngắt IRQ cho các ngắt INT N đư ợc th ể h iện trên abngr 7.4 . Các ngắt INT N còn lại cũng giống như máy IBM PC/XT . Bảng 7.4. Các IRQ của các máy PC/AT IRQ INT N? Dành cho Bộ đ ếm 8254 đạt TC IRQ0 INT08H IRQ1 INT09H Bàn ph ím Yêu cầu ngắt từ 8259A thợ IRQ2 INT0AH IRQ3 INT0BH COM 2 IRQ4 INT0CH COM 1 Cộng m áy in song song LPT2 IRQ5 INT0DH Điều khiển đĩa mềm IRQ6 INT0EH Cộng m áy in song song LPT1 IRQ7 INT0FH CMOS của đồng hồ th ời gian thự c IRQ8 INT70H Định hư ớng lại b ằng chương trình IRQ9 INT71H về INT0AH Dành cho ngư ời sử dụng IRQ10 INT72H Dành cho ngư ời sử dụng IRQ11 INT73H Chuột của PS/2 IRQ12 INT74H Đồng xử lý toán họ c IRQ13 INT75H Ổ đĩa cứng IRQ14 INT76H Dành cho ngư ời sử dụng IRQ015 INT77H Sau kh i khởi động CPU ghi các từ đ iều khiển vào PIC như sau: * PIC chủ (cổng 20H và 21H) ; kích sườn,chủ , cần ICW4 + ICW1 = 11H
  16. ; Kiểu ngắt 8 + ICW2 = 8 ; Chủ có thợ ở mức 2 + ICW3 = 04H ; chủ không có đệm, 80 x 86,EOI trước + ICW4 = 01H IRET. * PIC thợ (cổng A0H và A1H) ; Kích sườn,thợ , cần ICW4 + ICW1 = 11H ; Kiểu ngắt 70H + ICW2 = 70H ; Thợ có chủ ở mứ c 2 + ICW3 = 02H ; Thợ không có đệm 80 x 86, EOI trước + ICW4 = 01H IRET. Việc sử dụng kh ả n ăng ngắt trên m áy vi tính IBM PC để vào/ra dữ liệu khi có yêu cầu theo kiểu như ở ví dụ trước cũng có thể thực hiện được nhưng phải có các thay đổi trong chương trình cho phù h ợp với cấu trúc ngắt cụ thể trong m ỗi lo ại máy. Vì n ội dung các vectơ ngắt củ a các máy có thể khác nhau chú t ít do có sự khác nhau giữ a các phiên bản DOS và BIOS do đó ta phải tham khảo tài liệu cụ thể của từng m áy để thực hiện đ ược tốt việc tổ chứ c chương trình. Hơn nữa về ph ần cứng ở các m áy AT và XT có cấu trúc ngắt hơi kh ác nhau nên việc tổ chức vào/ ra dữ liệu bằng ngắt lại cũng phải được xem xét cẩn thân. Về m ặt chương trình th ì chương trình chính và chương trình con phục vụ ngắt đều phải được tải vào bộ nhớ RAM của máy d ưới sự kiểm so át của DOS n ên ta phải viết chúng dưới d ạng th ích hợp sao cho trong khi chương trình chính làm việc mà có yêu cầu ngắt thì chương trình con phục vụ ngắt có thể được gọi để hoạt động. * Ví dụ 5 : Giả thiết ta vẫn phải thực hiện công việc như ở ví dụ trước nưng phần cứng bâ y giờ là m áy IBM PC/XT. Hệ này b ình tưhờng làm 1 công việc gì đó , nh ưng khi có yêu cầu ngắt 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 và cả khi đã nhân đôi đấch được trong 1 Byte) Giả i Nh ư đ ã nói ở phần trư ớc, để vào ra dữ liệu bằng cách ngắt CPU trong máy IBM PC/XT . Mà không ph ải lo việc đưa số h iệu ngắt N vào Bus d ữ liệu trong chu k ỳ INTA ta có th ể tận dụng tín hiệu IRQ2 ở khe cắm m ở rộng và dùng các m ạch cổng dể đưa dữ liệu vào Bus dữ liệu. Trong các m áy IBM PC/XT, m ạch 8259A đã được kh ởi đầu khi máy bắt đầu làm việc, do vậy trong chương trình chính ta chỉ cần đưa vào các vectơ n gắt (b ắt đầu tại địa chỉ 0000 : (0AH x 4)) tương ứ ng với IRQ2 địa ch ỉ của chương trình con phục vụ n gắt. Trong chương trình con phục vụ ngắt ta phải đọ c các giá trị vào rồ i nh ân đôi và đư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ụ trước. Chương trình chính và chương trình con có dạng như sau: * Model small * Stack 100 * Code Main Proc ; khởi tạo ES MOV AX, 0 MOV ES, AX ; cấm ngắt đ ể đưa địa chỉ CLI MOV WORD PTR ES:002AH,SEG phucvu IRQ2
  17. MOV WORD PTR ES:0028H,Offset phucvu IRQ2 ; cho ph ép ngắt trở lại; công việc củ a chương trình STI ch ính bắt đầu ở đây ; trở về DOS MOV AH,4CH INT 21H Main Endp PhucvuIRQ2 Proc ; cất lại thanh ghi PUSH AX PUSH CX ; 100 số liệu ph ải thao tác MOV CL,100 ; đọ c vào 1 số liệu TIEP: IN, AL, 70H ; nh ân đô i rồi SHL AL,1 ; Đưa ra cổng OUT 71H, AL LOOP TIEP ; OCW2 với EOI để kết thúc MOV AL, 20 ; đưa OCW2 đ ến 8259A OUT 20H,AL ; Lấy lại các thanh ghi POP CX POP AX ; cho phép ngắt trở lại STI ; trở về chương trình chính IRET PhucvuIRQ2 Endp END Main
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
19=>1