Sebelumnya kita membahas NVIC, NVIC bertanggung jawab untuk mengelola interupsi.
Saat interupsi terjadi, NVIC akan mengatur interupsi yang masuk dan meneruskan interupsi tersebut ke processor, kemudian processor akan pergi ke alamat dari Interrupt tersebut untuk mengeksekusi Interrupt Handler dari interrupt tersebut.
Nah lho, processor tahu alamat interruptnya dari mana? Ini dia, Vector table.
Bagi yang suka bahasa inggris :)
When the Cortex-M processor accepts an exception request, the processor needs to determine the starting address of the exception handler (or ISR if the exception is an interrupt). - Definitive guide to cortex M3/4
Jadi, Apa itu Vector Table?
Vector table adalah tabel yang berisikan informasi tentang prioritas, posisi, dan alamat dari masing-masing exception dan interrupt.
Dalam mikrokontroller yang berbasis ARM, Posisi nomer 1 sampai 15 dalam vector table digunakan untuk system exception dan sisanya tergantung dari produsen mikrokontroller.
Komponen Vector Table
Kita menggunakan contoh vector table dari ST Microelectronics, karena bisa saja berbeda disetiap vendor
Position (IRQ Number), digunakan untuk menentukan prioritas apabila beberapa interrupt yang masuk memiliki level priority dan sub priority yang sama.
Priority, Menentukan urgensi dari interrupt yang masuk, ada yang bisa diubah (configurable) dan tidak.
Type of Priority, Mengindikasikan apakah priority level bisa diubah atau tidak.
Acronym, Singkatan nama dari interrupt, misal NMI (Non-Maskable Interrupt) dsb.
Description, Penyebab interrupt.
Address, alamat dari ISR masing masing interrupt.
Contoh Pendefinisian Vector table
Pada akhirnya, semuanya harus diterjemahkan dalam bentuk kode, dan inilah penampakan vector table dalam bentuk kode.
Biasanya vector table ditulis di dalam file startup. File startup memuat konfigurasi sistem dan instruksi-instruksi penting lainnya seperti pengaturan memori, pengaturan register, termasuk deklarasi dari vector table.
Implementasi vector table sangat bergantung dari spesifikasi mikrokontroller, karena tiap mikrokontroller memiliki implementasi interrupt yang berbeda-beda.
Sebagai contoh, kode diatas adalah implementasi vector table dari stm32f411 yang mana implemetasi interruptnya mengacu sama persis dengan vector table yang ada di reference manual, termasuk urutanya.
Tak kalah penting, di dalam kode vector table juga terdapat inisialisasi MSP, artinya setelah reset, Processor akan mengisi stack pointer (MSP) dengan value yang ada pada alamat 0, biasanya alamat paling atas dari Stack Memori (end of stack).
Relocatable Vector Table
Secara default, vector table berada di posisi pertama (0) di alamat memori, tapi dalam beberapa kasus, penempatan vector table bisa saja berubah, hal ini dimungkinkan dengan adanya fitur Vector Table Relocation.
VTOR (Vector Table Offset Register) merupakan register yang berisi alamat offset dimana vector table ini mau ditempatkan. Dengan kata lain, kita dapat menaruh vector table di alamat memory mana saja, baik di SRAM maupun Flash Memori.
Selanjutnya Apa?
Setelah tahu kalau informasi mengenai interrupt disimpan dalam vector table, Selanjutnya kita akan belajar bagaimana interrupt-interrupt itu di proses (interupt mana yang harus didahulukan) di tutorial interrupt priority
Next : Interrupt Priority