top of page

Interrupt Priority

Sebelumnya kita sudah membahas mengenai vector table. Vector table menyimpan informasi interrupt berupa priority, alamat interrupt, dan sebagainya.


Pada tutorial kali ini kita akan mendalami salah satu informasi mengenai interrupt, yaitu priority.


Jadi, Apa itu Priority?

Secara definisi, Priority artinya urgensi. Ini mengindikasikan bahwa interrupt tersusun secara berurutan berdasarkan level prioritas mereka.

Interrupt Priority
Jika kedua interrupt datang bersamaan, maka interrupt dengan nilai prioritas paling kecil akan di proses terlebih dahulu

Priority Value

Seperti contoh diatas, priority value menentukan interrupt mana yang harus didahulukan.


Beberapa exception/interrupt memiliki nilai priority yang sudah fixed, seperti Reset, NMI, dan HardFault, tapi sebagian besar interrupt memiliki nilai priority yang bisa di ubah (Configurable).

Jenis-jenis-exception
Jenis jenis exception/Interrupt

Secara default, jika prioritas dari exception tidak ditentukan di awal (melalui kode) maka semua exception yang prioritasnya bersifat configurable akan memiliki nomer prioritas 0.


Ketika mengkonfigurasi priority pada interrupt, maka nomer priority tidak boleh kurang dari 0, sehingga hanya dimungkinkan nomer prioritas dalam rentang 0 - 255


Berapa jumlah level priority yang bisa digunakan?

Tergantung dari produsen mikrokontroller, Processor ARM memiliki sejumlah 2^8 level priority yang bisa digunakan. Dalam mikrokontroller STM32 terdapat 2^4 level priority yang bisa digunakan.

Interrupt Priority
STM32 Mengimplementasikan 16 Level Priority

Saat beberapa interrupt terjadi secara bersamaan

Dalam beberapa kasus, interrupt bisa terjadi secara bersamaan, bagaimana cara menentukan mana dulu yang akan di proses?


1. Pre-empt/Priority Value

Seperti yang sudah dijelaskan di atas, pertama tama NVIC akan men-check priority value dari masing-masing interrupt yang masuk, Interupt yang memiliki priority value terkecil akan segera diproses.


2. Sub Priority

Jika masing-masing interrupt memiliki priority value yang sama maka sub priority value akan menjadi penentu kedua. Prinsipnya sama, Interrupt dengan nilai sub priority terkecil akan diproses terlebih dahulu.


3. IRQ Number

IRQ Number menjadi penentu terakhir apabila kedua masing-masing interrupt memiliki nilai priority dan sub-priority yang sama. Semakin kecil IRQ number semakin tinggi prioritasnya.


Priority Grouping

Priority grouping tersusun dari kombinasi pre-empt priority dan sub-priority yang terdapat pada interrupt priority register (IPR).


Jadi pada IPR, dibagi menjadi 2 bagian, Pre-empt dan sub-priority yang pembagian bit-nya di atur di tabel berikut.

Priority Grouping
Secara default pada ARM Cortex M processor nilai dari priority group adalah 0

Untuk mengatur priority grouping dilakukan melalui Register AIRCR (Application Interrupt and Reset Control Register).

AIRCR (Application Interrupt and Reset Control Register)
AIRCR (Application Interrupt and Reset Control Register)


Contoh : Priority Grouping = 0 (0b000)

Lihat table Priority Grouping Diatas


Pada Register AIRCR kita setting 0 pada bit field PRIOGROUP maka kita memiliki

  • Lebar bit pre-empt/priority = [7:1] - dari bit ke 1 sampai bit ke 7.

  • 128 level prioritas yang bisa kita pilih.

  • Lebar bit Sub-priority [0] = Pada bit ke 0 kita bisa pilih level sub priority, 1 atau 0 (2 nilai sub priority.

Priority Grouping
Priority Grouping

Oke, kita sudah atur priority grouping dan kita akan dapatkan hasil seperti gambar diatas.


Meskipun lebar bit pre-empt priority mencakup bit 1-7 tapi yang hanya bisa dipakai hanya bit ke 4-7. Sekali lagi tergantung dari produsen mikrokontroller bagaimana mereka mengimplementasikan berapa bit yang bisa digunakan.


bottom of page