瀏覽代碼

+ added generic stellaris support as provided by #17365

git-svn-id: trunk@15957 -
florian 15 年之前
父節點
當前提交
f13eff22b0
共有 5 個文件被更改,包括 305 次插入7 次删除
  1. 1 0
      .gitattributes
  2. 9 4
      compiler/arm/cpuinfo.pas
  3. 2 2
      rtl/embedded/Makefile
  4. 1 1
      rtl/embedded/Makefile.fpc
  5. 292 0
      rtl/embedded/arm/stellaris.pp

+ 1 - 0
.gitattributes

@@ -6388,6 +6388,7 @@ rtl/embedded/Makefile svneol=native#text/plain
 rtl/embedded/Makefile.fpc svneol=native#text/plain
 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/lpc21x4.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/arm/stm32f103.pp svneol=native#text/plain
 rtl/embedded/check.inc svneol=native#text/plain
 rtl/embedded/check.inc svneol=native#text/plain
 rtl/embedded/empty.cfg svneol=native#text/plain
 rtl/embedded/empty.cfg svneol=native#text/plain

+ 9 - 4
compiler/arm/cpuinfo.pas

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

+ 2 - 2
rtl/embedded/Makefile

@@ -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
 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
 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=
 CPU_UNITS=
 SYSINIT_UNITS=
 SYSINIT_UNITS=
 ifeq ($(ARCH),arm)
 ifeq ($(ARCH),arm)
-CPU_UNITS=lpc21x4 at91sam7x256
+CPU_UNITS=lpc21x4 at91sam7x256 stellaris stm32f103
 endif
 endif
 OBJPASDIR=$(RTL)/objpas
 OBJPASDIR=$(RTL)/objpas
 GRAPHDIR=$(INC)/graph
 GRAPHDIR=$(INC)/graph

+ 1 - 1
rtl/embedded/Makefile.fpc

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

+ 292 - 0
rtl/embedded/arm/stellaris.pp

@@ -0,0 +1,292 @@
+{
+Register definitions and utility code for stellaris
+Preliminary startup code 
+Geoffrey Barton 2010 08 01  [email protected]
+based on stm32f103 created by Jeppe Johansen 2009 - [email protected]
+}
+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.
+