X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/d344481bcd23d73d542503b66542d0bbfc29bf13..243fec4450d3a3246f3f0d92751a95daef7c1503:/embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S?ds=sidebyside diff --git a/embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S b/embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S index ae9032a..84ded71 100644 --- a/embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S +++ b/embedded/arch/arm/mach-lpc21xx/libs/hal/ivt.S @@ -1,6 +1,12 @@ /* Setup vector table. Note that undf, pabt, dabt, fiq just execute a null loop. */ +#include + +.global __bbconf_magic_addr +.global __bbconf_ptptr_addr +.global __bbconf_pt_addr + .section .ivt,"ax" .code 32 .align 0 @@ -13,7 +19,11 @@ hal_vectors: LDR PC, Reset_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr NOP /* Reserved Vector */ +#if !defined(__thumb__) LDR PC, IRQ_Addr +#else + B IRQ_Trampoline +#endif LDR PC, FIQ_Addr Reset_Addr: .word reset_handler @@ -25,10 +35,33 @@ DAbt_Addr: .word DAbt_Handler IRQ_Addr: .word irq_handler_resolver FIQ_Addr: .word FIQ_Handler +__bbconf_magic_addr: + .word BBCONF_MAGIC_VAL +__bbconf_ptptr_addr: + .word __bbconf_pt_addr + Undef_Handler: B Undef_Handler SWI_Handler: B SWI_Handler PAbt_Handler: B PAbt_Handler DAbt_Handler: B DAbt_Handler FIQ_Handler: B FIQ_Handler +#if defined(__thumb__) +IRQ_Trampoline: + sub lr, lr, #4 + push {r0, r1, r2, r3, r4, ip, lr} + ldr r1, IRQ_Addr + adr lr, IRQ_Trampoline_ret + tst r1,#1 + adrne lr, IRQ_Trampoline_ret_thumb+1 + bx r1 +IRQ_Trampoline_ret_thumb: + .code 16 + bx pc + nop + .code 32 +IRQ_Trampoline_ret: + ldm sp!, {r0, r1, r2, r3, r4, ip, pc}^ +#endif + .end