1/**************************************************************************//**
2 * @file     startup_psoc6_02_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    .syntax    unified
33    .section  __STACK , __stack
34    .align 3
35
36#ifdef __STACK_SIZE
37    .equ    Stack_Size, __STACK_SIZE
38#else
39    .equ    Stack_Size, 0x00001000
40#endif
41    .globl    __StackTop
42    .globl    __StackLimit
43
44__StackLimit:
45    .space    Stack_Size
46    .equ    __StackTop, . - Stack_Size
47
48    .section __HEAP, __heap
49    .align    3
50#ifdef __HEAP_SIZE
51    .equ    Heap_Size, __HEAP_SIZE
52#else
53    .equ    Heap_Size, 0x00000400
54#endif
55    .globl    __HeapBase
56__HeapBase:
57    .if    Heap_Size
58    .space    Heap_Size
59    .endif
60
61    .section __VECT, ___Vectors
62    .align 2
63    .globl    ___Vectors
64___Vectors:
65    .long    __StackTop            /* Top of Stack */
66    .long    Reset_Handler         /* Reset Handler */
67    .long    CY_NMI_HANLDER_ADDR   /* NMI Handler */
68    .long    HardFault_Handler     /* Hard Fault Handler */
69    .long    MemManage_Handler     /* MPU Fault Handler */
70    .long    BusFault_Handler      /* Bus Fault Handler */
71    .long    UsageFault_Handler    /* Usage Fault Handler */
72    .long    0                     /* Reserved */
73    .long    0                     /* Reserved */
74    .long    0                     /* Reserved */
75    .long    0                     /* Reserved */
76    .long    SVC_Handler           /* SVCall Handler */
77    .long    DebugMon_Handler      /* Debug Monitor Handler */
78    .long    0                     /* Reserved */
79    .long    PendSV_Handler        /* PendSV Handler */
80    .long    SysTick_Handler       /* SysTick Handler */
81
82     /* External interrupts                             Description */
83    .long    ioss_interrupts_gpio_0_IRQHandler       /* GPIO Port Interrupt #0 */
84    .long    ioss_interrupts_gpio_1_IRQHandler       /* GPIO Port Interrupt #1 */
85    .long    ioss_interrupts_gpio_2_IRQHandler       /* GPIO Port Interrupt #2 */
86    .long    ioss_interrupts_gpio_3_IRQHandler       /* GPIO Port Interrupt #3 */
87    .long    ioss_interrupts_gpio_4_IRQHandler       /* GPIO Port Interrupt #4 */
88    .long    ioss_interrupts_gpio_5_IRQHandler       /* GPIO Port Interrupt #5 */
89    .long    ioss_interrupts_gpio_6_IRQHandler       /* GPIO Port Interrupt #6 */
90    .long    ioss_interrupts_gpio_7_IRQHandler       /* GPIO Port Interrupt #7 */
91    .long    ioss_interrupts_gpio_8_IRQHandler       /* GPIO Port Interrupt #8 */
92    .long    ioss_interrupts_gpio_9_IRQHandler       /* GPIO Port Interrupt #9 */
93    .long    ioss_interrupts_gpio_10_IRQHandler      /* GPIO Port Interrupt #10 */
94    .long    ioss_interrupts_gpio_11_IRQHandler      /* GPIO Port Interrupt #11 */
95    .long    ioss_interrupts_gpio_12_IRQHandler      /* GPIO Port Interrupt #12 */
96    .long    ioss_interrupts_gpio_13_IRQHandler      /* GPIO Port Interrupt #13 */
97    .long    ioss_interrupts_gpio_14_IRQHandler      /* GPIO Port Interrupt #14 */
98    .long    ioss_interrupt_gpio_IRQHandler          /* GPIO All Ports */
99    .long    ioss_interrupt_vdd_IRQHandler           /* GPIO Supply Detect Interrupt */
100    .long    lpcomp_interrupt_IRQHandler             /* Low Power Comparator Interrupt */
101    .long    scb_8_interrupt_IRQHandler              /* Serial Communication Block #8 (DeepSleep capable) */
102    .long    srss_interrupt_mcwdt_0_IRQHandler       /* Multi Counter Watchdog Timer interrupt */
103    .long    srss_interrupt_mcwdt_1_IRQHandler       /* Multi Counter Watchdog Timer interrupt */
104    .long    srss_interrupt_backup_IRQHandler        /* Backup domain interrupt */
105    .long    srss_interrupt_IRQHandler               /* Other combined Interrupts for SRSS (LVD, WDT, CLKCAL) */
106    .long    cpuss_interrupts_ipc_0_IRQHandler       /* CPUSS Inter Process Communication Interrupt #0 */
107    .long    cpuss_interrupts_ipc_1_IRQHandler       /* CPUSS Inter Process Communication Interrupt #1 */
108    .long    cpuss_interrupts_ipc_2_IRQHandler       /* CPUSS Inter Process Communication Interrupt #2 */
109    .long    cpuss_interrupts_ipc_3_IRQHandler       /* CPUSS Inter Process Communication Interrupt #3 */
110    .long    cpuss_interrupts_ipc_4_IRQHandler       /* CPUSS Inter Process Communication Interrupt #4 */
111    .long    cpuss_interrupts_ipc_5_IRQHandler       /* CPUSS Inter Process Communication Interrupt #5 */
112    .long    cpuss_interrupts_ipc_6_IRQHandler       /* CPUSS Inter Process Communication Interrupt #6 */
113    .long    cpuss_interrupts_ipc_7_IRQHandler       /* CPUSS Inter Process Communication Interrupt #7 */
114    .long    cpuss_interrupts_ipc_8_IRQHandler       /* CPUSS Inter Process Communication Interrupt #8 */
115    .long    cpuss_interrupts_ipc_9_IRQHandler       /* CPUSS Inter Process Communication Interrupt #9 */
116    .long    cpuss_interrupts_ipc_10_IRQHandler      /* CPUSS Inter Process Communication Interrupt #10 */
117    .long    cpuss_interrupts_ipc_11_IRQHandler      /* CPUSS Inter Process Communication Interrupt #11 */
118    .long    cpuss_interrupts_ipc_12_IRQHandler      /* CPUSS Inter Process Communication Interrupt #12 */
119    .long    cpuss_interrupts_ipc_13_IRQHandler      /* CPUSS Inter Process Communication Interrupt #13 */
120    .long    cpuss_interrupts_ipc_14_IRQHandler      /* CPUSS Inter Process Communication Interrupt #14 */
121    .long    cpuss_interrupts_ipc_15_IRQHandler      /* CPUSS Inter Process Communication Interrupt #15 */
122    .long    scb_0_interrupt_IRQHandler              /* Serial Communication Block #0 */
123    .long    scb_1_interrupt_IRQHandler              /* Serial Communication Block #1 */
124    .long    scb_2_interrupt_IRQHandler              /* Serial Communication Block #2 */
125    .long    scb_3_interrupt_IRQHandler              /* Serial Communication Block #3 */
126    .long    scb_4_interrupt_IRQHandler              /* Serial Communication Block #4 */
127    .long    scb_5_interrupt_IRQHandler              /* Serial Communication Block #5 */
128    .long    scb_6_interrupt_IRQHandler              /* Serial Communication Block #6 */
129    .long    scb_7_interrupt_IRQHandler              /* Serial Communication Block #7 */
130    .long    scb_9_interrupt_IRQHandler              /* Serial Communication Block #9 */
131    .long    scb_10_interrupt_IRQHandler             /* Serial Communication Block #10 */
132    .long    scb_11_interrupt_IRQHandler             /* Serial Communication Block #11 */
133    .long    scb_12_interrupt_IRQHandler             /* Serial Communication Block #12 */
134    .long    csd_interrupt_IRQHandler                /* CSD (Capsense) interrupt */
135    .long    cpuss_interrupts_dmac_0_IRQHandler      /* CPUSS DMAC, Channel #0 */
136    .long    cpuss_interrupts_dmac_1_IRQHandler      /* CPUSS DMAC, Channel #1 */
137    .long    cpuss_interrupts_dmac_2_IRQHandler      /* CPUSS DMAC, Channel #2 */
138    .long    cpuss_interrupts_dmac_3_IRQHandler      /* CPUSS DMAC, Channel #3 */
139    .long    cpuss_interrupts_dw0_0_IRQHandler       /* CPUSS DataWire #0, Channel #0 */
140    .long    cpuss_interrupts_dw0_1_IRQHandler       /* CPUSS DataWire #0, Channel #1 */
141    .long    cpuss_interrupts_dw0_2_IRQHandler       /* CPUSS DataWire #0, Channel #2 */
142    .long    cpuss_interrupts_dw0_3_IRQHandler       /* CPUSS DataWire #0, Channel #3 */
143    .long    cpuss_interrupts_dw0_4_IRQHandler       /* CPUSS DataWire #0, Channel #4 */
144    .long    cpuss_interrupts_dw0_5_IRQHandler       /* CPUSS DataWire #0, Channel #5 */
145    .long    cpuss_interrupts_dw0_6_IRQHandler       /* CPUSS DataWire #0, Channel #6 */
146    .long    cpuss_interrupts_dw0_7_IRQHandler       /* CPUSS DataWire #0, Channel #7 */
147    .long    cpuss_interrupts_dw0_8_IRQHandler       /* CPUSS DataWire #0, Channel #8 */
148    .long    cpuss_interrupts_dw0_9_IRQHandler       /* CPUSS DataWire #0, Channel #9 */
149    .long    cpuss_interrupts_dw0_10_IRQHandler      /* CPUSS DataWire #0, Channel #10 */
150    .long    cpuss_interrupts_dw0_11_IRQHandler      /* CPUSS DataWire #0, Channel #11 */
151    .long    cpuss_interrupts_dw0_12_IRQHandler      /* CPUSS DataWire #0, Channel #12 */
152    .long    cpuss_interrupts_dw0_13_IRQHandler      /* CPUSS DataWire #0, Channel #13 */
153    .long    cpuss_interrupts_dw0_14_IRQHandler      /* CPUSS DataWire #0, Channel #14 */
154    .long    cpuss_interrupts_dw0_15_IRQHandler      /* CPUSS DataWire #0, Channel #15 */
155    .long    cpuss_interrupts_dw0_16_IRQHandler      /* CPUSS DataWire #0, Channel #16 */
156    .long    cpuss_interrupts_dw0_17_IRQHandler      /* CPUSS DataWire #0, Channel #17 */
157    .long    cpuss_interrupts_dw0_18_IRQHandler      /* CPUSS DataWire #0, Channel #18 */
158    .long    cpuss_interrupts_dw0_19_IRQHandler      /* CPUSS DataWire #0, Channel #19 */
159    .long    cpuss_interrupts_dw0_20_IRQHandler      /* CPUSS DataWire #0, Channel #20 */
160    .long    cpuss_interrupts_dw0_21_IRQHandler      /* CPUSS DataWire #0, Channel #21 */
161    .long    cpuss_interrupts_dw0_22_IRQHandler      /* CPUSS DataWire #0, Channel #22 */
162    .long    cpuss_interrupts_dw0_23_IRQHandler      /* CPUSS DataWire #0, Channel #23 */
163    .long    cpuss_interrupts_dw0_24_IRQHandler      /* CPUSS DataWire #0, Channel #24 */
164    .long    cpuss_interrupts_dw0_25_IRQHandler      /* CPUSS DataWire #0, Channel #25 */
165    .long    cpuss_interrupts_dw0_26_IRQHandler      /* CPUSS DataWire #0, Channel #26 */
166    .long    cpuss_interrupts_dw0_27_IRQHandler      /* CPUSS DataWire #0, Channel #27 */
167    .long    cpuss_interrupts_dw0_28_IRQHandler      /* CPUSS DataWire #0, Channel #28 */
168    .long    cpuss_interrupts_dw1_0_IRQHandler       /* CPUSS DataWire #1, Channel #0 */
169    .long    cpuss_interrupts_dw1_1_IRQHandler       /* CPUSS DataWire #1, Channel #1 */
170    .long    cpuss_interrupts_dw1_2_IRQHandler       /* CPUSS DataWire #1, Channel #2 */
171    .long    cpuss_interrupts_dw1_3_IRQHandler       /* CPUSS DataWire #1, Channel #3 */
172    .long    cpuss_interrupts_dw1_4_IRQHandler       /* CPUSS DataWire #1, Channel #4 */
173    .long    cpuss_interrupts_dw1_5_IRQHandler       /* CPUSS DataWire #1, Channel #5 */
174    .long    cpuss_interrupts_dw1_6_IRQHandler       /* CPUSS DataWire #1, Channel #6 */
175    .long    cpuss_interrupts_dw1_7_IRQHandler       /* CPUSS DataWire #1, Channel #7 */
176    .long    cpuss_interrupts_dw1_8_IRQHandler       /* CPUSS DataWire #1, Channel #8 */
177    .long    cpuss_interrupts_dw1_9_IRQHandler       /* CPUSS DataWire #1, Channel #9 */
178    .long    cpuss_interrupts_dw1_10_IRQHandler      /* CPUSS DataWire #1, Channel #10 */
179    .long    cpuss_interrupts_dw1_11_IRQHandler      /* CPUSS DataWire #1, Channel #11 */
180    .long    cpuss_interrupts_dw1_12_IRQHandler      /* CPUSS DataWire #1, Channel #12 */
181    .long    cpuss_interrupts_dw1_13_IRQHandler      /* CPUSS DataWire #1, Channel #13 */
182    .long    cpuss_interrupts_dw1_14_IRQHandler      /* CPUSS DataWire #1, Channel #14 */
183    .long    cpuss_interrupts_dw1_15_IRQHandler      /* CPUSS DataWire #1, Channel #15 */
184    .long    cpuss_interrupts_dw1_16_IRQHandler      /* CPUSS DataWire #1, Channel #16 */
185    .long    cpuss_interrupts_dw1_17_IRQHandler      /* CPUSS DataWire #1, Channel #17 */
186    .long    cpuss_interrupts_dw1_18_IRQHandler      /* CPUSS DataWire #1, Channel #18 */
187    .long    cpuss_interrupts_dw1_19_IRQHandler      /* CPUSS DataWire #1, Channel #19 */
188    .long    cpuss_interrupts_dw1_20_IRQHandler      /* CPUSS DataWire #1, Channel #20 */
189    .long    cpuss_interrupts_dw1_21_IRQHandler      /* CPUSS DataWire #1, Channel #21 */
190    .long    cpuss_interrupts_dw1_22_IRQHandler      /* CPUSS DataWire #1, Channel #22 */
191    .long    cpuss_interrupts_dw1_23_IRQHandler      /* CPUSS DataWire #1, Channel #23 */
192    .long    cpuss_interrupts_dw1_24_IRQHandler      /* CPUSS DataWire #1, Channel #24 */
193    .long    cpuss_interrupts_dw1_25_IRQHandler      /* CPUSS DataWire #1, Channel #25 */
194    .long    cpuss_interrupts_dw1_26_IRQHandler      /* CPUSS DataWire #1, Channel #26 */
195    .long    cpuss_interrupts_dw1_27_IRQHandler      /* CPUSS DataWire #1, Channel #27 */
196    .long    cpuss_interrupts_dw1_28_IRQHandler      /* CPUSS DataWire #1, Channel #28 */
197    .long    cpuss_interrupts_fault_0_IRQHandler     /* CPUSS Fault Structure Interrupt #0 */
198    .long    cpuss_interrupts_fault_1_IRQHandler     /* CPUSS Fault Structure Interrupt #1 */
199    .long    cpuss_interrupt_crypto_IRQHandler       /* CRYPTO Accelerator Interrupt */
200    .long    cpuss_interrupt_fm_IRQHandler           /* FLASH Macro Interrupt */
201    .long    cpuss_interrupts_cm4_fp_IRQHandler      /* Floating Point operation fault */
202    .long    cpuss_interrupts_cm0_cti_0_IRQHandler   /* CM0+ CTI #0 */
203    .long    cpuss_interrupts_cm0_cti_1_IRQHandler   /* CM0+ CTI #1 */
204    .long    cpuss_interrupts_cm4_cti_0_IRQHandler   /* CM4 CTI #0 */
205    .long    cpuss_interrupts_cm4_cti_1_IRQHandler   /* CM4 CTI #1 */
206    .long    tcpwm_0_interrupts_0_IRQHandler         /* TCPWM #0, Counter #0 */
207    .long    tcpwm_0_interrupts_1_IRQHandler         /* TCPWM #0, Counter #1 */
208    .long    tcpwm_0_interrupts_2_IRQHandler         /* TCPWM #0, Counter #2 */
209    .long    tcpwm_0_interrupts_3_IRQHandler         /* TCPWM #0, Counter #3 */
210    .long    tcpwm_0_interrupts_4_IRQHandler         /* TCPWM #0, Counter #4 */
211    .long    tcpwm_0_interrupts_5_IRQHandler         /* TCPWM #0, Counter #5 */
212    .long    tcpwm_0_interrupts_6_IRQHandler         /* TCPWM #0, Counter #6 */
213    .long    tcpwm_0_interrupts_7_IRQHandler         /* TCPWM #0, Counter #7 */
214    .long    tcpwm_1_interrupts_0_IRQHandler         /* TCPWM #1, Counter #0 */
215    .long    tcpwm_1_interrupts_1_IRQHandler         /* TCPWM #1, Counter #1 */
216    .long    tcpwm_1_interrupts_2_IRQHandler         /* TCPWM #1, Counter #2 */
217    .long    tcpwm_1_interrupts_3_IRQHandler         /* TCPWM #1, Counter #3 */
218    .long    tcpwm_1_interrupts_4_IRQHandler         /* TCPWM #1, Counter #4 */
219    .long    tcpwm_1_interrupts_5_IRQHandler         /* TCPWM #1, Counter #5 */
220    .long    tcpwm_1_interrupts_6_IRQHandler         /* TCPWM #1, Counter #6 */
221    .long    tcpwm_1_interrupts_7_IRQHandler         /* TCPWM #1, Counter #7 */
222    .long    tcpwm_1_interrupts_8_IRQHandler         /* TCPWM #1, Counter #8 */
223    .long    tcpwm_1_interrupts_9_IRQHandler         /* TCPWM #1, Counter #9 */
224    .long    tcpwm_1_interrupts_10_IRQHandler        /* TCPWM #1, Counter #10 */
225    .long    tcpwm_1_interrupts_11_IRQHandler        /* TCPWM #1, Counter #11 */
226    .long    tcpwm_1_interrupts_12_IRQHandler        /* TCPWM #1, Counter #12 */
227    .long    tcpwm_1_interrupts_13_IRQHandler        /* TCPWM #1, Counter #13 */
228    .long    tcpwm_1_interrupts_14_IRQHandler        /* TCPWM #1, Counter #14 */
229    .long    tcpwm_1_interrupts_15_IRQHandler        /* TCPWM #1, Counter #15 */
230    .long    tcpwm_1_interrupts_16_IRQHandler        /* TCPWM #1, Counter #16 */
231    .long    tcpwm_1_interrupts_17_IRQHandler        /* TCPWM #1, Counter #17 */
232    .long    tcpwm_1_interrupts_18_IRQHandler        /* TCPWM #1, Counter #18 */
233    .long    tcpwm_1_interrupts_19_IRQHandler        /* TCPWM #1, Counter #19 */
234    .long    tcpwm_1_interrupts_20_IRQHandler        /* TCPWM #1, Counter #20 */
235    .long    tcpwm_1_interrupts_21_IRQHandler        /* TCPWM #1, Counter #21 */
236    .long    tcpwm_1_interrupts_22_IRQHandler        /* TCPWM #1, Counter #22 */
237    .long    tcpwm_1_interrupts_23_IRQHandler        /* TCPWM #1, Counter #23 */
238    .long    pass_interrupt_sar_IRQHandler           /* SAR ADC interrupt */
239    .long    audioss_0_interrupt_i2s_IRQHandler      /* I2S0 Audio interrupt */
240    .long    audioss_0_interrupt_pdm_IRQHandler      /* PDM0/PCM0 Audio interrupt */
241    .long    audioss_1_interrupt_i2s_IRQHandler      /* I2S1 Audio interrupt */
242    .long    profile_interrupt_IRQHandler            /* Energy Profiler interrupt */
243    .long    smif_interrupt_IRQHandler               /* Serial Memory Interface interrupt */
244    .long    usb_interrupt_hi_IRQHandler             /* USB Interrupt */
245    .long    usb_interrupt_med_IRQHandler            /* USB Interrupt */
246    .long    usb_interrupt_lo_IRQHandler             /* USB Interrupt */
247    .long    sdhc_0_interrupt_wakeup_IRQHandler      /* SDIO wakeup interrupt for mxsdhc */
248    .long    sdhc_0_interrupt_general_IRQHandler     /* Consolidated interrupt for mxsdhc for everything else */
249    .long    sdhc_1_interrupt_wakeup_IRQHandler      /* EEMC wakeup interrupt for mxsdhc, not used */
250    .long    sdhc_1_interrupt_general_IRQHandler     /* Consolidated interrupt for mxsdhc for everything else */
251
252    .equ    __VectorsSize, . - ___Vectors
253
254    .section __RAMVECTORS, ___ramVectors
255    .align 2
256    .globl ___ramVectors
257
258___ramVectors:
259    .space  __VectorsSize
260
261
262    .text
263    .thumb_func
264    .align 2
265    /* Reset handler */
266    .globl Reset_Handler
267
268Reset_Handler:
269    bl Cy_OnResetUser
270    cpsid i
271
272/*  Single section scheme.
273 *
274 *  The ranges of copy from/to are specified by following symbols
275 *    __etext: LMA of start of the section to copy from. Usually end of text
276 *    __data_start__: VMA of start of the section to copy to
277 *    __data_end__: VMA of end of the section to copy to
278 *
279 *  All addresses must be aligned to 4 bytes boundary.
280 */
281    ldr    r0, =___ramVectors
282    ldr    r1, =___Vectors
283    ldr    r2, =__VectorsSize
284    bl     _memcpy
285
286    ldr    r0, =segment$start$__DATA
287    ldr    r1, =segment$end$__TEXT
288    ldr    r2, =section$start$__DATA$__zerofill
289    sub    r2, r0
290    bl     _memcpy
291
292    ldr    r0, =section$start$__DATA$__zerofill
293    eor    r1, r1
294    ldr    r2, =section$end$__DATA$__zerofill
295    sub    r2, r0
296    bl     _memset
297
298    /* Update Vector Table Offset Register. */
299    ldr r0, =___ramVectors
300    ldr r1, =CY_CPU_VTOR_ADDR
301    str r0, [r1]
302    dsb 0xF
303
304    /* Enable the FPU if used */
305    bl _Cy_SystemInitFpuEnable
306
307    bl _HeapInit
308#ifndef __NO_SYSTEM_INIT
309    bl  _SystemInit
310#endif
311
312    bl  _main
313
314    /* Should never get here */
315    b   .
316
317    .pool
318
319    .text
320    .thumb
321    .thumb_func
322    .align 2
323
324    /* Device startup customization */
325    .weak_definition   Cy_OnResetUser
326    .global Cy_OnResetUser, Cy_OnResetUser
327Cy_OnResetUser:
328    bx lr
329
330    .text
331    .align    1
332    .thumb_func
333    .weak_reference    Default_Handler
334
335Default_Handler:
336    b    .
337
338    .text
339    .thumb_func
340    .align  2
341    .weak_definition    Cy_SysLib_FaultHandler
342
343Cy_SysLib_FaultHandler:
344    b    .
345
346    .text
347    .thumb_func
348    .align  2
349
350Fault_Handler:
351    /* Storing LR content for Creator call stack trace */
352    push {LR}
353    movs r0, #4
354    mov r1, LR
355    tst r0, r1
356    beq .L_MSP
357    mrs r0, PSP
358    b .L_API_call
359.L_MSP:
360    mrs r0, MSP
361    /* Compensation of stack pointer address due to pushing 4 bytes of LR */
362    adds r0, r0, #4
363    nop
364.L_API_call:
365    bl Cy_SysLib_FaultHandler
366    b   .
367
368.macro    def_fault_Handler    fault_handler_name
369    .weak_definition    \fault_handler_name
370    .set    \fault_handler_name, Fault_Handler
371    .endm
372
373/*    Macro to define default handlers. Default handler
374 *    will be weak symbol and just dead loops. They can be
375 *    overwritten by other handlers */
376    .macro    def_irq_handler    handler_name
377    .weak_definition    \handler_name
378    .set    \handler_name, Default_Handler
379    .endm
380
381    def_irq_handler    NMI_Handler
382
383    def_fault_Handler HardFault_Handler
384    def_fault_Handler MemManage_Handler
385    def_fault_Handler BusFault_Handler
386    def_fault_Handler UsageFault_Handler
387
388    def_irq_handler    SVC_Handler
389    def_irq_handler    DebugMon_Handler
390    def_irq_handler    PendSV_Handler
391    def_irq_handler    SysTick_Handler
392
393    def_irq_handler  ioss_interrupts_gpio_0_IRQHandler       /* GPIO Port Interrupt #0 */
394    def_irq_handler  ioss_interrupts_gpio_1_IRQHandler       /* GPIO Port Interrupt #1 */
395    def_irq_handler  ioss_interrupts_gpio_2_IRQHandler       /* GPIO Port Interrupt #2 */
396    def_irq_handler  ioss_interrupts_gpio_3_IRQHandler       /* GPIO Port Interrupt #3 */
397    def_irq_handler  ioss_interrupts_gpio_4_IRQHandler       /* GPIO Port Interrupt #4 */
398    def_irq_handler  ioss_interrupts_gpio_5_IRQHandler       /* GPIO Port Interrupt #5 */
399    def_irq_handler  ioss_interrupts_gpio_6_IRQHandler       /* GPIO Port Interrupt #6 */
400    def_irq_handler  ioss_interrupts_gpio_7_IRQHandler       /* GPIO Port Interrupt #7 */
401    def_irq_handler  ioss_interrupts_gpio_8_IRQHandler       /* GPIO Port Interrupt #8 */
402    def_irq_handler  ioss_interrupts_gpio_9_IRQHandler       /* GPIO Port Interrupt #9 */
403    def_irq_handler  ioss_interrupts_gpio_10_IRQHandler      /* GPIO Port Interrupt #10 */
404    def_irq_handler  ioss_interrupts_gpio_11_IRQHandler      /* GPIO Port Interrupt #11 */
405    def_irq_handler  ioss_interrupts_gpio_12_IRQHandler      /* GPIO Port Interrupt #12 */
406    def_irq_handler  ioss_interrupts_gpio_13_IRQHandler      /* GPIO Port Interrupt #13 */
407    def_irq_handler  ioss_interrupts_gpio_14_IRQHandler      /* GPIO Port Interrupt #14 */
408    def_irq_handler  ioss_interrupt_gpio_IRQHandler          /* GPIO All Ports */
409    def_irq_handler  ioss_interrupt_vdd_IRQHandler           /* GPIO Supply Detect Interrupt */
410    def_irq_handler  lpcomp_interrupt_IRQHandler             /* Low Power Comparator Interrupt */
411    def_irq_handler  scb_8_interrupt_IRQHandler              /* Serial Communication Block #8 (DeepSleep capable) */
412    def_irq_handler  srss_interrupt_mcwdt_0_IRQHandler       /* Multi Counter Watchdog Timer interrupt */
413    def_irq_handler  srss_interrupt_mcwdt_1_IRQHandler       /* Multi Counter Watchdog Timer interrupt */
414    def_irq_handler  srss_interrupt_backup_IRQHandler        /* Backup domain interrupt */
415    def_irq_handler  srss_interrupt_IRQHandler               /* Other combined Interrupts for SRSS (LVD, WDT, CLKCAL) */
416    def_irq_handler  cpuss_interrupts_ipc_0_IRQHandler       /* CPUSS Inter Process Communication Interrupt #0 */
417    def_irq_handler  cpuss_interrupts_ipc_1_IRQHandler       /* CPUSS Inter Process Communication Interrupt #1 */
418    def_irq_handler  cpuss_interrupts_ipc_2_IRQHandler       /* CPUSS Inter Process Communication Interrupt #2 */
419    def_irq_handler  cpuss_interrupts_ipc_3_IRQHandler       /* CPUSS Inter Process Communication Interrupt #3 */
420    def_irq_handler  cpuss_interrupts_ipc_4_IRQHandler       /* CPUSS Inter Process Communication Interrupt #4 */
421    def_irq_handler  cpuss_interrupts_ipc_5_IRQHandler       /* CPUSS Inter Process Communication Interrupt #5 */
422    def_irq_handler  cpuss_interrupts_ipc_6_IRQHandler       /* CPUSS Inter Process Communication Interrupt #6 */
423    def_irq_handler  cpuss_interrupts_ipc_7_IRQHandler       /* CPUSS Inter Process Communication Interrupt #7 */
424    def_irq_handler  cpuss_interrupts_ipc_8_IRQHandler       /* CPUSS Inter Process Communication Interrupt #8 */
425    def_irq_handler  cpuss_interrupts_ipc_9_IRQHandler       /* CPUSS Inter Process Communication Interrupt #9 */
426    def_irq_handler  cpuss_interrupts_ipc_10_IRQHandler      /* CPUSS Inter Process Communication Interrupt #10 */
427    def_irq_handler  cpuss_interrupts_ipc_11_IRQHandler      /* CPUSS Inter Process Communication Interrupt #11 */
428    def_irq_handler  cpuss_interrupts_ipc_12_IRQHandler      /* CPUSS Inter Process Communication Interrupt #12 */
429    def_irq_handler  cpuss_interrupts_ipc_13_IRQHandler      /* CPUSS Inter Process Communication Interrupt #13 */
430    def_irq_handler  cpuss_interrupts_ipc_14_IRQHandler      /* CPUSS Inter Process Communication Interrupt #14 */
431    def_irq_handler  cpuss_interrupts_ipc_15_IRQHandler      /* CPUSS Inter Process Communication Interrupt #15 */
432    def_irq_handler  scb_0_interrupt_IRQHandler              /* Serial Communication Block #0 */
433    def_irq_handler  scb_1_interrupt_IRQHandler              /* Serial Communication Block #1 */
434    def_irq_handler  scb_2_interrupt_IRQHandler              /* Serial Communication Block #2 */
435    def_irq_handler  scb_3_interrupt_IRQHandler              /* Serial Communication Block #3 */
436    def_irq_handler  scb_4_interrupt_IRQHandler              /* Serial Communication Block #4 */
437    def_irq_handler  scb_5_interrupt_IRQHandler              /* Serial Communication Block #5 */
438    def_irq_handler  scb_6_interrupt_IRQHandler              /* Serial Communication Block #6 */
439    def_irq_handler  scb_7_interrupt_IRQHandler              /* Serial Communication Block #7 */
440    def_irq_handler  scb_9_interrupt_IRQHandler              /* Serial Communication Block #9 */
441    def_irq_handler  scb_10_interrupt_IRQHandler             /* Serial Communication Block #10 */
442    def_irq_handler  scb_11_interrupt_IRQHandler             /* Serial Communication Block #11 */
443    def_irq_handler  scb_12_interrupt_IRQHandler             /* Serial Communication Block #12 */
444    def_irq_handler  csd_interrupt_IRQHandler                /* CSD (Capsense) interrupt */
445    def_irq_handler  cpuss_interrupts_dmac_0_IRQHandler      /* CPUSS DMAC, Channel #0 */
446    def_irq_handler  cpuss_interrupts_dmac_1_IRQHandler      /* CPUSS DMAC, Channel #1 */
447    def_irq_handler  cpuss_interrupts_dmac_2_IRQHandler      /* CPUSS DMAC, Channel #2 */
448    def_irq_handler  cpuss_interrupts_dmac_3_IRQHandler      /* CPUSS DMAC, Channel #3 */
449    def_irq_handler  cpuss_interrupts_dw0_0_IRQHandler       /* CPUSS DataWire #0, Channel #0 */
450    def_irq_handler  cpuss_interrupts_dw0_1_IRQHandler       /* CPUSS DataWire #0, Channel #1 */
451    def_irq_handler  cpuss_interrupts_dw0_2_IRQHandler       /* CPUSS DataWire #0, Channel #2 */
452    def_irq_handler  cpuss_interrupts_dw0_3_IRQHandler       /* CPUSS DataWire #0, Channel #3 */
453    def_irq_handler  cpuss_interrupts_dw0_4_IRQHandler       /* CPUSS DataWire #0, Channel #4 */
454    def_irq_handler  cpuss_interrupts_dw0_5_IRQHandler       /* CPUSS DataWire #0, Channel #5 */
455    def_irq_handler  cpuss_interrupts_dw0_6_IRQHandler       /* CPUSS DataWire #0, Channel #6 */
456    def_irq_handler  cpuss_interrupts_dw0_7_IRQHandler       /* CPUSS DataWire #0, Channel #7 */
457    def_irq_handler  cpuss_interrupts_dw0_8_IRQHandler       /* CPUSS DataWire #0, Channel #8 */
458    def_irq_handler  cpuss_interrupts_dw0_9_IRQHandler       /* CPUSS DataWire #0, Channel #9 */
459    def_irq_handler  cpuss_interrupts_dw0_10_IRQHandler      /* CPUSS DataWire #0, Channel #10 */
460    def_irq_handler  cpuss_interrupts_dw0_11_IRQHandler      /* CPUSS DataWire #0, Channel #11 */
461    def_irq_handler  cpuss_interrupts_dw0_12_IRQHandler      /* CPUSS DataWire #0, Channel #12 */
462    def_irq_handler  cpuss_interrupts_dw0_13_IRQHandler      /* CPUSS DataWire #0, Channel #13 */
463    def_irq_handler  cpuss_interrupts_dw0_14_IRQHandler      /* CPUSS DataWire #0, Channel #14 */
464    def_irq_handler  cpuss_interrupts_dw0_15_IRQHandler      /* CPUSS DataWire #0, Channel #15 */
465    def_irq_handler  cpuss_interrupts_dw0_16_IRQHandler      /* CPUSS DataWire #0, Channel #16 */
466    def_irq_handler  cpuss_interrupts_dw0_17_IRQHandler      /* CPUSS DataWire #0, Channel #17 */
467    def_irq_handler  cpuss_interrupts_dw0_18_IRQHandler      /* CPUSS DataWire #0, Channel #18 */
468    def_irq_handler  cpuss_interrupts_dw0_19_IRQHandler      /* CPUSS DataWire #0, Channel #19 */
469    def_irq_handler  cpuss_interrupts_dw0_20_IRQHandler      /* CPUSS DataWire #0, Channel #20 */
470    def_irq_handler  cpuss_interrupts_dw0_21_IRQHandler      /* CPUSS DataWire #0, Channel #21 */
471    def_irq_handler  cpuss_interrupts_dw0_22_IRQHandler      /* CPUSS DataWire #0, Channel #22 */
472    def_irq_handler  cpuss_interrupts_dw0_23_IRQHandler      /* CPUSS DataWire #0, Channel #23 */
473    def_irq_handler  cpuss_interrupts_dw0_24_IRQHandler      /* CPUSS DataWire #0, Channel #24 */
474    def_irq_handler  cpuss_interrupts_dw0_25_IRQHandler      /* CPUSS DataWire #0, Channel #25 */
475    def_irq_handler  cpuss_interrupts_dw0_26_IRQHandler      /* CPUSS DataWire #0, Channel #26 */
476    def_irq_handler  cpuss_interrupts_dw0_27_IRQHandler      /* CPUSS DataWire #0, Channel #27 */
477    def_irq_handler  cpuss_interrupts_dw0_28_IRQHandler      /* CPUSS DataWire #0, Channel #28 */
478    def_irq_handler  cpuss_interrupts_dw1_0_IRQHandler       /* CPUSS DataWire #1, Channel #0 */
479    def_irq_handler  cpuss_interrupts_dw1_1_IRQHandler       /* CPUSS DataWire #1, Channel #1 */
480    def_irq_handler  cpuss_interrupts_dw1_2_IRQHandler       /* CPUSS DataWire #1, Channel #2 */
481    def_irq_handler  cpuss_interrupts_dw1_3_IRQHandler       /* CPUSS DataWire #1, Channel #3 */
482    def_irq_handler  cpuss_interrupts_dw1_4_IRQHandler       /* CPUSS DataWire #1, Channel #4 */
483    def_irq_handler  cpuss_interrupts_dw1_5_IRQHandler       /* CPUSS DataWire #1, Channel #5 */
484    def_irq_handler  cpuss_interrupts_dw1_6_IRQHandler       /* CPUSS DataWire #1, Channel #6 */
485    def_irq_handler  cpuss_interrupts_dw1_7_IRQHandler       /* CPUSS DataWire #1, Channel #7 */
486    def_irq_handler  cpuss_interrupts_dw1_8_IRQHandler       /* CPUSS DataWire #1, Channel #8 */
487    def_irq_handler  cpuss_interrupts_dw1_9_IRQHandler       /* CPUSS DataWire #1, Channel #9 */
488    def_irq_handler  cpuss_interrupts_dw1_10_IRQHandler      /* CPUSS DataWire #1, Channel #10 */
489    def_irq_handler  cpuss_interrupts_dw1_11_IRQHandler      /* CPUSS DataWire #1, Channel #11 */
490    def_irq_handler  cpuss_interrupts_dw1_12_IRQHandler      /* CPUSS DataWire #1, Channel #12 */
491    def_irq_handler  cpuss_interrupts_dw1_13_IRQHandler      /* CPUSS DataWire #1, Channel #13 */
492    def_irq_handler  cpuss_interrupts_dw1_14_IRQHandler      /* CPUSS DataWire #1, Channel #14 */
493    def_irq_handler  cpuss_interrupts_dw1_15_IRQHandler      /* CPUSS DataWire #1, Channel #15 */
494    def_irq_handler  cpuss_interrupts_dw1_16_IRQHandler      /* CPUSS DataWire #1, Channel #16 */
495    def_irq_handler  cpuss_interrupts_dw1_17_IRQHandler      /* CPUSS DataWire #1, Channel #17 */
496    def_irq_handler  cpuss_interrupts_dw1_18_IRQHandler      /* CPUSS DataWire #1, Channel #18 */
497    def_irq_handler  cpuss_interrupts_dw1_19_IRQHandler      /* CPUSS DataWire #1, Channel #19 */
498    def_irq_handler  cpuss_interrupts_dw1_20_IRQHandler      /* CPUSS DataWire #1, Channel #20 */
499    def_irq_handler  cpuss_interrupts_dw1_21_IRQHandler      /* CPUSS DataWire #1, Channel #21 */
500    def_irq_handler  cpuss_interrupts_dw1_22_IRQHandler      /* CPUSS DataWire #1, Channel #22 */
501    def_irq_handler  cpuss_interrupts_dw1_23_IRQHandler      /* CPUSS DataWire #1, Channel #23 */
502    def_irq_handler  cpuss_interrupts_dw1_24_IRQHandler      /* CPUSS DataWire #1, Channel #24 */
503    def_irq_handler  cpuss_interrupts_dw1_25_IRQHandler      /* CPUSS DataWire #1, Channel #25 */
504    def_irq_handler  cpuss_interrupts_dw1_26_IRQHandler      /* CPUSS DataWire #1, Channel #26 */
505    def_irq_handler  cpuss_interrupts_dw1_27_IRQHandler      /* CPUSS DataWire #1, Channel #27 */
506    def_irq_handler  cpuss_interrupts_dw1_28_IRQHandler      /* CPUSS DataWire #1, Channel #28 */
507    def_irq_handler  cpuss_interrupts_fault_0_IRQHandler     /* CPUSS Fault Structure Interrupt #0 */
508    def_irq_handler  cpuss_interrupts_fault_1_IRQHandler     /* CPUSS Fault Structure Interrupt #1 */
509    def_irq_handler  cpuss_interrupt_crypto_IRQHandler       /* CRYPTO Accelerator Interrupt */
510    def_irq_handler  cpuss_interrupt_fm_IRQHandler           /* FLASH Macro Interrupt */
511    def_irq_handler  cpuss_interrupts_cm4_fp_IRQHandler      /* Floating Point operation fault */
512    def_irq_handler  cpuss_interrupts_cm0_cti_0_IRQHandler   /* CM0+ CTI #0 */
513    def_irq_handler  cpuss_interrupts_cm0_cti_1_IRQHandler   /* CM0+ CTI #1 */
514    def_irq_handler  cpuss_interrupts_cm4_cti_0_IRQHandler   /* CM4 CTI #0 */
515    def_irq_handler  cpuss_interrupts_cm4_cti_1_IRQHandler   /* CM4 CTI #1 */
516    def_irq_handler  tcpwm_0_interrupts_0_IRQHandler         /* TCPWM #0, Counter #0 */
517    def_irq_handler  tcpwm_0_interrupts_1_IRQHandler         /* TCPWM #0, Counter #1 */
518    def_irq_handler  tcpwm_0_interrupts_2_IRQHandler         /* TCPWM #0, Counter #2 */
519    def_irq_handler  tcpwm_0_interrupts_3_IRQHandler         /* TCPWM #0, Counter #3 */
520    def_irq_handler  tcpwm_0_interrupts_4_IRQHandler         /* TCPWM #0, Counter #4 */
521    def_irq_handler  tcpwm_0_interrupts_5_IRQHandler         /* TCPWM #0, Counter #5 */
522    def_irq_handler  tcpwm_0_interrupts_6_IRQHandler         /* TCPWM #0, Counter #6 */
523    def_irq_handler  tcpwm_0_interrupts_7_IRQHandler         /* TCPWM #0, Counter #7 */
524    def_irq_handler  tcpwm_1_interrupts_0_IRQHandler         /* TCPWM #1, Counter #0 */
525    def_irq_handler  tcpwm_1_interrupts_1_IRQHandler         /* TCPWM #1, Counter #1 */
526    def_irq_handler  tcpwm_1_interrupts_2_IRQHandler         /* TCPWM #1, Counter #2 */
527    def_irq_handler  tcpwm_1_interrupts_3_IRQHandler         /* TCPWM #1, Counter #3 */
528    def_irq_handler  tcpwm_1_interrupts_4_IRQHandler         /* TCPWM #1, Counter #4 */
529    def_irq_handler  tcpwm_1_interrupts_5_IRQHandler         /* TCPWM #1, Counter #5 */
530    def_irq_handler  tcpwm_1_interrupts_6_IRQHandler         /* TCPWM #1, Counter #6 */
531    def_irq_handler  tcpwm_1_interrupts_7_IRQHandler         /* TCPWM #1, Counter #7 */
532    def_irq_handler  tcpwm_1_interrupts_8_IRQHandler         /* TCPWM #1, Counter #8 */
533    def_irq_handler  tcpwm_1_interrupts_9_IRQHandler         /* TCPWM #1, Counter #9 */
534    def_irq_handler  tcpwm_1_interrupts_10_IRQHandler        /* TCPWM #1, Counter #10 */
535    def_irq_handler  tcpwm_1_interrupts_11_IRQHandler        /* TCPWM #1, Counter #11 */
536    def_irq_handler  tcpwm_1_interrupts_12_IRQHandler        /* TCPWM #1, Counter #12 */
537    def_irq_handler  tcpwm_1_interrupts_13_IRQHandler        /* TCPWM #1, Counter #13 */
538    def_irq_handler  tcpwm_1_interrupts_14_IRQHandler        /* TCPWM #1, Counter #14 */
539    def_irq_handler  tcpwm_1_interrupts_15_IRQHandler        /* TCPWM #1, Counter #15 */
540    def_irq_handler  tcpwm_1_interrupts_16_IRQHandler        /* TCPWM #1, Counter #16 */
541    def_irq_handler  tcpwm_1_interrupts_17_IRQHandler        /* TCPWM #1, Counter #17 */
542    def_irq_handler  tcpwm_1_interrupts_18_IRQHandler        /* TCPWM #1, Counter #18 */
543    def_irq_handler  tcpwm_1_interrupts_19_IRQHandler        /* TCPWM #1, Counter #19 */
544    def_irq_handler  tcpwm_1_interrupts_20_IRQHandler        /* TCPWM #1, Counter #20 */
545    def_irq_handler  tcpwm_1_interrupts_21_IRQHandler        /* TCPWM #1, Counter #21 */
546    def_irq_handler  tcpwm_1_interrupts_22_IRQHandler        /* TCPWM #1, Counter #22 */
547    def_irq_handler  tcpwm_1_interrupts_23_IRQHandler        /* TCPWM #1, Counter #23 */
548    def_irq_handler  pass_interrupt_sar_IRQHandler           /* SAR ADC interrupt */
549    def_irq_handler  audioss_0_interrupt_i2s_IRQHandler      /* I2S0 Audio interrupt */
550    def_irq_handler  audioss_0_interrupt_pdm_IRQHandler      /* PDM0/PCM0 Audio interrupt */
551    def_irq_handler  audioss_1_interrupt_i2s_IRQHandler      /* I2S1 Audio interrupt */
552    def_irq_handler  profile_interrupt_IRQHandler            /* Energy Profiler interrupt */
553    def_irq_handler  smif_interrupt_IRQHandler               /* Serial Memory Interface interrupt */
554    def_irq_handler  usb_interrupt_hi_IRQHandler             /* USB Interrupt */
555    def_irq_handler  usb_interrupt_med_IRQHandler            /* USB Interrupt */
556    def_irq_handler  usb_interrupt_lo_IRQHandler             /* USB Interrupt */
557    def_irq_handler  sdhc_0_interrupt_wakeup_IRQHandler      /* SDIO wakeup interrupt for mxsdhc */
558    def_irq_handler  sdhc_0_interrupt_general_IRQHandler     /* Consolidated interrupt for mxsdhc for everything else */
559    def_irq_handler  sdhc_1_interrupt_wakeup_IRQHandler      /* EEMC wakeup interrupt for mxsdhc, not used */
560    def_irq_handler  sdhc_1_interrupt_general_IRQHandler     /* Consolidated interrupt for mxsdhc for everything else */
561
562    .end
563
564
565/* [] END OF FILE */
566