Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
486,95 KB
Nội dung
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 [...]... 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 Trờng đại học kỹ thuật Công Nghiệp 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 823 7-5 trong hệ vi xử lý 8088 a Tín hiệu HOLD và HLDA trong CPU 8088 b Mạch DMAC 823 7-5 của Intel Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính... = 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 (80x 86) 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... 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... 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 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 Trờng đại học kỹ thuật Công Nghiệp 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... 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 Nguyễn Tiến Duy Trung tâm Kỹ thuật máy tính Bộ môn Kỹ thuật máy... 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: 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 Trờng đại học kỹ thuật Công Nghiệp D7 D6 D5 D4 D3 D2 D1 D0 Ta có thể coi đây là chế độ thăm dò yêu cầu I X X X X W2 W1 W0 ngắt và chế độ này thờng đợc ứng dụng trong trờng hợp có Mã số... 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ó 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 Trờng đại học kỹ thuật Công Nghiệp 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... 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) 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 Trờng đại học kỹ thuật Công Nghiệp OCW2: A0 D7 D6 0 D5 D4 D3 D2 R SL EOI 0 D1 D0 0 L2 L1 L0 R 0 1 Lệnh EOI thờng 0 1 1 Lệnh EOI chỉ đích danh (*) 0 1 Đổi mức u tiên khi có EOI thờng 1 0 0 Lập... đặ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 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 Trờng đại học kỹ thuật Công Nghiệp đ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... phép đọc ISR ở lần đọc sau D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0 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 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 yêu cầu ngắt: IRR (a) Thanh ghi phục vụ ngắt: IRR Bằng vi c đa vào 8259 từ điều khiển . 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à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. đợ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à 80x 86 family) có thể