/*****************************************************************************/ | |
/* 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 |