1;/******************************************************************************
2; * @file     startup_M480.s
3; * @version  V1.00
4; * @brief    CMSIS Cortex-M4 Core Device Startup File for M480
5; *
6; * SPDX-License-Identifier: Apache-2.0
7; * @copyright (C) 2017-2020 Nuvoton Technology Corp. All rights reserved.
8;*****************************************************************************/
9
10        MODULE  ?cstartup
11
12        ;; Forward declaration of sections.
13        SECTION CSTACK:DATA:NOROOT(3)
14
15        SECTION .intvec:CODE:NOROOT(2)
16
17        EXTERN  __iar_program_start
18        EXTERN  HardFault_Handler
19        EXTERN  SystemInit
20        PUBLIC  __vector_table
21        PUBLIC  __vector_table_0x1c
22        PUBLIC  __Vectors
23        PUBLIC  __Vectors_End
24        PUBLIC  __Vectors_Size
25
26        DATA
27
28__vector_table
29        DCD     sfe(CSTACK)
30        DCD     Reset_Handler
31
32        DCD     NMI_Handler
33        DCD     HardFault_Handler
34        DCD     MemManage_Handler
35        DCD     BusFault_Handler
36        DCD     UsageFault_Handler
37__vector_table_0x1c
38        DCD     0
39        DCD     0
40        DCD     0
41        DCD     0
42        DCD     SVC_Handler
43        DCD     DebugMon_Handler
44        DCD     0
45        DCD     PendSV_Handler
46        DCD     SysTick_Handler
47
48        ; External Interrupts
49        DCD     BOD_IRQHandler            ; 0: Brown Out detection
50        DCD     IRC_IRQHandler            ; 1: Internal RC
51        DCD     PWRWU_IRQHandler          ; 2: Power down wake up
52        DCD     RAMPE_IRQHandler          ; 3: RAM parity error
53        DCD     CKFAIL_IRQHandler         ; 4: Clock detection fail
54        DCD     Default_Handler           ; 5: Reserved
55        DCD     RTC_IRQHandler            ; 6: Real Time Clock
56        DCD     TAMPER_IRQHandler         ; 7: Tamper detection
57        DCD     WDT_IRQHandler            ; 8: Watchdog timer
58        DCD     WWDT_IRQHandler           ; 9: Window watchdog timer
59        DCD     EINT0_IRQHandler          ; 10: External Input 0
60        DCD     EINT1_IRQHandler          ; 11: External Input 1
61        DCD     EINT2_IRQHandler          ; 12: External Input 2
62        DCD     EINT3_IRQHandler          ; 13: External Input 3
63        DCD     EINT4_IRQHandler          ; 14: External Input 4
64        DCD     EINT5_IRQHandler          ; 15: External Input 5
65        DCD     GPA_IRQHandler            ; 16: GPIO Port A
66        DCD     GPB_IRQHandler            ; 17: GPIO Port B
67        DCD     GPC_IRQHandler            ; 18: GPIO Port C
68        DCD     GPD_IRQHandler            ; 19: GPIO Port D
69        DCD     GPE_IRQHandler            ; 20: GPIO Port E
70        DCD     GPF_IRQHandler            ; 21: GPIO Port F
71        DCD     QSPI0_IRQHandler          ; 22: QSPI0
72        DCD     SPI0_IRQHandler           ; 23: SPI0
73        DCD     BRAKE0_IRQHandler         ; 24:
74        DCD     PWM0P0_IRQHandler         ; 25:
75        DCD     PWM0P1_IRQHandler         ; 26:
76        DCD     PWM0P2_IRQHandler         ; 27:
77        DCD     BRAKE1_IRQHandler         ; 28:
78        DCD     PWM1P0_IRQHandler         ; 29:
79        DCD     PWM1P1_IRQHandler         ; 30:
80        DCD     PWM1P2_IRQHandler         ; 31:
81        DCD     TMR0_IRQHandler           ; 32: Timer 0
82        DCD     TMR1_IRQHandler           ; 33: Timer 1
83        DCD     TMR2_IRQHandler           ; 34: Timer 2
84        DCD     TMR3_IRQHandler           ; 35: Timer 3
85        DCD     UART0_IRQHandler          ; 36: UART0
86        DCD     UART1_IRQHandler          ; 37: UART1
87        DCD     I2C0_IRQHandler           ; 38: I2C0
88        DCD     I2C1_IRQHandler           ; 39: I2C1
89        DCD     PDMA_IRQHandler           ; 40: Peripheral DMA
90        DCD     DAC_IRQHandler            ; 41: DAC
91        DCD     EADC00_IRQHandler         ; 42: EADC0 interrupt source 0
92        DCD     EADC01_IRQHandler         ; 43: EADC0 interrupt source 1
93        DCD     ACMP01_IRQHandler         ; 44: ACMP0 and ACMP1
94        DCD     Default_Handler           ; 45: Reserved
95        DCD     EADC02_IRQHandler         ; 46: EADC0 interrupt source 2
96        DCD     EADC03_IRQHandler         ; 47: EADC0 interrupt source 3
97        DCD     UART2_IRQHandler          ; 48: UART2
98        DCD     UART3_IRQHandler          ; 49: UART3
99        DCD     QSPI1_IRQHandler          ; 50: QSPI1
100        DCD     SPI1_IRQHandler           ; 51: SPI1
101        DCD     SPI2_IRQHandler           ; 52: SPI2
102        DCD     USBD_IRQHandler           ; 53: USB device
103        DCD     OHCI_IRQHandler           ; 54: OHCI
104        DCD     USBOTG_IRQHandler         ; 55: USB OTG
105        DCD     CAN0_IRQHandler           ; 56: CAN0
106        DCD     CAN1_IRQHandler           ; 57: CAN1
107        DCD     SC0_IRQHandler            ; 58:
108        DCD     SC1_IRQHandler            ; 59:
109        DCD     SC2_IRQHandler            ; 60:
110        DCD     Default_Handler           ; 61:
111        DCD     SPI3_IRQHandler           ; 62: SPI3
112        DCD     Default_Handler           ; 63:
113        DCD     SDH0_IRQHandler           ; 64: SDH0
114        DCD     USBD20_IRQHandler         ; 65: USBD20
115        DCD     EMAC_TX_IRQHandler        ; 66: EMAC_TX
116        DCD     EMAC_RX_IRQHandler        ; 67: EMAX_RX
117        DCD     I2S0_IRQHandler           ; 68: I2S0
118        DCD     Default_Handler           ; 69: ToDo: Add description to this Interrupt
119        DCD     OPA0_IRQHandler           ; 70: OPA0
120        DCD     CRYPTO_IRQHandler         ; 71: CRYPTO
121        DCD     GPG_IRQHandler            ; 72:
122        DCD     EINT6_IRQHandler          ; 73:
123        DCD     UART4_IRQHandler          ; 74: UART4
124        DCD     UART5_IRQHandler          ; 75: UART5
125        DCD     USCI0_IRQHandler          ; 76: USCI0
126        DCD     USCI1_IRQHandler          ; 77: USCI1
127        DCD     BPWM0_IRQHandler          ; 78: BPWM0
128        DCD     BPWM1_IRQHandler          ; 79: BPWM1
129        DCD     SPIM_IRQHandler           ; 80: SPIM
130        DCD     CCAP_IRQHandler           ; 81: CCAP
131        DCD     I2C2_IRQHandler           ; 82: I2C2
132        DCD     Default_Handler           ; 83:
133        DCD     QEI0_IRQHandler           ; 84: QEI0
134        DCD     QEI1_IRQHandler           ; 85: QEI1
135        DCD     ECAP0_IRQHandler          ; 86: ECAP0
136        DCD     ECAP1_IRQHandler          ; 87: ECAP1
137        DCD     GPH_IRQHandler            ; 88:
138        DCD     EINT7_IRQHandler          ; 89:
139        DCD     SDH1_IRQHandler           ; 90: SDH1
140        DCD     Default_Handler           ; 91:
141        DCD     EHCI_IRQHandler           ; 92: EHCI
142        DCD     USBOTG20_IRQHandler       ; 93:
143        DCD     Default_Handler           ; 94:
144        DCD     Default_Handler           ; 95:
145        DCD     Default_Handler           ; 96:
146        DCD     Default_Handler           ; 97:
147        DCD     Default_Handler           ; 98:
148        DCD     Default_Handler           ; 99:
149        DCD     Default_Handler           ; 100:
150        DCD     TRNG_IRQHandler           ; 101: TRNG
151        DCD     UART6_IRQHandler          ; 102: UART6
152        DCD     UART7_IRQHandler          ; 103: UART7
153        DCD     EADC10_IRQHandler         ; 104: EADC1 interrupt source 0
154        DCD     EADC11_IRQHandler         ; 105: EADC1 interrupt source 1
155        DCD     EADC12_IRQHandler         ; 106: EADC1 interrupt source 2
156        DCD     EADC13_IRQHandler         ; 107: EADC1 interrupt source 3
157        DCD     CAN2_IRQHandler           ; 108: CAN2
158__Vectors_End
159
160__Vectors       EQU   __vector_table
161__Vectors_Size  EQU   __Vectors_End - __Vectors
162
163
164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
165;;
166;; Default interrupt handlers.
167;;
168        THUMB
169
170        PUBWEAK Reset_Handler
171        SECTION .text:CODE:REORDER:NOROOT(2)
172Reset_Handler
173        ; Unlock Register
174        LDR     R0, =0x40000100
175        LDR     R1, =0x59
176        STR     R1, [R0]
177        LDR     R1, =0x16
178        STR     R1, [R0]
179        LDR     R1, =0x88
180        STR     R1, [R0]
181
182	#ifndef ENABLE_SPIM_CACHE
183        LDR     R0, =0x40000200            ; R0 = Clock Controller Register Base Address
184        LDR     R1, [R0,#0x4]              ; R1 = 0x40000204  (AHBCLK)
185        ORR     R1, R1, #0x4000
186        STR     R1, [R0,#0x4]              ; CLK->AHBCLK |= CLK_AHBCLK_SPIMCKEN_Msk;
187
188        LDR     R0, =0x40007000            ; R0 = SPIM Register Base Address
189        LDR     R1, [R0,#4]                ; R1 = SPIM->CTL1
190        ORR     R1, R1,#2                  ; R1 |= SPIM_CTL1_CACHEOFF_Msk
191        STR     R1, [R0,#4]                ; _SPIM_DISABLE_CACHE()
192        LDR     R1, [R0,#4]                ; R1 = SPIM->CTL1
193        ORR     R1, R1, #4                 ; R1 |= SPIM_CTL1_CCMEN_Msk
194        STR     R1, [R0,#4]                ; _SPIM_ENABLE_CCM()
195	#endif
196
197        LDR     R0, =SystemInit
198        BLX     R0
199
200        ; Init POR
201        ; LDR     R2, =0x40000024
202        ; LDR     R1, =0x00005AA5
203        ; STR     R1, [R2]
204
205        ; Lock register
206        LDR     R0, =0x40000100
207        MOVS    R1, #0
208        STR     R1, [R0]
209
210        LDR     R0, =__iar_program_start
211        BX      R0
212
213        PUBWEAK NMI_Handler
214        SECTION .text:CODE:REORDER:NOROOT(1)
215NMI_Handler
216        B NMI_Handler
217
218        PUBWEAK MemManage_Handler
219        SECTION .text:CODE:REORDER:NOROOT(1)
220MemManage_Handler
221        B MemManage_Handler
222
223        PUBWEAK BusFault_Handler
224        SECTION .text:CODE:REORDER:NOROOT(1)
225BusFault_Handler
226        B BusFault_Handler
227
228        PUBWEAK UsageFault_Handler
229        SECTION .text:CODE:REORDER:NOROOT(1)
230UsageFault_Handler
231        B UsageFault_Handler
232
233        PUBWEAK SVC_Handler
234        SECTION .text:CODE:REORDER:NOROOT(1)
235SVC_Handler
236        B SVC_Handler
237
238        PUBWEAK DebugMon_Handler
239        SECTION .text:CODE:REORDER:NOROOT(1)
240DebugMon_Handler
241        B DebugMon_Handler
242
243        PUBWEAK PendSV_Handler
244        SECTION .text:CODE:REORDER:NOROOT(1)
245PendSV_Handler
246        B PendSV_Handler
247
248        PUBWEAK SysTick_Handler
249        SECTION .text:CODE:REORDER:NOROOT(1)
250SysTick_Handler
251        B SysTick_Handler
252
253        PUBWEAK  BOD_IRQHandler
254        PUBWEAK  IRC_IRQHandler
255        PUBWEAK  PWRWU_IRQHandler
256        PUBWEAK  RAMPE_IRQHandler
257        PUBWEAK  CKFAIL_IRQHandler
258        PUBWEAK  RTC_IRQHandler
259        PUBWEAK  TAMPER_IRQHandler
260        PUBWEAK  WDT_IRQHandler
261        PUBWEAK  WWDT_IRQHandler
262        PUBWEAK  EINT0_IRQHandler
263        PUBWEAK  EINT1_IRQHandler
264        PUBWEAK  EINT2_IRQHandler
265        PUBWEAK  EINT3_IRQHandler
266        PUBWEAK  EINT4_IRQHandler
267        PUBWEAK  EINT5_IRQHandler
268        PUBWEAK  GPA_IRQHandler
269        PUBWEAK  GPB_IRQHandler
270        PUBWEAK  GPC_IRQHandler
271        PUBWEAK  GPD_IRQHandler
272        PUBWEAK  GPE_IRQHandler
273        PUBWEAK  GPF_IRQHandler
274        PUBWEAK  QSPI0_IRQHandler
275        PUBWEAK  SPI0_IRQHandler
276        PUBWEAK  BRAKE0_IRQHandler
277        PUBWEAK  PWM0P0_IRQHandler
278        PUBWEAK  PWM0P1_IRQHandler
279        PUBWEAK  PWM0P2_IRQHandler
280        PUBWEAK  BRAKE1_IRQHandler
281        PUBWEAK  PWM1P0_IRQHandler
282        PUBWEAK  PWM1P1_IRQHandler
283        PUBWEAK  PWM1P2_IRQHandler
284        PUBWEAK  TMR0_IRQHandler
285        PUBWEAK  TMR1_IRQHandler
286        PUBWEAK  TMR2_IRQHandler
287        PUBWEAK  TMR3_IRQHandler
288        PUBWEAK  UART0_IRQHandler
289        PUBWEAK  UART1_IRQHandler
290        PUBWEAK  I2C0_IRQHandler
291        PUBWEAK  I2C1_IRQHandler
292        PUBWEAK  PDMA_IRQHandler
293        PUBWEAK  DAC_IRQHandler
294        PUBWEAK  EADC00_IRQHandler
295        PUBWEAK  EADC01_IRQHandler
296        PUBWEAK  ACMP01_IRQHandler
297        PUBWEAK  EADC02_IRQHandler
298        PUBWEAK  EADC03_IRQHandler
299        PUBWEAK  UART2_IRQHandler
300        PUBWEAK  UART3_IRQHandler
301        PUBWEAK  QSPI1_IRQHandler
302        PUBWEAK  SPI1_IRQHandler
303        PUBWEAK  SPI2_IRQHandler
304        PUBWEAK  USBD_IRQHandler
305        PUBWEAK  OHCI_IRQHandler
306        PUBWEAK  USBOTG_IRQHandler
307        PUBWEAK  CAN0_IRQHandler
308        PUBWEAK  CAN1_IRQHandler
309        PUBWEAK  SC0_IRQHandler
310        PUBWEAK  SC1_IRQHandler
311        PUBWEAK  SC2_IRQHandler
312        PUBWEAK  SPI3_IRQHandler
313        PUBWEAK  SDH0_IRQHandler
314        PUBWEAK  USBD20_IRQHandler
315        PUBWEAK  EMAC_TX_IRQHandler
316        PUBWEAK  EMAC_RX_IRQHandler
317        PUBWEAK  I2S0_IRQHandler
318        PUBWEAK  OPA0_IRQHandler
319        PUBWEAK  CRYPTO_IRQHandler
320        PUBWEAK  GPG_IRQHandler
321        PUBWEAK  EINT6_IRQHandler
322        PUBWEAK  UART4_IRQHandler
323        PUBWEAK  UART5_IRQHandler
324        PUBWEAK  USCI0_IRQHandler
325        PUBWEAK  USCI1_IRQHandler
326        PUBWEAK  BPWM0_IRQHandler
327        PUBWEAK  BPWM1_IRQHandler
328        PUBWEAK  SPIM_IRQHandler
329        PUBWEAK  CCAP_IRQHandler
330        PUBWEAK  I2C2_IRQHandler
331        PUBWEAK  QEI0_IRQHandler
332        PUBWEAK  QEI1_IRQHandler
333        PUBWEAK  ECAP0_IRQHandler
334        PUBWEAK  ECAP1_IRQHandler
335        PUBWEAK  GPH_IRQHandler
336        PUBWEAK  EINT7_IRQHandler
337        PUBWEAK  SDH1_IRQHandler
338        PUBWEAK  EHCI_IRQHandler
339        PUBWEAK  USBOTG20_IRQHandler
340        PUBWEAK  TRNG_IRQHandler
341        PUBWEAK  UART6_IRQHandler
342        PUBWEAK  UART7_IRQHandler
343        PUBWEAK  EADC10_IRQHandler
344        PUBWEAK  EADC11_IRQHandler
345        PUBWEAK  EADC12_IRQHandler
346        PUBWEAK  EADC13_IRQHandler
347        PUBWEAK  CAN2_IRQHandler
348        SECTION .text:CODE:REORDER:NOROOT(1)
349
350BOD_IRQHandler
351IRC_IRQHandler
352PWRWU_IRQHandler
353RAMPE_IRQHandler
354CKFAIL_IRQHandler
355RTC_IRQHandler
356TAMPER_IRQHandler
357WDT_IRQHandler
358WWDT_IRQHandler
359EINT0_IRQHandler
360EINT1_IRQHandler
361EINT2_IRQHandler
362EINT3_IRQHandler
363EINT4_IRQHandler
364EINT5_IRQHandler
365GPA_IRQHandler
366GPB_IRQHandler
367GPC_IRQHandler
368GPD_IRQHandler
369GPE_IRQHandler
370GPF_IRQHandler
371QSPI0_IRQHandler
372SPI0_IRQHandler
373BRAKE0_IRQHandler
374PWM0P0_IRQHandler
375PWM0P1_IRQHandler
376PWM0P2_IRQHandler
377BRAKE1_IRQHandler
378PWM1P0_IRQHandler
379PWM1P1_IRQHandler
380PWM1P2_IRQHandler
381TMR0_IRQHandler
382TMR1_IRQHandler
383TMR2_IRQHandler
384TMR3_IRQHandler
385UART0_IRQHandler
386UART1_IRQHandler
387I2C0_IRQHandler
388I2C1_IRQHandler
389PDMA_IRQHandler
390DAC_IRQHandler
391EADC00_IRQHandler
392EADC01_IRQHandler
393ACMP01_IRQHandler
394EADC02_IRQHandler
395EADC03_IRQHandler
396UART2_IRQHandler
397UART3_IRQHandler
398QSPI1_IRQHandler
399SPI1_IRQHandler
400SPI2_IRQHandler
401USBD_IRQHandler
402OHCI_IRQHandler
403USBOTG_IRQHandler
404CAN0_IRQHandler
405CAN1_IRQHandler
406SC0_IRQHandler
407SC1_IRQHandler
408SC2_IRQHandler
409SPI3_IRQHandler
410SDH0_IRQHandler
411USBD20_IRQHandler
412EMAC_TX_IRQHandler
413EMAC_RX_IRQHandler
414I2S0_IRQHandler
415OPA0_IRQHandler
416CRYPTO_IRQHandler
417GPG_IRQHandler
418EINT6_IRQHandler
419UART4_IRQHandler
420UART5_IRQHandler
421USCI0_IRQHandler
422USCI1_IRQHandler
423BPWM0_IRQHandler
424BPWM1_IRQHandler
425SPIM_IRQHandler
426CCAP_IRQHandler
427I2C2_IRQHandler
428QEI0_IRQHandler
429QEI1_IRQHandler
430ECAP0_IRQHandler
431ECAP1_IRQHandler
432GPH_IRQHandler
433EINT7_IRQHandler
434SDH1_IRQHandler
435EHCI_IRQHandler
436USBOTG20_IRQHandler
437TRNG_IRQHandler
438UART6_IRQHandler
439UART7_IRQHandler
440EADC10_IRQHandler
441EADC11_IRQHandler
442EADC12_IRQHandler
443EADC13_IRQHandler
444CAN2_IRQHandler
445Default_Handler
446        B Default_Handler
447
448
449
450
451        END
452;/*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/
453