Interrupt là một tín hiệu được gửi từ phần cứng hoặc phần mềm tới bộ xử lý trung tâm (CPU), nhằm báo hiệu về một sự kiện cần được xử lý ngay lập tức. Các interrupt giúp CPU tạm dừng công việc hiện tại, chuyển sang xử lý sự kiện (event), sau đó quay trở lại tiếp tục nhiệm vụ đang làm trước đó.
Interrupt mang lại khả năng xử lý sự kiện một cách linh hoạt và đồng bộ trong hệ thống, đặc biệt quan trọng ở các hệ thống nhúng (embedded systems).
Các khái niệm liên quan đến Interrupt
- Interrupt Request (IRQ)
Đây chính là tín hiệu interrupt được sinh ra từ phần cứng hoặc phần mềm, yêu cầu CPU xử lý. - Interrupt Service Routine (ISR)
Khi CPU xử lý interrupt thì nó sẽ thực thi chương trình, hạm hoặc khối lệnh tương ứng. - Interrupt Vector
Là địa chỉ bắt đầu của chương trình phục vụ ngắt (ISR) tương ứng với từng interrupt. Mỗi loại interrupt được gán một interrupt vector cụ thể, và khi interrupt xảy ra, CPU sẽ tra cứu địa chỉ này trong bảng vector ngắt (Interrupt Vector Table) để xác định nơi bắt đầu thực thi chương trình ngắt. - Interrupt Controller
Là một IP đóng vai trò quản lý hầu hết các interrupt trong hệ thống. Nó đứng giữa các device tạo ra interrupt và CPU (như hình). Controller quản lý thứ tự được xử lý, độ ưu tiên, cho phép hoặc không cho phép interrupt xảy ra v.v. - Maskable Interrupt và Non-Maskable Interrupt (NMI)
Maskable Interrupt: Loại interrupt có thể bị vô hiệu hóa (mask).
Non-Maskable Interrupt: Interrupt không thể vô hiệu hóa, được dùng cho các event mang tính cấp thiết.
Quá trình xử lý Interrupt
- Interrupt Detection
CPU phát hiện có tín hiệu interrupt thông qua interrupt controller. - Interrupt Acknowledge
CPU gửi tín hiệu xác nhận (acknowledge) đến interrupt controller. - Context Saving
CPU lưu trữ thông tin ngữ cảnh (program counter, thanh ghi, etc.) của nhiệm vụ đang thực thi. - Execute ISR
CPU chuyển đến ISR để xử lý interrupt. - Restore Context
Sau khi ISR hoàn thành, CPU phục hồi ngữ cảnh và tiếp tục nhiệm vụ trước đó.
Phân loại Interrupt
- Hardware Interrupt
Sinh ra bởi các thiết bị phần cứng, ngoại vi, hoặc các cổng I/O. VD: Timer, ADC, GPIO, UART sinh tín hiệu khi có sự kiện như hết thời gian, thay đổi trạng thái, hoặc nhận dữ liệu. - Software Interrupt
Sinh ra bởi phần mềm hoặc firmware. Trong quá trình hoạt động, phần mềm có thể tác động lên một bit trong thanh ghi đã định sẵn để sinh interrupt.

Ứng dụng thực tế của Interrupt
- Các hệ thống thời gian thực (RTOS): Interrupt giúp đảm bảo xử lý các sự kiện ngay khi chúng diễn ra.
- Truyền nhận dữ liệu: Nhận dữ liệu từ UART, SPI, hoặc I2C nhanh chóng.
- Xử lý ngoại vi: Kích hoạt bởi sự thay đổi trạng thái từ các cổng GPIO.
- Quản lý tiết kiệm năng lượng: CPU đi vào chế độ sleep và chỉ bật khi interrupt xảy ra.