+ added generic stellaris support as provided by #17365

git-svn-id: trunk@15957 -
This commit is contained in:
florian 2010-09-09 09:02:14 +00:00
parent f302fcdc98
commit f13eff22b0
5 changed files with 305 additions and 7 deletions

1
.gitattributes vendored
View File

@ -6388,6 +6388,7 @@ rtl/embedded/Makefile svneol=native#text/plain
rtl/embedded/Makefile.fpc svneol=native#text/plain
rtl/embedded/arm/at91sam7x256.pp svneol=native#text/plain
rtl/embedded/arm/lpc21x4.pp svneol=native#text/plain
rtl/embedded/arm/stellaris.pp svneol=native#text/plain
rtl/embedded/arm/stm32f103.pp svneol=native#text/plain
rtl/embedded/check.inc svneol=native#text/plain
rtl/embedded/empty.cfg svneol=native#text/plain

View File

@ -72,7 +72,10 @@ Type
ct_at91sam7xc256,
{ STMicroelectronics }
ct_stm32f103re
ct_stm32f103re,
{ TI }
stellaris
);
Const
@ -127,7 +130,8 @@ Const
'AT91SAM7SE256',
'AT91SAM7X256',
'AT91SAM7XC256',
'STM32F103RE'
'STM32F103RE',
'STELLARIS'
);
controllerunitstr : array[tcontrollertype] of string[20] =
@ -139,7 +143,8 @@ Const
'AT91SAM7x256',
'AT91SAM7x256',
'AT91SAM7x256',
'STM32F103'
'STM32F103',
'STELLARIS'
);
vfp_scalar = [fpu_vfpv2,fpu_vfpv3];
@ -154,7 +159,7 @@ Const
cs_opt_stackframe,cs_opt_nodecse];
level1optimizerswitches = genericlevel1optimizerswitches;
level2optimizerswitches = genericlevel2optimizerswitches + level1optimizerswitches +
level2optimizerswitches = genericlevel2optimizerswitches + level1optimizerswitches +
[cs_opt_regvar,cs_opt_stackframe,cs_opt_tailrecursion,cs_opt_nodecse];
level3optimizerswitches = genericlevel3optimizerswitches + level2optimizerswitches + [{,cs_opt_loopunroll}];

View File

@ -1,5 +1,5 @@
#
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/08/06]
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/09/08]
#
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 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 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
@ -280,7 +280,7 @@ endif
CPU_UNITS=
SYSINIT_UNITS=
ifeq ($(ARCH),arm)
CPU_UNITS=lpc21x4 at91sam7x256
CPU_UNITS=lpc21x4 at91sam7x256 stellaris stm32f103
endif
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph

View File

@ -48,7 +48,7 @@ CPU_UNITS=
SYSINIT_UNITS=
ifeq ($(ARCH),arm)
CPU_UNITS=lpc21x4 at91sam7x256
CPU_UNITS=lpc21x4 at91sam7x256 stellaris stm32f103
endif
# Paths

View File

