version 1.4, 2007/11/05 18:54:35 |
version 1.5, 2007/11/23 13:37:42 |
|
|
/* store all system mode registers */ |
/* store all system mode registers */ |
stmdb sp!, {r0-r12, lr} |
stmdb sp!, {r0-r12, lr} |
|
|
|
/* store sys_mode's cpsr */ |
|
// mrs r1, spsr |
|
// stmdb sp!, {r1} |
|
|
|
/* pass sp (which now contains struct pcb of interrupted task) to irq_trampoline */ |
|
mov r0, sp |
|
|
bl irq_trampoline |
bl irq_trampoline |
|
|
/* load r0-r12 and pc from the stack */ |
/* load r0-r12 and pc from the stack */ |
/* note ^ that copies SPSR into CPSR */ |
/* note ^ that copies SPSR into CPSR */ |
|
/** here we may return to different task (if pcb was changed in the stack memory) **/ |
ldmia sp!, {r0-r12, pc}^ |
ldmia sp!, {r0-r12, pc}^ |
|
|
_vector_fiq: |
_vector_fiq: |