Код
irqHandler:
/* Save interrupt context on the stack to allow nesting */
SUB lr, lr, #4
STMFD sp!, {lr}
MRS lr, SPSR
STMFD sp!, {r0, lr}
/* Write in the IVR to support Protect Mode */
LDR lr, =AT91C_BASE_AIC
LDR r0, [r14, #AIC_IVR]
STR lr, [r14, #AIC_IVR]
/* Save interrupt context on the stack to allow nesting */
SUB lr, lr, #4
STMFD sp!, {lr}
MRS lr, SPSR
STMFD sp!, {r0, lr}
/* Write in the IVR to support Protect Mode */
LDR lr, =AT91C_BASE_AIC
LDR r0, [r14, #AIC_IVR]
STR lr, [r14, #AIC_IVR]
После выполнения 6-й инструкции (пошагово в окне дизассемблера) я попадаю в ячейку с адресом 0x10 (вроде как Abort). Может я чего не понимаю, но LDR по идее должна просто грузить значение в r0. Или тут сложнее? Что конкретно делает данная инструкция LDR r0, [r14, #AIC_IVR]. В дизассемблере эта строчка выглядит так:
Код
LDR r0, [r14, #AIC_IVR]
0x200048: 0xe59e0100 LDR R0, [LR, #0x100]
0x200048: 0xe59e0100 LDR R0, [LR, #0x100]
В другом проекте все работает нормально, на 6-м шаге в r0 загружается адрес входа в обработчик прерывания, стартапы у проектов одинаковые, настройки тоже. Никак не пойму изза чего это может быть.
Update
Все нашел в чем проблема (и как я не заметил сразу, наверно это всё понедельник

LDR lr, =AT91C_BASE_AIC
0x200044: 0x00000000 ANDEQ R0, R0, R0
не загружает в LR ничего, видимо с определением чтото, буду разбираться.
Странно что ассемблер не ругается