1; /*
2; * Copyright (c) 2006-2021, RT-Thread Development Team
3; *
4; * SPDX-License-Identifier: Apache-2.0
5; *
6; * Change Logs:
7; * Date           Author       Notes
8; * 2011-02-23     Bernard      first implementation
9; */
10
11;* <<< Use Configuration Wizard in Context Menu >>>
12
13; Amount of memory (in bytes) allocated for Stack
14; Tailor this value to your application needs
15; <h> Stack Configuration
16;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
17; </h>
18
19Stack_Size  EQU     0x00000200
20
21            AREA    STACK, NOINIT, READWRITE, ALIGN=3
22Stack_Mem   SPACE   Stack_Size
23__initial_sp
24
25; Note: RT-Thread not use malloc/free in Keil MDK, therefore the heap size is 0.
26Heap_Size   EQU     0x00000000
27
28            AREA    HEAP, NOINIT, READWRITE, ALIGN=3
29__heap_base
30Heap_Mem    SPACE   Heap_Size
31__heap_limit
32
33            PRESERVE8
34            THUMB
35
36; Vector Table Mapped to Address 0 at Reset
37            AREA    RESET, DATA, READONLY
38            EXPORT  __Vectors
39            EXPORT  __Vectors_End
40            EXPORT  __Vectors_Size
41
42__Vectors   DCD     __initial_sp               ; Top of Stack
43            DCD     Reset_Handler             ; Reset Handler
44            DCD     NMI_Handler               ; NMI Handler
45            DCD     HardFault_Handler         ; Hard Fault Handler
46            DCD     MemManage_Handler         ; MPU Fault Handler
47            DCD     BusFault_Handler          ; Bus Fault Handler
48            DCD     UsageFault_Handler        ; Usage Fault Handler
49            DCD     0                         ; Reserved
50            DCD     0                         ; Reserved
51            DCD     0                         ; Reserved
52            DCD     0                         ; Reserved
53            DCD     SVC_Handler               ; SVCall Handler
54            DCD     DebugMon_Handler          ; Debug Monitor Handler
55            DCD     0                         ; Reserved
56            DCD     PendSV_Handler            ; PendSV Handler
57            DCD     SysTick_Handler           ; SysTick Handler
58
59            DCD     CSV_Handler               ; 0: Clock Super Visor
60            DCD     SWDT_Handler              ; 1: Software Watchdog Timer
61            DCD     LVD_Handler               ; 2: Low Voltage Detector
62            DCD     MFT_WG_IRQHandler         ; 3: Wave Form Generator / DTIF
63            DCD     INT0_7_Handler            ; 4: External Interrupt Request ch.0 to ch.7
64            DCD     INT8_15_Handler           ; 5: External Interrupt Request ch.8 to ch.15
65            DCD     DT_Handler                ; 6: Dual Timer / Quad Decoder
66            DCD     MFS0RX_IRQHandler         ; 7: MultiFunction Serial ch.0
67            DCD     MFS0TX_IRQHandler         ; 8: MultiFunction Serial ch.0
68            DCD     MFS1RX_IRQHandler         ; 9: MultiFunction Serial ch.1
69            DCD     MFS1TX_IRQHandler         ; 10: MultiFunction Serial ch.1
70            DCD     MFS2RX_IRQHandler         ; 11: MultiFunction Serial ch.2
71            DCD     MFS2TX_IRQHandler         ; 12: MultiFunction Serial ch.2
72            DCD     MFS3RX_IRQHandler         ; 13: MultiFunction Serial ch.3
73            DCD     MFS3TX_IRQHandler         ; 14: MultiFunction Serial ch.3
74            DCD     MFS4RX_IRQHandler         ; 15: MultiFunction Serial ch.4
75            DCD     MFS4TX_IRQHandler         ; 16: MultiFunction Serial ch.4
76            DCD     MFS5RX_IRQHandler         ; 17: MultiFunction Serial ch.5
77            DCD     MFS5TX_IRQHandler         ; 18: MultiFunction Serial ch.5
78            DCD     MFS6RX_IRQHandler         ; 19: MultiFunction Serial ch.6
79            DCD     MFS6TX_IRQHandler         ; 20: MultiFunction Serial ch.6
80            DCD     MFS7RX_IRQHandler         ; 21: MultiFunction Serial ch.7
81            DCD     MFS7TX_IRQHandler         ; 22: MultiFunction Serial ch.7
82            DCD     PPG_Handler               ; 23: PPG
83            DCD     TIM_IRQHandler            ; 24: OSC / PLL / Watch Counter
84            DCD     ADC0_IRQHandler           ; 25: ADC0
85            DCD     ADC1_IRQHandler           ; 26: ADC1
86            DCD     ADC2_IRQHandler           ; 27: ADC2
87            DCD     MFT_FRT_IRQHandler        ; 28: Free-run Timer
88            DCD     MFT_IPC_IRQHandler        ; 29: Input Capture
89            DCD     MFT_OPC_IRQHandler        ; 30: Output Compare
90            DCD     BT_IRQHandler             ; 31: Base Timer ch.0 to ch.7
91            DCD     CAN0_IRQHandler           ; 32: CAN ch.0
92            DCD     CAN1_IRQHandler           ; 33: CAN ch.1
93            DCD     USBF_Handler              ; 34: USB Function
94            DCD     USB_Handler               ; 35: USB Function / USB HOST
95            DCD     DummyHandler              ; 36: Reserved
96            DCD     DummyHandler              ; 37: Reserved
97            DCD     DMAC0_Handler             ; 38: DMAC ch.0
98            DCD     DMAC1_Handler             ; 39: DMAC ch.1
99            DCD     DMAC2_Handler             ; 40: DMAC ch.2
100            DCD     DMAC3_Handler             ; 41: DMAC ch.3
101            DCD     DMAC4_Handler             ; 42: DMAC ch.4
102            DCD     DMAC5_Handler             ; 43: DMAC ch.5
103            DCD     DMAC6_Handler             ; 44: DMAC ch.6
104            DCD     DMAC7_Handler             ; 45: DMAC ch.7
105            DCD     DummyHandler              ; 46: Reserved
106            DCD     DummyHandler              ; 47: Reserved
107__Vectors_End
108
109__Vectors_Size  EQU     __Vectors_End - __Vectors
110
111    AREA    |.text|, CODE, READONLY
112
113; Reset handler routine
114Reset_Handler   PROC
115                EXPORT  Reset_Handler             [WEAK]
116                IMPORT  __main
117                IMPORT  SystemInit
118                LDR     R1, = __initial_sp        ; restore original stack pointer
119                MSR     MSP, R1
120                LDR     R0, =SystemInit
121                BLX     R0
122                LDR     R0, =__main
123                BX      R0
124                ENDP
125
126; Dummy Exception Handlers (infinite loops which can be modified)
127
128NMI_Handler     PROC
129                EXPORT  NMI_Handler                [WEAK]
130                B       .
131                ENDP
132HardFault_Handler\
133                PROC
134                EXPORT  HardFault_Handler          [WEAK]
135                B       .
136                ENDP
137MemManage_Handler\
138                PROC
139                EXPORT  MemManage_Handler          [WEAK]
140                B       .
141                ENDP
142BusFault_Handler\
143                PROC
144                EXPORT  BusFault_Handler           [WEAK]
145                B       .
146                ENDP
147UsageFault_Handler\
148                PROC
149                EXPORT  UsageFault_Handler         [WEAK]
150                B       .
151                ENDP
152SVC_Handler     PROC
153                EXPORT  SVC_Handler                [WEAK]
154                B       .
155                ENDP
156DebugMon_Handler\
157                PROC
158                EXPORT  DebugMon_Handler           [WEAK]
159                B       .
160                ENDP
161PendSV_Handler  PROC
162                EXPORT  PendSV_Handler             [WEAK]
163                B       .
164                ENDP
165SysTick_Handler PROC
166                EXPORT  SysTick_Handler            [WEAK]
167                B       .
168                ENDP
169
170Default_Handler PROC
171
172                EXPORT  CSV_Handler               [WEAK]
173                EXPORT  SWDT_Handler              [WEAK]
174                EXPORT  LVD_Handler               [WEAK]
175                EXPORT  MFT_WG_IRQHandler         [WEAK]
176                EXPORT  INT0_7_Handler            [WEAK]
177                EXPORT  INT8_15_Handler           [WEAK]
178                EXPORT  DT_Handler                [WEAK]
179                EXPORT  MFS0RX_IRQHandler         [WEAK]
180                EXPORT  MFS0TX_IRQHandler         [WEAK]
181                EXPORT  MFS1RX_IRQHandler         [WEAK]
182                EXPORT  MFS1TX_IRQHandler         [WEAK]
183                EXPORT  MFS2RX_IRQHandler         [WEAK]
184                EXPORT  MFS2TX_IRQHandler         [WEAK]
185                EXPORT  MFS3RX_IRQHandler         [WEAK]
186                EXPORT  MFS3TX_IRQHandler         [WEAK]
187                EXPORT  MFS4RX_IRQHandler         [WEAK]
188                EXPORT  MFS4TX_IRQHandler         [WEAK]
189                EXPORT  MFS5RX_IRQHandler         [WEAK]
190                EXPORT  MFS5TX_IRQHandler         [WEAK]
191                EXPORT  MFS6RX_IRQHandler         [WEAK]
192                EXPORT  MFS6TX_IRQHandler         [WEAK]
193                EXPORT  MFS7RX_IRQHandler         [WEAK]
194                EXPORT  MFS7TX_IRQHandler         [WEAK]
195                EXPORT  PPG_Handler               [WEAK]
196                EXPORT  TIM_IRQHandler            [WEAK]
197                EXPORT  ADC0_IRQHandler           [WEAK]
198                EXPORT  ADC1_IRQHandler           [WEAK]
199                EXPORT  ADC2_IRQHandler           [WEAK]
200                EXPORT  MFT_FRT_IRQHandler        [WEAK]
201                EXPORT  MFT_IPC_IRQHandler        [WEAK]
202                EXPORT  MFT_OPC_IRQHandler        [WEAK]
203                EXPORT  BT_IRQHandler             [WEAK]
204                EXPORT  CAN0_IRQHandler           [WEAK]
205                EXPORT  CAN1_IRQHandler           [WEAK]
206                EXPORT  USBF_Handler              [WEAK]
207                EXPORT  USB_Handler               [WEAK]
208                EXPORT  DMAC0_Handler             [WEAK]
209                EXPORT  DMAC1_Handler             [WEAK]
210                EXPORT  DMAC2_Handler             [WEAK]
211                EXPORT  DMAC3_Handler             [WEAK]
212                EXPORT  DMAC4_Handler             [WEAK]
213                EXPORT  DMAC5_Handler             [WEAK]
214                EXPORT  DMAC6_Handler             [WEAK]
215                EXPORT  DMAC7_Handler             [WEAK]
216                EXPORT  DummyHandler              [WEAK]
217
218CSV_Handler
219SWDT_Handler
220LVD_Handler
221MFT_WG_IRQHandler
222INT0_7_Handler
223INT8_15_Handler
224DT_Handler
225MFS0RX_IRQHandler
226MFS0TX_IRQHandler
227MFS1RX_IRQHandler
228MFS1TX_IRQHandler
229MFS2RX_IRQHandler
230MFS2TX_IRQHandler
231MFS3RX_IRQHandler
232MFS3TX_IRQHandler
233MFS4RX_IRQHandler
234MFS4TX_IRQHandler
235MFS5RX_IRQHandler
236MFS5TX_IRQHandler
237MFS6RX_IRQHandler
238MFS6TX_IRQHandler
239MFS7RX_IRQHandler
240MFS7TX_IRQHandler
241PPG_Handler
242TIM_IRQHandler
243ADC0_IRQHandler
244ADC1_IRQHandler
245ADC2_IRQHandler
246MFT_FRT_IRQHandler
247MFT_IPC_IRQHandler
248MFT_OPC_IRQHandler
249BT_IRQHandler
250CAN0_IRQHandler
251CAN1_IRQHandler
252USBF_Handler
253USB_Handler
254DMAC0_Handler
255DMAC1_Handler
256DMAC2_Handler
257DMAC3_Handler
258DMAC4_Handler
259DMAC5_Handler
260DMAC6_Handler
261DMAC7_Handler
262DummyHandler
263                B       .
264                ENDP
265                ALIGN
266
267; User Initial Stack & Heap
268
269                IF      :DEF:__MICROLIB
270                EXPORT  __initial_sp
271                EXPORT  __heap_base
272                EXPORT  __heap_limit
273                ELSE
274                IMPORT  __use_two_region_memory
275                EXPORT  __user_initial_stackheap
276__user_initial_stackheap
277
278                LDR     R0, =  Heap_Mem
279                LDR     R1, =(Stack_Mem + Stack_Size)
280                LDR     R2, = (Heap_Mem +  Heap_Size)
281                LDR     R3, = Stack_Mem
282                BX      LR
283
284                ALIGN
285                ENDIF
286
287                END
288