Есть внешний источник прерывания на PB28. Пытаюсь написать обработку FIQ:
void AT91F_FIQ_HANDLER(void)
{
asm("nop");
}
main()
{
AT91F_PIOB_CfgPMC();
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOB, (1 << 28), 0);
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_FIQ,
AT91C_AIC_PRIOR_HIGHEST,
AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE,
(VoidFpnt_t)AT91F_FIQ_HANDLER);
// Enable FIQ interrupt
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_FIQ);
...
}
Далее при возникновении внешнего события программа сбивается на какой-то далёкий адрес, при этом в обработчик даже не заходит.
Другие прерывания (системный таймер и TWI) работают нормально.
Даже если пытаться тоже самое сделать через IRQ0 - тоже всё работает.
Чем FIQ так отличается от всех?
Где я чего не доглядел?