Есть внешний источник прерывания на 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 так отличается от всех? Где я чего не доглядел?
Сообщение отредактировал Paramedic - Feb 5 2007, 17:32
|