Cấu hình ưu tiên ngắt vi điều khiển STM32 trên CubeMX

Vi điều khiển STM32 hỗ trợ rất nhiều ngắt khác nhau(interrupts) và chúng được quản lý bởi bộ NVIC (Nested Vector Interrupt Controller). Vậy chuyện gì xảy ra nếu có 2 yêu cầu ngắt đang chờ để được phục vụ hoặc nếu một trình phục vụ ngắt (ISR) đang được thực hiện và có 1 yêu cầu ngắt khác xuất hiện? Người lập trình hoàn toàn có thể cấu hình được các ưu tiên ngắt để xử lý các tình huống trên theo mong muốn bằng cách cấu hình NVIC trên phần mềm STM32CubeMX. 

[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]

Ở cửa sổ trên, chúng ta có thể thấy có 2 loại ưu tiên ngắt là Preemption Priority và Sub Priority với ý nghĩa như sau:
– Ngắt nào có Preemption Priority cao hơn thì sẽ được ưu tiên thực hiện trước. Nếu một ngắt Preemption Priority thấp hơn đang trong quá trình được thực thi mà có một ngắt có Preemption Priority cao hơn yêu cầu thì ngắt có Preemption Priority cao hơn sẽ chiếm dụng vi xử lý, ngắt có Preemtion Priority thấp hơn sẽ tạm ngưng thực thi. 

– Nếu một ngắt đang thực thi, một ngắt khác có cùng Preemption Priority và có Sub Priority cao hơn yêu cầu thì ngắt đến sau dù có Sub Priority cao hơn những vẫn sẽ không chiếm dụng Vi xử lý. Vi xử lý vẫn tiếp tục thực hiện ngắt có Subpriority thấp hơn. Sub Priority có ý nghĩa khi có nhiều ngắt đang ở trạng thái chờ (pending).

– Nếu các ngắt có cùng Preemtion Priority đang ở trạng thái chờ (pending) thì ngắt nào có Sub Priority cao hơn thì sẽ được thực hiện trước.
– Nếu các ngắt có cùng Preemtion Priority và Sub Priority thì ngắt nào đến trước sẽ được phục vụ trước.
Lưu ý về các giá trị cấu hình: số có giá trị càng nhỏ thì ưu tiên ngắt càng cao.

Tìm hiểu thêm về quá trình thực hiện ngắt của vi điều khiển tại đây và tổng hợp các bài hướng dẫn lập trình STM32F103 mà TAPIT đã thực hiện tại đây.

Thuong Nguyen