summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/arm/mc9328mxl/irq/bsp_irq_asm.S
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/src/lib/libcpu/arm/mc9328mxl/irq/bsp_irq_asm.S8
1 files changed, 5 insertions, 3 deletions
diff --git a/c/src/lib/libcpu/arm/mc9328mxl/irq/bsp_irq_asm.S b/c/src/lib/libcpu/arm/mc9328mxl/irq/bsp_irq_asm.S
index e2636c0db6..7ee0fde848 100644
--- a/c/src/lib/libcpu/arm/mc9328mxl/irq/bsp_irq_asm.S
+++ b/c/src/lib/libcpu/arm/mc9328mxl/irq/bsp_irq_asm.S
@@ -31,13 +31,15 @@ ExecuteITHandler :
/* find the ISR's address based on the vector */
ldr r0, =bsp_vector_table
- ldr r0, [r0, r1, LSL #2] /* Read the address */
-
+ mov r1, r1, LSL #3 /* Shift vector to get offset into table */
+ add r1, r0, r1 /* r1 has address of vector entry */
+ ldr r0, [r1, #4] /* Get the data pointer */
+ ldr r1, [r1] /* Get the vector */
stmdb sp!,{lr}
ldr lr, =IRQ_return /* prepare the return from handler */
- mov pc, r0 /* EXECUTE INT HANDLER */
+ mov pc, r1 /* EXECUTE INT HANDLER */
IRQ_return:
ldmia sp!,{lr}