Цитата(Nikitoc @ Jun 26 2010, 11:01)

Ну я так посмотрел - в регистры IVR и FVR заносятся те же значения, что с модификаторами _irq, что без них. Т.е. адреса перехода не меняются. И работает все так же.
Нет, не так же. На входе в прерывание это действительно не скажется, зато на выходе - еще как.
Цитата(Nikitoc @ Jun 26 2010, 11:01)

Почему то происходит именно быстрое прерывание, но не всегда, примерно в 90% случаев. А если не происходит быстрое то и обычное тоже не происходит.
Посмотрел код.
В стартапе IRQ и FIQ уже были включены:
Код
; Enter User Mode and set its Stack Pointer
MSR CPSR_c, #Mode_USR
А вот и разгадка возникновения FIQ:
Код
pAIC->AIC_IECR = AT91C_ID_SYS;
Должно быть 1 << AT91C_ID_SYS.
Ну и до кучи:
Код
AT91C_BASE_PIOA -> PIO_CODR = AT91C_BASE_PIOA -> PIO_CODR | 0x80000000;
CODR - это регистр только для записи, поэтому правильно так:
Код
AT91C_BASE_PIO->PIO_CODR = 0x80000000;