Ngắt

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

 

Nhanvat

Ủng hộ chúng tôi

Nếu bạn thấy nội dung hữu ích, hãy ủng hộ chúng tôi một ly cà phê nhé

Buy Me A Coffee buymeacoffee.com/invencamp