1;/**************************************************************************//** 2; * @file startup_psoc6_02_cm0plus.s 3; * @brief CMSIS Core Device Startup File for 4; * ARMCM0plus Device Series 5; * @version V5.00 6; * @date 08. 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; 27; The modules in this file are included in the libraries, and may be replaced 28; by any user-defined modules that define the PUBLIC symbol _program_start or 29; a user defined start symbol. 30; To override the cstartup defined in the library, simply add your modified 31; version to the workbench project. 32; 33; The vector table is normally located at address 0. 34; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. 35; The name "__vector_table" has special meaning for C-SPY: 36; it is where the SP start value is found, and the NVIC vector 37; table register (VTOR) is initialized to this address if != 0. 38; 39; Cortex-M version 40; 41 42 MODULE ?cstartup 43 44 ;; Forward declaration of sections. 45 SECTION CSTACK:DATA:NOROOT(3) 46 SECTION .intvec_ram:DATA:NOROOT(2) 47 SECTION .intvec:CODE:NOROOT(2) 48 49 EXTERN __iar_program_start 50 EXTERN SystemInit 51 EXTERN __iar_data_init3 52 EXTERN __iar_dynamic_initialization 53 PUBLIC __vector_table 54 PUBLIC __vector_table_0x1c 55 PUBLIC __Vectors 56 PUBLIC __Vectors_End 57 PUBLIC __Vectors_Size 58 PUBLIC __ramVectors 59 60 DATA 61 62__vector_table 63 DCD sfe(CSTACK) 64 DCD Reset_Handler 65 66 DCD 0x0000000D ; NMI_Handler is defined in ROM code 67 DCD HardFault_Handler 68 DCD 0 69 DCD 0 70 DCD 0 71__vector_table_0x1c 72 DCD 0 73 DCD 0 74 DCD 0 75 DCD 0 76 DCD SVC_Handler 77 DCD 0 78 DCD 0 79 DCD PendSV_Handler 80 DCD SysTick_Handler 81 82 ; External interrupts Description 83 DCD NvicMux0_IRQHandler ; CPU User Interrupt #0 84 DCD NvicMux1_IRQHandler ; CPU User Interrupt #1 85 DCD NvicMux2_IRQHandler ; CPU User Interrupt #2 86 DCD NvicMux3_IRQHandler ; CPU User Interrupt #3 87 DCD NvicMux4_IRQHandler ; CPU User Interrupt #4 88 DCD NvicMux5_IRQHandler ; CPU User Interrupt #5 89 DCD NvicMux6_IRQHandler ; CPU User Interrupt #6 90 DCD NvicMux7_IRQHandler ; CPU User Interrupt #7 91 DCD Internal0_IRQHandler ; Internal SW Interrupt #0 92 DCD Internal1_IRQHandler ; Internal SW Interrupt #1 93 DCD Internal2_IRQHandler ; Internal SW Interrupt #2 94 DCD Internal3_IRQHandler ; Internal SW Interrupt #3 95 DCD Internal4_IRQHandler ; Internal SW Interrupt #4 96 DCD Internal5_IRQHandler ; Internal SW Interrupt #5 97 DCD Internal6_IRQHandler ; Internal SW Interrupt #6 98 DCD Internal7_IRQHandler ; Internal SW Interrupt #7 99 100__Vectors_End 101 102__Vectors EQU __vector_table 103__Vectors_Size EQU __Vectors_End - __Vectors 104 105 SECTION .intvec_ram:DATA:REORDER:NOROOT(2) 106__ramVectors 107 DS8 __Vectors_Size 108 109 110 THUMB 111 112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 113;; 114;; Default handlers 115;; 116 PUBWEAK Default_Handler 117 SECTION .text:CODE:REORDER:NOROOT(2) 118Default_Handler 119 B Default_Handler 120 121 122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 123;; 124;; Weak function for startup customization 125;; 126;; Note. The global resources are not yet initialized (for example global variables, peripherals, clocks) 127;; because this function is executed as the first instruction in the ResetHandler. 128;; The PDL is also not initialized to use the proper register offsets. 129;; The user of this function is responsible for initializing the PDL and resources before using them. 130;; 131 PUBWEAK Cy_OnResetUser 132 SECTION .text:CODE:REORDER:NOROOT(2) 133Cy_OnResetUser 134 BX LR 135 136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 137;; 138;; Define strong version to return zero for 139;; __iar_program_start to skip data sections 140;; initialization. 141;; 142 PUBLIC __low_level_init 143 SECTION .text:CODE:REORDER:NOROOT(2) 144__low_level_init 145 MOVS R0, #0 146 BX LR 147 148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 149;; 150;; Default interrupt handlers. 151;; 152 THUMB 153 PUBWEAK Reset_Handler 154 SECTION .text:CODE:REORDER:NOROOT(2) 155Reset_Handler 156 157 ; Define strong function for startup customization 158 LDR R0, =Cy_OnResetUser 159 BLX R0 160 161 ; Disable global interrupts 162 CPSID I 163 164 ; Copy vectors from ROM to RAM 165 LDR r1, =__vector_table 166 LDR r0, =__ramVectors 167 LDR r2, =__Vectors_Size 168intvec_copy 169 LDR r3, [r1] 170 STR r3, [r0] 171 ADDS r0, r0, #4 172 ADDS r1, r1, #4 173 SUBS r2, r2, #4 174 CMP r2, #0 175 BNE intvec_copy 176 177 ; Update Vector Table Offset Register 178 LDR r0, =__ramVectors 179 LDR r1, =0xE000ED08 180 STR r0, [r1] 181 dsb 182 183 ; Initialize data sections 184 LDR R0, =__iar_data_init3 185 BLX R0 186 187 ; --manual_dynamic_initialization 188 BL __iar_dynamic_initialization 189 190 LDR R0, =SystemInit 191 BLX R0 192 193 LDR R0, =__iar_program_start 194 BLX R0 195 196; Should never get here 197Cy_Main_Exited 198 B Cy_Main_Exited 199 200 201 PUBWEAK NMI_Handler 202 SECTION .text:CODE:REORDER:NOROOT(1) 203NMI_Handler 204 B NMI_Handler 205 206 207 PUBWEAK Cy_SysLib_FaultHandler 208 SECTION .text:CODE:REORDER:NOROOT(1) 209Cy_SysLib_FaultHandler 210 B Cy_SysLib_FaultHandler 211 212 PUBWEAK HardFault_Handler 213 SECTION .text:CODE:REORDER:NOROOT(1) 214HardFault_Handler 215 IMPORT Cy_SysLib_FaultHandler 216 movs r0, #4 217 mov r1, LR 218 tst r0, r1 219 beq L_MSP 220 mrs r0, PSP 221 b L_API_call 222L_MSP 223 mrs r0, MSP 224L_API_call 225 ; Storing LR content for Creator call stack trace 226 push {LR} 227 bl Cy_SysLib_FaultHandler 228 229 230 PUBWEAK SVC_Handler 231 SECTION .text:CODE:REORDER:NOROOT(1) 232SVC_Handler 233 B SVC_Handler 234 235 PUBWEAK PendSV_Handler 236 SECTION .text:CODE:REORDER:NOROOT(1) 237PendSV_Handler 238 B PendSV_Handler 239 240 PUBWEAK SysTick_Handler 241 SECTION .text:CODE:REORDER:NOROOT(1) 242SysTick_Handler 243 B SysTick_Handler 244 245 246 ; External interrupts 247 PUBWEAK NvicMux0_IRQHandler 248 SECTION .text:CODE:REORDER:NOROOT(1) 249NvicMux0_IRQHandler 250 B NvicMux0_IRQHandler 251 252 PUBWEAK NvicMux1_IRQHandler 253 SECTION .text:CODE:REORDER:NOROOT(1) 254NvicMux1_IRQHandler 255 B NvicMux1_IRQHandler 256 257 PUBWEAK NvicMux2_IRQHandler 258 SECTION .text:CODE:REORDER:NOROOT(1) 259NvicMux2_IRQHandler 260 B NvicMux2_IRQHandler 261 262 PUBWEAK NvicMux3_IRQHandler 263 SECTION .text:CODE:REORDER:NOROOT(1) 264NvicMux3_IRQHandler 265 B NvicMux3_IRQHandler 266 267 PUBWEAK NvicMux4_IRQHandler 268 SECTION .text:CODE:REORDER:NOROOT(1) 269NvicMux4_IRQHandler 270 B NvicMux4_IRQHandler 271 272 PUBWEAK NvicMux5_IRQHandler 273 SECTION .text:CODE:REORDER:NOROOT(1) 274NvicMux5_IRQHandler 275 B NvicMux5_IRQHandler 276 277 PUBWEAK NvicMux6_IRQHandler 278 SECTION .text:CODE:REORDER:NOROOT(1) 279NvicMux6_IRQHandler 280 B NvicMux6_IRQHandler 281 282 PUBWEAK NvicMux7_IRQHandler 283 SECTION .text:CODE:REORDER:NOROOT(1) 284NvicMux7_IRQHandler 285 B NvicMux7_IRQHandler 286 287 PUBWEAK Internal0_IRQHandler 288 SECTION .text:CODE:REORDER:NOROOT(1) 289Internal0_IRQHandler 290 B Internal0_IRQHandler 291 292 PUBWEAK Internal1_IRQHandler 293 SECTION .text:CODE:REORDER:NOROOT(1) 294Internal1_IRQHandler 295 B Internal1_IRQHandler 296 297 PUBWEAK Internal2_IRQHandler 298 SECTION .text:CODE:REORDER:NOROOT(1) 299Internal2_IRQHandler 300 B Internal2_IRQHandler 301 302 PUBWEAK Internal3_IRQHandler 303 SECTION .text:CODE:REORDER:NOROOT(1) 304Internal3_IRQHandler 305 B Internal3_IRQHandler 306 307 PUBWEAK Internal4_IRQHandler 308 SECTION .text:CODE:REORDER:NOROOT(1) 309Internal4_IRQHandler 310 B Internal4_IRQHandler 311 312 PUBWEAK Internal5_IRQHandler 313 SECTION .text:CODE:REORDER:NOROOT(1) 314Internal5_IRQHandler 315 B Internal5_IRQHandler 316 317 PUBWEAK Internal6_IRQHandler 318 SECTION .text:CODE:REORDER:NOROOT(1) 319Internal6_IRQHandler 320 B Internal6_IRQHandler 321 322 PUBWEAK Internal7_IRQHandler 323 SECTION .text:CODE:REORDER:NOROOT(1) 324Internal7_IRQHandler 325 B Internal7_IRQHandler 326 327 328 END 329 330 331; [] END OF FILE 332