fpc/rtl/embedded/arm/lpc1768.pp
florian 0781ac1f82 + support for lpc1768 by David Welch
git-svn-id: trunk@18927 -
2011-08-31 20:17:23 +00:00

161 lines
3.9 KiB
ObjectPascal

unit lpc1768;
{$goto on}
{$define lpc1768}
interface
var
STCTRL : DWord absolute $E000E010;
STRELOAD : DWord absolute $E000E014;
STCURR : DWord absolute $E000E018;
FIO1DIR2 : Byte absolute $2009C022;
FIO1SET2 : Byte absolute $2009C03A;
FIO1CLR2 : Byte absolute $2009C03E;
SCS : DWord absolute $400FC1A0;
CLKSRCSEL: DWord absolute $400FC10C;
PLL0FEED : DWord absolute $400FC08C;
PLL0CON : DWord absolute $400FC080;
PLL0CFG : DWord absolute $400FC084;
PLL0STAT : DWord absolute $400FC088;
CCLKCFG : DWord absolute $400FC104;
implementation
var
_data: record end; external name '_data';
_edata: record end; external name '_edata';
_etext: record end; external name '_etext';
_bss_start: record end; external name '_bss_start';
_bss_end: record end; external name '_bss_end';
_stack_top: record end; external name '_stack_top';
procedure PASCALMAIN; external name 'PASCALMAIN';
procedure _FPC_haltproc; assembler; nostackframe; public name '_haltproc';
asm
.Lhalt:
b .Lhalt
end;
procedure _FPC_start; assembler; nostackframe;
label _start;
asm
.init
.balign 16
.long _stack_top // stack top address
.long _start+1 // 1 Reset
.long .LDefaultHandler+1 // 2 NMI
.long .LDefaultHandler+1 // 3 HardFault
.long .LDefaultHandler+1 // 4 MemManage
.long .LDefaultHandler+1 // 5 BusFault
.long .LDefaultHandler+1 // 6 UsageFault
.long .LDefaultHandler+1 // 7 RESERVED
.long .LDefaultHandler+1 // 8 RESERVED
.long .LDefaultHandler+1 // 9 RESERVED
.long .LDefaultHandler+1 // 10 RESERVED
.long .LDefaultHandler+1 // 11 SVCall
.long .LDefaultHandler+1 // 12 Debug Monitor
.long .LDefaultHandler+1 // 13 RESERVED
.long .LDefaultHandler+1 // 14 PendSV
.long .LDefaultHandler+1 // 15 SysTick
.long .LDefaultHandler+1 // 16 External Interrupt(0)
.long .LDefaultHandler+1 // 17 External Interrupt(1)
.long .LDefaultHandler+1 // 18 External Interrupt(2)
.long .LDefaultHandler+1 // 19 ...
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.long .LDefaultHandler+1
.globl _start
.text
_start:
// Copy initialized data to ram
ldr r1,.L_etext
ldr r2,.L_data
ldr r3,.L_edata
.Lcopyloop:
cmp r2,r3
ittt ls
ldrls r0,[r1],#4
strls r0,[r2],#4
bls .Lcopyloop
// clear onboard ram
ldr r1,.L_bss_start
ldr r2,.L_bss_end
mov r0,#0
.Lzeroloop:
cmp r1,r2
itt ls
strls r0,[r1],#4
bls .Lzeroloop
b PASCALMAIN
b _FPC_haltproc
.L_bss_start:
.long _bss_start
.L_bss_end:
.long _bss_end
.L_etext:
.long _etext
.L_data:
.long _data
.L_edata:
.long _edata
.LDefaultHandlerAddr:
.long .LDefaultHandler
// default irq handler just returns
.LDefaultHandler:
mov pc,r14
end;
end.