1/*****************************************************************************/ 2/* startup_XMC4500.s: Startup file for XMC4500 device series for EWARM */ 3/*****************************************************************************/ 4/** 5* @file startup_XMC4500.s 6* XMC4000 Device Series 7* @version V1.3 8* @date June 2016 9* 10********************************************************************************************************************* 11* Copyright (c) 2013-2016, Infineon Technologies AG 12* All rights reserved. 13* 14* Redistribution and use in source and binary forms, with or without modification,are permitted provided that the 15* following conditions are met: 16* 17* Redistributions of source code must retain the above copyright notice, this list of conditions and the following 18* disclaimer. 19* 20* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following 21* disclaimer in the documentation and/or other materials provided with the distribution. 22* 23* Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote 24* products derived from this software without specific prior written permission. 25* 26* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 27* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 28* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 29* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 30* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 31* WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33* 34* To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with 35* Infineon Technologies AG dave@infineon.com). 36********************************************************************************************************************* 37* 38******************************************************************************/ 39/* ********************* Version History *********************************** */ 40/* *************************************************************************** 41V1.0 January, 30 2013: In ths version a workoraound for the erratum PMU_CM.001 42is implmented (patch for the Exception and interrupt handlers) 43V1.1 Augsut, 17 2013: Fix the bug of preprocessor due to workoraound for 44the erratum PMU_CM.001, and the bug of stack pointer alignment to a 8 byte boundary 45V1.2 November, 20 2014: Disable CPU workaround. Removed DAVE3 dependency 46V1.3, June 2016, Rename ENABLE_CPU_CM_001_WORKAROUND to ENABLE_PMU_CM_001_WORKAROUND 47 Action required: If using AA/AB step, use ENABLE_PMU_CM_001_WORKAROUND instead of ENABLE_CPU_CM_001_WORKAROUND 48**************************************************************************** */ 49 50 MODULE ?vector_table 51 52 AAPCS INTERWORK, VFP_COMPATIBLE, RWPI_COMPATIBLE 53 PRESERVE8 54 55 56 ;; Forward declaration of sections. 57 SECTION CSTACK:DATA:NOROOT(3) 58 59 SECTION .intvec:CODE:NOROOT(2) 60 61 EXTERN __iar_program_start 62 EXTERN SystemInit 63 PUBLIC __vector_table 64 PUBLIC __Vectors 65 PUBLIC __Vectors_End 66 PUBLIC __Vectors_Size 67 68 DATA 69 70__iar_init$$done: ; The vector table is not needed 71 ; until after copy initialization is done 72 73;/* ===========START : MACRO DEFINITION MACRO DEFINITION ================== */ 74;/* 75; * STEP_AB and below have the prefetch functional deviation (Errata id: PMU_CM.001). 76; * A veneer defined below will first be executed which in turn branches to the final 77; * exception handler. 78; * 79; * In addition to defining the veneers, the vector table must for these buggy 80; * devices contain the veneers. 81; */ 82 83;/* A macro to setup a vector table entry based on STEP ID */ 84#ifdef WORKAROUND_PMU_CM001 85ExcpVector macro 86 DCD \1_Veneer 87 endm 88#else 89ExcpVector macro 90 DCD \1 91 endm 92#endif 93 94;/* A macro to ease definition of the various handlers based on STEP ID */ 95#ifdef WORKAROUND_PMU_CM001 96;/* First define the final exception handler */ 97ProxyHandler macro 98 PUBWEAK \1 99 SECTION .text:CODE:REORDER:NOROOT(1) 100\1 101 B \1 102;/* And then define a veneer that will branch to the final excp handler */ 103 PUBWEAK \1_Veneer 104 SECTION .text:CODE:REORDER:NOROOT(2) 105\1_Veneer: 106 LDR R0, =\1 107 PUSH {LR} /* Breaks AAPCS */ 108 SUB SP,#4 /* Restores AAPCS */ 109 BLX R0 110 ADD SP,#4 111 POP {PC} 112 endm 113 ;/* No prefetch bug, hence define only the final exception handler */ 114#else 115ProxyHandler macro 116 PUBWEAK \1 117 SECTION .text:CODE:REORDER:NOROOT(1) 118\1 119 B \1 120 endm 121#endif 122 123;/* ============= END OF MACRO DEFINITION MACRO DEFINITION ================== */ 124 125__vector_table 126 DCD sfe(CSTACK) 127 DCD Reset_Handler 128 129 ExcpVector NMI_Handler 130 ExcpVector HardFault_Handler 131 ExcpVector MemManage_Handler 132 ExcpVector BusFault_Handler 133 ExcpVector UsageFault_Handler 134 DCD 0 135 DCD 0 136 DCD 0 137 DCD 0 138 ExcpVector SVC_Handler 139 ExcpVector DebugMon_Handler 140 DCD 0 141 ExcpVector PendSV_Handler 142 ExcpVector SysTick_Handler 143 144 ; Interrupt Handlers for Service Requests (SR) from XMC4500 Peripherals 145 ExcpVector SCU_0_IRQHandler ; Handler name for SR SCU_0 146 ExcpVector ERU0_0_IRQHandler ; Handler name for SR ERU0_0 147 ExcpVector ERU0_1_IRQHandler ; Handler name for SR ERU0_1 148 ExcpVector ERU0_2_IRQHandler ; Handler name for SR ERU0_2 149 ExcpVector ERU0_3_IRQHandler ; Handler name for SR ERU0_3 150 ExcpVector ERU1_0_IRQHandler ; Handler name for SR ERU1_0 151 ExcpVector ERU1_1_IRQHandler ; Handler name for SR ERU1_1 152 ExcpVector ERU1_2_IRQHandler ; Handler name for SR ERU1_2 153 ExcpVector ERU1_3_IRQHandler ; Handler name for SR ERU1_3 154 DCD 0 ; Not Available 155 DCD 0 ; Not Available 156 DCD 0 ; Not Available 157 ExcpVector PMU0_0_IRQHandler ; Handler name for SR PMU0_0 158 DCD 0 ; Handler name for SR PMU0_1 159 ExcpVector VADC0_C0_0_IRQHandler ; Handler name for SR VADC0_C0_0 160 ExcpVector VADC0_C0_1_IRQHandler ; Handler name for SR VADC0_C0_1 161 ExcpVector VADC0_C0_2_IRQHandler ; Handler name for SR VADC0_C0_1 162 ExcpVector VADC0_C0_3_IRQHandler ; Handler name for SR VADC0_C0_3 163 ExcpVector VADC0_G0_0_IRQHandler ; Handler name for SR VADC0_G0_0 164 ExcpVector VADC0_G0_1_IRQHandler ; Handler name for SR VADC0_G0_1 165 ExcpVector VADC0_G0_2_IRQHandler ; Handler name for SR VADC0_G0_2 166 ExcpVector VADC0_G0_3_IRQHandler ; Handler name for SR VADC0_G0_3 167 ExcpVector VADC0_G1_0_IRQHandler ; Handler name for SR VADC0_G1_0 168 ExcpVector VADC0_G1_1_IRQHandler ; Handler name for SR VADC0_G1_1 169 ExcpVector VADC0_G1_2_IRQHandler ; Handler name for SR VADC0_G1_2 170 ExcpVector VADC0_G1_3_IRQHandler ; Handler name for SR VADC0_G1_3 171 ExcpVector VADC0_G2_0_IRQHandler ; Handler name for SR VADC0_G2_0 172 ExcpVector VADC0_G2_1_IRQHandler ; Handler name for SR VADC0_G2_1 173 ExcpVector VADC0_G2_2_IRQHandler ; Handler name for SR VADC0_G2_2 174 ExcpVector VADC0_G2_3_IRQHandler ; Handler name for SR VADC0_G2_3 175 ExcpVector VADC0_G3_0_IRQHandler ; Handler name for SR VADC0_G3_0 176 ExcpVector VADC0_G3_1_IRQHandler ; Handler name for SR VADC0_G3_1 177 ExcpVector VADC0_G3_2_IRQHandler ; Handler name for SR VADC0_G3_2 178 ExcpVector VADC0_G3_3_IRQHandler ; Handler name for SR VADC0_G3_3 179 ExcpVector DSD0_0_IRQHandler ; Handler name for SR DSD0_0 180 ExcpVector DSD0_1_IRQHandler ; Handler name for SR DSD0_1 181 ExcpVector DSD0_2_IRQHandler ; Handler name for SR DSD0_2 182 ExcpVector DSD0_3_IRQHandler ; Handler name for SR DSD0_3 183 ExcpVector DSD0_4_IRQHandler ; Handler name for SR DSD0_4 184 ExcpVector DSD0_5_IRQHandler ; Handler name for SR DSD0_5 185 ExcpVector DSD0_6_IRQHandler ; Handler name for SR DSD0_6 186 ExcpVector DSD0_7_IRQHandler ; Handler name for SR DSD0_7 187 ExcpVector DAC0_0_IRQHandler ; Handler name for SR DAC0_0 188 ExcpVector DAC0_1_IRQHandler ; Handler name for SR DAC0_0 189 ExcpVector CCU40_0_IRQHandler ; Handler name for SR CCU40_0 190 ExcpVector CCU40_1_IRQHandler ; Handler name for SR CCU40_1 191 ExcpVector CCU40_2_IRQHandler ; Handler name for SR CCU40_2 192 ExcpVector CCU40_3_IRQHandler ; Handler name for SR CCU40_3 193 ExcpVector CCU41_0_IRQHandler ; Handler name for SR CCU41_0 194 ExcpVector CCU41_1_IRQHandler ; Handler name for SR CCU41_1 195 ExcpVector CCU41_2_IRQHandler ; Handler name for SR CCU41_2 196 ExcpVector CCU41_3_IRQHandler ; Handler name for SR CCU41_3 197 ExcpVector CCU42_0_IRQHandler ; Handler name for SR CCU42_0 198 ExcpVector CCU42_1_IRQHandler ; Handler name for SR CCU42_1 199 ExcpVector CCU42_2_IRQHandler ; Handler name for SR CCU42_2 200 ExcpVector CCU42_3_IRQHandler ; Handler name for SR CCU42_3 201 ExcpVector CCU43_0_IRQHandler ; Handler name for SR CCU43_0 202 ExcpVector CCU43_1_IRQHandler ; Handler name for SR CCU43_1 203 ExcpVector CCU43_2_IRQHandler ; Handler name for SR CCU43_2 204 ExcpVector CCU43_3_IRQHandler ; Handler name for SR CCU43_3 205 ExcpVector CCU80_0_IRQHandler ; Handler name for SR CCU80_0 206 ExcpVector CCU80_1_IRQHandler ; Handler name for SR CCU80_1 207 ExcpVector CCU80_2_IRQHandler ; Handler name for SR CCU80_2 208 ExcpVector CCU80_3_IRQHandler ; Handler name for SR CCU80_3 209 ExcpVector CCU81_0_IRQHandler ; Handler name for SR CCU81_0 210 ExcpVector CCU81_1_IRQHandler ; Handler name for SR CCU81_1 211 ExcpVector CCU81_2_IRQHandler ; Handler name for SR CCU81_2 212 ExcpVector CCU81_3_IRQHandler ; Handler name for SR CCU81_3 213 ExcpVector POSIF0_0_IRQHandler ; Handler name for SR POSIF0_0 214 ExcpVector POSIF0_1_IRQHandler ; Handler name for SR POSIF0_1 215 ExcpVector POSIF1_0_IRQHandler ; Handler name for SR POSIF1_0 216 ExcpVector POSIF1_1_IRQHandler ; Handler name for SR POSIF1_1 217 DCD 0 ; Not Available 218 DCD 0 ; Not Available 219 DCD 0 ; Not Available 220 DCD 0 ; Not Available 221 ExcpVector CAN0_0_IRQHandler ; Handler name for SR CAN0_0 222 ExcpVector CAN0_1_IRQHandler ; Handler name for SR CAN0_1 223 ExcpVector CAN0_2_IRQHandler ; Handler name for SR CAN0_2 224 ExcpVector CAN0_3_IRQHandler ; Handler name for SR CAN0_3 225 ExcpVector CAN0_4_IRQHandler ; Handler name for SR CAN0_4 226 ExcpVector CAN0_5_IRQHandler ; Handler name for SR CAN0_5 227 ExcpVector CAN0_6_IRQHandler ; Handler name for SR CAN0_6 228 ExcpVector CAN0_7_IRQHandler ; Handler name for SR CAN0_7 229 ExcpVector USIC0_0_IRQHandler ; Handler name for SR USIC0_0 230 ExcpVector USIC0_1_IRQHandler ; Handler name for SR USIC0_1 231 ExcpVector USIC0_2_IRQHandler ; Handler name for SR USIC0_2 232 ExcpVector USIC0_3_IRQHandler ; Handler name for SR USIC0_3 233 ExcpVector USIC0_4_IRQHandler ; Handler name for SR USIC0_4 234 ExcpVector USIC0_5_IRQHandler ; Handler name for SR USIC0_5 235 ExcpVector USIC1_0_IRQHandler ; Handler name for SR USIC1_0 236 ExcpVector USIC1_1_IRQHandler ; Handler name for SR USIC1_1 237 ExcpVector USIC1_2_IRQHandler ; Handler name for SR USIC1_2 238 ExcpVector USIC1_3_IRQHandler ; Handler name for SR USIC1_3 239 ExcpVector USIC1_4_IRQHandler ; Handler name for SR USIC1_4 240 ExcpVector USIC1_5_IRQHandler ; Handler name for SR USIC1_5 241 ExcpVector USIC2_0_IRQHandler ; Handler name for SR USIC2_0 242 ExcpVector USIC2_1_IRQHandler ; Handler name for SR USIC2_1 243 ExcpVector USIC2_2_IRQHandler ; Handler name for SR USIC2_2 244 ExcpVector USIC2_3_IRQHandler ; Handler name for SR USIC2_3 245 ExcpVector USIC2_4_IRQHandler ; Handler name for SR USIC2_4 246 ExcpVector USIC2_5_IRQHandler ; Handler name for SR USIC2_5 247 ExcpVector LEDTS0_0_IRQHandler ; Handler name for SR LEDTS0_0 248 DCD 0 ; Not Available 249 ExcpVector FCE0_0_IRQHandler ; Handler name for SR FCE0_0 250 ExcpVector GPDMA0_0_IRQHandler ; Handler name for SR GPDMA0_0 251 ExcpVector SDMMC0_0_IRQHandler ; Handler name for SR SDMMC0_0 252 ExcpVector USB0_0_IRQHandler ; Handler name for SR USB0_0 253 ExcpVector ETH0_0_IRQHandler ; Handler name for SR ETH0_0 254 DCD 0 ; Not Available 255 ExcpVector GPDMA1_0_IRQHandler ; Handler name for SR GPDMA1_0 256 DCD 0 ; Not Available 257 258 259__Vectors_End 260 261__Vectors EQU __vector_table 262__Vectors_Size EQU __Vectors_End - __Vectors 263 264 265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 266;; 267;; Default interrupt handlers. 268;; 269 THUMB 270 PUBWEAK Reset_Handler 271 SECTION .text:CODE:REORDER:NOROOT(2) 272Reset_Handler 273 LDR SP, =sfe(CSTACK) 274 LDR R0, =SystemInit 275 BLX R0 276 LDR R0, =__iar_program_start 277 BX R0 278 279 280 ProxyHandler NMI_Handler 281 ProxyHandler HardFault_Handler 282 ProxyHandler MemManage_Handler 283 ProxyHandler BusFault_Handler 284 ProxyHandler UsageFault_Handler 285 ProxyHandler SVC_Handler 286 ProxyHandler DebugMon_Handler 287 ProxyHandler PendSV_Handler 288 ProxyHandler SysTick_Handler 289 290 ProxyHandler SCU_0_IRQHandler 291 ProxyHandler ERU0_0_IRQHandler 292 ProxyHandler ERU0_1_IRQHandler 293 ProxyHandler ERU0_2_IRQHandler 294 ProxyHandler ERU0_3_IRQHandler 295 ProxyHandler ERU1_0_IRQHandler 296 ProxyHandler ERU1_1_IRQHandler 297 ProxyHandler ERU1_2_IRQHandler 298 ProxyHandler ERU1_3_IRQHandler 299 ProxyHandler PMU0_0_IRQHandler 300 ProxyHandler PMU0_1_IRQHandler 301 ProxyHandler VADC0_C0_0_IRQHandler 302 ProxyHandler VADC0_C0_1_IRQHandler 303 ProxyHandler VADC0_C0_2_IRQHandler 304 ProxyHandler VADC0_C0_3_IRQHandler 305 ProxyHandler VADC0_G0_0_IRQHandler 306 ProxyHandler VADC0_G0_1_IRQHandler 307 ProxyHandler VADC0_G0_2_IRQHandler 308 ProxyHandler VADC0_G0_3_IRQHandler 309 ProxyHandler VADC0_G1_0_IRQHandler 310 ProxyHandler VADC0_G1_1_IRQHandler 311 ProxyHandler VADC0_G1_2_IRQHandler 312 ProxyHandler VADC0_G1_3_IRQHandler 313 ProxyHandler VADC0_G2_0_IRQHandler 314 ProxyHandler VADC0_G2_1_IRQHandler 315 ProxyHandler VADC0_G2_2_IRQHandler 316 ProxyHandler VADC0_G2_3_IRQHandler 317 ProxyHandler VADC0_G3_0_IRQHandler 318 ProxyHandler VADC0_G3_1_IRQHandler 319 ProxyHandler VADC0_G3_2_IRQHandler 320 ProxyHandler VADC0_G3_3_IRQHandler 321 ProxyHandler DSD0_0_IRQHandler 322 ProxyHandler DSD0_1_IRQHandler 323 ProxyHandler DSD0_2_IRQHandler 324 ProxyHandler DSD0_3_IRQHandler 325 ProxyHandler DSD0_4_IRQHandler 326 ProxyHandler DSD0_5_IRQHandler 327 ProxyHandler DSD0_6_IRQHandler 328 ProxyHandler DSD0_7_IRQHandler 329 ProxyHandler DAC0_0_IRQHandler 330 ProxyHandler DAC0_1_IRQHandler 331 ProxyHandler CCU40_0_IRQHandler 332 ProxyHandler CCU40_1_IRQHandler 333 ProxyHandler CCU40_2_IRQHandler 334 ProxyHandler CCU40_3_IRQHandler 335 ProxyHandler CCU41_0_IRQHandler 336 ProxyHandler CCU41_1_IRQHandler 337 ProxyHandler CCU41_2_IRQHandler 338 ProxyHandler CCU41_3_IRQHandler 339 ProxyHandler CCU42_0_IRQHandler 340 ProxyHandler CCU42_1_IRQHandler 341 ProxyHandler CCU42_2_IRQHandler 342 ProxyHandler CCU42_3_IRQHandler 343 ProxyHandler CCU43_0_IRQHandler 344 ProxyHandler CCU43_1_IRQHandler 345 ProxyHandler CCU43_2_IRQHandler 346 ProxyHandler CCU43_3_IRQHandler 347 ProxyHandler CCU80_0_IRQHandler 348 ProxyHandler CCU80_1_IRQHandler 349 ProxyHandler CCU80_2_IRQHandler 350 ProxyHandler CCU80_3_IRQHandler 351 ProxyHandler CCU81_0_IRQHandler 352 ProxyHandler CCU81_1_IRQHandler 353 ProxyHandler CCU81_2_IRQHandler 354 ProxyHandler CCU81_3_IRQHandler 355 ProxyHandler POSIF0_0_IRQHandler 356 ProxyHandler POSIF0_1_IRQHandler 357 ProxyHandler POSIF1_0_IRQHandler 358 ProxyHandler POSIF1_1_IRQHandler 359 ProxyHandler CAN0_0_IRQHandler 360 ProxyHandler CAN0_1_IRQHandler 361 ProxyHandler CAN0_2_IRQHandler 362 ProxyHandler CAN0_3_IRQHandler 363 ProxyHandler CAN0_4_IRQHandler 364 ProxyHandler CAN0_5_IRQHandler 365 ProxyHandler CAN0_6_IRQHandler 366 ProxyHandler CAN0_7_IRQHandler 367 ProxyHandler USIC0_0_IRQHandler 368 ProxyHandler USIC0_1_IRQHandler 369 ProxyHandler USIC0_2_IRQHandler 370 ProxyHandler USIC0_3_IRQHandler 371 ProxyHandler USIC0_4_IRQHandler 372 ProxyHandler USIC0_5_IRQHandler 373 ProxyHandler USIC1_0_IRQHandler 374 ProxyHandler USIC1_1_IRQHandler 375 ProxyHandler USIC1_2_IRQHandler 376 ProxyHandler USIC1_3_IRQHandler 377 ProxyHandler USIC1_4_IRQHandler 378 ProxyHandler USIC1_5_IRQHandler 379 ProxyHandler USIC2_0_IRQHandler 380 ProxyHandler USIC2_1_IRQHandler 381 ProxyHandler USIC2_2_IRQHandler 382 ProxyHandler USIC2_3_IRQHandler 383 ProxyHandler USIC2_4_IRQHandler 384 ProxyHandler USIC2_5_IRQHandler 385 ProxyHandler LEDTS0_0_IRQHandler 386 ProxyHandler FCE0_0_IRQHandler 387 ProxyHandler GPDMA0_0_IRQHandler 388 ProxyHandler SDMMC0_0_IRQHandler 389 ProxyHandler USB0_0_IRQHandler 390 ProxyHandler ETH0_0_IRQHandler 391 ProxyHandler GPDMA1_0_IRQHandler 392 393 END 394