mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-04 11:50:17 +02:00
+ support for lpc1768 by David Welch
git-svn-id: trunk@18927 -
This commit is contained in:
parent
d6726a6ade
commit
0781ac1f82
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -7012,6 +7012,7 @@ rtl/embedded/Makefile.fpc svneol=native#text/plain
|
|||||||
rtl/embedded/arm/at91sam7x256.pp svneol=native#text/plain
|
rtl/embedded/arm/at91sam7x256.pp svneol=native#text/plain
|
||||||
rtl/embedded/arm/lm3fury.pp svneol=native#text/pascal
|
rtl/embedded/arm/lm3fury.pp svneol=native#text/pascal
|
||||||
rtl/embedded/arm/lm3tempest.pp svneol=native#text/pascal
|
rtl/embedded/arm/lm3tempest.pp svneol=native#text/pascal
|
||||||
|
rtl/embedded/arm/lpc1768.pp svneol=native#text/pascal
|
||||||
rtl/embedded/arm/lpc21x4.pp svneol=native#text/plain
|
rtl/embedded/arm/lpc21x4.pp svneol=native#text/plain
|
||||||
rtl/embedded/arm/stm32f103.pp svneol=native#text/plain
|
rtl/embedded/arm/stm32f103.pp svneol=native#text/plain
|
||||||
rtl/embedded/avr/atmega128.pp svneol=native#text/plain
|
rtl/embedded/avr/atmega128.pp svneol=native#text/plain
|
||||||
|
@ -65,6 +65,7 @@ Type
|
|||||||
ct_lpc2114,
|
ct_lpc2114,
|
||||||
ct_lpc2124,
|
ct_lpc2124,
|
||||||
ct_lpc2194,
|
ct_lpc2194,
|
||||||
|
ct_lpc1768,
|
||||||
|
|
||||||
{ ATMEL }
|
{ ATMEL }
|
||||||
ct_at91sam7s256,
|
ct_at91sam7s256,
|
||||||
@ -242,6 +243,16 @@ Const
|
|||||||
sramsize:$00004000
|
sramsize:$00004000
|
||||||
),
|
),
|
||||||
|
|
||||||
|
(
|
||||||
|
controllertypestr:'LPC1768';
|
||||||
|
controllerunitstr:'LPC1768';
|
||||||
|
interruptvectors:12;
|
||||||
|
flashbase:$00000000;
|
||||||
|
flashsize:$00040000;
|
||||||
|
srambase:$10000000;
|
||||||
|
sramsize:$00008000
|
||||||
|
),
|
||||||
|
|
||||||
(
|
(
|
||||||
controllertypestr:'AT91SAM7S256';
|
controllertypestr:'AT91SAM7S256';
|
||||||
controllerunitstr:'AT91SAM7x256';
|
controllerunitstr:'AT91SAM7x256';
|
||||||
|
@ -224,6 +224,7 @@ begin
|
|||||||
ct_lpc2114,
|
ct_lpc2114,
|
||||||
ct_lpc2124,
|
ct_lpc2124,
|
||||||
ct_lpc2194,
|
ct_lpc2194,
|
||||||
|
ct_lpc1768,
|
||||||
ct_at91sam7s256,
|
ct_at91sam7s256,
|
||||||
ct_at91sam7se256,
|
ct_at91sam7se256,
|
||||||
ct_at91sam7x256,
|
ct_at91sam7x256,
|
||||||
@ -312,17 +313,19 @@ begin
|
|||||||
Add('ENTRY(_START)');
|
Add('ENTRY(_START)');
|
||||||
Add('MEMORY');
|
Add('MEMORY');
|
||||||
Add('{');
|
Add('{');
|
||||||
|
if flashsize<>0 then
|
||||||
LinkStr := ' flash : ORIGIN = 0x' + IntToHex(flashbase,8)
|
begin
|
||||||
+ ', LENGTH = ' + IntToStr(flashsize div 1024)+'K';
|
LinkStr := ' flash : ORIGIN = 0x' + IntToHex(flashbase,8)
|
||||||
Add(LinkStr);
|
+ ', LENGTH = 0x' + IntToHex(flashsize,8);
|
||||||
|
Add(LinkStr);
|
||||||
|
end;
|
||||||
|
|
||||||
LinkStr := ' ram : ORIGIN = 0x' + IntToHex(srambase,8)
|
LinkStr := ' ram : ORIGIN = 0x' + IntToHex(srambase,8)
|
||||||
+ ', LENGTH = ' + IntToStr(sramsize div 1024)+'K';
|
+ ', LENGTH = 0x' + IntToHex(sramsize,8);
|
||||||
Add(LinkStr);
|
Add(LinkStr);
|
||||||
|
|
||||||
Add('}');
|
Add('}');
|
||||||
Add('_stack_top = 0x' + IntToHex(sramsize+srambase-4,8) + ';');
|
Add('_stack_top = 0x' + IntToHex(sramsize+srambase,8) + ';');
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -342,14 +345,28 @@ begin
|
|||||||
Add(' *(.rodata, .rodata.*)');
|
Add(' *(.rodata, .rodata.*)');
|
||||||
Add(' *(.comment)');
|
Add(' *(.comment)');
|
||||||
Add(' _etext = .;');
|
Add(' _etext = .;');
|
||||||
Add(' } >flash');
|
if embedded_controllers[current_settings.controllertype].flashsize<>0 then
|
||||||
|
begin
|
||||||
|
Add(' } >flash');
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Add(' } >ram');
|
||||||
|
end;
|
||||||
Add(' .data :');
|
Add(' .data :');
|
||||||
Add(' {');
|
Add(' {');
|
||||||
Add(' _data = .;');
|
Add(' _data = .;');
|
||||||
Add(' *(.data, .data.*)');
|
Add(' *(.data, .data.*)');
|
||||||
Add(' KEEP (*(.fpc .fpc.n_version .fpc.n_links))');
|
Add(' KEEP (*(.fpc .fpc.n_version .fpc.n_links))');
|
||||||
Add(' _edata = .;');
|
Add(' _edata = .;');
|
||||||
Add(' } >ram AT >flash');
|
if embedded_controllers[current_settings.controllertype].flashsize<>0 then
|
||||||
|
begin
|
||||||
|
Add(' } >ram AT >flash');
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Add(' } >ram');
|
||||||
|
end;
|
||||||
Add(' .bss :');
|
Add(' .bss :');
|
||||||
Add(' {');
|
Add(' {');
|
||||||
Add(' _bss_start = .;');
|
Add(' _bss_start = .;');
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/08/27]
|
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/08/28]
|
||||||
#
|
#
|
||||||
default: all
|
default: all
|
||||||
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
|
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
|
||||||
@ -315,11 +315,14 @@ CPU_UNITS=
|
|||||||
SYSINIT_UNITS=
|
SYSINIT_UNITS=
|
||||||
ifeq ($(ARCH),arm)
|
ifeq ($(ARCH),arm)
|
||||||
ifeq ($(SUBARCH),armv7m)
|
ifeq ($(SUBARCH),armv7m)
|
||||||
CPU_UNITS=lm3fury lm3tempest stm32f103 # thumb2_bare
|
CPU_UNITS=lm3fury lm3tempest stm32f103 lpc1768 # thumb2_bare
|
||||||
endif
|
endif
|
||||||
ifeq ($(SUBARCH),armv4t)
|
ifeq ($(SUBARCH),armv4t)
|
||||||
CPU_UNITS=lpc21x4 at91sam7x256
|
CPU_UNITS=lpc21x4 at91sam7x256
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(SUBARCH),armv4)
|
||||||
|
CPU_UNITS=lpc21x4 at91sam7x256
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
ifeq ($(ARCH),avr)
|
ifeq ($(ARCH),avr)
|
||||||
CPU_UNITS=atmega128
|
CPU_UNITS=atmega128
|
||||||
|
@ -49,12 +49,14 @@ SYSINIT_UNITS=
|
|||||||
|
|
||||||
ifeq ($(ARCH),arm)
|
ifeq ($(ARCH),arm)
|
||||||
ifeq ($(SUBARCH),armv7m)
|
ifeq ($(SUBARCH),armv7m)
|
||||||
CPU_UNITS=lm3fury lm3tempest stm32f103 # thumb2_bare
|
CPU_UNITS=lm3fury lm3tempest stm32f103 lpc1768 # thumb2_bare
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(SUBARCH),armv4t)
|
ifeq ($(SUBARCH),armv4t)
|
||||||
CPU_UNITS=lpc21x4 at91sam7x256
|
CPU_UNITS=lpc21x4 at91sam7x256
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(SUBARCH),armv4)
|
||||||
|
CPU_UNITS=lpc21x4 at91sam7x256
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ARCH),avr)
|
ifeq ($(ARCH),avr)
|
||||||
|
160
rtl/embedded/arm/lpc1768.pp
Normal file
160
rtl/embedded/arm/lpc1768.pp
Normal file
@ -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.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user