Цитата(Waso @ Aug 10 2010, 15:46)

Да. Точно. За основу то взял пример стандартный... Когда не знаешь, да еще и забудешь.. таких делов можно наворотить. =P
И все-таки после брейкпоинта прерывания иногда умирают. Хотя флаги в AIC_IPR и AIC_IMR стоят. CPSR_I=0. Ну ладно, это не критично - отлажусь на осциллографе и консоли.
Еще раз стандартный startup посмотреть надо, там была ошибка, не восстанавливались флаги после выхода из прерывания.
IRQ_Handler_Entry:
;- Manage Exception Entry
;- Adjust and save LR_irq in IRQ stack
sub lr, lr, #4
stmfd sp!, {lr}
;- Save and r0 in IRQ stack
stmfd sp!, {r0}
mrs r0, spsr
stmdb sp!,{r0} ; Save the context of the current task. !!!!!!
;- Write in the IVR to support Protect Mode
;- No effect in Normal Mode
;- De-assert the NIRQ and clear the source in Protect Mode
ldr r14, =AT91C_BASE_AIC
ldr r0 , [r14, #AIC_IVR]
str r14, [r14, #AIC_IVR]
;- Enable Interrupt and Switch in Supervisor Mode
msr CPSR_c, #ARM_MODE_SVC
;- Save scratch/used registers and LR in User Stack
stmfd sp!, { r1-r11, r12, r14}
;- Branch to the routine pointed by the AIC_IVR
mov r14, pc
bx r0
;- Restore scratch/used registers and LR from User Stack
ldmia sp!, { r1-r11, r12, r14}
;- Disable Interrupt and switch back in IRQ mode
msr CPSR_c, #I_BIT | ARM_MODE_IRQ
;- Mark the End of Interrupt on the AIC
ldr r14, =AT91C_BASE_AIC
str r14, [r14, #AIC_EOICR]
ldmia sp!,{r0} ; и здесь вот так !!!!!!!!
msr SPSR_cxsf,r0 ; и здесь вот так !!!!!!!!
;- Restore SPSR_irq and r0 from IRQ stack
ldmia sp!, {r0}
;- Restore adjusted LR_irq from IRQ stack directly in the PC
ldmia sp!, {pc}^