Jika sebelumnya kita membahas mengenai pengertian dan jenis jenis exception maka sekarang kita akan membahas pengaturan exception/interrupt.
Untuk menyederhanakan, istilah exception sering disebut juga interrupt.
Ya, Interrupt yang terjadi memang harus dikontrol, bayangkan jika semua Interrupt terjadi secara bersamaan, mana dulu yang harus diproses?
Perkenalkan, NVIC - Interrupt Controller
NVIC (Nested Vectored Interrupt Controller) adalah komponen dalam prosesor ARM Cortex-M yang bertanggung jawab untuk mengatur interrupt, seperti, konfigurasi interrupt, interrupt priority, dan interrupt masking
Jika masih bingung, mari kita pahami arti dari namanya
Nested
Nested artinya bersarang, atau "ngantri". Artinya semua interrupt yang masuk harus mengantri untuk di proses berdasarkan prioritasnya. Ingat bahwa semua interrupt mempunyai level priority-nya masing-masing yang menentukan urgensi.
Dengan NVIC kita dapat mengubah level prioritasnya sesuai kebutuhan kita melalui register NVIC_IPR0 (Interrupt Priority Register).
Vectored
Saat Interrupt terjadi, processor akan mengeksekusi interrupt tersebut melalui interrupt handler-nya. Alamat Interrupt handler ini tertulis dalam vector table di memori. Dari sanalah processor memulai eksekusi interrupt handler ini.
Contoh, NMI Exception terjadi, processor akan menuju ke alamat vector addressnya NMI, 0x00000008, di dalam alamat tersebut tersimpan value yang tidak lain adalah "NMI Handler", dari sanalah processor mulai mengeksekusi NMI Interrupt.
Fitur NVIC
Mendukung 240 jenis Interrupt, tapi ini tidak selalu di support oleh mikrokontroller vendor yang terkadang hanya mengimplementasikan kurang dari 240 interrupt (product-dependent)
Prioritas dari setiap interrupt dapat di atur dari level 0-15, semakin rendah level maka prioritas semakin tinggi
Nested Interrupt, artinya NVIC akan memprioritaskan interrupt dengan prioritas yang tinggi dan mem-pending (preempt) interrupt lainya yang masuk
Interrupt masking, dengan NVIC kita dapat men-disable interrupt (masking) yang tidak diperlukan agar sistem berjalan dengan lancar terlebih di saat-saat kritis seperti aplikasi real-time, dan critical task lainya
NVIC Register
Untuk mengkonfigurasikan interrupt, NVIC menyediakan beberapa register yang fungsinya
Mengaktifkan dan menonaktifkan interrupt (ISER & ICER)
Mengaktifkan dan Men-disable pending bit interrupt (ISPR & ICPR)
Melihat interrupt yang sedang aktif (IABR)
Mengatur level prioritas interrupt (IPR)
Selanjutnya apa?
Selanjutnya kita akan membahas vector table
Next : Vector Table