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;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
11;*/
12
13
14; <h> Stack Configuration
15;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
16; </h>
17
18	IF :LNOT: :DEF: Stack_Size
19Stack_Size      EQU     0x00000800
20	ENDIF
21
22                AREA    STACK, NOINIT, READWRITE, ALIGN=3
23Stack_Mem       SPACE   Stack_Size
24__initial_sp
25
26
27; <h> Heap Configuration
28;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
29; </h>
30
31	IF :LNOT: :DEF: Heap_Size
32Heap_Size       EQU     0x00000100
33	ENDIF
34
35                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
36__heap_base
37Heap_Mem        SPACE   Heap_Size
38__heap_limit
39
40
41                PRESERVE8
42                THUMB
43
44
45; Vector Table Mapped to Address 0 at Reset
46
47                AREA    RESET, DATA, READONLY
48                EXPORT  __Vectors
49                EXPORT  __Vectors_End
50                EXPORT  __Vectors_Size
51
52__Vectors       DCD     __initial_sp              ; Top of Stack
53                DCD     Reset_Handler             ; Reset Handler
54                DCD     NMI_Handler               ; NMI Handler
55                DCD     HardFault_Handler         ; Hard Fault Handler
56                DCD     MemManage_Handler         ; MPU Fault Handler
57                DCD     BusFault_Handler          ; Bus Fault Handler
58                DCD     UsageFault_Handler        ; Usage Fault Handler
59                DCD     0                         ; Reserved
60                DCD     0                         ; Reserved
61                DCD     0                         ; Reserved
62                DCD     0                         ; Reserved
63                DCD     SVC_Handler               ; SVCall Handler
64                DCD     DebugMon_Handler          ; Debug Monitor Handler
65                DCD     0                         ; Reserved
66                DCD     PendSV_Handler            ; PendSV Handler
67                DCD     SysTick_Handler           ; SysTick Handler
68
69                ; External Interrupts
70                DCD     BOD_IRQHandler            ; 0: Brown Out detection
71                DCD     IRC_IRQHandler            ; 1: Internal RC
72                DCD     PWRWU_IRQHandler          ; 2: Power down wake up
73                DCD     RAMPE_IRQHandler          ; 3: RAM parity error
74                DCD     CKFAIL_IRQHandler         ; 4: Clock detection fail
75                DCD     Default_Handler           ; 5: Reserved
76                DCD     RTC_IRQHandler            ; 6: Real Time Clock
77                DCD     TAMPER_IRQHandler         ; 7: Tamper detection
78                DCD     WDT_IRQHandler            ; 8: Watchdog timer
79                DCD     WWDT_IRQHandler           ; 9: Window watchdog timer
80                DCD     EINT0_IRQHandler          ; 10: External Input 0
81                DCD     EINT1_IRQHandler          ; 11: External Input 1
82                DCD     EINT2_IRQHandler          ; 12: External Input 2
83                DCD     EINT3_IRQHandler          ; 13: External Input 3
84                DCD     EINT4_IRQHandler          ; 14: External Input 4
85                DCD     EINT5_IRQHandler          ; 15: External Input 5
86                DCD     GPA_IRQHandler            ; 16: GPIO Port A
87                DCD     GPB_IRQHandler            ; 17: GPIO Port B
88                DCD     GPC_IRQHandler            ; 18: GPIO Port C
89                DCD     GPD_IRQHandler            ; 19: GPIO Port D
90                DCD     GPE_IRQHandler            ; 20: GPIO Port E
91                DCD     GPF_IRQHandler            ; 21: GPIO Port F
92                DCD     QSPI0_IRQHandler          ; 22: QSPI0
93                DCD     SPI0_IRQHandler           ; 23: SPI0
94                DCD     BRAKE0_IRQHandler         ; 24:
95                DCD     EPWM0P0_IRQHandler        ; 25:
96                DCD     EPWM0P1_IRQHandler        ; 26:
97                DCD     EPWM0P2_IRQHandler        ; 27:
98                DCD     BRAKE1_IRQHandler         ; 28:
99                DCD     EPWM1P0_IRQHandler        ; 29:
100                DCD     EPWM1P1_IRQHandler        ; 30:
101                DCD     EPWM1P2_IRQHandler        ; 31:
102                DCD     TMR0_IRQHandler           ; 32: Timer 0
103                DCD     TMR1_IRQHandler           ; 33: Timer 1
104                DCD     TMR2_IRQHandler           ; 34: Timer 2
105                DCD     TMR3_IRQHandler           ; 35: Timer 3
106                DCD     UART0_IRQHandler          ; 36: UART0
107                DCD     UART1_IRQHandler          ; 37: UART1
108                DCD     I2C0_IRQHandler           ; 38: I2C0
109                DCD     I2C1_IRQHandler           ; 39: I2C1
110                DCD     PDMA_IRQHandler           ; 40: Peripheral DMA
111                DCD     DAC_IRQHandler            ; 41: DAC
112                DCD     EADC00_IRQHandler         ; 42: EADC0 interrupt source 0
113                DCD     EADC01_IRQHandler         ; 43: EADC0 interrupt source 1
114                DCD     ACMP01_IRQHandler         ; 44: ACMP0 and ACMP1
115                DCD     Default_Handler           ; 45: Reserved
116                DCD     EADC02_IRQHandler         ; 46: EADC0 interrupt source 2
117                DCD     EADC03_IRQHandler         ; 47: EADC0 interrupt source 3
118                DCD     UART2_IRQHandler          ; 48: UART2
119                DCD     UART3_IRQHandler          ; 49: UART3
120                DCD     QSPI1_IRQHandler          ; 50: QSPI1
121                DCD     SPI1_IRQHandler           ; 51: SPI1
122                DCD     SPI2_IRQHandler           ; 52: SPI2
123                DCD     USBD_IRQHandler           ; 53: USB device
124                DCD     OHCI_IRQHandler           ; 54: OHCI
125                DCD     USBOTG_IRQHandler         ; 55: USB OTG
126                DCD     CAN0_IRQHandler           ; 56: CAN0
127                DCD     CAN1_IRQHandler           ; 57: CAN1
128                DCD     SC0_IRQHandler            ; 58:
129                DCD     SC1_IRQHandler            ; 59:
130                DCD     SC2_IRQHandler            ; 60:
131                DCD     Default_Handler           ; 61:
132                DCD     SPI3_IRQHandler           ; 62: SPI3
133                DCD     Default_Handler           ; 63:
134                DCD     SDH0_IRQHandler           ; 64: SDH0
135                DCD     USBD20_IRQHandler         ; 65: USBD20
136                DCD     EMAC_TX_IRQHandler        ; 66: EMAC_TX
137                DCD     EMAC_RX_IRQHandler        ; 67: EMAX_RX
138                DCD     I2S0_IRQHandler           ; 68: I2S0
139                DCD     Default_Handler           ; 69: ToDo: Add description to this Interrupt
140                DCD     OPA0_IRQHandler           ; 70: OPA0
141                DCD     CRYPTO_IRQHandler         ; 71: CRYPTO
142                DCD     GPG_IRQHandler            ; 72:
143                DCD     EINT6_IRQHandler          ; 73:
144                DCD     UART4_IRQHandler          ; 74: UART4
145                DCD     UART5_IRQHandler          ; 75: UART5
146                DCD     USCI0_IRQHandler          ; 76: USCI0
147                DCD     USCI1_IRQHandler          ; 77: USCI1
148                DCD     BPWM0_IRQHandler          ; 78: BPWM0
149                DCD     BPWM1_IRQHandler          ; 79: BPWM1
150                DCD     SPIM_IRQHandler           ; 80: SPIM
151                DCD     CCAP_IRQHandler           ; 81: CCAP
152                DCD     I2C2_IRQHandler           ; 82: I2C2
153                DCD     Default_Handler           ; 83:
154                DCD     QEI0_IRQHandler           ; 84: QEI0
155                DCD     QEI1_IRQHandler           ; 85: QEI1
156                DCD     ECAP0_IRQHandler          ; 86: ECAP0
157                DCD     ECAP1_IRQHandler          ; 87: ECAP1
158                DCD     GPH_IRQHandler            ; 88:
159                DCD     EINT7_IRQHandler          ; 89:
160                DCD     SDH1_IRQHandler           ; 90: SDH1
161                DCD     Default_Handler           ; 91:
162                DCD     EHCI_IRQHandler           ; 92: EHCI
163                DCD     USBOTG20_IRQHandler       ; 93:
164                DCD     Default_Handler           ; 94:
165                DCD     Default_Handler           ; 95:
166                DCD     Default_Handler           ; 96:
167                DCD     Default_Handler           ; 97:
168                DCD     Default_Handler           ; 98:
169                DCD     Default_Handler           ; 99:
170                DCD     Default_Handler           ; 100:
171                DCD     TRNG_IRQHandler           ; 101: TRNG
172                DCD     UART6_IRQHandler          ; 102: UART6
173                DCD     UART7_IRQHandler          ; 103: UART7
174                DCD     EADC10_IRQHandler         ; 104: EADC1 interrupt source 0
175                DCD     EADC11_IRQHandler         ; 105: EADC1 interrupt source 1
176                DCD     EADC12_IRQHandler         ; 106: EADC1 interrupt source 2
177                DCD     EADC13_IRQHandler         ; 107: EADC1 interrupt source 3
178                DCD     CAN2_IRQHandler           ; 108: CAN2
179
180
181__Vectors_End
182
183__Vectors_Size  EQU     __Vectors_End - __Vectors
184
185                AREA    |.text|, CODE, READONLY
186
187
188; Reset Handler
189
190Reset_Handler   PROC
191                EXPORT  Reset_Handler             [WEAK]
192                IMPORT  SystemInit
193                IMPORT  __main
194
195                ; Unlock Register
196                LDR     R0, =0x40000100
197                LDR     R1, =0x59
198                STR     R1, [R0]
199                LDR     R1, =0x16
200                STR     R1, [R0]
201                LDR     R1, =0x88
202                STR     R1, [R0]
203
204	IF :LNOT: :DEF: ENABLE_SPIM_CACHE
205                LDR     R0, =0x40000200            ; R0 = Clock Controller Register Base Address
206                LDR     R1, [R0,#0x4]              ; R1 = 0x40000204  (AHBCLK)
207                ORR     R1, R1, #0x4000
208                STR     R1, [R0,#0x4]              ; CLK->AHBCLK |= CLK_AHBCLK_SPIMCKEN_Msk;
209
210                LDR     R0, =0x40007000            ; R0 = SPIM Register Base Address
211                LDR     R1, [R0,#4]                ; R1 = SPIM->CTL1
212                ORR     R1, R1,#2                  ; R1 |= SPIM_CTL1_CACHEOFF_Msk
213                STR     R1, [R0,#4]                ; _SPIM_DISABLE_CACHE()
214                LDR     R1, [R0,#4]                ; R1 = SPIM->CTL1
215                ORR     R1, R1, #4                 ; R1 |= SPIM_CTL1_CCMEN_Msk
216                STR     R1, [R0,#4]                ; _SPIM_ENABLE_CCM()
217	ENDIF
218
219                LDR     R0, =SystemInit
220                BLX     R0
221
222                ; Init POR
223                ; LDR     R2, =0x40000024
224                ; LDR     R1, =0x00005AA5
225                ; STR     R1, [R2]
226
227                ; Lock
228                LDR     R0, =0x40000100
229                LDR     R1, =0
230                STR     R1, [R0]
231
232                LDR     R0, =__main
233                BX      R0
234
235                ENDP
236
237
238; Dummy Exception Handlers (infinite loops which can be modified)
239
240NMI_Handler     PROC
241                EXPORT  NMI_Handler               [WEAK]
242                B       .
243                ENDP
244HardFault_Handler\
245                PROC
246                EXPORT  HardFault_Handler         [WEAK]
247                B       .
248                ENDP
249MemManage_Handler\
250                PROC
251                EXPORT  MemManage_Handler         [WEAK]
252                B       .
253                ENDP
254BusFault_Handler\
255                PROC
256                EXPORT  BusFault_Handler          [WEAK]
257                B       .
258                ENDP
259UsageFault_Handler\
260                PROC
261                EXPORT  UsageFault_Handler        [WEAK]
262                B       .
263                ENDP
264SVC_Handler     PROC
265                EXPORT  SVC_Handler               [WEAK]
266                B       .
267                ENDP
268DebugMon_Handler\
269                PROC
270                EXPORT  DebugMon_Handler          [WEAK]
271                B       .
272                ENDP
273PendSV_Handler\
274                PROC
275                EXPORT  PendSV_Handler            [WEAK]
276                B       .
277                ENDP
278SysTick_Handler\
279                PROC
280                EXPORT  SysTick_Handler           [WEAK]
281                B       .
282                ENDP
283
284Default_Handler PROC
285
286                EXPORT  BOD_IRQHandler            [WEAK]
287                EXPORT  IRC_IRQHandler            [WEAK]
288                EXPORT  PWRWU_IRQHandler          [WEAK]
289                EXPORT  RAMPE_IRQHandler          [WEAK]
290                EXPORT  CKFAIL_IRQHandler         [WEAK]
291                EXPORT  RTC_IRQHandler            [WEAK]
292                EXPORT  TAMPER_IRQHandler         [WEAK]
293                EXPORT  WDT_IRQHandler            [WEAK]
294                EXPORT  WWDT_IRQHandler           [WEAK]
295                EXPORT  EINT0_IRQHandler          [WEAK]
296                EXPORT  EINT1_IRQHandler          [WEAK]
297                EXPORT  EINT2_IRQHandler          [WEAK]
298                EXPORT  EINT3_IRQHandler          [WEAK]
299                EXPORT  EINT4_IRQHandler          [WEAK]
300                EXPORT  EINT5_IRQHandler          [WEAK]
301                EXPORT  GPA_IRQHandler            [WEAK]
302                EXPORT  GPB_IRQHandler            [WEAK]
303                EXPORT  GPC_IRQHandler            [WEAK]
304                EXPORT  GPD_IRQHandler            [WEAK]
305                EXPORT  GPE_IRQHandler            [WEAK]
306                EXPORT  GPF_IRQHandler            [WEAK]
307                EXPORT  QSPI0_IRQHandler          [WEAK]
308                EXPORT  SPI0_IRQHandler           [WEAK]
309                EXPORT  BRAKE0_IRQHandler         [WEAK]
310                EXPORT  EPWM0P0_IRQHandler        [WEAK]
311                EXPORT  EPWM0P1_IRQHandler        [WEAK]
312                EXPORT  EPWM0P2_IRQHandler        [WEAK]
313                EXPORT  BRAKE1_IRQHandler         [WEAK]
314                EXPORT  EPWM1P0_IRQHandler        [WEAK]
315                EXPORT  EPWM1P1_IRQHandler        [WEAK]
316                EXPORT  EPWM1P2_IRQHandler        [WEAK]
317                EXPORT  TMR0_IRQHandler           [WEAK]
318                EXPORT  TMR1_IRQHandler           [WEAK]
319                EXPORT  TMR2_IRQHandler           [WEAK]
320                EXPORT  TMR3_IRQHandler           [WEAK]
321                EXPORT  UART0_IRQHandler          [WEAK]
322                EXPORT  UART1_IRQHandler          [WEAK]
323                EXPORT  I2C0_IRQHandler           [WEAK]
324                EXPORT  I2C1_IRQHandler           [WEAK]
325                EXPORT  PDMA_IRQHandler           [WEAK]
326                EXPORT  DAC_IRQHandler            [WEAK]
327                EXPORT  EADC00_IRQHandler         [WEAK]
328                EXPORT  EADC01_IRQHandler         [WEAK]
329                EXPORT  ACMP01_IRQHandler         [WEAK]
330                EXPORT  EADC02_IRQHandler         [WEAK]
331                EXPORT  EADC03_IRQHandler         [WEAK]
332                EXPORT  UART2_IRQHandler          [WEAK]
333                EXPORT  UART3_IRQHandler          [WEAK]
334                EXPORT  QSPI1_IRQHandler          [WEAK]
335                EXPORT  SPI1_IRQHandler           [WEAK]
336                EXPORT  SPI2_IRQHandler           [WEAK]
337                EXPORT  USBD_IRQHandler           [WEAK]
338                EXPORT  OHCI_IRQHandler           [WEAK]
339                EXPORT  USBOTG_IRQHandler         [WEAK]
340                EXPORT  CAN0_IRQHandler           [WEAK]
341                EXPORT  CAN1_IRQHandler           [WEAK]
342                EXPORT  SC0_IRQHandler            [WEAK]
343                EXPORT  SC1_IRQHandler            [WEAK]
344                EXPORT  SC2_IRQHandler            [WEAK]
345                EXPORT  SPI3_IRQHandler           [WEAK]
346                EXPORT  SDH0_IRQHandler           [WEAK]
347                EXPORT  USBD20_IRQHandler         [WEAK]
348                EXPORT  EMAC_TX_IRQHandler        [WEAK]
349                EXPORT  EMAC_RX_IRQHandler        [WEAK]
350                EXPORT  I2S0_IRQHandler           [WEAK]
351                EXPORT  OPA0_IRQHandler           [WEAK]
352                EXPORT  CRYPTO_IRQHandler         [WEAK]
353                EXPORT  GPG_IRQHandler            [WEAK]
354                EXPORT  EINT6_IRQHandler          [WEAK]
355                EXPORT  UART4_IRQHandler          [WEAK]
356                EXPORT  UART5_IRQHandler          [WEAK]
357                EXPORT  USCI0_IRQHandler          [WEAK]
358                EXPORT  USCI1_IRQHandler          [WEAK]
359                EXPORT  BPWM0_IRQHandler          [WEAK]
360                EXPORT  BPWM1_IRQHandler          [WEAK]
361                EXPORT  SPIM_IRQHandler           [WEAK]
362                EXPORT  CCAP_IRQHandler           [WEAK]
363                EXPORT  I2C2_IRQHandler           [WEAK]
364                EXPORT  QEI0_IRQHandler           [WEAK]
365                EXPORT  QEI1_IRQHandler           [WEAK]
366                EXPORT  ECAP0_IRQHandler          [WEAK]
367                EXPORT  ECAP1_IRQHandler          [WEAK]
368                EXPORT  GPH_IRQHandler            [WEAK]
369                EXPORT  EINT7_IRQHandler          [WEAK]
370                EXPORT  SDH1_IRQHandler           [WEAK]
371                EXPORT  EHCI_IRQHandler           [WEAK]
372                EXPORT  USBOTG20_IRQHandler       [WEAK]
373                EXPORT  TRNG_IRQHandler           [WEAK]
374                EXPORT  UART6_IRQHandler          [WEAK]
375                EXPORT  UART7_IRQHandler          [WEAK]
376                EXPORT  EADC10_IRQHandler         [WEAK]
377                EXPORT  EADC11_IRQHandler         [WEAK]
378                EXPORT  EADC12_IRQHandler         [WEAK]
379                EXPORT  EADC13_IRQHandler         [WEAK]
380                EXPORT  CAN2_IRQHandler           [WEAK]
381
382Default__IRQHandler
383BOD_IRQHandler
384IRC_IRQHandler
385PWRWU_IRQHandler
386RAMPE_IRQHandler
387CKFAIL_IRQHandler
388RTC_IRQHandler
389TAMPER_IRQHandler
390WDT_IRQHandler
391WWDT_IRQHandler
392EINT0_IRQHandler
393EINT1_IRQHandler
394EINT2_IRQHandler
395EINT3_IRQHandler
396EINT4_IRQHandler
397EINT5_IRQHandler
398GPA_IRQHandler
399GPB_IRQHandler
400GPC_IRQHandler
401GPD_IRQHandler
402GPE_IRQHandler
403GPF_IRQHandler
404QSPI0_IRQHandler
405SPI0_IRQHandler
406BRAKE0_IRQHandler
407EPWM0P0_IRQHandler
408EPWM0P1_IRQHandler
409EPWM0P2_IRQHandler
410BRAKE1_IRQHandler
411EPWM1P0_IRQHandler
412EPWM1P1_IRQHandler
413EPWM1P2_IRQHandler
414TMR0_IRQHandler
415TMR1_IRQHandler
416TMR2_IRQHandler
417TMR3_IRQHandler
418UART0_IRQHandler
419UART1_IRQHandler
420I2C0_IRQHandler
421I2C1_IRQHandler
422PDMA_IRQHandler
423DAC_IRQHandler
424EADC00_IRQHandler
425EADC01_IRQHandler
426ACMP01_IRQHandler
427EADC02_IRQHandler
428EADC03_IRQHandler
429UART2_IRQHandler
430UART3_IRQHandler
431QSPI1_IRQHandler
432SPI1_IRQHandler
433SPI2_IRQHandler
434USBD_IRQHandler
435OHCI_IRQHandler
436USBOTG_IRQHandler
437CAN0_IRQHandler
438CAN1_IRQHandler
439SC0_IRQHandler
440SC1_IRQHandler
441SC2_IRQHandler
442SPI3_IRQHandler
443SDH0_IRQHandler
444USBD20_IRQHandler
445EMAC_TX_IRQHandler
446EMAC_RX_IRQHandler
447I2S0_IRQHandler
448OPA0_IRQHandler
449CRYPTO_IRQHandler
450GPG_IRQHandler
451EINT6_IRQHandler
452UART4_IRQHandler
453UART5_IRQHandler
454USCI0_IRQHandler
455USCI1_IRQHandler
456BPWM0_IRQHandler
457BPWM1_IRQHandler
458SPIM_IRQHandler
459CCAP_IRQHandler
460I2C2_IRQHandler
461QEI0_IRQHandler
462QEI1_IRQHandler
463ECAP0_IRQHandler
464ECAP1_IRQHandler
465GPH_IRQHandler
466EINT7_IRQHandler
467SDH1_IRQHandler
468EHCI_IRQHandler
469USBOTG20_IRQHandler
470TRNG_IRQHandler
471UART6_IRQHandler
472UART7_IRQHandler
473EADC10_IRQHandler
474EADC11_IRQHandler
475EADC12_IRQHandler
476EADC13_IRQHandler
477CAN2_IRQHandler
478
479
480
481                B       .
482                ENDP
483
484
485                ALIGN
486
487
488; User Initial Stack & Heap
489
490                IF      :DEF:__MICROLIB
491
492                EXPORT  __initial_sp
493                EXPORT  __heap_base
494                EXPORT  __heap_limit
495
496                ELSE
497
498                IMPORT  __use_two_region_memory
499                EXPORT  __user_initial_stackheap
500
501__user_initial_stackheap PROC
502                LDR     R0, =  Heap_Mem
503                LDR     R1, =(Stack_Mem + Stack_Size)
504                LDR     R2, = (Heap_Mem +  Heap_Size)
505                LDR     R3, = Stack_Mem
506                BX      LR
507                ENDP
508
509                ALIGN
510
511                ENDIF
512
513
514                END
515;/*** (C) COPYRIGHT 2017 Nuvoton Technology Corp. ***/
516