Fungsi Utama NVIC
Mengatur Prioritas Interrupt:
- NVIC mendukung pengaturan prioritas interrupt untuk menentukan urutan penanganan jika beberapa interrupt terjadi secara bersamaan.
Mengaktifkan atau Menonaktifkan Interrupt:
- Anda dapat memilih interrupt mana yang diaktifkan atau dinonaktifkan.
Mendukung Nested Interrupt:
- NVIC memungkinkan interrupt dengan prioritas lebih tinggi untuk memutuskan interrupt dengan prioritas lebih rendah yang sedang berjalan.
Mengelola Sistem Exception:
- NVIC juga menangani exception dari sistem seperti Reset, NMI (Non-Maskable Interrupt), dan Hard Fault.
Komponen Utama NVIC
Enable Register:
- Menentukan apakah interrupt tertentu diaktifkan atau tidak.
Priority Register:
- Menentukan tingkat prioritas untuk setiap interrupt.
Pending Register:
- Menunjukkan apakah interrupt dalam keadaan pending (menunggu untuk dieksekusi).
Active Register:
- Menunjukkan apakah interrupt sedang aktif.
Konfigurasi NVIC di STM32CubeIDE
STM32CubeIDE memanfaatkan STM32CubeMX untuk konfigurasi NVIC secara mudah. Berikut langkah-langkahnya:
1. Buka Tab Configuration
- Di STM32CubeIDE, buka tab Configuration untuk periferal yang membutuhkan interrupt (contoh: UART, Timer, EXTI).
- Klik periferal yang diinginkan (misalnya USART1, TIM2, atau EXTI).
2. Konfigurasi Interrupt
- Pada bagian NVIC Settings, Anda dapat:
- Mengaktifkan interrupt.
- Mengatur prioritas interrupt (0 adalah prioritas tertinggi, dan semakin besar angka prioritas semakin rendah).
3. Generate Code
- Klik Project > Generate Code untuk menghasilkan kode C dengan konfigurasi NVIC yang Anda tentukan.
Pengaturan Prioritas NVIC
STM32 menggunakan pengaturan prioritas interrupt dengan grouping (grup prioritas). Grup ini membagi prioritas menjadi dua bagian:
- Pre-emption Priority:
- Menentukan interrupt mana yang dapat memutus interrupt lainnya.
- Subpriority:
- Menentukan urutan jika dua interrupt dengan prioritas sama terjadi.
Contoh Prioritas:
Pre-emption Priority |
Subpriority |
Hasil |
0 |
0 |
Paling prioritas |
1 |
0 |
Kedua paling prioritas |
0 |
1 |
Sama level dengan
pre-emption, tetapi lebih rendah subprioritasnya. |
Pengaturan Prioritas di STM32CubeMX:
- Pilih System Core > NVIC di STM32CubeMX.
- Tentukan priority grouping.
- Misalnya
4 bits for pre-emption priority, 0 bits for subpriority
.
- Misalnya
Mengaktifkan NVIC dalam Kode
Kode NVIC biasanya dihasilkan secara otomatis dari STM32CubeMX. Berikut adalah langkah manual untuk menggunakan NVIC:
1. Mengaktifkan Interrupt
Gunakan fungsi HAL_NVIC_EnableIRQ()
untuk mengaktifkan interrupt.
2. Mengatur Prioritas
Gunakan fungsi HAL_NVIC_SetPriority()
untuk mengatur prioritas interrupt.
3. Callback Interrupt
Gunakan callback yang sesuai untuk menangani interrupt. Contoh pada Timer:
Contoh Aplikasi NVIC
Menggunakan EXTI (External Interrupt):
Konfigurasi di STM32CubeMX:
- Aktifkan EXTI Line pada pin GPIO tertentu (misalnya PA0 untuk tombol).
- Pilih Interrupt Mode di NVIC Settings.
Kode Generated: STM32CubeIDE akan menghasilkan kode seperti ini:
Kesimpulan
- NVIC adalah pengontrol interrupt yang mengelola prioritas dan pengaktifan interrupt di STM32.
- Anda dapat mengonfigurasinya melalui STM32CubeMX untuk mempermudah.
- Penanganan interrupt dilakukan melalui fungsi seperti
HAL_NVIC_SetPriority
,HAL_NVIC_EnableIRQ
, dan callback.
Tidak ada komentar:
Posting Komentar