mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 06:49:13 +02:00
* setup stacks properly
git-svn-id: trunk@13332 -
This commit is contained in:
parent
b17cfcabc6
commit
77eca3a492
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user