1/**************************************************************************//** 2 * @file startup_psoc6_04_cm4.S 3 * @brief CMSIS Core Device Startup File for 4 * ARMCM4 Device Series 5 * @version V5.00 6 * @date 02. March 2016 7 ******************************************************************************/ 8/* 9 * Copyright (c) 2009-2016 ARM Limited. All rights reserved. 10 * 11 * SPDX-License-Identifier: Apache-2.0 12 * 13 * Licensed under the Apache License, Version 2.0 (the License); you may 14 * not use this file except in compliance with the License. 15 * You may obtain a copy of the License at 16 * 17 * www.apache.org/licenses/LICENSE-2.0 18 * 19 * Unless required by applicable law or agreed to in writing, software 20 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 21 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 22 * See the License for the specific language governing permissions and 23 * limitations under the License. 24 */ 25 26 /* Address of the NMI handler */ 27 #define CY_NMI_HANLDER_ADDR 0x0000000D 28 29 /* The CPU VTOR register */ 30 #define CY_CPU_VTOR_ADDR 0xE000ED08 31 32 /* Copy flash vectors and data section to RAM */ 33 #define __STARTUP_COPY_MULTIPLE 34 35 /* Clear single BSS section */ 36 #define __STARTUP_CLEAR_BSS 37 38 .syntax unified 39 .arch armv7-m 40 41 .section .stack 42 .align 3 43#ifdef __STACK_SIZE 44 .equ Stack_Size, __STACK_SIZE 45#else 46 .equ Stack_Size, 0x00001000 47#endif 48 .globl __StackTop 49 .globl __StackLimit 50__StackLimit: 51 .space Stack_Size 52 .size __StackLimit, . - __StackLimit 53__StackTop: 54 .size __StackTop, . - __StackTop 55 56 .section .heap 57 .align 3 58#ifdef __HEAP_SIZE 59 .equ Heap_Size, __HEAP_SIZE 60#else 61 .equ Heap_Size, 0x00000400 62#endif 63 .globl __HeapBase 64 .globl __HeapLimit 65__HeapBase: 66 .if Heap_Size 67 .space Heap_Size 68 .endif 69 .size __HeapBase, . - __HeapBase 70__HeapLimit: 71 .size __HeapLimit, . - __HeapLimit 72 73 .section .vectors 74 .align 2 75 .globl __Vectors 76__Vectors: 77 .long __StackTop /* Top of Stack */ 78 .long Reset_Handler /* Reset Handler */ 79 .long CY_NMI_HANLDER_ADDR /* NMI Handler */ 80 .long HardFault_Handler /* Hard Fault Handler */ 81 .long MemManage_Handler /* MPU Fault Handler */ 82 .long BusFault_Handler /* Bus Fault Handler */ 83 .long UsageFault_Handler /* Usage Fault Handler */ 84 .long 0 /* Reserved */ 85 .long 0 /* Reserved */ 86 .long 0 /* Reserved */ 87 .long 0 /* Reserved */ 88 .long SVC_Handler /* SVCall Handler */ 89 .long DebugMon_Handler /* Debug Monitor Handler */ 90 .long 0 /* Reserved */ 91 .long PendSV_Handler /* PendSV Handler */ 92 .long SysTick_Handler /* SysTick Handler */ 93 94 /* External interrupts Description */ 95 .long ioss_interrupts_gpio_0_IRQHandler /* GPIO Port Interrupt #0 */ 96 .long 0 /* Reserved */ 97 .long ioss_interrupts_gpio_2_IRQHandler /* GPIO Port Interrupt #2 */ 98 .long ioss_interrupts_gpio_3_IRQHandler /* GPIO Port Interrupt #3 */ 99 .long 0 /* Reserved */ 100 .long ioss_interrupts_gpio_5_IRQHandler /* GPIO Port Interrupt #5 */ 101 .long ioss_interrupts_gpio_6_IRQHandler /* GPIO Port Interrupt #6 */ 102 .long ioss_interrupts_gpio_7_IRQHandler /* GPIO Port Interrupt #7 */ 103 .long ioss_interrupts_gpio_8_IRQHandler /* GPIO Port Interrupt #8 */ 104 .long ioss_interrupts_gpio_9_IRQHandler /* GPIO Port Interrupt #9 */ 105 .long ioss_interrupts_gpio_10_IRQHandler /* GPIO Port Interrupt #10 */ 106 .long ioss_interrupts_gpio_11_IRQHandler /* GPIO Port Interrupt #11 */ 107 .long ioss_interrupts_gpio_12_IRQHandler /* GPIO Port Interrupt #12 */ 108 .long 0 /* Reserved */ 109 .long ioss_interrupts_gpio_14_IRQHandler /* GPIO Port Interrupt #14 */ 110 .long ioss_interrupt_gpio_IRQHandler /* GPIO All Ports */ 111 .long ioss_interrupt_vdd_IRQHandler /* GPIO Supply Detect Interrupt */ 112 .long lpcomp_interrupt_IRQHandler /* Low Power Comparator Interrupt */ 113 .long scb_6_interrupt_IRQHandler /* Serial Communication Block #6 (DeepSleep capable) */ 114 .long srss_interrupt_mcwdt_0_IRQHandler /* Multi Counter Watchdog Timer interrupt */ 115 .long srss_interrupt_mcwdt_1_IRQHandler /* Multi Counter Watchdog Timer interrupt */ 116 .long srss_interrupt_backup_IRQHandler /* Backup domain interrupt */ 117 .long srss_interrupt_IRQHandler /* Other combined Interrupts for SRSS (LVD, WDT, CLKCAL) */ 118 .long cpuss_interrupts_ipc_0_IRQHandler /* CPUSS Inter Process Communication Interrupt #0 */ 119 .long cpuss_interrupts_ipc_1_IRQHandler /* CPUSS Inter Process Communication Interrupt #1 */ 120 .long cpuss_interrupts_ipc_2_IRQHandler /* CPUSS Inter Process Communication Interrupt #2 */ 121 .long cpuss_interrupts_ipc_3_IRQHandler /* CPUSS Inter Process Communication Interrupt #3 */ 122 .long cpuss_interrupts_ipc_4_IRQHandler /* CPUSS Inter Process Communication Interrupt #4 */ 123 .long cpuss_interrupts_ipc_5_IRQHandler /* CPUSS Inter Process Communication Interrupt #5 */ 124 .long cpuss_interrupts_ipc_6_IRQHandler /* CPUSS Inter Process Communication Interrupt #6 */ 125 .long cpuss_interrupts_ipc_7_IRQHandler /* CPUSS Inter Process Communication Interrupt #7 */ 126 .long cpuss_interrupts_ipc_8_IRQHandler /* CPUSS Inter Process Communication Interrupt #8 */ 127 .long cpuss_interrupts_ipc_9_IRQHandler /* CPUSS Inter Process Communication Interrupt #9 */ 128 .long cpuss_interrupts_ipc_10_IRQHandler /* CPUSS Inter Process Communication Interrupt #10 */ 129 .long cpuss_interrupts_ipc_11_IRQHandler /* CPUSS Inter Process Communication Interrupt #11 */ 130 .long cpuss_interrupts_ipc_12_IRQHandler /* CPUSS Inter Process Communication Interrupt #12 */ 131 .long cpuss_interrupts_ipc_13_IRQHandler /* CPUSS Inter Process Communication Interrupt #13 */ 132 .long cpuss_interrupts_ipc_14_IRQHandler /* CPUSS Inter Process Communication Interrupt #14 */ 133 .long cpuss_interrupts_ipc_15_IRQHandler /* CPUSS Inter Process Communication Interrupt #15 */ 134 .long pass_interrupt_sar_0_IRQHandler /* SAR ADC0 interrupt */ 135 .long pass_interrupt_sar_1_IRQHandler /* SAR ADC1 interrupt */ 136 .long pass_interrupt_ctbs_IRQHandler /* individual interrupt per CTB */ 137 .long 0 /* Reserved */ 138 .long pass_interrupt_fifo_0_IRQHandler /* PASS FIFO0 */ 139 .long pass_interrupt_fifo_1_IRQHandler /* PASS FIFO1 */ 140 .long scb_0_interrupt_IRQHandler /* Serial Communication Block #0 */ 141 .long scb_1_interrupt_IRQHandler /* Serial Communication Block #1 */ 142 .long scb_2_interrupt_IRQHandler /* Serial Communication Block #2 */ 143 .long 0 /* Reserved */ 144 .long scb_4_interrupt_IRQHandler /* Serial Communication Block #4 */ 145 .long scb_5_interrupt_IRQHandler /* Serial Communication Block #5 */ 146 .long csd_interrupt_IRQHandler /* CSD (Capsense) interrupt */ 147 .long cpuss_interrupts_dmac_0_IRQHandler /* CPUSS DMAC, Channel #0 */ 148 .long cpuss_interrupts_dmac_1_IRQHandler /* CPUSS DMAC, Channel #1 */ 149 .long 0 /* Reserved */ 150 .long 0 /* Reserved */ 151 .long cpuss_interrupts_dw0_0_IRQHandler /* CPUSS DataWire #0, Channel #0 */ 152 .long cpuss_interrupts_dw0_1_IRQHandler /* CPUSS DataWire #0, Channel #1 */ 153 .long cpuss_interrupts_dw0_2_IRQHandler /* CPUSS DataWire #0, Channel #2 */ 154 .long cpuss_interrupts_dw0_3_IRQHandler /* CPUSS DataWire #0, Channel #3 */ 155 .long cpuss_interrupts_dw0_4_IRQHandler /* CPUSS DataWire #0, Channel #4 */ 156 .long cpuss_interrupts_dw0_5_IRQHandler /* CPUSS DataWire #0, Channel #5 */ 157 .long cpuss_interrupts_dw0_6_IRQHandler /* CPUSS DataWire #0, Channel #6 */ 158 .long cpuss_interrupts_dw0_7_IRQHandler /* CPUSS DataWire #0, Channel #7 */ 159 .long cpuss_interrupts_dw0_8_IRQHandler /* CPUSS DataWire #0, Channel #8 */ 160 .long cpuss_interrupts_dw0_9_IRQHandler /* CPUSS DataWire #0, Channel #9 */ 161 .long cpuss_interrupts_dw0_10_IRQHandler /* CPUSS DataWire #0, Channel #10 */ 162 .long cpuss_interrupts_dw0_11_IRQHandler /* CPUSS DataWire #0, Channel #11 */ 163 .long cpuss_interrupts_dw0_12_IRQHandler /* CPUSS DataWire #0, Channel #12 */ 164 .long cpuss_interrupts_dw0_13_IRQHandler /* CPUSS DataWire #0, Channel #13 */ 165 .long cpuss_interrupts_dw0_14_IRQHandler /* CPUSS DataWire #0, Channel #14 */ 166 .long cpuss_interrupts_dw0_15_IRQHandler /* CPUSS DataWire #0, Channel #15 */ 167 .long cpuss_interrupts_dw0_16_IRQHandler /* CPUSS DataWire #0, Channel #16 */ 168 .long cpuss_interrupts_dw0_17_IRQHandler /* CPUSS DataWire #0, Channel #17 */ 169 .long cpuss_interrupts_dw0_18_IRQHandler /* CPUSS DataWire #0, Channel #18 */ 170 .long cpuss_interrupts_dw0_19_IRQHandler /* CPUSS DataWire #0, Channel #19 */ 171 .long cpuss_interrupts_dw0_20_IRQHandler /* CPUSS DataWire #0, Channel #20 */ 172 .long cpuss_interrupts_dw0_21_IRQHandler /* CPUSS DataWire #0, Channel #21 */ 173 .long cpuss_interrupts_dw0_22_IRQHandler /* CPUSS DataWire #0, Channel #22 */ 174 .long cpuss_interrupts_dw0_23_IRQHandler /* CPUSS DataWire #0, Channel #23 */ 175 .long cpuss_interrupts_dw0_24_IRQHandler /* CPUSS DataWire #0, Channel #24 */ 176 .long cpuss_interrupts_dw0_25_IRQHandler /* CPUSS DataWire #0, Channel #25 */ 177 .long cpuss_interrupts_dw0_26_IRQHandler /* CPUSS DataWire #0, Channel #26 */ 178 .long cpuss_interrupts_dw0_27_IRQHandler /* CPUSS DataWire #0, Channel #27 */ 179 .long cpuss_interrupts_dw0_28_IRQHandler /* CPUSS DataWire #0, Channel #28 */ 180 .long cpuss_interrupts_dw1_0_IRQHandler /* CPUSS DataWire #1, Channel #0 */ 181 .long cpuss_interrupts_dw1_1_IRQHandler /* CPUSS DataWire #1, Channel #1 */ 182 .long cpuss_interrupts_dw1_2_IRQHandler /* CPUSS DataWire #1, Channel #2 */ 183 .long cpuss_interrupts_dw1_3_IRQHandler /* CPUSS DataWire #1, Channel #3 */ 184 .long cpuss_interrupts_dw1_4_IRQHandler /* CPUSS DataWire #1, Channel #4 */ 185 .long cpuss_interrupts_dw1_5_IRQHandler /* CPUSS DataWire #1, Channel #5 */ 186 .long cpuss_interrupts_dw1_6_IRQHandler /* CPUSS DataWire #1, Channel #6 */ 187 .long cpuss_interrupts_dw1_7_IRQHandler /* CPUSS DataWire #1, Channel #7 */ 188 .long cpuss_interrupts_dw1_8_IRQHandler /* CPUSS DataWire #1, Channel #8 */ 189 .long cpuss_interrupts_dw1_9_IRQHandler /* CPUSS DataWire #1, Channel #9 */ 190 .long cpuss_interrupts_dw1_10_IRQHandler /* CPUSS DataWire #1, Channel #10 */ 191 .long cpuss_interrupts_dw1_11_IRQHandler /* CPUSS DataWire #1, Channel #11 */ 192 .long cpuss_interrupts_dw1_12_IRQHandler /* CPUSS DataWire #1, Channel #12 */ 193 .long cpuss_interrupts_dw1_13_IRQHandler /* CPUSS DataWire #1, Channel #13 */ 194 .long cpuss_interrupts_dw1_14_IRQHandler /* CPUSS DataWire #1, Channel #14 */ 195 .long cpuss_interrupts_dw1_15_IRQHandler /* CPUSS DataWire #1, Channel #15 */ 196 .long cpuss_interrupts_dw1_16_IRQHandler /* CPUSS DataWire #1, Channel #16 */ 197 .long cpuss_interrupts_dw1_17_IRQHandler /* CPUSS DataWire #1, Channel #17 */ 198 .long cpuss_interrupts_dw1_18_IRQHandler /* CPUSS DataWire #1, Channel #18 */ 199 .long cpuss_interrupts_dw1_19_IRQHandler /* CPUSS DataWire #1, Channel #19 */ 200 .long cpuss_interrupts_dw1_20_IRQHandler /* CPUSS DataWire #1, Channel #20 */ 201 .long cpuss_interrupts_dw1_21_IRQHandler /* CPUSS DataWire #1, Channel #21 */ 202 .long cpuss_interrupts_dw1_22_IRQHandler /* CPUSS DataWire #1, Channel #22 */ 203 .long cpuss_interrupts_dw1_23_IRQHandler /* CPUSS DataWire #1, Channel #23 */ 204 .long cpuss_interrupts_dw1_24_IRQHandler /* CPUSS DataWire #1, Channel #24 */ 205 .long cpuss_interrupts_dw1_25_IRQHandler /* CPUSS DataWire #1, Channel #25 */ 206 .long cpuss_interrupts_dw1_26_IRQHandler /* CPUSS DataWire #1, Channel #26 */ 207 .long cpuss_interrupts_dw1_27_IRQHandler /* CPUSS DataWire #1, Channel #27 */ 208 .long cpuss_interrupts_dw1_28_IRQHandler /* CPUSS DataWire #1, Channel #28 */ 209 .long cpuss_interrupts_fault_0_IRQHandler /* CPUSS Fault Structure Interrupt #0 */ 210 .long cpuss_interrupts_fault_1_IRQHandler /* CPUSS Fault Structure Interrupt #1 */ 211 .long cpuss_interrupt_crypto_IRQHandler /* CRYPTO Accelerator Interrupt */ 212 .long cpuss_interrupt_fm_IRQHandler /* FLASH Macro Interrupt */ 213 .long cpuss_interrupts_cm4_fp_IRQHandler /* Floating Point operation fault */ 214 .long cpuss_interrupts_cm0_cti_0_IRQHandler /* CM0+ CTI #0 */ 215 .long cpuss_interrupts_cm0_cti_1_IRQHandler /* CM0+ CTI #1 */ 216 .long cpuss_interrupts_cm4_cti_0_IRQHandler /* CM4 CTI #0 */ 217 .long cpuss_interrupts_cm4_cti_1_IRQHandler /* CM4 CTI #1 */ 218 .long tcpwm_0_interrupts_0_IRQHandler /* TCPWM #0, Counter #0 */ 219 .long tcpwm_0_interrupts_1_IRQHandler /* TCPWM #0, Counter #1 */ 220 .long tcpwm_0_interrupts_2_IRQHandler /* TCPWM #0, Counter #2 */ 221 .long tcpwm_0_interrupts_3_IRQHandler /* TCPWM #0, Counter #3 */ 222 .long 0 /* Reserved */ 223 .long 0 /* Reserved */ 224 .long 0 /* Reserved */ 225 .long 0 /* Reserved */ 226 .long tcpwm_0_interrupts_256_IRQHandler /* TCPWM #0, Counter #256 */ 227 .long tcpwm_0_interrupts_257_IRQHandler /* TCPWM #0, Counter #257 */ 228 .long tcpwm_0_interrupts_258_IRQHandler /* TCPWM #0, Counter #258 */ 229 .long tcpwm_0_interrupts_259_IRQHandler /* TCPWM #0, Counter #259 */ 230 .long tcpwm_0_interrupts_260_IRQHandler /* TCPWM #0, Counter #260 */ 231 .long tcpwm_0_interrupts_261_IRQHandler /* TCPWM #0, Counter #261 */ 232 .long tcpwm_0_interrupts_262_IRQHandler /* TCPWM #0, Counter #262 */ 233 .long tcpwm_0_interrupts_263_IRQHandler /* TCPWM #0, Counter #263 */ 234 .long 0 /* Reserved */ 235 .long 0 /* Reserved */ 236 .long 0 /* Reserved */ 237 .long 0 /* Reserved */ 238 .long 0 /* Reserved */ 239 .long 0 /* Reserved */ 240 .long 0 /* Reserved */ 241 .long pass_interrupt_dacs_IRQHandler /* Consolidated interrrupt for all DACs */ 242 .long 0 /* Reserved */ 243 .long 0 /* Reserved */ 244 .long 0 /* Reserved */ 245 .long 0 /* Reserved */ 246 .long 0 /* Reserved */ 247 .long 0 /* Reserved */ 248 .long 0 /* Reserved */ 249 .long 0 /* Reserved */ 250 .long 0 /* Reserved */ 251 .long 0 /* Reserved */ 252 .long 0 /* Reserved */ 253 .long 0 /* Reserved */ 254 .long 0 /* Reserved */ 255 .long smif_interrupt_IRQHandler /* Serial Memory Interface interrupt */ 256 .long usb_interrupt_hi_IRQHandler /* USB Interrupt */ 257 .long usb_interrupt_med_IRQHandler /* USB Interrupt */ 258 .long usb_interrupt_lo_IRQHandler /* USB Interrupt */ 259 .long 0 /* Reserved */ 260 .long 0 /* Reserved */ 261 .long 0 /* Reserved */ 262 .long 0 /* Reserved */ 263 .long canfd_0_interrupt0_IRQHandler /* Can #0, Consolidated interrupt #0 */ 264 .long canfd_0_interrupts0_0_IRQHandler /* CAN #0, Interrupt #0, Channel #0 */ 265 .long canfd_0_interrupts1_0_IRQHandler /* CAN #0, Interrupt #1, Channel #0 */ 266 .long cpuss_interrupts_dw1_29_IRQHandler /* CPUSS DataWire #1, Channel #29 */ 267 .long cpuss_interrupts_dw1_30_IRQHandler /* CPUSS DataWire #1, Channel #30 */ 268 .long cpuss_interrupts_dw1_31_IRQHandler /* CPUSS DataWire #1, Channel #31 */ 269 .long cpuss_interrupts_dw0_29_IRQHandler /* CPUSS DataWire #0, Channel #29 */ 270 271 272 .size __Vectors, . - __Vectors 273 .equ __VectorsSize, . - __Vectors 274 275 .section .ram_vectors 276 .align 2 277 .globl __ramVectors 278__ramVectors: 279 .space __VectorsSize 280 .size __ramVectors, . - __ramVectors 281 282 283 .text 284 .thumb 285 .thumb_func 286 .align 2 287 288 /* 289 * Device startup customization 290 * 291 * Note. The global resources are not yet initialized (for example global variables, peripherals, clocks) 292 * because this function is executed as the first instruction in the ResetHandler. 293 * The PDL is also not initialized to use the proper register offsets. 294 * The user of this function is responsible for initializing the PDL and resources before using them. 295 */ 296 .weak Cy_OnResetUser 297 .func Cy_OnResetUser, Cy_OnResetUser 298 .type Cy_OnResetUser, %function 299 300Cy_OnResetUser: 301 bx lr 302 .size Cy_OnResetUser, . - Cy_OnResetUser 303 .endfunc 304 305 /* OS-specific low-level initialization */ 306 .weak cy_toolchain_init 307 .func cy_toolchain_init, cy_toolchain_init 308 .type cy_toolchain_init, %function 309 310cy_toolchain_init: 311 bx lr 312 .size cy_toolchain_init, . - cy_toolchain_init 313 .endfunc 314 315 /* Reset handler */ 316 .weak Reset_Handler 317 .type Reset_Handler, %function 318 319Reset_Handler: 320 bl Cy_OnResetUser 321 cpsid i 322 323/* Firstly it copies data from read only memory to RAM. There are two schemes 324 * to copy. One can copy more than one sections. Another can only copy 325 * one section. The former scheme needs more instructions and read-only 326 * data to implement than the latter. 327 * Macro __STARTUP_COPY_MULTIPLE is used to choose between two schemes. */ 328 329#ifdef __STARTUP_COPY_MULTIPLE 330/* Multiple sections scheme. 331 * 332 * Between symbol address __copy_table_start__ and __copy_table_end__, 333 * there are array of triplets, each of which specify: 334 * offset 0: LMA of start of a section to copy from 335 * offset 4: VMA of start of a section to copy to 336 * offset 8: size of the section to copy. Must be multiply of 4 337 * 338 * All addresses must be aligned to 4 bytes boundary. 339 */ 340 ldr r4, =__copy_table_start__ 341 ldr r5, =__copy_table_end__ 342 343.L_loop0: 344 cmp r4, r5 345 bge .L_loop0_done 346 ldr r1, [r4] 347 ldr r2, [r4, #4] 348 ldr r3, [r4, #8] 349 350.L_loop0_0: 351 subs r3, #4 352 ittt ge 353 ldrge r0, [r1, r3] 354 strge r0, [r2, r3] 355 bge .L_loop0_0 356 357 adds r4, #12 358 b .L_loop0 359 360.L_loop0_done: 361#else 362/* Single section scheme. 363 * 364 * The ranges of copy from/to are specified by following symbols 365 * __etext: LMA of start of the section to copy from. Usually end of text 366 * __data_start__: VMA of start of the section to copy to 367 * __data_end__: VMA of end of the section to copy to 368 * 369 * All addresses must be aligned to 4 bytes boundary. 370 */ 371 ldr r1, =__etext 372 ldr r2, =__data_start__ 373 ldr r3, =__data_end__ 374 375.L_loop1: 376 cmp r2, r3 377 ittt lt 378 ldrlt r0, [r1], #4 379 strlt r0, [r2], #4 380 blt .L_loop1 381#endif /*__STARTUP_COPY_MULTIPLE */ 382 383/* This part of work usually is done in C library startup code. Otherwise, 384 * define this macro to enable it in this startup. 385 * 386 * There are two schemes too. One can clear multiple BSS sections. Another 387 * can only clear one section. The former is more size expensive than the 388 * latter. 389 * 390 * Define macro __STARTUP_CLEAR_BSS_MULTIPLE to choose the former. 391 * Otherwise define macro __STARTUP_CLEAR_BSS to choose the later. 392 */ 393#ifdef __STARTUP_CLEAR_BSS_MULTIPLE 394/* Multiple sections scheme. 395 * 396 * Between symbol address __copy_table_start__ and __copy_table_end__, 397 * there are array of tuples specifying: 398 * offset 0: Start of a BSS section 399 * offset 4: Size of this BSS section. Must be multiply of 4 400 */ 401 ldr r3, =__zero_table_start__ 402 ldr r4, =__zero_table_end__ 403 404.L_loop2: 405 cmp r3, r4 406 bge .L_loop2_done 407 ldr r1, [r3] 408 ldr r2, [r3, #4] 409 movs r0, 0 410 411.L_loop2_0: 412 subs r2, #4 413 itt ge 414 strge r0, [r1, r2] 415 bge .L_loop2_0 416 417 adds r3, #8 418 b .L_loop2 419.L_loop2_done: 420#elif defined (__STARTUP_CLEAR_BSS) 421/* Single BSS section scheme. 422 * 423 * The BSS section is specified by following symbols 424 * __bss_start__: start of the BSS section. 425 * __bss_end__: end of the BSS section. 426 * 427 * Both addresses must be aligned to 4 bytes boundary. 428 */ 429 ldr r1, =__bss_start__ 430 ldr r2, =__bss_end__ 431 432 movs r0, 0 433.L_loop3: 434 cmp r1, r2 435 itt lt 436 strlt r0, [r1], #4 437 blt .L_loop3 438#endif /* __STARTUP_CLEAR_BSS_MULTIPLE || __STARTUP_CLEAR_BSS */ 439 440 /* Update Vector Table Offset Register. */ 441 ldr r0, =__ramVectors 442 ldr r1, =CY_CPU_VTOR_ADDR 443 str r0, [r1] 444 dsb 0xF 445 446 /* Enable the FPU if used */ 447 bl Cy_SystemInitFpuEnable 448 449#ifndef __NO_SYSTEM_INIT 450 bl SystemInit 451#endif 452 453 /* OS-specific low-level initialization */ 454 bl cy_toolchain_init 455 456 /* Call C/C++ static constructors */ 457 bl __libc_init_array 458 459 /* Execute main application */ 460 bl main 461 462 /* Call C/C++ static destructors */ 463 bl __libc_fini_array 464 465 /* Should never get here */ 466 b . 467 468 .pool 469 .size Reset_Handler, . - Reset_Handler 470 471 .align 1 472 .thumb_func 473 .weak Default_Handler 474 .type Default_Handler, %function 475 476Default_Handler: 477 b . 478 .size Default_Handler, . - Default_Handler 479 480 481 .weak Cy_SysLib_FaultHandler 482 .type Cy_SysLib_FaultHandler, %function 483 484Cy_SysLib_FaultHandler: 485 b . 486 .size Cy_SysLib_FaultHandler, . - Cy_SysLib_FaultHandler 487 .type Fault_Handler, %function 488 489Fault_Handler: 490 /* Storing LR content for Creator call stack trace */ 491 push {LR} 492 movs r0, #4 493 mov r1, LR 494 tst r0, r1 495 beq .L_MSP 496 mrs r0, PSP 497 b .L_API_call 498.L_MSP: 499 mrs r0, MSP 500 /* Compensation of stack pointer address due to pushing 4 bytes of LR */ 501 adds r0, r0, #4 502.L_API_call: 503 bl Cy_SysLib_FaultHandler 504 b . 505 .size Fault_Handler, . - Fault_Handler 506 507.macro def_fault_Handler fault_handler_name 508 .weak \fault_handler_name 509 .set \fault_handler_name, Fault_Handler 510 .endm 511 512/* Macro to define default handlers. Default handler 513 * will be weak symbol and just dead loops. They can be 514 * overwritten by other handlers */ 515 .macro def_irq_handler handler_name 516 .weak \handler_name 517 .set \handler_name, Default_Handler 518 .endm 519 520 def_irq_handler NMI_Handler 521 522 def_fault_Handler HardFault_Handler 523 def_fault_Handler MemManage_Handler 524 def_fault_Handler BusFault_Handler 525 def_fault_Handler UsageFault_Handler 526 527 def_irq_handler SVC_Handler 528 def_irq_handler DebugMon_Handler 529 def_irq_handler PendSV_Handler 530 def_irq_handler SysTick_Handler 531 532 def_irq_handler ioss_interrupts_gpio_0_IRQHandler /* GPIO Port Interrupt #0 */ 533 def_irq_handler ioss_interrupts_gpio_2_IRQHandler /* GPIO Port Interrupt #2 */ 534 def_irq_handler ioss_interrupts_gpio_3_IRQHandler /* GPIO Port Interrupt #3 */ 535 def_irq_handler ioss_interrupts_gpio_5_IRQHandler /* GPIO Port Interrupt #5 */ 536 def_irq_handler ioss_interrupts_gpio_6_IRQHandler /* GPIO Port Interrupt #6 */ 537 def_irq_handler ioss_interrupts_gpio_7_IRQHandler /* GPIO Port Interrupt #7 */ 538 def_irq_handler ioss_interrupts_gpio_8_IRQHandler /* GPIO Port Interrupt #8 */ 539 def_irq_handler ioss_interrupts_gpio_9_IRQHandler /* GPIO Port Interrupt #9 */ 540 def_irq_handler ioss_interrupts_gpio_10_IRQHandler /* GPIO Port Interrupt #10 */ 541 def_irq_handler ioss_interrupts_gpio_11_IRQHandler /* GPIO Port Interrupt #11 */ 542 def_irq_handler ioss_interrupts_gpio_12_IRQHandler /* GPIO Port Interrupt #12 */ 543 def_irq_handler ioss_interrupts_gpio_14_IRQHandler /* GPIO Port Interrupt #14 */ 544 def_irq_handler ioss_interrupt_gpio_IRQHandler /* GPIO All Ports */ 545 def_irq_handler ioss_interrupt_vdd_IRQHandler /* GPIO Supply Detect Interrupt */ 546 def_irq_handler lpcomp_interrupt_IRQHandler /* Low Power Comparator Interrupt */ 547 def_irq_handler scb_6_interrupt_IRQHandler /* Serial Communication Block #6 (DeepSleep capable) */ 548 def_irq_handler srss_interrupt_mcwdt_0_IRQHandler /* Multi Counter Watchdog Timer interrupt */ 549 def_irq_handler srss_interrupt_mcwdt_1_IRQHandler /* Multi Counter Watchdog Timer interrupt */ 550 def_irq_handler srss_interrupt_backup_IRQHandler /* Backup domain interrupt */ 551 def_irq_handler srss_interrupt_IRQHandler /* Other combined Interrupts for SRSS (LVD, WDT, CLKCAL) */ 552 def_irq_handler cpuss_interrupts_ipc_0_IRQHandler /* CPUSS Inter Process Communication Interrupt #0 */ 553 def_irq_handler cpuss_interrupts_ipc_1_IRQHandler /* CPUSS Inter Process Communication Interrupt #1 */ 554 def_irq_handler cpuss_interrupts_ipc_2_IRQHandler /* CPUSS Inter Process Communication Interrupt #2 */ 555 def_irq_handler cpuss_interrupts_ipc_3_IRQHandler /* CPUSS Inter Process Communication Interrupt #3 */ 556 def_irq_handler cpuss_interrupts_ipc_4_IRQHandler /* CPUSS Inter Process Communication Interrupt #4 */ 557 def_irq_handler cpuss_interrupts_ipc_5_IRQHandler /* CPUSS Inter Process Communication Interrupt #5 */ 558 def_irq_handler cpuss_interrupts_ipc_6_IRQHandler /* CPUSS Inter Process Communication Interrupt #6 */ 559 def_irq_handler cpuss_interrupts_ipc_7_IRQHandler /* CPUSS Inter Process Communication Interrupt #7 */ 560 def_irq_handler cpuss_interrupts_ipc_8_IRQHandler /* CPUSS Inter Process Communication Interrupt #8 */ 561 def_irq_handler cpuss_interrupts_ipc_9_IRQHandler /* CPUSS Inter Process Communication Interrupt #9 */ 562 def_irq_handler cpuss_interrupts_ipc_10_IRQHandler /* CPUSS Inter Process Communication Interrupt #10 */ 563 def_irq_handler cpuss_interrupts_ipc_11_IRQHandler /* CPUSS Inter Process Communication Interrupt #11 */ 564 def_irq_handler cpuss_interrupts_ipc_12_IRQHandler /* CPUSS Inter Process Communication Interrupt #12 */ 565 def_irq_handler cpuss_interrupts_ipc_13_IRQHandler /* CPUSS Inter Process Communication Interrupt #13 */ 566 def_irq_handler cpuss_interrupts_ipc_14_IRQHandler /* CPUSS Inter Process Communication Interrupt #14 */ 567 def_irq_handler cpuss_interrupts_ipc_15_IRQHandler /* CPUSS Inter Process Communication Interrupt #15 */ 568 def_irq_handler pass_interrupt_sar_0_IRQHandler /* SAR ADC0 interrupt */ 569 def_irq_handler pass_interrupt_sar_1_IRQHandler /* SAR ADC1 interrupt */ 570 def_irq_handler pass_interrupt_ctbs_IRQHandler /* individual interrupt per CTB */ 571 def_irq_handler pass_interrupt_fifo_0_IRQHandler /* PASS FIFO0 */ 572 def_irq_handler pass_interrupt_fifo_1_IRQHandler /* PASS FIFO1 */ 573 def_irq_handler scb_0_interrupt_IRQHandler /* Serial Communication Block #0 */ 574 def_irq_handler scb_1_interrupt_IRQHandler /* Serial Communication Block #1 */ 575 def_irq_handler scb_2_interrupt_IRQHandler /* Serial Communication Block #2 */ 576 def_irq_handler scb_4_interrupt_IRQHandler /* Serial Communication Block #4 */ 577 def_irq_handler scb_5_interrupt_IRQHandler /* Serial Communication Block #5 */ 578 def_irq_handler csd_interrupt_IRQHandler /* CSD (Capsense) interrupt */ 579 def_irq_handler cpuss_interrupts_dmac_0_IRQHandler /* CPUSS DMAC, Channel #0 */ 580 def_irq_handler cpuss_interrupts_dmac_1_IRQHandler /* CPUSS DMAC, Channel #1 */ 581 def_irq_handler cpuss_interrupts_dw0_0_IRQHandler /* CPUSS DataWire #0, Channel #0 */ 582 def_irq_handler cpuss_interrupts_dw0_1_IRQHandler /* CPUSS DataWire #0, Channel #1 */ 583 def_irq_handler cpuss_interrupts_dw0_2_IRQHandler /* CPUSS DataWire #0, Channel #2 */ 584 def_irq_handler cpuss_interrupts_dw0_3_IRQHandler /* CPUSS DataWire #0, Channel #3 */ 585 def_irq_handler cpuss_interrupts_dw0_4_IRQHandler /* CPUSS DataWire #0, Channel #4 */ 586 def_irq_handler cpuss_interrupts_dw0_5_IRQHandler /* CPUSS DataWire #0, Channel #5 */ 587 def_irq_handler cpuss_interrupts_dw0_6_IRQHandler /* CPUSS DataWire #0, Channel #6 */ 588 def_irq_handler cpuss_interrupts_dw0_7_IRQHandler /* CPUSS DataWire #0, Channel #7 */ 589 def_irq_handler cpuss_interrupts_dw0_8_IRQHandler /* CPUSS DataWire #0, Channel #8 */ 590 def_irq_handler cpuss_interrupts_dw0_9_IRQHandler /* CPUSS DataWire #0, Channel #9 */ 591 def_irq_handler cpuss_interrupts_dw0_10_IRQHandler /* CPUSS DataWire #0, Channel #10 */ 592 def_irq_handler cpuss_interrupts_dw0_11_IRQHandler /* CPUSS DataWire #0, Channel #11 */ 593 def_irq_handler cpuss_interrupts_dw0_12_IRQHandler /* CPUSS DataWire #0, Channel #12 */ 594 def_irq_handler cpuss_interrupts_dw0_13_IRQHandler /* CPUSS DataWire #0, Channel #13 */ 595 def_irq_handler cpuss_interrupts_dw0_14_IRQHandler /* CPUSS DataWire #0, Channel #14 */ 596 def_irq_handler cpuss_interrupts_dw0_15_IRQHandler /* CPUSS DataWire #0, Channel #15 */ 597 def_irq_handler cpuss_interrupts_dw0_16_IRQHandler /* CPUSS DataWire #0, Channel #16 */ 598 def_irq_handler cpuss_interrupts_dw0_17_IRQHandler /* CPUSS DataWire #0, Channel #17 */ 599 def_irq_handler cpuss_interrupts_dw0_18_IRQHandler /* CPUSS DataWire #0, Channel #18 */ 600 def_irq_handler cpuss_interrupts_dw0_19_IRQHandler /* CPUSS DataWire #0, Channel #19 */ 601 def_irq_handler cpuss_interrupts_dw0_20_IRQHandler /* CPUSS DataWire #0, Channel #20 */ 602 def_irq_handler cpuss_interrupts_dw0_21_IRQHandler /* CPUSS DataWire #0, Channel #21 */ 603 def_irq_handler cpuss_interrupts_dw0_22_IRQHandler /* CPUSS DataWire #0, Channel #22 */ 604 def_irq_handler cpuss_interrupts_dw0_23_IRQHandler /* CPUSS DataWire #0, Channel #23 */ 605 def_irq_handler cpuss_interrupts_dw0_24_IRQHandler /* CPUSS DataWire #0, Channel #24 */ 606 def_irq_handler cpuss_interrupts_dw0_25_IRQHandler /* CPUSS DataWire #0, Channel #25 */ 607 def_irq_handler cpuss_interrupts_dw0_26_IRQHandler /* CPUSS DataWire #0, Channel #26 */ 608 def_irq_handler cpuss_interrupts_dw0_27_IRQHandler /* CPUSS DataWire #0, Channel #27 */ 609 def_irq_handler cpuss_interrupts_dw0_28_IRQHandler /* CPUSS DataWire #0, Channel #28 */ 610 def_irq_handler cpuss_interrupts_dw1_0_IRQHandler /* CPUSS DataWire #1, Channel #0 */ 611 def_irq_handler cpuss_interrupts_dw1_1_IRQHandler /* CPUSS DataWire #1, Channel #1 */ 612 def_irq_handler cpuss_interrupts_dw1_2_IRQHandler /* CPUSS DataWire #1, Channel #2 */ 613 def_irq_handler cpuss_interrupts_dw1_3_IRQHandler /* CPUSS DataWire #1, Channel #3 */ 614 def_irq_handler cpuss_interrupts_dw1_4_IRQHandler /* CPUSS DataWire #1, Channel #4 */ 615 def_irq_handler cpuss_interrupts_dw1_5_IRQHandler /* CPUSS DataWire #1, Channel #5 */ 616 def_irq_handler cpuss_interrupts_dw1_6_IRQHandler /* CPUSS DataWire #1, Channel #6 */ 617 def_irq_handler cpuss_interrupts_dw1_7_IRQHandler /* CPUSS DataWire #1, Channel #7 */ 618 def_irq_handler cpuss_interrupts_dw1_8_IRQHandler /* CPUSS DataWire #1, Channel #8 */ 619 def_irq_handler cpuss_interrupts_dw1_9_IRQHandler /* CPUSS DataWire #1, Channel #9 */ 620 def_irq_handler cpuss_interrupts_dw1_10_IRQHandler /* CPUSS DataWire #1, Channel #10 */ 621 def_irq_handler cpuss_interrupts_dw1_11_IRQHandler /* CPUSS DataWire #1, Channel #11 */ 622 def_irq_handler cpuss_interrupts_dw1_12_IRQHandler /* CPUSS DataWire #1, Channel #12 */ 623 def_irq_handler cpuss_interrupts_dw1_13_IRQHandler /* CPUSS DataWire #1, Channel #13 */ 624 def_irq_handler cpuss_interrupts_dw1_14_IRQHandler /* CPUSS DataWire #1, Channel #14 */ 625 def_irq_handler cpuss_interrupts_dw1_15_IRQHandler /* CPUSS DataWire #1, Channel #15 */ 626 def_irq_handler cpuss_interrupts_dw1_16_IRQHandler /* CPUSS DataWire #1, Channel #16 */ 627 def_irq_handler cpuss_interrupts_dw1_17_IRQHandler /* CPUSS DataWire #1, Channel #17 */ 628 def_irq_handler cpuss_interrupts_dw1_18_IRQHandler /* CPUSS DataWire #1, Channel #18 */ 629 def_irq_handler cpuss_interrupts_dw1_19_IRQHandler /* CPUSS DataWire #1, Channel #19 */ 630 def_irq_handler cpuss_interrupts_dw1_20_IRQHandler /* CPUSS DataWire #1, Channel #20 */ 631 def_irq_handler cpuss_interrupts_dw1_21_IRQHandler /* CPUSS DataWire #1, Channel #21 */ 632 def_irq_handler cpuss_interrupts_dw1_22_IRQHandler /* CPUSS DataWire #1, Channel #22 */ 633 def_irq_handler cpuss_interrupts_dw1_23_IRQHandler /* CPUSS DataWire #1, Channel #23 */ 634 def_irq_handler cpuss_interrupts_dw1_24_IRQHandler /* CPUSS DataWire #1, Channel #24 */ 635 def_irq_handler cpuss_interrupts_dw1_25_IRQHandler /* CPUSS DataWire #1, Channel #25 */ 636 def_irq_handler cpuss_interrupts_dw1_26_IRQHandler /* CPUSS DataWire #1, Channel #26 */ 637 def_irq_handler cpuss_interrupts_dw1_27_IRQHandler /* CPUSS DataWire #1, Channel #27 */ 638 def_irq_handler cpuss_interrupts_dw1_28_IRQHandler /* CPUSS DataWire #1, Channel #28 */ 639 def_irq_handler cpuss_interrupts_fault_0_IRQHandler /* CPUSS Fault Structure Interrupt #0 */ 640 def_irq_handler cpuss_interrupts_fault_1_IRQHandler /* CPUSS Fault Structure Interrupt #1 */ 641 def_irq_handler cpuss_interrupt_crypto_IRQHandler /* CRYPTO Accelerator Interrupt */ 642 def_irq_handler cpuss_interrupt_fm_IRQHandler /* FLASH Macro Interrupt */ 643 def_irq_handler cpuss_interrupts_cm4_fp_IRQHandler /* Floating Point operation fault */ 644 def_irq_handler cpuss_interrupts_cm0_cti_0_IRQHandler /* CM0+ CTI #0 */ 645 def_irq_handler cpuss_interrupts_cm0_cti_1_IRQHandler /* CM0+ CTI #1 */ 646 def_irq_handler cpuss_interrupts_cm4_cti_0_IRQHandler /* CM4 CTI #0 */ 647 def_irq_handler cpuss_interrupts_cm4_cti_1_IRQHandler /* CM4 CTI #1 */ 648 def_irq_handler tcpwm_0_interrupts_0_IRQHandler /* TCPWM #0, Counter #0 */ 649 def_irq_handler tcpwm_0_interrupts_1_IRQHandler /* TCPWM #0, Counter #1 */ 650 def_irq_handler tcpwm_0_interrupts_2_IRQHandler /* TCPWM #0, Counter #2 */ 651 def_irq_handler tcpwm_0_interrupts_3_IRQHandler /* TCPWM #0, Counter #3 */ 652 def_irq_handler tcpwm_0_interrupts_256_IRQHandler /* TCPWM #0, Counter #256 */ 653 def_irq_handler tcpwm_0_interrupts_257_IRQHandler /* TCPWM #0, Counter #257 */ 654 def_irq_handler tcpwm_0_interrupts_258_IRQHandler /* TCPWM #0, Counter #258 */ 655 def_irq_handler tcpwm_0_interrupts_259_IRQHandler /* TCPWM #0, Counter #259 */ 656 def_irq_handler tcpwm_0_interrupts_260_IRQHandler /* TCPWM #0, Counter #260 */ 657 def_irq_handler tcpwm_0_interrupts_261_IRQHandler /* TCPWM #0, Counter #261 */ 658 def_irq_handler tcpwm_0_interrupts_262_IRQHandler /* TCPWM #0, Counter #262 */ 659 def_irq_handler tcpwm_0_interrupts_263_IRQHandler /* TCPWM #0, Counter #263 */ 660 def_irq_handler pass_interrupt_dacs_IRQHandler /* Consolidated interrrupt for all DACs */ 661 def_irq_handler smif_interrupt_IRQHandler /* Serial Memory Interface interrupt */ 662 def_irq_handler usb_interrupt_hi_IRQHandler /* USB Interrupt */ 663 def_irq_handler usb_interrupt_med_IRQHandler /* USB Interrupt */ 664 def_irq_handler usb_interrupt_lo_IRQHandler /* USB Interrupt */ 665 def_irq_handler canfd_0_interrupt0_IRQHandler /* Can #0, Consolidated interrupt #0 */ 666 def_irq_handler canfd_0_interrupts0_0_IRQHandler /* CAN #0, Interrupt #0, Channel #0 */ 667 def_irq_handler canfd_0_interrupts1_0_IRQHandler /* CAN #0, Interrupt #1, Channel #0 */ 668 def_irq_handler cpuss_interrupts_dw1_29_IRQHandler /* CPUSS DataWire #1, Channel #29 */ 669 def_irq_handler cpuss_interrupts_dw1_30_IRQHandler /* CPUSS DataWire #1, Channel #30 */ 670 def_irq_handler cpuss_interrupts_dw1_31_IRQHandler /* CPUSS DataWire #1, Channel #31 */ 671 def_irq_handler cpuss_interrupts_dw0_29_IRQHandler /* CPUSS DataWire #0, Channel #29 */ 672 673 .end 674 675 676/* [] END OF FILE */ 677