420
1. Vào-ra bằng chương trình
Nguyên tắc chung:
Trong chương trình người lập trình chủ động viết các lệnh vào-ra.
Khi thực hiện các lệnh vào-ra đó, CPU trực tiếp điều khiển việc trao đổi dữ liệu với cổng vào-ra.
Lưu đồ thực hiện
Đọc trạng thái của module vào-ra
Module vào-ra sẵn sàng?
Trao đổi dữ liệu Đúng
Sai
422
Hoạt động
CPU yêu cầu thao tác vào-ra.
Module vào-ra thực hiện thao tác.
Module vào-ra thiết lập các bit trạng thái.
CPU kiểm tra các bit trạng thái:
Nếu chƣa sẵn sàng thì quay lại tiếp tục kiểm tra.
Nếu đã sẵn sàng thì chuyển sang trao đổi dữ liệu với module vào-ra.
Đặc điểm
Vào-ra do ý muốn của người lập trình
CPU trực tiếp điều khiển vào-ra
CPU phải đợi module vào-ra sẵn sàng → tiêu tốn thời gian của CPU
424
2. Vào-ra điều khiển bằng ngắt
Nguyên tắc chung:
CPU không phải đợi trạng thái sẵn sàng của module vào-ra.
CPU đang thực hiện một chương trình nào đó, nếu
module vào-ra sẵn sàng thì nó phát tín hiệu yêu cầu ngắt gửi đến CPU.
Nếu yêu cầu ngắt đƣợc chấp nhận thì CPU thực hiện chương trình con vào-ra tương ứng để trao đổi dữ liệu.
Kết thúc chương trình con đó, CPU quay trở lại tiếp tục thực hiện chương trình đang bị ngắt.
Hoạt động
Hoạt động vào dữ liệu – nhìn từ phía module vào- ra:
Module vào-ra nhận tín hiệu điều khiển đọc từ CPU.
Module vào-ra nhận dữ liệu từ thiết bị ngoại vi, trong khi đó CPU làm việc khác.
Khi đã có dữ liệu, module vào-ra phát tín hiệu ngắt CPU.
CPU yêu cầu dữ liệu.
Module vào-ra chuyển dữ liệu đến CPU.
426
Hoạt động (tiếp)
Hoạt động vào dữ liệu – nhìn từ phía CPU:
CPU phát tín hiệu điều khiển đọc.
CPU làm việc khác.
Cuối mỗi chu trình lệnh, CPU kiểm tra tín hiệu ngắt.
Nếu bị ngắt, CPU:
Cất ngữ cảnh hiện tại của chương trình.
Thực hiện chương trình con phục vụ ngắt để vào dữ liệu.
Sau khi hoàn thành chương trình con đó, CPU khôi phục ngữ cảnh và trở về tiếp tục thực hiện chương trình đang tạm dừng.
Các vấn đề nảy sinh khi thiết kế
Làm thế nào để xác định đƣợc module vào-ra nào phát tín hiệu yêu cầu ngắt.
Khi có nhiều yêu cầu ngắt cùng gửi đến, CPU sẽ xử lý nhƣ thế nào.
428
Các phương pháp nối ghép ngắt
Sử dụng nhiều đường yêu cầu ngắt
Kiểm tra vòng bằng phần mềm (Software Poll)
Kiểm tra vòng bằng phần cứng (Daisy Chain of Hardware Poll)
Sử dụng bộ điều khiển ngắt (PIC)
Sử dụng nhiều đường yêu cầu ngắt
Mỗi module vào-ra được nối với 1 đường yêu cầu ngắt
CPU phải có nhiều đường tín hiệu yêu cầu ngắt
Hạn chế số lƣợng module vào-ra
Module vào-ra Thanh
ghi yêu cầu ngắt
Module vào-ra
Module vào-ra
Module vào-ra CPU
INTR 0 INTR 1 INTR 2 INTR 3
430
Kiểm tra vòng bằng phần mềm
CPU thực hiện phần mềm hỏi lần lƣợt từng module vào-ra
Tốc độ chậm
Thứ tự các module vào-ra đƣợc hỏi vòng chính là thứ tự ƣu tiên
Module vào-ra Cờ
yêu cầu ngắt
Module vào-ra
Module vào-ra
Module vào-ra CPU
INTR
Kiểm tra vòng bằng phần cứng
Module vào-ra Cờ
yêu cầu ngắt
Module vào-ra
Module vào-ra
Module vào-ra CPU
INTR
INTA
Bus dữ liệu
432
Kiểm tra vòng bằng phần cứng (tiếp)
CPU phát tín hiệu chấp nhận ngắt (INTA) đến module vào-ra đầu tiên.
Nếu module vào-ra đó không gây ra ngắt thì nó gửi tín hiệu đến module kế tiếp cho đến khi xác định
đƣợc module gây ngắt.
Module vào-ra gây ngắt sẽ đặt vector ngắt lên bus dữ liệu.
CPU sử dụng vector ngắt để xác định nơi chứa chương trình con phục vụ ngắt.
Thứ tự các module vào-ra kết nối trong chuỗi xác định thứ tự ƣu tiên.
Bộ điều khiển ngắt lập trình đƣợc
PIC: Programmable Interrupt Controller.
PIC có nhiều đường yêu cầu ngắt có quy định mức ưu tiên.
PIC chọn một yêu cầu ngắt không bị cấm có mức ƣu tiên
PIC
Module vào-ra
Module vào-ra
Module vào-ra
Module vào-ra INTR 0
INTR 1 INTR 2 INTR 3
CPU
INTA INTR Bus dữ liệu
434
Tổ chức ngắt của 80x86
IP của INT 0 CS của INT 0
IP của INT 1 CS của INT 1
IP của INT 0 CS của INT 0
IP của INT 1 CS của INT 1
IP của INT 0 CS của INT 0
IP của INT 1 CS của INT 1
IP của INT 0 CS của INT 0
IP của INT 1 CS của INT 1
Vector 0 : Chia cho 0
Vector 1 : Chạy từng lệnh
Vector 2 : Ngắt không che đƣợc (NMI) Vector 3 : Điểm dừng
Vector 4 : Tràn số học
Vector 5
Vector 31
Vector 32
Vector 254
Vector 255
Được định nghĩa trước hoặc dành riêng
Dành cho người lập trình 00000
00002 00004 00006 00008 0000A 0000C 0000E 00010 00012 00014 00016
003F8 003FA 003FC 003FE
Địa chỉ Bộ nhớ
. . .
Tổ chức kiểu vector ngắt.
Mỗi ngắt đƣợc đặc trƣng bằng số hiệu ngắt N (00 ÷ FF).
Bảng vector ngắt:
256 x 4 = 1024 byte 00000 ÷ 003FF
Gọi CTC phục vụ ngắt bằng lệnh: INT N
Đặc điểm của vào-ra bằng ngắt
Có sự kết hợp giữa phần cứng và phần mềm:
Phần cứng: gây ngắt CPU.
Phần mềm: trao đổi dữ liệu.
CPU trực tiếp điều khiển vào-ra.
CPU không phải đợi module vào-ra → hiệu suất sử dụng CPU tốt hơn.
436