@ -0,0 +1,292 @@
{
Register definitions and utility code for stellaris
Preliminary startup code
Geoffrey Barton 2010 08 01 gjb@periphon.net
based on stm32f103 created by Jeppe Johansen 2009 - jepjoh2@kom.aau.dk
}
unit stellaris;
{$goto on}
interface
type
TBitvector32 = bitpacked array[0..31] of 0..1;
{$PACKRECORDS 4}
const
PeripheralBase = $40000000;
PPBbase = $E0000fff;
APBbase = PeripheralBase;
AHBbase = PeripheralBase+$54000;
portAoffset=APBbase+$4000;
portBoffset=APBbase+$5000;
portCoffset=APBbase+$6000;
portDoffset=APBbase+$7000;
portEoffset=APBbase+$24000;
portFoffset=APBbase+$25000;
portGoffset=APBbase+$26000;
portHoffset=APBbase+$27000;
portJoffset=APBbase+$3d000;
sysconoffset=APBbase+$fe000;
type
TgpioPort=record
data:array[0..255] of dword;dir,is,ibe,iev,im,ris,mis,icr,
afsel:dword;dummy1:array[0..54] of dword;dr2r,dr4r,dr8r,odr,pur,pdr,slr,den,lock,cr,amsel,pctl:dword;
end;
Tsyscon=record
did0,did1,dc0,res0c,dc1,dc2,dc3,dc4,dc5,dc6,dc7,dc8,borc,res34,res38,res3c,
src0,src1,src2,res4c,ris,imc,misc,resc,rcc,pllcfg,res68,gpiohbctl,rcc2,res74,res78,moscctl:dword;res80:array[0..31] of dword;rcgc0,
rcgc1,rcgc2,res10,scgc0,scgc1,scgc2,
res11,dcgc0,dcgc1,dcgc2,res12c,res130,res134,res138,res13c,res140,dsplpclk,res13,res14,res15,piosccal,
i2smclk,res174,res178,res17c,res180,res184,res188,res18c,dc9,res194,res198,res19c,nvmstat:dword;
end;
{$ALIGN 4}
var
PortA :Tgpioport absolute portAoffset;
PortB :Tgpioport absolute portBoffset;
PortC :Tgpioport absolute portCoffset;
PortD :Tgpioport absolute portDoffset;
PortE :Tgpioport absolute portEoffset;
PortF :Tgpioport absolute portFoffset;
PortG :Tgpioport absolute portGoffset;
PortH :Tgpioport absolute portHoffset;
PortJ :Tgpioport absolute portJoffset;
syscon :Tsyscon absolute sysconoffset;
rcgc0 :dword absolute (sysconoffset+$100);
rcgc1 :dword absolute (sysconoffset+$104);
rcgc2 :dword absolute (sysconoffset+$108);
var
NMI_Handler,
HardFault_Handler,
MemManage_Handler,
BusFault_Handler,
UsageFault_Handler,
SWI_Handler,
DebugMonitor_Handler,
PendingSV_Handler,
Systick_Handler,UART0intvector: pointer;
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
.align 16
.long _stack_top // First entry in NVIC table is the new stack pointer
.long _start+1 //gjb changed from stm32f version to avoid invstate error when interrupt fires
//b _start // Reset
.long _start+1
//b .LNMI_Addr // Non maskable interrupt. The RCC Clock Security System (CSS) is linked to the NMI vector.
.long _start+1
//b .LHardFault_Addr // All class of fault
.long _start+1
//b .LMemManage_Addr // Memory management
.long _start+1
//b .LBusFault_Addr // Pre-fetch fault, memory access fault
.long _start+1
//b .LUsageFault_Addr // Undefined instruction or illegal state
.long _start+1
//nop // Reserved
.long _start+1
//nop // Reserved
.long _start+1
//nop // Reserved
.long _start+1
//nop // Reserved
.long _start+1
//b .LSWI_Addr // Software Interrupt vector now SVC
.long _start+1
//b .LDebugMonitor_Addr // Debug Monitor
.long _start+1
//nop // Reserved
.long _start+1
//b .LPendingSV_Addr // Pendable request for system service
.long _start+1
//b .LSystick_Addr // System tick timer
//16
.long .LDefaultHandler+1 //GPIOA #0
.long .LDefaultHandler+1 //GPIOB
.long .LDefaultHandler+1 //GPIOC
.long .LDefaultHandler+1 //GPIOD
.long .LDefaultHandler+1 //GPIOE
.long .LUART0handler+1 //.LDefaultHandler+1 //UART0
.long .LDefaultHandler+1 //UART1
.long .LDefaultHandler+1 //SSI0
//24
.long .LDefaultHandler+1 //I2C0 #8
.long .LDefaultHandler+1 //PWMF
.long .LDefaultHandler+1 //PWMG0
.long .LDefaultHandler+1 //PWMG1
.long .LDefaultHandler+1 //PWMG2
.long .LDefaultHandler+1 //QEI0
.long .LDefaultHandler+1 //ADC0S0
.long .LDefaultHandler+1 //ADC0S1
//32
.long .LDefaultHandler+1 //ADC0S2 #16
.long .LDefaultHandler+1 //ADC0S3
.long .LDefaultHandler+1 //WDGTimer01
.long .LDefaultHandler+1 //T0A
.long .LDefaultHandler+1 //T0B
.long .LDefaultHandler+1 //T1A
.long .LDefaultHandler+1 //T1B
.long .LDefaultHandler+1 //T2A
//40
.long .LDefaultHandler+1 //T2B #24
.long .LDefaultHandler+1 //COMP0
.long .LDefaultHandler+1 //COMP1
.long .LDefaultHandler+1 //COMP2
.long .LDefaultHandler+1 //SYSCON
.long .LDefaultHandler+1 //FLASH
.long .LDefaultHandler+1 //GPIOF
.long .LDefaultHandler+1 //GPIOG
//48
.long .LDefaultHandler+1 //GPIOH #32
.long .LDefaultHandler+1 //UART2
.long .LDefaultHandler+1 //SSI1
.long .LDefaultHandler+1 //T3A
.long .LDefaultHandler+1 //T3B
.long .LDefaultHandler+1 //I2C1
.long .LDefaultHandler+1 //QEI1
.long .LDefaultHandler+1 //CAN0
//56
.long .LDefaultHandler+1 //CAN1 #40
.long .LDefaultHandler+1 //res
.long .LDefaultHandler+1 //ETH
.long .LDefaultHandler+1 //res
.long .LDefaultHandler+1 //USB
.long .LDefaultHandler+1 //PWMG3
.long .LDefaultHandler+1 //UDMAS
.long .LDefaultHandler+1 //UDMAE
//64
.long .LDefaultHandler+1 //ADC1S0 #48
.long .LDefaultHandler+1 //ADC1S1
.long .LDefaultHandler+1 //ADC1S2
.long .LDefaultHandler+1 //ADC1S3
.long .LDefaultHandler+1 //I2S0
.long .LDefaultHandler+1 //EPI
.long .LDefaultHandler+1 //GPIOJ
.long .LDefaultHandler+1 //res #55
.LNMI_Addr:
ldr r0,.L1
ldr pc,[r0]
.LHardFault_Addr:
ldr r0,.L2
ldr pc,[r0]
.LMemManage_Addr:
ldr r0,.L3
ldr pc,[r0]
.LBusFault_Addr:
ldr r0,.L4
ldr pc,[r0]
.LUsageFault_Addr:
ldr r0,.L5
ldr pc,[r0]
.LSWI_Addr:
ldr r0,.L6
ldr pc,[r0]
.LDebugMonitor_Addr:
ldr r0,.L7
ldr pc,[r0]
.LPendingSV_Addr:
ldr r0,.L8
ldr pc,[r0]
.LSystick_Addr:
ldr r0,.L9
ldr pc,[r0]
.LUART0handler:
ldr r0,.L10
ldr pc,[r0]
.L1:
.long NMI_Handler
.L2:
.long HardFault_Handler
.L3:
.long MemManage_Handler
.L4:
.long BusFault_Handler
.L5:
.long UsageFault_Handler
.L6:
.long SWI_Handler
.L7:
.long DebugMonitor_Handler
.L8:
.long PendingSV_Handler
.L9:
.long Systick_Handler
.L10:
.long UART0IntVector
.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.