Ngắt

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 (đã được fix cố định bởi nhà sản xuất) 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