/*****************************************************************************/ /* Startup_XMC4400.s: Startup file for XMC4400 device series for EWARM */ /*****************************************************************************/ /** * @file Startup_XMC4400.s * XMC4000 Device Series * @version V1.1 * @date August 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 XMC4500 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 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 DSD_SRM_0 ExcpVector DSD0_1_IRQHandler ; Handler name for SR DSD_SRM_1 ExcpVector DSD0_2_IRQHandler ; Handler name for SR DSD_SRM_2 ExcpVector DSD0_3_IRQHandler ; Handler name for SR DSD_SRM_3 ExcpVector DSD0_4_IRQHandler ; Handler name for SR DSD_SRA_0 ExcpVector DSD0_5_IRQHandler ; Handler name for SR DSD_SRA_1 ExcpVector DSD0_6_IRQHandler ; Handler name for SR DSD_SRA_2 ExcpVector DSD0_7_IRQHandler ; Handler name for SR DSD_SRA_3 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 ; 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 ExcpVector ETH0_0_IRQHandler ; Handler name for SR ETH0_0 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 VADC0_G2_0_IRQHandler ProxyHandler VADC0_G2_1_IRQHandler ProxyHandler VADC0_G2_2_IRQHandler ProxyHandler VADC0_G2_3_IRQHandler ProxyHandler VADC0_G3_0_IRQHandler ProxyHandler VADC0_G3_1_IRQHandler ProxyHandler VADC0_G3_2_IRQHandler ProxyHandler VADC0_G3_3_IRQHandler ProxyHandler DSD0_0_IRQHandler ProxyHandler DSD0_1_IRQHandler ProxyHandler DSD0_2_IRQHandler ProxyHandler DSD0_3_IRQHandler ProxyHandler DSD0_4_IRQHandler ProxyHandler DSD0_5_IRQHandler ProxyHandler DSD0_6_IRQHandler ProxyHandler DSD0_7_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 CCU42_0_IRQHandler ProxyHandler CCU42_1_IRQHandler ProxyHandler CCU42_2_IRQHandler ProxyHandler CCU42_3_IRQHandler ProxyHandler CCU43_0_IRQHandler ProxyHandler CCU43_1_IRQHandler ProxyHandler CCU43_2_IRQHandler ProxyHandler CCU43_3_IRQHandler ProxyHandler CCU80_0_IRQHandler ProxyHandler CCU80_1_IRQHandler ProxyHandler CCU80_2_IRQHandler ProxyHandler CCU80_3_IRQHandler ProxyHandler CCU81_0_IRQHandler ProxyHandler CCU81_1_IRQHandler ProxyHandler CCU81_2_IRQHandler ProxyHandler CCU81_3_IRQHandler ProxyHandler POSIF0_0_IRQHandler ProxyHandler POSIF0_1_IRQHandler ProxyHandler POSIF1_0_IRQHandler ProxyHandler POSIF1_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 ProxyHandler ETH0_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