Title Image

Blog Logo

Core 9. Interrupt Priority

🌱 Core 9. Interrupt Priority - Độ ưu tiên ngắt

    Ở bài trước chúng ta đã cùng tìm hiểu về bộ điều khiển ngắt NVIC trong vi điều khiển STM32. Vậy với khối lượng ngắt lớn như vậy (có thể lên đến 240 ngắt), thì nếu các ngắt xảy ra đồng thời, hay lồng nhau, thì NVIC sẽ xử lý ra sao? Như vậy, các ngắt sẽ cần có độ ưu tiên cao thấp khác nhau - Interrupt Priority để NVIC có thể phân biệt được ngắt nào nên được thực hiện trước.

    👉 Interrupt Priority là gì?

    Mức độ ưu tiên - Priority được coi là mức độ khẩn cấp của ngắt, tức là quy định ngắt nào cần được thực hiện trước.

    Giá trị mức độ ưu tiên – priority value là thước đo mức độ khẩn cấp của ngắt, còn gọi là mức độ ưu tiên – priority levels.  

    Với Cortex Mx, giá trị ưu tiên này càng nhỏ thì mức độ ưu tiên càng lớn. Chẳng hạn, các exception của hệ thống đa số có mức ưu tiên nhỏ hơn 0 (trong đó Reset Handler có priority value nhỏ nhất, tương đương với mức độ ưu tiên lớn nhất). 

    Nếu hai ngắt xảy ra cùng lúc thì NVIC sẽ tiếp nhận thực thi ngắt có mức độ ưu tiên cao hơn (priority value thấp hơn), và đưa ngắt còn lại vào trạng thái chờ - Pending.

Interrupt

     Ví dụ trên đây cho thấy 2 ngắt cùng xảy ra đó là ADC (Priority Value = 5) và Timer (Priority Value = 4). Vì vậy Timer Interrupt có mức độ ưu tiên cao hơn so với ADC Interrupt. Timer Interrupt sẽ được thực thi, trong khi đó ADC Interrupt sẽ được đưa vào hàng chờ Pending.

    👉 Interrupt Priority Registers

    Bộ xử lý có bao nhiêu mức độ ưu tiên ngắt khác nhau phụ thuộc vào Thanh ghi Interrupt Priority, do nhà cung cấp MCU – Các thanh ghi NVIC_IPR0 => NVIC_IPR59 (Có nói ở bài trước). 
STM32F4x có 16 mức độ ưu tiên khác nhau trong khi TI TM4C123Gx là 8.

    Mỗi thanh ghi NVIC_IPR chia làm 4 phần, mỗi phần 8 bit để kiểm soát mức độ ưu tiên cho mỗi IRQ. Chỉ một số bit được sử dụng để kiểm soát mức độ ưu tiên: Ví dụ, có 8 priority levels cần 3 bit, trong khi 16 levels ó 4 bits.

Interrupt

    Chẳng hạn, với 8 priority levels thì mỗi thanh ghi 8 bits sẽ cần 3 bits để triển khai.

    👉 Pre-empt Priority & Sub Priority

    Câu hỏi đặt ra là điều gì sẽ xảy ra nếu hai ngắt có cùng một mức độ ưu tiên xảy ra cùng một lúc? Xung đột có thể xảy ra, vì vậy, cần có một mức độ ưu tiên phụ (Sub Priority) để giải quyết vấn đề này.

  •     Pre-Empt Priority: Khi bộ xử lý đang chạy một trình xử lý ngắt và một ngắt khác xảy ra, thì các giá trị ưu tiên trước – pre-empt priority sẽ được so sánh và ngắt với mức độ pre-empt priority cao hơn (giá trị nhỏ hơn) sẽ được cho phép chạy.
  •     Sub Priority: Giá trị này chỉ được sử dụng khi hai ngắt có cùng giá trị pre-empty priority xảy ra cùng thời điểm. Trong trường hợp này, ngắt có mức ưu tiên phụ cao hơn sẽ được xử lý trước. 

Interrupt

    Có nhiều nhóm ưu tiên – priority grouping khác nhau và theo mặc định trong bộ xử lý Cortex Mx, nhóm ưu tiên = 0. Nhóm ưu tiên phụ thuộc vào việc sử dụng thanh ghi NVIC_IPRx.
Ví dụ: Nhóm ưu tiên mặc định là 0, bit [7:1] được coi là pre-empt priority, còn bit 0 là sub priority.

>>>= Follow ngay =<<<

Để theo dõi những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

                                        

Đăng nhận xét

2 Nhận xét

  1. Hi anh, có thể cho em xin tài liệu về ngắt NVIC mà anh đã học không ạ.

    Trả lờiXóa
    Trả lời
    1. Anh chỉ xem trên tài liệu ARM Cortex M Device Generic User Guide và Technical của ARM là chính thôi e ạ.

      Xóa