diff options
author | vetch <vetch97@gmail.com> | 2020-01-02 17:54:31 +0100 |
---|---|---|
committer | vetch <vetch97@gmail.com> | 2020-01-02 17:54:31 +0100 |
commit | ab7b754bb32022336527c1a2d5d710b95a589d0e (patch) | |
tree | 19f508f06c72efcbdd2cfad46949ed6f1ae45a3c /interrupt_vector.S | |
parent | 5e1e6796109c892c4300c3da17c35e7874a40107 (diff) | |
parent | 6bf5a3b8c6e8a5d1cb3fb4880a5d9688ab094c62 (diff) | |
download | rpi-MMU-example-ab7b754bb32022336527c1a2d5d710b95a589d0e.tar.gz rpi-MMU-example-ab7b754bb32022336527c1a2d5d710b95a589d0e.zip |
Merge branch 'bob' of https://repo.or.cz/RPi-MMU-example into alice
# Conflicts:
# .gitignore
# PL0_test.ld
# demo_functionality.c
# interrupt_vector.S
# interrupts.c
# kernel.c
# memory.h
Diffstat (limited to 'interrupt_vector.S')
-rw-r--r-- | interrupt_vector.S | 53 |
1 files changed, 47 insertions, 6 deletions
diff --git a/interrupt_vector.S b/interrupt_vector.S index 3daef05..1f5bb3a 100644 --- a/interrupt_vector.S +++ b/interrupt_vector.S @@ -1,10 +1,8 @@ .section ".interrupt_vectors.text" .global abort_handler -.global irq_handler -.local generic_handler +.local generic_handler .global _interrupt_vectors - _interrupt_vectors: ldr pc,reset_handler ldr pc,undefined_handler @@ -37,13 +35,56 @@ enable_irq: bic r0,r0,#0x80 msr cpsr_c,r0 bx lr + b reset_handler_caller + b undef_handler_caller + b svc_handler_caller + b abort_handler_caller + b abort_handler_caller + b generic_handler_caller + b irq_handler_caller + b fiq_handler_caller + +reset_handler_caller: + ldr sp, =_supervisor_stack_top + ldr r5, =reset_handler + bx r5 + +undef_handler_caller: + ldr sp, =_supervisor_stack_top + ldr r5, =undefined_instruction_vector + bx r5 + +svc_handler_caller: + ldr sp, =_supervisor_stack_top + push {r5, lr} + ldr r5, =supervisor_call_handler + blx r5 + ldm sp!, {r5, pc} ^ -generic_handler: - b generic_handler abort_handler_caller: - mov sp, #0x8000 + ldr sp, =_supervisor_stack_top ldr r5, =abort_handler bx r5 + +generic_handler_caller: + ldr sp, =_supervisor_stack_top + ldr r5, =generic_handler + bx r5 + +irq_handler_caller: + ldr sp, =_irq_stack_top + sub lr, #4 + push {r0-r3, lr} + ldr r3, =irq_handler + blx r3 + ldm sp!, {r0-r3, pc} ^ + +fiq_handler_caller: + ldr sp, =_fiq_stack_top + ldr r5, =fiq_handler + bx r5 + + irq: mov sp, #0x8000 ldr r5, =abort_handler |