blob: 99b1ad2505ac4beeba2a68cec8d439c39d165329 [file] [log] [blame]
;*****************************************************************************/
; * @file startup_XMC4400.s
; * @brief CMSIS Cortex-M4 Core Device Startup File for
; * Infineon XMC4400 Device Series
; * @version V1.00
; * @date 05. February 2013
; *
; * @note
; * Copyright (C) 2009-2013 ARM Limited. All rights reserved.
; *
; * @par
; * ARM Limited (ARM) is supplying this software for use with Cortex-M
; * processor based microcontrollers. This file can be freely distributed
; * within development tools that are supporting such ARM based processors.
; *
; * @par
; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
; *
; ******************************************************************************/
;/* ********************* Version History *********************************** */
;/* ***************************************************************************
; V0.2 , August 2012, First version
; V1.0 , February 2013, FIX for CPU prefetch bug implemented
;**************************************************************************** */
;* <<< Use Configuration Wizard in Context Menu >>>
; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00000200
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8
THUMB
;/* ===========START : MACRO DEFINITION MACRO DEFINITION ================== */
;/*
; * STEP_AB and below have the prefetch functional deviation (Errata id: PMU_CM.001).
; * A veneer defined below will first
; * be executed which in turn branches to the final exception handler.
; *
; * In addition to defining the veneers, the vector table must for these buggy
; * devices contain the veneers.
; */
;set WORKAROUND_PMU_CM001 under Options for target - Asm - Define
;or use define below
GBLL WORKAROUND_PMU_CM001
;/* A macro to setup a vector table entry based on STEP ID */
IF :DEF:WORKAROUND_PMU_CM001
MACRO
ExcpVector $Handler
DCD $Handler._Veneer
MEND
ELSE
MACRO
ExcpVector $Handler
DCD $Handler
MEND
ENDIF
;/* A macro to ease definition of the various handlers based on STEP ID */
IF :DEF:WORKAROUND_PMU_CM001
;/* First define the final exception handler */
MACRO
ExcpHandler $Handler_Func
$Handler_Func\
PROC
EXPORT $Handler_Func [WEAK]
B .
ENDP
;/* And then define a veneer that will branch to the final excp handler */
$Handler_Func._Veneer\
PROC
EXPORT $Handler_Func._Veneer [WEAK]
LDR R0, =$Handler_Func
PUSH {LR}
BLX R0
POP {PC}
ALIGN
LTORG
ENDP
MEND
ELSE
;/* No prefetch bug, hence define only the final exception handler */
MACRO
ExcpHandler $Handler_Func
$Handler_Func\
PROC
EXPORT $Handler_Func [WEAK]
B .
ENDP
MEND
ENDIF
;/* ============= END OF MACRO DEFINITION MACRO DEFINITION ================== */
;* ================== START OF VECTOR TABLE DEFINITION ====================== */
;* Vector Table - This gets programed into VTOR register */
AREA RESET, DATA, READONLY
EXPORT __Vectors
EXPORT __Vectors_End
EXPORT __Vectors_Size
__Vectors
DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
ExcpVector NMI_Handler ; NMI Handler
ExcpVector HardFault_Handler ; Hard Fault Handler
ExcpVector MemManage_Handler ; MPU Fault Handler
ExcpVector BusFault_Handler ; Bus Fault Handler
ExcpVector UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
ExcpVector SVC_Handler ; SVCall Handler
ExcpVector DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved
ExcpVector PendSV_Handler ; PendSV Handler
ExcpVector SysTick_Handler ; SysTick Handler
; Interrupt Handlers for Service Requests (SR) from XMC4400 Peripherals
ExcpVector SCU_0_IRQHandler ; Handler name for SR SCU_0
ExcpVector ERU0_0_IRQHandler ; Handler name for SR ERU0_0
ExcpVector ERU0_1_IRQHandler ; Handler name for SR ERU0_1
ExcpVector ERU0_2_IRQHandler ; Handler name for SR ERU0_2
ExcpVector ERU0_3_IRQHandler ; Handler name for SR ERU0_3
ExcpVector ERU1_0_IRQHandler ; Handler name for SR ERU1_0
ExcpVector ERU1_1_IRQHandler ; Handler name for SR ERU1_1
ExcpVector ERU1_2_IRQHandler ; Handler name for SR ERU1_2
ExcpVector ERU1_3_IRQHandler ; Handler name for SR ERU1_3
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
ExcpVector PMU0_0_IRQHandler ; Handler name for SR PMU0_0
DCD 0 ; Reserved
ExcpVector VADC0_C0_0_IRQHandler ; Handler name for SR VADC0_C0_0
ExcpVector VADC0_C0_1_IRQHandler ; Handler name for SR VADC0_C0_1
ExcpVector VADC0_C0_2_IRQHandler ; Handler name for SR VADC0_C0_1
ExcpVector VADC0_C0_3_IRQHandler ; Handler name for SR VADC0_C0_3
ExcpVector VADC0_G0_0_IRQHandler ; Handler name for SR VADC0_G0_0
ExcpVector VADC0_G0_1_IRQHandler ; Handler name for SR VADC0_G0_1
ExcpVector VADC0_G0_2_IRQHandler ; Handler name for SR VADC0_G0_2
ExcpVector VADC0_G0_3_IRQHandler ; Handler name for SR VADC0_G0_3
ExcpVector VADC0_G1_0_IRQHandler ; Handler name for SR VADC0_G1_0
ExcpVector VADC0_G1_1_IRQHandler ; Handler name for SR VADC0_G1_1
ExcpVector VADC0_G1_2_IRQHandler ; Handler name for SR VADC0_G1_2
ExcpVector VADC0_G1_3_IRQHandler ; Handler name for SR VADC0_G1_3
ExcpVector VADC0_G2_0_IRQHandler ; Handler name for SR VADC0_G2_0
ExcpVector VADC0_G2_1_IRQHandler ; Handler name for SR VADC0_G2_1
ExcpVector VADC0_G2_2_IRQHandler ; Handler name for SR VADC0_G2_2
ExcpVector VADC0_G2_3_IRQHandler ; Handler name for SR VADC0_G2_3
ExcpVector VADC0_G3_0_IRQHandler ; Handler name for SR VADC0_G3_0
ExcpVector VADC0_G3_1_IRQHandler ; Handler name for SR VADC0_G3_1
ExcpVector VADC0_G3_2_IRQHandler ; Handler name for SR VADC0_G3_2
ExcpVector VADC0_G3_3_IRQHandler ; Handler name for SR VADC0_G3_3
ExcpVector DSD0_0_IRQHandler ; Handler name for SR DSD0_0
ExcpVector DSD0_1_IRQHandler ; Handler name for SR DSD0_1
ExcpVector DSD0_2_IRQHandler ; Handler name for SR DSD0_2
ExcpVector DSD0_3_IRQHandler ; Handler name for SR DSD0_3
ExcpVector DSD0_4_IRQHandler ; Handler name for SR DSD0_4
ExcpVector DSD0_5_IRQHandler ; Handler name for SR DSD0_5
ExcpVector DSD0_6_IRQHandler ; Handler name for SR DSD0_6
ExcpVector DSD0_7_IRQHandler ; Handler name for SR DSD0_7
ExcpVector DAC0_0_IRQHandler ; Handler name for SR DAC0_0
ExcpVector DAC0_1_IRQHandler ; Handler name for SR DAC0_1
ExcpVector CCU40_0_IRQHandler ; Handler name for SR CCU40_0
ExcpVector CCU40_1_IRQHandler ; Handler name for SR CCU40_1
ExcpVector CCU40_2_IRQHandler ; Handler name for SR CCU40_2
ExcpVector CCU40_3_IRQHandler ; Handler name for SR CCU40_3
ExcpVector CCU41_0_IRQHandler ; Handler name for SR CCU41_0
ExcpVector CCU41_1_IRQHandler ; Handler name for SR CCU41_1
ExcpVector CCU41_2_IRQHandler ; Handler name for SR CCU41_2
ExcpVector CCU41_3_IRQHandler ; Handler name for SR CCU41_3
ExcpVector CCU42_0_IRQHandler ; Handler name for SR CCU42_0
ExcpVector CCU42_1_IRQHandler ; Handler name for SR CCU42_1
ExcpVector CCU42_2_IRQHandler ; Handler name for SR CCU42_2
ExcpVector CCU42_3_IRQHandler ; Handler name for SR CCU42_3
ExcpVector CCU43_0_IRQHandler ; Handler name for SR CCU43_0
ExcpVector CCU43_1_IRQHandler ; Handler name for SR CCU43_1
ExcpVector CCU43_2_IRQHandler ; Handler name for SR CCU43_2
ExcpVector CCU43_3_IRQHandler ; Handler name for SR CCU43_3
ExcpVector CCU80_0_IRQHandler ; Handler name for SR CCU80_0
ExcpVector CCU80_1_IRQHandler ; Handler name for SR CCU80_1
ExcpVector CCU80_2_IRQHandler ; Handler name for SR CCU80_2
ExcpVector CCU80_3_IRQHandler ; Handler name for SR CCU80_3
ExcpVector CCU81_0_IRQHandler ; Handler name for SR CCU81_0
ExcpVector CCU81_1_IRQHandler ; Handler name for SR CCU81_1
ExcpVector CCU81_2_IRQHandler ; Handler name for SR CCU81_2
ExcpVector CCU81_3_IRQHandler ; Handler name for SR CCU81_3
ExcpVector POSIF0_0_IRQHandler ; Handler name for SR POSIF0_0
ExcpVector POSIF0_1_IRQHandler ; Handler name for SR POSIF0_1
ExcpVector POSIF1_0_IRQHandler ; Handler name for SR POSIF1_0
ExcpVector POSIF1_1_IRQHandler ; Handler name for SR POSIF1_1
ExcpVector HRPWM_0_IRQHandler ; Handler name for SR HRPWM_0
ExcpVector HRPWM_1_IRQHandler ; Handler name for SR HRPWM_1
ExcpVector HRPWM_2_IRQHandler ; Handler name for SR HRPWM_2
ExcpVector HRPWM_3_IRQHandler ; Handler name for SR HRPWM_3
ExcpVector CAN0_0_IRQHandler ; Handler name for SR CAN0_0
ExcpVector CAN0_1_IRQHandler ; Handler name for SR CAN0_1
ExcpVector CAN0_2_IRQHandler ; Handler name for SR CAN0_2
ExcpVector CAN0_3_IRQHandler ; Handler name for SR CAN0_3
ExcpVector CAN0_4_IRQHandler ; Handler name for SR CAN0_4
ExcpVector CAN0_5_IRQHandler ; Handler name for SR CAN0_5
ExcpVector CAN0_6_IRQHandler ; Handler name for SR CAN0_6
ExcpVector CAN0_7_IRQHandler ; Handler name for SR CAN0_7
ExcpVector USIC0_0_IRQHandler ; Handler name for SR USIC0_0
ExcpVector USIC0_1_IRQHandler ; Handler name for SR USIC0_1
ExcpVector USIC0_2_IRQHandler ; Handler name for SR USIC0_2
ExcpVector USIC0_3_IRQHandler ; Handler name for SR USIC0_3
ExcpVector USIC0_4_IRQHandler ; Handler name for SR USIC0_4
ExcpVector USIC0_5_IRQHandler ; Handler name for SR USIC0_5
ExcpVector USIC1_0_IRQHandler ; Handler name for SR USIC1_0
ExcpVector USIC1_1_IRQHandler ; Handler name for SR USIC1_1
ExcpVector USIC1_2_IRQHandler ; Handler name for SR USIC1_2
ExcpVector USIC1_3_IRQHandler ; Handler name for SR USIC1_3
ExcpVector USIC1_4_IRQHandler ; Handler name for SR USIC1_4
ExcpVector USIC1_5_IRQHandler ; Handler name for SR USIC1_5
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
ExcpVector LEDTS0_0_IRQHandler ; Handler name for SR LEDTS0_0
DCD 0 ; Reserved
ExcpVector FCE0_0_IRQHandler ; Handler name for SR FCE0_0
ExcpVector GPDMA0_0_IRQHandler ; Handler name for SR GPDMA0_0
DCD 0 ; Reserved
ExcpVector USB0_0_IRQHandler ; Handler name for SR USB0_0
ExcpVector ETH0_0_IRQHandler ; Handler name for SR ETH0_0
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
__Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors
;* ================== END OF VECTOR TABLE DEFINITION ======================= */
;* ================== START OF VECTOR ROUTINES ============================= */
AREA |.text|, CODE, READONLY
;* Reset Handler */
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
; Remap vector table
LDR R0, =__Vectors
LDR R1, =0xE000ED08 ;*VTOR register
STR R0,[R1]
;* C routines are likely to be called. Setup the stack now
LDR SP,=__initial_sp
LDR R0, = SystemInit
BLX R0
;SystemInit_DAVE3() is provided by DAVE3 code generation engine. It is
;weakly defined here though for a potential override.
LDR R0, = SystemInit_DAVE3
BLX R0
;* Reset stack pointer before zipping off to user application
LDR SP,=__initial_sp
LDR R0, =__main
BX R0
ALIGN
ENDP
;* ========== START OF EXCEPTION HANDLER DEFINITION ======================== */
;/* Default exception Handlers - Users may override this default functionality by
; defining handlers of the same name in their C code */
ExcpHandler NMI_Handler
ExcpHandler HardFault_Handler
ExcpHandler MemManage_Handler
ExcpHandler BusFault_Handler
ExcpHandler UsageFault_Handler
ExcpHandler SVC_Handler
ExcpHandler DebugMon_Handler
ExcpHandler PendSV_Handler
ExcpHandler SysTick_Handler
;* ============= END OF EXCEPTION HANDLER DEFINITION ======================== */
;* ============= START OF INTERRUPT HANDLER DEFINITION ====================== */
;* IRQ Handlers */
ExcpHandler SCU_0_IRQHandler
ExcpHandler ERU0_0_IRQHandler
ExcpHandler ERU0_1_IRQHandler
ExcpHandler ERU0_2_IRQHandler
ExcpHandler ERU0_3_IRQHandler
ExcpHandler ERU1_0_IRQHandler
ExcpHandler ERU1_1_IRQHandler
ExcpHandler ERU1_2_IRQHandler
ExcpHandler ERU1_3_IRQHandler
ExcpHandler PMU0_0_IRQHandler
ExcpHandler VADC0_C0_0_IRQHandler
ExcpHandler VADC0_C0_1_IRQHandler
ExcpHandler VADC0_C0_2_IRQHandler
ExcpHandler VADC0_C0_3_IRQHandler
ExcpHandler VADC0_G0_0_IRQHandler
ExcpHandler VADC0_G0_1_IRQHandler
ExcpHandler VADC0_G0_2_IRQHandler
ExcpHandler VADC0_G0_3_IRQHandler
ExcpHandler VADC0_G1_0_IRQHandler
ExcpHandler VADC0_G1_1_IRQHandler
ExcpHandler VADC0_G1_2_IRQHandler
ExcpHandler VADC0_G1_3_IRQHandler
ExcpHandler VADC0_G2_0_IRQHandler
ExcpHandler VADC0_G2_1_IRQHandler
ExcpHandler VADC0_G2_2_IRQHandler
ExcpHandler VADC0_G2_3_IRQHandler
ExcpHandler VADC0_G3_0_IRQHandler
ExcpHandler VADC0_G3_1_IRQHandler
ExcpHandler VADC0_G3_2_IRQHandler
ExcpHandler VADC0_G3_3_IRQHandler
ExcpHandler DSD0_0_IRQHandler
ExcpHandler DSD0_1_IRQHandler
ExcpHandler DSD0_2_IRQHandler
ExcpHandler DSD0_3_IRQHandler
ExcpHandler DSD0_4_IRQHandler
ExcpHandler DSD0_5_IRQHandler
ExcpHandler DSD0_6_IRQHandler
ExcpHandler DSD0_7_IRQHandler
ExcpHandler DAC0_0_IRQHandler
ExcpHandler DAC0_1_IRQHandler
ExcpHandler CCU40_0_IRQHandler
ExcpHandler CCU40_1_IRQHandler
ExcpHandler CCU40_2_IRQHandler
ExcpHandler CCU40_3_IRQHandler
ExcpHandler CCU41_0_IRQHandler
ExcpHandler CCU41_1_IRQHandler
ExcpHandler CCU41_2_IRQHandler
ExcpHandler CCU41_3_IRQHandler
ExcpHandler CCU42_0_IRQHandler
ExcpHandler CCU42_1_IRQHandler
ExcpHandler CCU42_2_IRQHandler
ExcpHandler CCU42_3_IRQHandler
ExcpHandler CCU43_0_IRQHandler
ExcpHandler CCU43_1_IRQHandler
ExcpHandler CCU43_2_IRQHandler
ExcpHandler CCU43_3_IRQHandler
ExcpHandler CCU80_0_IRQHandler
ExcpHandler CCU80_1_IRQHandler
ExcpHandler CCU80_2_IRQHandler
ExcpHandler CCU80_3_IRQHandler
ExcpHandler CCU81_0_IRQHandler
ExcpHandler CCU81_1_IRQHandler
ExcpHandler CCU81_2_IRQHandler
ExcpHandler CCU81_3_IRQHandler
ExcpHandler POSIF0_0_IRQHandler
ExcpHandler POSIF0_1_IRQHandler
ExcpHandler POSIF1_0_IRQHandler
ExcpHandler POSIF1_1_IRQHandler
ExcpHandler HRPWM_0_IRQHandler
ExcpHandler HRPWM_1_IRQHandler
ExcpHandler HRPWM_2_IRQHandler
ExcpHandler HRPWM_3_IRQHandler
ExcpHandler CAN0_0_IRQHandler
ExcpHandler CAN0_1_IRQHandler
ExcpHandler CAN0_2_IRQHandler
ExcpHandler CAN0_3_IRQHandler
ExcpHandler CAN0_4_IRQHandler
ExcpHandler CAN0_5_IRQHandler
ExcpHandler CAN0_6_IRQHandler
ExcpHandler CAN0_7_IRQHandler
ExcpHandler USIC0_0_IRQHandler
ExcpHandler USIC0_1_IRQHandler
ExcpHandler USIC0_2_IRQHandler
ExcpHandler USIC0_3_IRQHandler
ExcpHandler USIC0_4_IRQHandler
ExcpHandler USIC0_5_IRQHandler
ExcpHandler USIC1_0_IRQHandler
ExcpHandler USIC1_1_IRQHandler
ExcpHandler USIC1_2_IRQHandler
ExcpHandler USIC1_3_IRQHandler
ExcpHandler USIC1_4_IRQHandler
ExcpHandler USIC1_5_IRQHandler
ExcpHandler LEDTS0_0_IRQHandler
ExcpHandler FCE0_0_IRQHandler
ExcpHandler GPDMA0_0_IRQHandler
ExcpHandler USB0_0_IRQHandler
ExcpHandler ETH0_0_IRQHandler
;* ============= END OF INTERRUPT HANDLER DEFINITION ======================== */
;* Definition of the default weak SystemInit_DAVE3 function.
;* This function will be called by the CMSIS SystemInit function.
;* If DAVE3 requires an extended SystemInit it will create its own SystemInit_DAVE3
;* which will overule this weak definition
SystemInit_DAVE3 PROC
EXPORT SystemInit_DAVE3 [WEAK]
NOP
BX LR
ENDP
;* Definition of the default weak DAVE3 function for clock App usage.
;* AllowPLLInitByStartup Handler */
AllowPLLInitByStartup PROC
EXPORT AllowPLLInitByStartup [WEAK]
MOV R0,#1
BX LR
ENDP
ALIGN
;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
IF :DEF:__MICROLIB
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
ELSE
IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap
LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem
BX LR
ALIGN
ENDIF
END
;******************* Copyright (C) 2009-2013 ARM Limited *****END OF FILE*****