blob: 1acaf7f29d9db8dac102d016f32581cacf28d406 [file] [log] [blame]
;************************************************
;*
;* Part one of the system initialization code, contains low-level
;* initialization, plain thumb variant.
;*
;* Copyright 2013 IAR Systems. All rights reserved.
;*
;* $Revision: 64600 $
;*
;******************* Version History **********************************************
;
; V6, May, 16,2013 TYS:a) Add XMC1300_SCU.inc
;
;**********************************************************************************
;
; The modules in this file are included in the libraries, and may be replaced
; by any user-defined modules that define the PUBLIC symbol _program_start or
; a user defined start symbol.
; To override the cstartup defined in the library, simply add your modified
; version to the workbench project.
;
; Cortex-M version
;
MODULE ?cstartup
#ifdef DAVE_CE
#include "XMC1300_SCU.inc"
#include "Device_Data.h"
#else
#define CLKVAL1_SSW 0x00000100
#define CLKVAL2_SSW 0x00000000
#endif
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
EXTERN __iar_program_start
PUBLIC __vector_table
DATA
__vector_table
DCD sfe(CSTACK)
DCD Reset_Handler ; Reset Handler
DCD 0 ; 0x8
DCD 0 ; 0xC
DCD CLKVAL1_SSW ; 0x10 CLK_VAL1 - (CLKCR default)
DCD CLKVAL2_SSW ; 0x14 CLK_VAL2 - (CGATCLR0 default)
SECTION .vect_table:CODE:ROOT(2)
THUMB
LDR R0,=HardFault_Handler
BX R0
LDR R0,=Undef_Handler
BX R0
LDR R0,=Undef_Handler
BX R0
LDR R0,=Undef_Handler
BX R0
LDR R0,=Undef_Handler
BX R0
LDR R0,=Undef_Handler
BX R0
LDR R0,=Undef_Handler
BX R0
LDR R0,=Undef_Handler
BX R0
LDR R0,=SVC_Handler
BX R0
LDR R0,=Undef_Handler
BX R0
LDR R0,=Undef_Handler
BX R0
LDR R0,=PendSV_Handler
BX R0
LDR R0,=SysTick_Handler
BX R0
; External Interrupts
LDR R0,=SCU_0_IRQHandler ; Handler name for SR SCU_0
BX R0
LDR R0,=SCU_1_IRQHandler ; Handler name for SR SCU_1
BX R0
LDR R0,=SCU_2_IRQHandler ; Handler name for SR SCU_2
BX R0
LDR R0,=ERU0_0_IRQHandler ; Handler name for SR ERU0_0
BX R0
LDR R0,=ERU0_1_IRQHandler ; Handler name for SR ERU0_1
BX R0
LDR R0,=ERU0_2_IRQHandler ; Handler name for SR ERU0_2
BX R0
LDR R0,=ERU0_3_IRQHandler ; Handler name for SR ERU0_3
BX R0
LDR R0,=MATH0_0_IRQHandler ; Handler name for SR MATH0_0
BX R0
LDR R0,=Undef_Handler ; Not Available
BX R0
LDR R0,=USIC0_0_IRQHandler ; Handler name for SR USIC0_0
BX R0
LDR R0,=USIC0_1_IRQHandler ; Handler name for SR USIC0_1
BX R0
LDR R0,=USIC0_2_IRQHandler ; Handler name for SR USIC0_2
BX R0
LDR R0,=USIC0_3_IRQHandler ; Handler name for SR USIC0_3
BX R0
LDR R0,=USIC0_4_IRQHandler ; Handler name for SR USIC0_4
BX R0
LDR R0,=USIC0_5_IRQHandler ; Handler name for SR USIC0_5
BX R0
LDR R0,=VADC0_C0_0_IRQHandler ; Handler name for SR VADC0_C0_0
BX R0
LDR R0,=VADC0_C0_1_IRQHandler ; Handler name for SR VADC0_C0_1
BX R0
LDR R0,=VADC0_G0_0_IRQHandler ; Handler name for SR VADC0_G0_0
BX R0
LDR R0,=VADC0_G0_1_IRQHandler ; Handler name for SR VADC0_G0_1
BX R0
LDR R0,=VADC0_G1_0_IRQHandler ; Handler name for SR VADC0_G1_0
BX R0
LDR R0,=VADC0_G1_1_IRQHandler ; Handler name for SR VADC0_G1_1
BX R0
LDR R0,=CCU40_0_IRQHandler ; Handler name for SR CCU40_0
BX R0
LDR R0,=CCU40_1_IRQHandler ; Handler name for SR CCU40_1
BX R0
LDR R0,=CCU40_2_IRQHandler ; Handler name for SR CCU40_2
BX R0
LDR R0,=CCU40_3_IRQHandler ; Handler name for SR CCU40_3
BX R0
LDR R0,=CCU80_0_IRQHandler ; Handler name for SR CCU80_0
BX R0
LDR R0,=CCU80_1_IRQHandler ; Handler name for SR CCU80_1
BX R0
LDR R0,=POSIF0_0_IRQHandler ; Handler name for SR POSIF0_0
BX R0
LDR R0,=POSIF0_1_IRQHandler ; Handler name for SR POSIF0_1
BX R0
LDR R0,=Undef_Handler ; Not Available
BX R0
LDR R0,=Undef_Handler ; Not Available
BX R0
LDR R0,=BCCU0_0_IRQHandler ; Handler name for SR BCCU0_0
BX R0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;
EXTERN SystemInit
SECTION .text:CODE:NOROOT(2)
THUMB
PUBWEAK Reset_Handler
SECTION .text:CODE:REORDER(2)
Reset_Handler
LDR R0, =SystemInit
BLX R0
LDR R0, =SystemInit_DAVE3
BLX R0
LDR R0, =__iar_program_start
BX R0
PUBWEAK Undef_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
Undef_Handler
B Undef_Handler
PUBWEAK HardFault_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
HardFault_Handler
B HardFault_Handler
PUBWEAK SVC_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
SVC_Handler
B SVC_Handler
PUBWEAK PendSV_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
PendSV_Handler
B PendSV_Handler
PUBWEAK SysTick_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
SysTick_Handler
B SysTick_Handler
PUBWEAK SCU_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
SCU_0_IRQHandler
B SCU_0_IRQHandler
PUBWEAK SCU_1_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
SCU_1_IRQHandler
B SCU_1_IRQHandler
PUBWEAK SCU_2_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
SCU_2_IRQHandler
B SCU_2_IRQHandler
PUBWEAK ERU0_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
ERU0_0_IRQHandler
B ERU0_0_IRQHandler
PUBWEAK ERU0_1_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
ERU0_1_IRQHandler
B ERU0_1_IRQHandler
PUBWEAK ERU0_2_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
ERU0_2_IRQHandler
B ERU0_2_IRQHandler
PUBWEAK ERU0_3_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
ERU0_3_IRQHandler
B ERU0_3_IRQHandler
PUBWEAK MATH0_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
MATH0_0_IRQHandler
B MATH0_0_IRQHandler
PUBWEAK USIC0_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
USIC0_0_IRQHandler
B USIC0_0_IRQHandler
PUBWEAK USIC0_1_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
USIC0_1_IRQHandler
B USIC0_1_IRQHandler
PUBWEAK USIC0_2_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
USIC0_2_IRQHandler
B USIC0_2_IRQHandler
PUBWEAK USIC0_3_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
USIC0_3_IRQHandler
B USIC0_3_IRQHandler
PUBWEAK USIC0_4_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
USIC0_4_IRQHandler
B USIC0_4_IRQHandler
PUBWEAK USIC0_5_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
USIC0_5_IRQHandler
B USIC0_5_IRQHandler
PUBWEAK VADC0_C0_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
VADC0_C0_0_IRQHandler
B VADC0_C0_0_IRQHandler
PUBWEAK VADC0_C0_1_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
VADC0_C0_1_IRQHandler
B VADC0_C0_1_IRQHandler
PUBWEAK VADC0_G0_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
VADC0_G0_0_IRQHandler
B VADC0_G0_0_IRQHandler
PUBWEAK VADC0_G0_1_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
VADC0_G0_1_IRQHandler
B VADC0_G0_1_IRQHandler
PUBWEAK VADC0_G1_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
VADC0_G1_0_IRQHandler
B VADC0_G1_0_IRQHandler
PUBWEAK VADC0_G1_1_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
VADC0_G1_1_IRQHandler
B VADC0_G1_1_IRQHandler
PUBWEAK CCU40_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
CCU40_0_IRQHandler
B CCU40_0_IRQHandler
PUBWEAK CCU40_1_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
CCU40_1_IRQHandler
B CCU40_1_IRQHandler
PUBWEAK CCU40_2_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
CCU40_2_IRQHandler
B CCU40_2_IRQHandler
PUBWEAK CCU40_3_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
CCU40_3_IRQHandler
B CCU40_3_IRQHandler
PUBWEAK CCU80_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
CCU80_0_IRQHandler
B CCU80_0_IRQHandler
PUBWEAK CCU80_1_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
CCU80_1_IRQHandler
B CCU80_1_IRQHandler
PUBWEAK POSIF0_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
POSIF0_0_IRQHandler
B POSIF0_0_IRQHandler
PUBWEAK POSIF0_1_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
POSIF0_1_IRQHandler
B POSIF0_1_IRQHandler
PUBWEAK BCCU0_0_IRQHandler
SECTION .text:CODE:REORDER:NOROOT(1)
BCCU0_0_IRQHandler
B BCCU0_0_IRQHandler
; Definition of the default weak SystemInit_DAVE3 function
;If DAVE3 requires an extended SystemInit it will create its own version of
;SystemInit_DAVE3 which overrides this weak definition. Example includes
;setting up of external memory interfaces.
PUBWEAK SystemInit_DAVE3
SECTION .text:CODE:REORDER:NOROOT(2)
SystemInit_DAVE3
NOP
BX LR
;Decision function queried by CMSIS startup for Clock tree setup ======== */
;In the absence of DAVE code engine, CMSIS SystemInit() must perform clock tree setup.
;This decision routine defined here will always return TRUE.
;When overridden by a definition defined in DAVE code engine, this routine
;returns FALSE indicating that the code engine has performed the clock setup
PUBWEAK AllowClkInitByStartup
SECTION .text:CODE:REORDER:NOROOT(2)
AllowClkInitByStartup
MOVS R0,#1
BX LR
END