D1=1? Đọc cổng

Một phần của tài liệu §¹i häc Th¸i Nguyªn Tr−êng §¹i häc Kü thuËt C«ng NghiÖp Bé m«n: Kü thuËt m¸y (Trang 88 - 91)

7 vi mạch nhớ SRAM 8Kx8 còn lại BE000-BFFFF

D1=1? Đọc cổng

Test al, 1 ;D0 = 1?

Jz Lặp ;không, đọc lại cổng 00 In al, 1 ;phải, đọc cổng 01 Call Hien_thi ;hiển thị kết quả

Loop Lặp ;ch−a hết dữ liệu, quay lại

Ra: –

Trong tr−ờng hợp thiết bị ngoại vi vào/ra hoạt động theo cách khác: mỗi khi cờ báo trạng thái sẵn sàng, cho phép CPU đọc/ghi nhiều byte dữ liệu cùng lúc thì ta có nhánh đi theo đ−ờng nét đứt trên l−u đồ. Khi này ta cần thiết sửa đổi cả tổ chức phần cứng và ch−ơng trình để hệ thống hoạt động chính xác.

Hình vé: L−u đồ điều khiển vào/ra dữ liệu

D0=1? Đọc cổng Đọc cổng 00 Begin Hết dữ liệu? End Đọc cổng 01 T F T F

(a) L−u đồ đọc dữ liệu từ cổng 01

D1=1? Đọc cổng Đọc cổng 00 Begin Hết dữ liệu? End Ghi cổng 01 T F T F

Trở về ví dụ 4 trong ch−ơng tr−ớc ta thấy: tổ chức phần cứng và ch−ơng trình điều khiển vào/ra là theo ph−ơng pháp này (polling – thăm dò trạng thái sẵn sàng của thiết bị ngoại vi). ở đó ta sử dụng vi mạch cổng chuyên dụng PPI 8255 làm việc trong chế độ 1 (mode 1) và bản thân vi mạch này có khả năng tạo ra các tín hiệu móc nối đ−ợc cả với CPU và thiết bị ngoại vi. Việc đọc (thăm dò) đơn giản chỉ là đọc bit PC3 của cổng PC (theo ví dụ đó). Tín hiệu của bit này chính là tín hiệu INTR. Nếu ta không kiểm tra bit này bằng cách đọc cổng PC mà nối thẳng nó tới chân tiếp nhận yêu cầu ngắt của CPU là chân INTR thì ta có một ph−ơng pháp phối ghép khác để vào/ra dữ liệu – đó là điều khiển vào/ra dữ liệu bằng cách ngắt CPU. Ph−ơng pháp này sẽ đ−ợc trình bày chi tiết trong ch−ơng sau.

Nếu kiểm tra PC3, PC0 (là tín hiệu báo sẵn sàng t−ơng ứng cho các cổng PA và PB), bằng lệnh đọc cổng PC trong ch−ơng trình thì ta có ph−ơng pháp vào/ra dữ liệu là thăm dò trạng thái sẵn sàng của thiết bị ngoại vi.

Sơ đồ ghép nối dùng PPI 8255 – Mode 1

PA PC4 PC4 PC5 PPI 8255 PC1 PC2 PC3, PC0 PB RD WR A0 A1 Reset CS Input device D7-D0 CPU 8088 INTR A19-A2 Decoder IRQi STB ACK D7-D0 D7-D0 STB ACK Output device

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.

Nh−ng 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

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 (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu §¹i häc Th¸i Nguyªn Tr−êng §¹i häc Kü thuËt C«ng NghiÖp Bé m«n: Kü thuËt m¸y (Trang 88 - 91)