* setup stacks properly

git-svn-id: trunk@13332 -
This commit is contained in:
florian 2009-06-27 12:53:57 +00:00
parent b17cfcabc6
commit 77eca3a492

View File

@ -191,7 +191,7 @@ unit at91sam7x256;
{ Wait the startup time (until PMC Status register MOSCEN bit is set) { Wait the startup time (until PMC Status register MOSCEN bit is set)
result: $FFFFFC68 bit 0 will set when main oscillator has stabilized} result: $FFFFFC68 bit 0 will set when main oscillator has stabilized}
while (AT91C_PMC_SR and AT91C_PMC_MOSCS)=0 do while (AT91C_PMC_SR and AT91C_PMC_MOSCS)=0 do
; ;
@ -310,7 +310,7 @@ unit at91sam7x256;
ldr r0,.L_stack_top ldr r0,.L_stack_top
(* (*
Setting up SP for IRQ and FIQ mode. Setting up SP for the different CPU modes.
Change mode before setting each one Change mode before setting each one
move back again to Supervisor mode move back again to Supervisor mode
Each interrupt has its own link Each interrupt has its own link
@ -319,18 +319,28 @@ unit at91sam7x256;
initialized for interrupts to be initialized for interrupts to be
used later. used later.
*) *)
msr cpsr_c, #0xdb // switch to Undefined Instruction Mode
mov sp, r0
sub r0, r0, #0x10
(* msr cpsr_c, #0xd7 // switch to Abort Mode
setup irq and fiq stacks each 128 bytes mov sp, r0
*) sub r0, r0, #0x10
msr cpsr_c, #0x12 // switch to irq mode
mov sp, r0 // set irq stack pointer msr CPSR_c, #0xd1 // switch to FIQ Mode
sub r0,r0,#128 // irq stack size mov sp, r0
msr cpsr_c, #0x11 // fiq mode sub r0, r0, #0x80
mov sp, r0 // set fiq stack pointer
sub r0,r0,#128 // fiq stack size msr CPSR_c, #0xd2 // switch to IRQ Mode
msr cpsr_c, #0x13 // supervisor mode F,I enabled mov sp, r0
mov sp, r0 // stack sub r0, r0, #0x80
msr CPSR_c, #0xd3 // switch to Supervisor Mode
mov sp, r0
sub r0, r0, #0x80
msr CPSR_c, #0x1f // switch to System Mode, interrupts enabled
mov sp, r0
// for now, all handlers are set to a default one // for now, all handlers are set to a default one
ldr r1,.LDefaultHandlerAddr ldr r1,.LDefaultHandlerAddr