diff --git a/.gitattributes b/.gitattributes index 28b7c55fe1..38317f4b8c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7426,8 +7426,10 @@ 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/cortexm3_start.inc svneol=native#text/pascal +rtl/embedded/arm/cortexm4f_start.inc 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/lm4f120.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/sc32442b.pp svneol=native#text/pascal diff --git a/compiler/arm/agarmgas.pas b/compiler/arm/agarmgas.pas index f59a6a071c..98439bbcca 100644 --- a/compiler/arm/agarmgas.pas +++ b/compiler/arm/agarmgas.pas @@ -109,8 +109,8 @@ unit agarmgas; if (current_settings.fputype = fpu_fpv4_s16) then result:='-mfpu=fpv4-sp-d16 '+result; - if current_settings.cputype=cpu_armv7m then - result:='-march=armv7m -mthumb -mthumb-interwork '+result + if current_settings.cputype in cpu_thumb2 then + result:='-march='+cputype_to_gas_march[current_settings.cputype]+' -mthumb -mthumb-interwork '+result // EDSP instructions in RTL require armv5te at least to not generate error else if current_settings.cputype >= cpu_armv5te then result:='-march='+cputype_to_gas_march[current_settings.cputype]+' '+result; diff --git a/compiler/arm/cpuinfo.pas b/compiler/arm/cpuinfo.pas index e918717890..680d70282c 100644 --- a/compiler/arm/cpuinfo.pas +++ b/compiler/arm/cpuinfo.pas @@ -53,7 +53,7 @@ Type Const cpu_arm = [cpu_none,cpu_armv3,cpu_armv4,cpu_armv4t,cpu_armv5]; cpu_thumb = []; - cpu_thumb2 = [cpu_armv7m]; + cpu_thumb2 = [cpu_armv7m,cpu_armv7em]; Type tfputype = @@ -196,6 +196,9 @@ Type ct_lm3s9b95, ct_lm3s9b96, + { TI Stellaris } + ct_lm4f120h5, + { SAMSUNG } ct_sc32442b, @@ -1020,6 +1023,16 @@ Const sramsize:$00010000 ), + // ct_lm4f120h5, + ( + controllertypestr:'LM4F120H5'; + controllerunitstr:'LM4F120'; + flashbase:$00000000; + flashsize:$00040000; + srambase:$20000000; + sramsize:$00008000 + ), + //ct_SC32442b, ( controllertypestr:'SC32442B'; @@ -1067,6 +1080,7 @@ Const CPUARM_HAS_EDSP, { CPU supports the PLD,STRD,LDRD,MCRR and MRRC instructions } CPUARM_HAS_REV, { CPU supports the REV instruction } CPUARM_HAS_RBIT, { CPU supports the RBIT instruction } + CPUARM_HAS_DMB, { CPU has memory barrier instructions (DMB, DSB, ISB) } CPUARM_HAS_LDREX, CPUARM_HAS_IDIV ); @@ -1086,11 +1100,11 @@ Const { cpu_armv6t2 } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_BLX_LABEL,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX], { cpu_armv6z } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_BLX_LABEL,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_LDREX], { the identifier armv7 is should not be used, it is considered being equal to armv7a } - { cpu_armv7 } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_BLX_LABEL,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX], - { cpu_armv7a } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_BLX_LABEL,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX], - { cpu_armv7r } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_BLX_LABEL,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX], - { cpu_armv7m } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX,CPUARM_HAS_IDIV], - { cpu_armv7em } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX,CPUARM_HAS_IDIV] + { cpu_armv7 } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_BLX_LABEL,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX,CPUARM_HAS_DMB], + { cpu_armv7a } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_BLX_LABEL,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX,CPUARM_HAS_DMB], + { cpu_armv7r } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_BLX_LABEL,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX,CPUARM_HAS_DMB], + { cpu_armv7m } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX,CPUARM_HAS_IDIV,CPUARM_HAS_DMB], + { cpu_armv7em } [CPUARM_HAS_BX,CPUARM_HAS_BLX,CPUARM_HAS_CLZ,CPUARM_HAS_EDSP,CPUARM_HAS_REV,CPUARM_HAS_RBIT,CPUARM_HAS_LDREX,CPUARM_HAS_IDIV,CPUARM_HAS_DMB] ); Implementation diff --git a/compiler/arm/narmmat.pas b/compiler/arm/narmmat.pas index 150105f3c8..5734811baa 100644 --- a/compiler/arm/narmmat.pas +++ b/compiler/arm/narmmat.pas @@ -79,11 +79,11 @@ implementation ) and not(is_64bitint(resultdef)) then result:=nil - else if (current_settings.cputype in [cpu_armv7m]) and + else if (current_settings.cputype in [cpu_armv7m,cpu_armv7em]) and (nodetype=divn) and not(is_64bitint(resultdef)) then result:=nil - else if (current_settings.cputype in [cpu_armv7m]) and + else if (current_settings.cputype in [cpu_armv7m,cpu_armv7em]) and (nodetype=modn) and not(is_64bitint(resultdef)) then begin @@ -198,7 +198,7 @@ implementation secondpass(left); secondpass(right); - if (current_settings.cputype in [cpu_armv7m]) and + if (current_settings.cputype in [cpu_armv7m,cpu_armv7em]) and (nodetype=divn) and not(is_64bitint(resultdef)) then begin diff --git a/compiler/systems/t_embed.pas b/compiler/systems/t_embed.pas index 18a90c1a43..af7f62d974 100644 --- a/compiler/systems/t_embed.pas +++ b/compiler/systems/t_embed.pas @@ -337,6 +337,10 @@ begin ct_lm3s9b92, ct_lm3s9b95, ct_lm3s9b96, + + { TI - Stellaris something } + ct_lm4f120h5, + ct_sc32442b, ct_thumb2bare: begin diff --git a/rtl/arm/setjump.inc b/rtl/arm/setjump.inc index 79a62d55d8..fb7ecbcda0 100644 --- a/rtl/arm/setjump.inc +++ b/rtl/arm/setjump.inc @@ -27,7 +27,7 @@ function fpc_setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_S {$endif} {$endif} - {$if defined(CPUCORTEXM3) or defined(CPUARMV7M)} + {$if defined(CPUARMV7EM) or defined(CPUARMV7M)} stmia r0!, {v1-v6, sl, fp} mov r2, sp stmia r0!, {r2, lr} @@ -44,7 +44,7 @@ function fpc_setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_S procedure fpc_longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP']; compilerproc; asm - {$if defined(CPUCORTEXM3) or defined(CPUARMV7M)} + {$if defined(CPUARMV7EM) or defined(CPUARMV7M)} mov ip, r0 movs r0, r1 it eq diff --git a/rtl/arm/thumb2.inc b/rtl/arm/thumb2.inc index ce3cfa5db3..f75add7504 100644 --- a/rtl/arm/thumb2.inc +++ b/rtl/arm/thumb2.inc @@ -39,7 +39,6 @@ begin ldr r1, [r0] orr r1, r1, #(0xF << 20) str r1, [r0] - bx lr {$ELSE FPUFPV4_S16} rfs r0 and r0,r0,#0xffe0ffff diff --git a/rtl/embedded/Makefile b/rtl/embedded/Makefile index 267dfa6fd2..032ed92a1e 100644 --- a/rtl/embedded/Makefile +++ b/rtl/embedded/Makefile @@ -1,5 +1,5 @@ # -# Don't edit, this file is generated by FPCMake Version 2.0.0 [2012/09/26] +# Don't edit, this file is generated by FPCMake Version 2.0.0 [2012/10/12] # 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 powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd 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 powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android @@ -319,7 +319,10 @@ CPU_UNITS= SYSINIT_UNITS= ifeq ($(ARCH),arm) ifeq ($(SUBARCH),armv7m) -CPU_UNITS=lm3fury lm3tempest stm32f10x_ld stm32f10x_md stm32f10x_hd stm32f10x_xl stm32f10x_conn lpc1768 # thumb2_bare +CPU_UNITS=lm3fury lm3tempest stm32f10x_ld stm32f10x_md stm32f10x_hd stm32f10x_xl stm32f10x_conn lpc1768 lm4f120 # thumb2_bare +endif +ifeq ($(SUBARCH),armv7em) +CPU_UNITS=lm4f120 # thumb2_bare endif ifeq ($(SUBARCH),armv4t) CPU_UNITS=lpc21x4 at91sam7x256 sc32442b diff --git a/rtl/embedded/Makefile.fpc b/rtl/embedded/Makefile.fpc index 20890e12ce..408a247eeb 100644 --- a/rtl/embedded/Makefile.fpc +++ b/rtl/embedded/Makefile.fpc @@ -49,7 +49,10 @@ SYSINIT_UNITS= ifeq ($(ARCH),arm) ifeq ($(SUBARCH),armv7m) -CPU_UNITS=lm3fury lm3tempest stm32f10x_ld stm32f10x_md stm32f10x_hd stm32f10x_xl stm32f10x_conn lpc1768 # thumb2_bare +CPU_UNITS=lm3fury lm3tempest stm32f10x_ld stm32f10x_md stm32f10x_hd stm32f10x_xl stm32f10x_conn lpc1768 lm4f120 # thumb2_bare +endif +ifeq ($(SUBARCH),armv7em) +CPU_UNITS=lm4f120 # thumb2_bare endif ifeq ($(SUBARCH),armv4t) CPU_UNITS=lpc21x4 at91sam7x256 sc32442b diff --git a/rtl/embedded/arm/cortexm4f_start.inc b/rtl/embedded/arm/cortexm4f_start.inc new file mode 100644 index 0000000000..415aab73dd --- /dev/null +++ b/rtl/embedded/arm/cortexm4f_start.inc @@ -0,0 +1,52 @@ +var + _stack_top: record end; external name '_stack_top'; + _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'; + +procedure Pascalmain; external name 'PASCALMAIN'; + +procedure HaltProc; assembler; nostackframe; public name'_haltproc'; +asm +.Lloop: + b .Lloop +end; + +procedure Startup; assembler; nostackframe; [public, alias: '_START']; +asm + 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 + + bl PASCALMAIN + b 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 +end; \ No newline at end of file diff --git a/rtl/embedded/arm/lm4f120.pp b/rtl/embedded/arm/lm4f120.pp new file mode 100644 index 0000000000..ee922ffec5 --- /dev/null +++ b/rtl/embedded/arm/lm4f120.pp @@ -0,0 +1,443 @@ +{$goto on} +unit lm4f120; + +interface + +const + Flash_Base = $00000000; + ROM_Base = $01000000; + SRAM_Base = $20000000; + Bitband_Base = $22000000; + + // FiRM Peripherals + Watchdog0_Base = $40000000; + Watchdog1_Base = $40001000; + GPIOA_Base = $40004000; + GPIOB_Base = $40005000; + GPIOC_Base = $40006000; + GPIOD_Base = $40007000; + SSI0_Base = $40008000; + SSI1_Base = $40009000; + SSI2_Base = $4000A000; + SSI3_Base = $4000B000; + UART0_Base = $4000C000; + UART1_Base = $4000D000; + UART2_Base = $4000E000; + UART3_Base = $4000F000; + UART4_Base = $40010000; + UART5_Base = $40011000; + UART6_Base = $40012000; + UART7_Base = $40013000; + + // Peripherals + I2C0_Base = $40020000; + I2C1_Base = $40021000; + I2C2_Base = $40022000; + I2C3_Base = $40023000; + GPIOE_Base = $40024000; + GPIOF_Base = $40025000; + Timer0_1632_Base = $40030000; + Timer1_1632_Base = $40031000; + Timer2_1632_Base = $40032000; + Timer3_1632_Base = $40033000; + Timer4_1632_Base = $40034000; + Timer5_1632_Base = $40035000; + Timer0_3264_Base = $40036000; + Timer1_3264_Base = $40037000; + ADC0_Base = $40038000; + ADC1_Base = $40039000; + AnalogComp_Base = $4003C000; + CAN0_Base = $40040000; + Timer2_3264_Base = $4004C000; + Timer3_3264_Base = $4004D000; + Timer4_3264_Base = $4004E000; + Timer5_3264_Base = $4004F000; + USB_Base = $40050000; + GPIOA_AHB_Base = $40058000; + GPIOB_AHB_Base = $40059000; + GPIOC_AHB_Base = $4005A000; + GPIOD_AHB_Base = $4005B000; + GPIOE_AHB_Base = $4005C000; + GPIOF_AHB_Base = $4005D000; + EEPROMKeyLocker_Base = $400AF000; + SystemException_Base = $400F9000; + Hibernation_Base = $400FC000; + FlashControl_Base = $400FD000; + SystemControl_Base = $400FE000; + uDMA_Base = $400FF000; + PeriphBitband_Base = $42000000; +// Private Peripheral Bus + ITM_Base = $E0000000; + DWT_Base = $E0001000; + FPB_Base = $E0002000; + CortexM4F_Base = $E000E000; + TPIU_Base = $E0040000; + ETM_Base = $E0041000; + +implementation + +procedure NMI_interrupt; external name 'NMI_interrupt'; +procedure Hardfault_interrupt; external name 'Hardfault_interrupt'; +procedure MemManage_interrupt; external name 'MemManage_interrupt'; +procedure BusFault_interrupt; external name 'BusFault_interrupt'; +procedure UsageFault_interrupt; external name 'UsageFault_interrupt'; +procedure SWI_interrupt; external name 'SWI_interrupt'; +procedure DebugMonitor_interrupt; external name 'DebugMonitor_interrupt'; +procedure PendingSV_interrupt; external name 'PendingSV_interrupt'; +procedure SysTick_interrupt; external name 'SysTick_interrupt'; + +procedure GPIO_Port_A_interrupt; external name 'GPIO_Port_A_interrupt'; +procedure GPIO_Port_B_interrupt; external name 'GPIO_Port_B_interrupt'; +procedure GPIO_Port_C_interrupt; external name 'GPIO_Port_C_interrupt'; +procedure GPIO_Port_D_interrupt; external name 'GPIO_Port_D_interrupt'; +procedure GPIO_Port_E_interrupt; external name 'GPIO_Port_E_interrupt'; +procedure UART0_interrupt; external name 'UART0_interrupt'; +procedure UART1_interrupt; external name 'UART1_interrupt'; +procedure SSI0_interrupt; external name 'SSI0_interrupt'; +procedure I2C0_interrupt; external name 'I2C0_interrupt'; +procedure ADC0_Seq_0_interrupt; external name 'ADC0_Seq_0_interrupt'; +procedure ADC0_Seq_1_interrupt; external name 'ADC0_Seq_1_interrupt'; +procedure ADC0_Seq_2_interrupt; external name 'ADC0_Seq_2_interrupt'; +procedure ADC0_Seq_3_interrupt; external name 'ADC0_Seq_3_interrupt'; +procedure Watchdog_0_and_1_interrupt; external name 'Watchdog_0_and_1_interrupt'; +procedure Timer_1632_0A_interrupt; external name 'Timer_1632_0A_interrupt'; +procedure Timer_1632_0B_interrupt; external name 'Timer_1632_0B_interrupt'; +procedure Timer_1632_1A_interrupt; external name 'Timer_1632_1A_interrupt'; +procedure Timer_1632_1B_interrupt; external name 'Timer_1632_1B_interrupt'; +procedure Timer_1632_2A_interrupt; external name 'Timer_1632_2A_interrupt'; +procedure Timer_1632_2B_interrupt; external name 'Timer_1632_2B_interrupt'; +procedure Analog_Comp_0_interrupt; external name 'Analog_Comp_0_interrupt'; +procedure Analog_Comp_1_interrupt; external name 'Analog_Comp_1_interrupt'; +procedure System_Control_interrupt; external name 'System_Control_interrupt'; +procedure Flash_and_EEPROM_interrupt; external name 'Flash_and_EEPROM_interrupt'; +procedure GPIO_Port_F_interrupt; external name 'GPIO_Port_F_interrupt'; +procedure UART2_interrupt; external name 'UART2_interrupt'; +procedure SSI1_interrupt; external name 'SSI1_interrupt'; +procedure Timer_1632_3A_interrupt; external name 'Timer_1632_3A_interrupt'; +procedure Timer_1632_3B_interrupt; external name 'Timer_1632_3B_interrupt'; +procedure I2C1_interrupt; external name 'I2C1_interrupt'; +procedure CAN0_interrupt; external name 'CAN0_interrupt'; +procedure Hibernation_interrupt; external name 'Hibernation_interrupt'; +procedure USB_interrupt; external name 'USB_interrupt'; +procedure uDMA_Software_interrupt; external name 'uDMA_Software_interrupt'; +procedure uDMA_Error_interrupt; external name 'uDMA_Error_interrupt'; +procedure ADC1_Seq_0_interrupt; external name 'ADC1_Seq_0_interrupt'; +procedure ADC1_Seq_1_interrupt; external name 'ADC1_Seq_1_interrupt'; +procedure ADC1_Seq_2_interrupt; external name 'ADC1_Seq_2_interrupt'; +procedure ADC1_Seq_3_interrupt; external name 'ADC1_Seq_3_interrupt'; +procedure SSI2_interrupt; external name 'SSI2_interrupt'; +procedure SSI3_interrupt; external name 'SSI3_interrupt'; +procedure UART3_interrupt; external name 'UART3_interrupt'; +procedure UART4_interrupt; external name 'UART4_interrupt'; +procedure UART5_interrupt; external name 'UART5_interrupt'; +procedure UART6_interrupt; external name 'UART6_interrupt'; +procedure UART7_interrupt; external name 'UART7_interrupt'; +procedure I2C2_interrupt; external name 'I2C2_interrupt'; +procedure I2C3_interrupt; external name 'I2C3_interrupt'; +procedure Timer_1632_4A_interrupt; external name 'Timer_1632_4A_interrupt'; +procedure Timer_1632_4B_interrupt; external name 'Timer_1632_4B_interrupt'; +procedure Timer_1632_5A_interrupt; external name 'Timer_1632_5A_interrupt'; +procedure Timer_1632_5B_interrupt; external name 'Timer_1632_5B_interrupt'; +procedure Timer_3264_0A_interrupt; external name 'Timer_3264_0A_interrupt'; +procedure Timer_3264_0B_interrupt; external name 'Timer_3264_0B_interrupt'; +procedure Timer_3264_1A_interrupt; external name 'Timer_3264_1A_interrupt'; +procedure Timer_3264_1B_interrupt; external name 'Timer_3264_1B_interrupt'; +procedure Timer_3264_2A_interrupt; external name 'Timer_3264_2A_interrupt'; +procedure Timer_3264_2B_interrupt; external name 'Timer_3264_2B_interrupt'; +procedure Timer_3264_3A_interrupt; external name 'Timer_3264_3A_interrupt'; +procedure Timer_3264_3B_interrupt; external name 'Timer_3264_3B_interrupt'; +procedure Timer_3264_4A_interrupt; external name 'Timer_3264_4A_interrupt'; +procedure Timer_3264_4B_interrupt; external name 'Timer_3264_4B_interrupt'; +procedure Timer_3264_5A_interrupt; external name 'Timer_3264_5A_interrupt'; +procedure Timer_3264_5B_interrupt; external name 'Timer_3264_5B_interrupt'; +procedure System_Exception_imprecise_interrupt; external name 'System_Exception_imprecise_interrupt'; + +{$i cortexm4f_start.inc} + +procedure Vectors; assembler; nostackframe; +label interrupt_vectors; +asm + .section ".init.interrupt_vectors" +interrupt_vectors: + .long _stack_top + .long Startup + .long NMI_interrupt + .long Hardfault_interrupt + .long MemManage_interrupt + .long BusFault_interrupt + .long UsageFault_interrupt + .long 0 + .long 0 + .long 0 + .long 0 + .long SWI_interrupt + .long DebugMonitor_interrupt + .long 0 + .long PendingSV_interrupt + .long SysTick_interrupt + + .long GPIO_Port_A_interrupt + .long GPIO_Port_B_interrupt + .long GPIO_Port_C_interrupt + .long GPIO_Port_D_interrupt + .long GPIO_Port_E_interrupt + .long UART0_interrupt + .long UART1_interrupt + .long SSI0_interrupt + .long I2C0_interrupt + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long ADC0_Seq_0_interrupt + .long ADC0_Seq_1_interrupt + .long ADC0_Seq_2_interrupt + .long ADC0_Seq_3_interrupt + .long Watchdog_0_and_1_interrupt + .long Timer_1632_0A_interrupt + .long Timer_1632_0B_interrupt + .long Timer_1632_1A_interrupt + .long Timer_1632_1B_interrupt + .long Timer_1632_2A_interrupt + .long Timer_1632_2B_interrupt + .long Analog_Comp_0_interrupt + .long 0 + .long Analog_Comp_1_interrupt + .long System_Control_interrupt + .long Flash_and_EEPROM_interrupt + .long GPIO_Port_F_interrupt + .long 0 + .long 0 + .long UART2_interrupt + .long SSI1_interrupt + .long Timer_1632_3A_interrupt + .long Timer_1632_3B_interrupt + .long I2C1_interrupt + .long 0 + .long CAN0_interrupt + .long 0 + .long 0 + .long 0 + .long Hibernation_interrupt + .long USB_interrupt + .long 0 + .long uDMA_Software_interrupt + .long uDMA_Error_interrupt + .long ADC1_Seq_0_interrupt + .long ADC1_Seq_1_interrupt + .long ADC1_Seq_2_interrupt + .long ADC1_Seq_3_interrupt + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long SSI2_interrupt + .long SSI3_interrupt + .long UART3_interrupt + .long UART4_interrupt + .long UART5_interrupt + .long UART6_interrupt + .long UART7_interrupt + .long 0 + .long 0 + .long 0 + .long 0 + .long I2C2_interrupt + .long I2C3_interrupt + .long Timer_1632_4A_interrupt + .long Timer_1632_4B_interrupt + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long Timer_1632_5A_interrupt + .long Timer_1632_5B_interrupt + .long Timer_3264_0A_interrupt + .long Timer_3264_0B_interrupt + .long Timer_3264_1A_interrupt + .long Timer_3264_1B_interrupt + .long Timer_3264_2A_interrupt + .long Timer_3264_2B_interrupt + .long Timer_3264_3A_interrupt + .long Timer_3264_3B_interrupt + .long Timer_3264_4A_interrupt + .long Timer_3264_4B_interrupt + .long Timer_3264_5A_interrupt + .long Timer_3264_5B_interrupt + .long System_Exception_imprecise_interrupt + + .weak NMI_interrupt + .weak Hardfault_interrupt + .weak MemManage_interrupt + .weak BusFault_interrupt + .weak UsageFault_interrupt + .weak SWI_interrupt + .weak DebugMonitor_interrupt + .weak PendingSV_interrupt + .weak SysTick_interrupt + + .weak GPIO_Port_A_interrupt + .weak GPIO_Port_B_interrupt + .weak GPIO_Port_C_interrupt + .weak GPIO_Port_D_interrupt + .weak GPIO_Port_E_interrupt + .weak UART0_interrupt + .weak UART1_interrupt + .weak SSI0_interrupt + .weak I2C0_interrupt + .weak ADC0_Seq_0_interrupt + .weak ADC0_Seq_1_interrupt + .weak ADC0_Seq_2_interrupt + .weak ADC0_Seq_3_interrupt + .weak Watchdog_0_and_1_interrupt + .weak Timer_1632_0A_interrupt + .weak Timer_1632_0B_interrupt + .weak Timer_1632_1A_interrupt + .weak Timer_1632_1B_interrupt + .weak Timer_1632_2A_interrupt + .weak Timer_1632_2B_interrupt + .weak Analog_Comp_0_interrupt + .weak Analog_Comp_1_interrupt + .weak System_Control_interrupt + .weak Flash_and_EEPROM_interrupt + .weak GPIO_Port_F_interrupt + .weak UART2_interrupt + .weak SSI1_interrupt + .weak Timer_1632_3A_interrupt + .weak Timer_1632_3B_interrupt + .weak I2C1_interrupt + .weak CAN0_interrupt + .weak Hibernation_interrupt + .weak USB_interrupt + .weak uDMA_Software_interrupt + .weak uDMA_Error_interrupt + .weak ADC1_Seq_0_interrupt + .weak ADC1_Seq_1_interrupt + .weak ADC1_Seq_2_interrupt + .weak ADC1_Seq_3_interrupt + .weak SSI2_interrupt + .weak SSI3_interrupt + .weak UART3_interrupt + .weak UART4_interrupt + .weak UART5_interrupt + .weak UART6_interrupt + .weak UART7_interrupt + .weak I2C2_interrupt + .weak I2C3_interrupt + .weak Timer_1632_4A_interrupt + .weak Timer_1632_4B_interrupt + .weak Timer_1632_5A_interrupt + .weak Timer_1632_5B_interrupt + .weak Timer_3264_0A_interrupt + .weak Timer_3264_0B_interrupt + .weak Timer_3264_1A_interrupt + .weak Timer_3264_1B_interrupt + .weak Timer_3264_2A_interrupt + .weak Timer_3264_2B_interrupt + .weak Timer_3264_3A_interrupt + .weak Timer_3264_3B_interrupt + .weak Timer_3264_4A_interrupt + .weak Timer_3264_4B_interrupt + .weak Timer_3264_5A_interrupt + .weak Timer_3264_5B_interrupt + .weak System_Exception_imprecise_interrupt + + .set NMI_interrupt, Startup + .set Hardfault_interrupt, Startup + .set MemManage_interrupt, Startup + .set BusFault_interrupt, Startup + .set UsageFault_interrupt, Startup + .set SWI_interrupt, Startup + .set DebugMonitor_interrupt, Startup + .set PendingSV_interrupt, Startup + .set SysTick_interrupt, Startup + + .set GPIO_Port_A_interrupt, Startup + .set GPIO_Port_B_interrupt, Startup + .set GPIO_Port_C_interrupt, Startup + .set GPIO_Port_D_interrupt, Startup + .set GPIO_Port_E_interrupt, Startup + .set UART0_interrupt, Startup + .set UART1_interrupt, Startup + .set SSI0_interrupt, Startup + .set I2C0_interrupt, Startup + .set ADC0_Seq_0_interrupt, Startup + .set ADC0_Seq_1_interrupt, Startup + .set ADC0_Seq_2_interrupt, Startup + .set ADC0_Seq_3_interrupt, Startup + .set Watchdog_0_and_1_interrupt, Startup + .set Timer_1632_0A_interrupt, Startup + .set Timer_1632_0B_interrupt, Startup + .set Timer_1632_1A_interrupt, Startup + .set Timer_1632_1B_interrupt, Startup + .set Timer_1632_2A_interrupt, Startup + .set Timer_1632_2B_interrupt, Startup + .set Analog_Comp_0_interrupt, Startup + .set Analog_Comp_1_interrupt, Startup + .set System_Control_interrupt, Startup + .set Flash_and_EEPROM_interrupt, Startup + .set GPIO_Port_F_interrupt, Startup + .set UART2_interrupt, Startup + .set SSI1_interrupt, Startup + .set Timer_1632_3A_interrupt, Startup + .set Timer_1632_3B_interrupt, Startup + .set I2C1_interrupt, Startup + .set CAN0_interrupt, Startup + .set Hibernation_interrupt, Startup + .set USB_interrupt, Startup + .set uDMA_Software_interrupt, Startup + .set uDMA_Error_interrupt, Startup + .set ADC1_Seq_0_interrupt, Startup + .set ADC1_Seq_1_interrupt, Startup + .set ADC1_Seq_2_interrupt, Startup + .set ADC1_Seq_3_interrupt, Startup + .set SSI2_interrupt, Startup + .set SSI3_interrupt, Startup + .set UART3_interrupt, Startup + .set UART4_interrupt, Startup + .set UART5_interrupt, Startup + .set UART6_interrupt, Startup + .set UART7_interrupt, Startup + .set I2C2_interrupt, Startup + .set I2C3_interrupt, Startup + .set Timer_1632_4A_interrupt, Startup + .set Timer_1632_4B_interrupt, Startup + .set Timer_1632_5A_interrupt, Startup + .set Timer_1632_5B_interrupt, Startup + .set Timer_3264_0A_interrupt, Startup + .set Timer_3264_0B_interrupt, Startup + .set Timer_3264_1A_interrupt, Startup + .set Timer_3264_1B_interrupt, Startup + .set Timer_3264_2A_interrupt, Startup + .set Timer_3264_2B_interrupt, Startup + .set Timer_3264_3A_interrupt, Startup + .set Timer_3264_3B_interrupt, Startup + .set Timer_3264_4A_interrupt, Startup + .set Timer_3264_4B_interrupt, Startup + .set Timer_3264_5A_interrupt, Startup + .set Timer_3264_5B_interrupt, Startup + .set System_Exception_imprecise_interrupt, Startup + + .text +end; + +end. + diff --git a/rtl/inc/system.inc b/rtl/inc/system.inc index b53d92cf51..6cbc093dfa 100644 --- a/rtl/inc/system.inc +++ b/rtl/inc/system.inc @@ -218,7 +218,7 @@ function do_isdevice(handle:thandle):boolean;forward; {$Error Can't determine processor type !} {$endif} {$i armdefines.inc} - {$if defined(CPUCORTEXM3) or defined(CPUARMV7M)} + {$if defined(CPUARMV7EM) or defined(CPUARMV7M)} {$i thumb2.inc} { Case dependent, don't change } {$else} {$i arm.inc} { Case dependent, don't change } diff --git a/rtl/java/jsystem.inc b/rtl/java/jsystem.inc index 711c6f7fab..9a2817dd5f 100644 --- a/rtl/java/jsystem.inc +++ b/rtl/java/jsystem.inc @@ -226,7 +226,7 @@ function do_isdevice(handle:thandle):boolean;forward; {$Error Can't determine processor type !} {$endif} {$i armdefines.inc} - {$if defined(CPUCORTEXM3) or defined(CPUARMV7M)} + {$if defined(CPUARMV7EM) or defined(CPUARMV7M)} {$i thumb2.inc} { Case dependent, don't change } {$else} {$i arm.inc} { Case dependent, don't change }