Цитата(Сергей Борщ @ Mar 5 2008, 18:26)

или если прерывание одно и ветвиться по FVR не нужно, то перед __arm __fiq void FIQ_handler(void) надо дописать #pragma vector = 0x1C
Нет, обработчик вот такой
Код
FIQ_Handler_Entry:
;- Switch in SVC/User Mode to allow User Stack access for C code
; because the FIQ is not yet acknowledged
;- Save and r0 in FIQ_Register
mov r9,r0
ldr r0 , [r8, #AIC_FVR]
msr CPSR_c,#I_BIT | F_BIT | ARM_MODE_SVC
;- Save scratch/used registers and LR in User Stack
stmfd sp!, { r1-r3, r12, lr}
;- Branch to the routine pointed by the AIC_FVR
mov r14, pc
bx r0
;- Restore scratch/used registers and LR from User Stack
ldmia sp!, { r1-r3, r12, lr}
;- Leave Interrupts disabled and switch back in FIQ mode
msr CPSR_c, #I_BIT | F_BIT | ARM_MODE_FIQ
;- Restore the R0 ARM_MODE_SVC register
mov r0,r9
;- Restore the Program Counter using the LR_fiq directly in the PC
subs pc,lr,#4
#pragma vector не работает, посольку стандартный обработчик уже есть по 0x1c

Поставил прямой переход по AIC_FVR, теперь оно улетает на reset

Вообще, очень оно странно в отладчике работает, надо дебаг-режим что-ли AICу задать? Буду разбираться, спасибо за наводку!
Вот ведь странно. По идее, нет особой разницы - ldr PC,[PC,#0xFFFFF104 - (.+8)] или тот обработчик, который был - в любом случае, должно передаваться управление на него, а брейкпоинт не срабатывает... Почему?
А потому, что нефига из обработчика функции вызывать, когда под FIQ стек не выделен