NVIC (Nested Vectored Interrupt Controller) je hardwarový obvod, který je součástí jádra procesoru (např. ARM Cortex-M). Řídí celý systém přerušení.
Funkce NVIC
- Povolení/zakázání jednotlivých interruptů — pokud interrupt není v NVIC povolen, požadavek se zahodí
- Priority — každý interrupt má prioritu. Při současném příchodu více interruptů se obslouží ten s vyšší prioritou první
- Vnořování (nesting) — pokud během běžícího handleru přijde interrupt s vyšší prioritou, NVIC přeruší i ten handler
- Vector table lookup — v paměti je tabulka adres (vector table), kde ke každému interruptu je přiřazená adresa handler funkce. NVIC vyhledá správný handler a přesměruje na něj procesor.
Řetězec zpracování interruptu
Například pro tlačítko připojené přes GPIO a EXTI:
- GPIO pin — detekuje změnu signálu
- EXTI — detekuje hranu (rising/falling) a generuje interrupt požadavek
- NVIC — zkontroluje zda je interrupt povolen, vyhodnotí prioritu
- Procesor — skočí do příslušného handleru z vector table