Mỗi ngắt được đại diện bằng 1 IRQ Number. IRQ Number được fix cố định bởi nhà sản xuất.
Khi có sự kiện ngắt xảy ra, ngoại vi sẽ kích hoạt 1 tín hiệu ngắt trên đường IRQ. NIVC sẽ đặt nó vào trạng thái Pending.
Bộ NIVC lần lượt thực hiện các pending Interrupt, tùy thuộc vào mức ưu tiên
Khi đến lượt 1 interrupt (IRQ Enable = 1), NVIC gửi tín hiệu ngắt đến CPU. Nếu ngắt tới có mức độ ưu tiên cao hơn ISR đang hoạt động, CPU tiếp nhận ngắt đó từ NVIC, lấy địa chỉ của chương trình con phục vụ ngắt - ISR tương ứng với IRQ Number từ bảng vector ngắt (Vector Table). Sau đó thực thi ISR đó.
1. Khi có 1 ngắt xảy ra, tạm dừng main, lưu dữ liệu vào stack và thực thi hàm ngắt
2. Khi có 2 ngắt xảy ra đồng thời hoặc 2 ngắt đều đang chờ, sẽ ưu tiên theo thứ tự:
- Preemption Priority: Xác định xem liệu 1 ngắt có thể ngắt cái ngắt đang thực thi không
- Sub-Priority: Các ngắt cùng Preemption Priority xếp hàng thực thi theo thứ tự gì (dùng khi 2 ngắt cùng Preemption Priority, mà số IRQn của ngắt quan trọng hơn bị cao hơn)
- Số IRQn thấp hơn hoặc nằm ở địa chỉ vector thấp hơn trong bảng vector ngắt. (Dùng khi cùng Preemption Priority và cùng Sub-priority)
Cờ ngắt của ngắt sau được lưu thành Pending
Thực thi xong ngắt có ưu tiên cao hơn , thì sẽ thực thi tiếp ngắt kế tiếp. Thực thi xong hết ngắt thì mới nhảy vào hàm main
3. Nếu đang thực thi 1 ngắt mà có ngắt ưu tiên cao hơn xuất hiện (Ngắt lồng nhau):
- Tạm dừng ngắt đang thực thi, lưu dữ liệu vào stack và thực thi ngắt mới nhảy vào.
- Thực thi ngắt mới xong, thực thi ngắt trước từ đúng điểm mà nó bị dở dang
- Thực thi xong hết ngắt thì mới nhảy vào hàm main
Lưu ý:
Viết hàm ngắt càng ngắn càng tốt để tránh ngắt sau phải chờ lâu, tránh mất dữ liệu, giúp thời gian thực
Priority Grouping: Giả sử ta có 1 thanh ghi, 4 bit để set priority. Các bit cao là của Preemption Priority, các bit thấp là của Sub-Priority. Vậy ta chia bao nhiêu bit cho Preemption Priority và bao nhiêu bit còn lại cho Sub-Priority?
| Group | Preemption Priority Bits | Sub-Priority Bits | Mô tả |
| 0 | 0 | 4 | 16 mức Sub-Priority |
| 1 | 1 | 3 | 2 mức Preemption, mỗi mức Preemption có 8 mức Sub-Priority |
| 2 | 2 | 2 | 4 mức Preemption, mỗi mức Preemption có 4 mức Sub-Priority |
| 3 | 3 | 1 | 8 mức Preemption, mỗi mức Preemption có 2 mức Sub-Priority |
| 4 | 4 | 0 | 16 mức Preemption |