Jika sebelumnya kita sudah membahas apa itu exception, sekarang kita akan membahas mengenai jenis jenis exception.
Terdapat 9 jenis exception pada Cortex-M Processor yang masing-masing memiliki priority yang fixed dan ada yang bisa di ubah.
Exception no 16 ke atas merupakan interrupt yang Exception number-nya bergantung pada vendor mikrokontroller.
Mari kita pahami maksud dari table di atas.
Exception number, untuk mengidentifikasi exception jenis apa yang sedang terjadi saat itu, untuk mengetahuinya bisa di lihat di IPSR (Interrupt Program Status Register).
IRQ Number, Mengidentifikasi jenis interrupt yang terjadi.
Priority, untuk menentukan mana dulu exception yang akan di proses.
Vector Address, alamat address dari setiap system exception bersifat fixed, sedangkan untuk interrupt tergantung dari vendor (produsen mikrokontroller).
Jenis Jenis Exception
1. Reset
Reset terjadi ketika processor dihidupkan pertama kali atau ketika tombol reset di tekan.
Reset memiliki level prioritas tertinggi dari 15 system exception lainya. Artinya, reset dapat menginterupsi kapanpun bahkan ketika processor sedang mengeksekusi exception lainya.
2. NMI
NMI (Non-Maskable Interrupt) adalah jenis exception yang digunakan untuk menangani interupsi penting yang tidak bisa ditangguhkan. Dapat dipicu oleh peripheral ataupun software. NMI memiliki nilai priority tertinggi setelah reset. Artinya NMI dapat kamu gunakan untuk membuat exception pada saat saat kritis, seperti habis battery dan sebagainya.
3. Hardfault
Hardfault exception terjadi apabila sistem gagal memproses suatu exception, atau apabila suatu exception tidak di handle secara proper oleh exception handler-nya.
Misalnya, programmer lupa mengimplementasikan "exception handler" untuk exception tersebut. Maka Hardfault akan terjadi dan processor otomatis akan mengeksekusi "Hardfault Handler" sebagai gantinya.
4. MemManage
Exception yang terjadi terkait dengan memory management, seperti ketika mengakses ke alamat memory tertentu yang restricted (terproteksi), atau pada saat eksekusi program dari area memori eXecute Never.
5. BusFault
Exception yang terjadi karena masalah pada memory yang menyebabkan proses fetching instruksi atau data mengalami kendala.
Karena proses fetching antara memory dan processor tersebut terhubung dengan bus, maka error akan terdeteksi pada sistem bus, sehingga exception BusFault akan ter-trigger.
6. Usage Fault
Exception yang terjadi berkaitan dengan eksekusi instruksi. Error pada Instruksi tersebut diantaranya
an undefined instruction
an illegal unaligned access
invalid state on instruction execution
an error on exception return
division by zero
an unaligned address on word and halfword memory access
7. Debug Monitor
Exception yang berkaitan dengan masalah pada saat melalkukan debugging seperti, brekpoints, watchpoints, dan sebagainya.
8. SVC (Supervisor Call)
SVC biasanya digunakan dalam sistem yang menerapkan sistem operasi (OS) yang memungkinkan user melakukan interrupt dengan tujuan meminta akses kepada OS berdasarkan SVC number yang di tulis.
9. PendSV
PendSV digunakan sebagai context-switching saat tidak ada exception lainya yang aktif. Untuk menggunakan PendSV kita harus mengaktifkan status pending pada register Interrupt Control and State Register.
10. SYSTICK
System Tick Timer Exception terjadi apabila timer mencapai 0. Exception ini dihasilkan oleh timer yang ada pada processor.
Selanjutnya Apa?
Oke sekian pembahasan mengenai jenis jenis exception, untuk Informasi lebih lengkapnya, kamu bisa baca dokumen "generic user guide cortex m4".
Selanjutnya kita akan membahas Exception Handling
Next : Exception Handling