blob: 0252b70e14f8e20631cab3b3af358b0fdfa4276f [file] [log] [blame]
/*****************************************************************************/
/* Startup_XMC4200.s: Startup file for XMC4200 device series for EWARM */
/*****************************************************************************/
/*
* @file Startup_XMC4200.s
* XMC4000 Device Series
* @version V1.1
* @date Augsut 2013
*
* Copyright (C) 2012 IAR Systems. All rights reserved.
* Copyright (C) 2012 Infineon Technologies AG. All rights reserved.
*
*
* @par
* Infineon Technologies AG (Infineon) is supplying this software for use with
* Infineon's microcontrollers. This file can be freely distributed
* within development tools that are supporting such microcontrollers.
*
* @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 *********************************** */
/* ***************************************************************************
V1.0 January, 30 2013: In ths version a workoraound for the erratum PMU_CM.001
is implmented (patch for the Exception and interrupt handlers)
V1.1 Augsut, 17 2013: Fix the bug of preprocessor due to workoraound for
the erratum PMU_CM.001, and the bug of stack pointer alignment to a 8 byte boundary
**************************************************************************** */
MODULE ?vector_table
AAPCS INTERWORK, VFP_COMPATIBLE, RWPI_COMPATIBLE
PRESERVE8
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
EXTERN __iar_program_start
EXTERN SystemInit
PUBLIC __vector_table
DATA
__iar_init$$done: ; The vector table is not needed
; until after copy initialization is done
;/* ===========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
;define WORKAROUND_PMU_CM001 as TRUE
#define WORKAROUND_PMU_CM001 1
;/* A macro to setup a vector table entry based on STEP ID */
#ifdef WORKAROUND_PMU_CM001
ExcpVector macro
DCD \1_Veneer
endm
#else
ExcpVector macro
DCD \1
endm
#endif
;/* A macro to ease definition of the various handlers based on STEP ID */
#ifdef WORKAROUND_PMU_CM001
;/* First define the final exception handler */
ProxyHandler macro
PUBWEAK \1
SECTION .text:CODE:REORDER:NOROOT(1)
\1
B \1
;/* And then define a veneer that will branch to the final excp handler */
PUBWEAK \1_Veneer
SECTION .text:CODE:REORDER:NOROOT(2)
\1_Veneer:
LDR R0, =\1
PUSH {LR} /* Breaks AAPCS */
SUB SP,#4 /* Restores AAPCS */
BLX R0
ADD SP,#4
POP {PC}
endm
;/* No prefetch bug, hence define only the final exception handler */
#else
ProxyHandler macro
PUBWEAK \1
SECTION .text:CODE:REORDER:NOROOT(1)
\1
B \1
endm
#endif
;/* ============= END OF MACRO DEFINITION MACRO DEFINITION ================== */
__vector_table
DCD sfe(CSTACK)
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 XMC4200 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 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
ExcpVector PMU0_0_IRQHandler ; Handler name for SR PMU0_0
DCD 0 ; Not Available
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
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
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
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
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
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
ExcpVector POSIF0_0_IRQHandler ; Handler name for SR POSIF0_0
ExcpVector POSIF0_1_IRQHandler ; Handler name for SR POSIF0_1
DCD 0 ; Not Available
DCD 0 ; Not Available
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 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
ExcpVector LEDTS0_0_IRQHandler ; Handler name for SR LEDTS0_0
DCD 0 ; Not Available
ExcpVector FCE0_0_IRQHandler ; Handler name for SR FCE0_0
ExcpVector GPDMA0_0_IRQHandler ; Handler name for SR GPDMA0_0
DCD 0 ; Not Available
ExcpVector USB0_0_IRQHandler ; Handler name for SR USB0_0
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
DCD 0 ; Not Available
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;
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
ProxyHandler NMI_Handler
ProxyHandler HardFault_Handler
ProxyHandler MemManage_Handler
ProxyHandler BusFault_Handler
ProxyHandler UsageFault_Handler
ProxyHandler SVC_Handler
ProxyHandler DebugMon_Handler
ProxyHandler PendSV_Handler
ProxyHandler SysTick_Handler
ProxyHandler SCU_0_IRQHandler
ProxyHandler ERU0_0_IRQHandler
ProxyHandler ERU0_1_IRQHandler
ProxyHandler ERU0_2_IRQHandler
ProxyHandler ERU0_3_IRQHandler
ProxyHandler ERU1_0_IRQHandler
ProxyHandler ERU1_1_IRQHandler
ProxyHandler ERU1_2_IRQHandler
ProxyHandler ERU1_3_IRQHandler
ProxyHandler PMU0_0_IRQHandler
ProxyHandler VADC0_C0_0_IRQHandler
ProxyHandler VADC0_C0_1_IRQHandler
ProxyHandler VADC0_C0_2_IRQHandler
ProxyHandler VADC0_C0_3_IRQHandler
ProxyHandler VADC0_G0_0_IRQHandler
ProxyHandler VADC0_G0_1_IRQHandler
ProxyHandler VADC0_G0_2_IRQHandler
ProxyHandler VADC0_G0_3_IRQHandler
ProxyHandler VADC0_G1_0_IRQHandler
ProxyHandler VADC0_G1_1_IRQHandler
ProxyHandler VADC0_G1_2_IRQHandler
ProxyHandler VADC0_G1_3_IRQHandler
ProxyHandler DAC0_0_IRQHandler
ProxyHandler DAC0_1_IRQHandler
ProxyHandler CCU40_0_IRQHandler
ProxyHandler CCU40_1_IRQHandler
ProxyHandler CCU40_2_IRQHandler
ProxyHandler CCU40_3_IRQHandler
ProxyHandler CCU41_0_IRQHandler
ProxyHandler CCU41_1_IRQHandler
ProxyHandler CCU41_2_IRQHandler
ProxyHandler CCU41_3_IRQHandler
ProxyHandler CCU80_0_IRQHandler
ProxyHandler CCU80_1_IRQHandler
ProxyHandler CCU80_2_IRQHandler
ProxyHandler CCU80_3_IRQHandler
ProxyHandler POSIF0_0_IRQHandler
ProxyHandler POSIF0_1_IRQHandler
ProxyHandler HRPWM_0_IRQHandler
ProxyHandler HRPWM_1_IRQHandler
ProxyHandler HRPWM_2_IRQHandler
ProxyHandler HRPWM_3_IRQHandler
ProxyHandler CAN0_0_IRQHandler
ProxyHandler CAN0_1_IRQHandler
ProxyHandler CAN0_2_IRQHandler
ProxyHandler CAN0_3_IRQHandler
ProxyHandler CAN0_4_IRQHandler
ProxyHandler CAN0_5_IRQHandler
ProxyHandler CAN0_6_IRQHandler
ProxyHandler CAN0_7_IRQHandler
ProxyHandler USIC0_0_IRQHandler
ProxyHandler USIC0_1_IRQHandler
ProxyHandler USIC0_2_IRQHandler
ProxyHandler USIC0_3_IRQHandler
ProxyHandler USIC0_4_IRQHandler
ProxyHandler USIC0_5_IRQHandler
ProxyHandler USIC1_0_IRQHandler
ProxyHandler USIC1_1_IRQHandler
ProxyHandler USIC1_2_IRQHandler
ProxyHandler USIC1_3_IRQHandler
ProxyHandler USIC1_4_IRQHandler
ProxyHandler USIC1_5_IRQHandler
ProxyHandler LEDTS0_0_IRQHandler
ProxyHandler FCE0_0_IRQHandler
ProxyHandler GPDMA0_0_IRQHandler
ProxyHandler USB0_0_IRQHandler
; Definition of the default weak SystemInit_DAVE3 function for DAVE3 system init.
PUBWEAK SystemInit_DAVE3
SECTION .text:CODE:REORDER:NOROOT(2)
SystemInit_DAVE3
NOP
BX LR
; Definition of the default weak DAVE3 function for clock App usage.
; AllowPLLInitByStartup Handler
PUBWEAK AllowPLLInitByStartup
SECTION .text:CODE:REORDER:NOROOT(2)
AllowPLLInitByStartup
MOV R0,#1
BX LR
PREF_PCON EQU 0x58004000
SCU_GCU_PEEN EQU 0x5000413C
SCU_GCU_PEFLAG EQU 0x50004150
END