1;/**************************************************************************//**
2; * @file     startup_psoc6_03_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