The longer you stay in ivthandleinterrupt , the more you delay other interrupts. Keep it short — defer heavy processing to a task or background loop.
void ivthandleinterrupt(void) uint32_t active_irq = NVIC->IABR[0]; // simplified // Find lowest set bit -> IRQ number int irq_num = __builtin_ctz(active_irq); if (isr_table[irq_num]) isr_table[irq_num](); ivthandleinterrupt