|
@@ -0,0 +1,160 @@
|
|
|
+
|
|
|
+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.
|
|
|
+
|
|
|
+
|