* entry code fixed

git-svn-id: trunk@12615 -
This commit is contained in:
florian 2009-01-26 17:22:54 +00:00
parent 5f9b82d38b
commit 40b86f9fa8

View File

@ -1,3 +1,4 @@
{$goto on}
{****************************************************************************** {******************************************************************************
lpc2114.h - Register defs for Philips LPC2114, LPC2124 lpc2114.h - Register defs for Philips LPC2114, LPC2124
@ -17,6 +18,7 @@ Created by Sten Larsson (sten_larsson at yahoo com)
Free Pascal conversion by the Free Pascal development team Free Pascal conversion by the Free Pascal development team
******************************************************************************} ******************************************************************************}
unit lpc21x4; unit lpc21x4;
interface interface
@ -414,86 +416,100 @@ unit lpc21x4;
end; end;
procedure PASCALMAIN; external name 'PASCALMAIN'; procedure PASCALMAIN; external name 'PASCALMAIN';
begin procedure _FPC_haltproc; assembler; nostackframe; public name '_haltproc';
asm asm
// code derived from phillips appnote 10254 .Lhalt:
.init b .Lhalt
ldr pc, .Lstart end;
ldr pc, .LUndefined_Addr
ldr pc, .LSWI_Addr
ldr pc, .LPrefetch_Addr
ldr pc, .LAbort_Addr
// signature
nop
ldr pc, [PC, #-0xFF0] // load irq vector from vic
ldr pc, .LFIQ_Addr
.LUndefined_Addr:
ldr r0,.L1
ldr pc,[r0]
.LSWI_Addr:
ldr r0,.L2
ldr pc,[r0]
.LPrefetch_Addr:
ldr r0,.L3
ldr pc,[r0]
.LAbort_Addr:
ldr r0,.L4
ldr pc,[r0]
.LFIQ_Addr:
ldr r0,.L5
ldr pc,[r0]
.L1:
.word Undefined_Handler
.L2:
.word SWI_Handler
.L3:
.word Prefetch_Handler
.L4:
.word Abort_Handler
.L5:
.word FIQ_Handler
.Lstart: procedure _FPC_start; assembler; nostackframe;
(* label
Set SP for Supervisor mode. Depending upon _start;
the stack the application needs this value asm
needs to be set. // code derived from phillips appnote 10254
stack is already set by bootloader .init
but if this point is entered by any .align 16
other means than reset, the stack pointer .globl _start
needs to be set explicity b _start
*) ldr pc, .LUndefined_Addr
// LDR SP,=0x40001000 ldr pc, .LSWI_Addr
ldr pc, .LPrefetch_Addr
ldr pc, .LAbort_Addr
(* // signature
Setting up SP for IRQ and FIQ mode. nop
Change mode before setting each one ldr pc, [pc, #-0xFF0] // load irq vector from vic
move back again to Supervisor mode ldr pc, .LFIQ_Addr
Each interrupt has its own link .LUndefined_Addr:
register, stack pointer and program ldr r0,.L1
counter The stack pointers must be ldr pc,[r0]
initialized for interrupts to be .LSWI_Addr:
used later. ldr r0,.L2
*) ldr pc,[r0]
.LPrefetch_Addr:
ldr r0,.L3
ldr pc,[r0]
.LAbort_Addr:
ldr r0,.L4
ldr pc,[r0]
.LFIQ_Addr:
ldr r0,.L5
ldr pc,[r0]
.L1:
.long Undefined_Handler
.L2:
.long SWI_Handler
.L3:
.long Prefetch_Handler
.L4:
.long Abort_Handler
.L5:
.long FIQ_Handler
(* _start:
setup for fiq and irq interrupt stacks to run (*
below current stack by 1000. Set SP for Supervisor mode. Depending upon
*) the stack the application needs this value
mov r0, sp // copy current stack pointer needs to be set.
sub r0, r0, #1000 // make irq stack pointer stack is already set by bootloader
sub r1, r0, #1000 // make fiq stack pointer but if this point is entered by any
msr cpsr_c, #0x12 // switch to irq mode other means than reset, the stack pointer
mov sp, r0 // set irq stack pointer needs to be set explicity
msr cpsr_c, #0x11 // fiq mode *)
mov sp, r1 // set fiq stack pointer // LDR SP,=0x40001000
msr cpsr_c, #0x13 // supervisor mode F,I enabled
bl PASCALMAIN (*
.text Setting up SP for IRQ and FIQ mode.
end; Change mode before setting each one
move back again to Supervisor mode
Each interrupt has its own link
register, stack pointer and program
counter The stack pointers must be
initialized for interrupts to be
used later.
*)
(*
setup for fiq and irq interrupt stacks to run
below current stack by 1000.
*)
mov r0, sp // copy current stack pointer
sub r0, r0, #1000 // make irq stack pointer
sub r1, r0, #1000 // make fiq stack pointer
msr cpsr_c, #0x12 // switch to irq mode
mov sp, r0 // set irq stack pointer
msr cpsr_c, #0x11 // fiq mode
mov sp, r1 // set fiq stack pointer
msr cpsr_c, #0x13 // supervisor mode F,I enabled
bl PASCALMAIN
bl _FPC_haltproc
.LVBPDIV:
.long 0xE01FC100
.text
end;
end. end.