суть вот в чем... сидел маялся 3 недели с неработающими прерываниями) потом после того как написал в форум вдруг все неожиданно и без изменений в коде заработало))) заморочился решил написать свои обработчики прерываний) ну вот пожалуйста покритикуйте)
;------------------------------------------------------------------------------- ; Вектор IRQ прерывания org 0x18 mov pc, #0x40 ;------------------------------------------------------------------------------- ; Вектор FIQ прерывания org 0x1C mov pc, #0x60 ;------------------------------------------------------------------------------- ; Обработчик IRQ прерывания org 0x40 sub lr, lr, #4 stmia sp!, {r0 - r12,lr} msr CPSR_c, #ARM_MODE_IRQ mvn r0, #0xFF bic r0, r0, #0xE00 mov lr, pc ldr pc, [r0] ldmdb sp!, {r0 - r12,pc}^ ;------------------------------------------------------------------------------- ; Обработчик FIQ прерывания org 0x60 sub lr, lr, #4 stmia sp!, {r0 - r7,lr} mov lr, pc ldr pc, [r12] ldmdb sp!, {r0 - r7,pc}^ ;-------------------------------------------------------------------------------
в r12 я записал адрес AIC_FVR при инициализации стека для FIQ режима Вроде в симуляторе все работает в том числе обрабатывает корректно вложенные прерывания) на плате отлаживать пока не пробовал)
|