1; ****************************************************************************
2; Copyright (c) 2019, Nations Technologies Inc.
3;
4; All rights reserved.
5; ****************************************************************************
6;
7; Redistribution and use in source and binary forms, with or without
8; modification, are permitted provided that the following conditions are met:
9;
10; - Redistributions of source code must retain the above copyright notice,
11; this list of conditions and the disclaimer below.
12;
13; Nations' name may not be used to endorse or promote products derived from
14; this software without specific prior written permission.
15;
16; DISCLAIMER: THIS SOFTWARE IS PROVIDED BY NATIONS "AS IS" AND ANY EXPRESS OR
17; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
19; DISCLAIMED. IN NO EVENT SHALL NATIONS BE LIABLE FOR ANY DIRECT, INDIRECT,
20; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
22; OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
25; EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26; ****************************************************************************
27
28; Amount of memory (in bytes) allocated for Stack
29; Tailor this value to your application needs
30; <h> Stack Configuration
31;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
32; </h>
33
34Stack_Size      EQU     0x00001500
35
36                AREA    STACK, NOINIT, READWRITE, ALIGN=3
37Stack_Mem       SPACE   Stack_Size
38__initial_sp
39
40; <h> Heap Configuration
41;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
42; </h>
43
44Heap_Size       EQU     0x00000300
45
46                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
47__heap_base
48Heap_Mem        SPACE   Heap_Size
49__heap_limit
50
51                PRESERVE8
52                THUMB
53
54
55; Vector Table Mapped to Address 0 at Reset
56                AREA    RESET, DATA, READONLY
57                EXPORT  __Vectors
58                EXPORT  __Vectors_End
59                EXPORT  __Vectors_Size
60
61__Vectors       DCD     __initial_sp               ; Top of Stack
62                DCD     Reset_Handler              ; Reset Handler
63                DCD     NMI_Handler                ; NMI Handler
64                DCD     HardFault_Handler          ; Hard Fault Handler
65                DCD     MemManage_Handler          ; MPU Fault Handler
66                DCD     BusFault_Handler           ; Bus Fault Handler
67                DCD     UsageFault_Handler         ; Usage Fault Handler
68                DCD     0                          ; Reserved
69                DCD     0                          ; Reserved
70                DCD     0                          ; Reserved
71                DCD     0                          ; Reserved
72                DCD     SVC_Handler                ; SVCall Handler
73                DCD     DebugMon_Handler           ; Debug Monitor Handler
74                DCD     0                          ; Reserved
75                DCD     PendSV_Handler             ; PendSV Handler
76                DCD     SysTick_Handler            ; SysTick Handler
77
78                ; External Interrupts
79                DCD     WWDG_IRQHandler            ; Window Watchdog
80                DCD     PVD_IRQHandler             ; PVD through EXTI Line detect
81                DCD     TAMPER_IRQHandler          ; Tamper
82                DCD     RTC_WKUP_IRQHandler        ; RTC_WKUP
83                DCD     FLASH_IRQHandler           ; Flash
84                DCD     RCC_IRQHandler             ; RCC
85                DCD     EXTI0_IRQHandler           ; EXTI Line 0
86                DCD     EXTI1_IRQHandler           ; EXTI Line 1
87                DCD     EXTI2_IRQHandler           ; EXTI Line 2
88                DCD     EXTI3_IRQHandler           ; EXTI Line 3
89                DCD     EXTI4_IRQHandler           ; EXTI Line 4
90                DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1
91                DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2
92                DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3
93                DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4
94                DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5
95                DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6
96                DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7
97                DCD     ADC1_2_IRQHandler          ; ADC1 & ADC2
98                DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX
99                DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0
100                DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1
101                DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE
102                DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5
103                DCD     TIM1_BRK_IRQHandler        ; TIM1 Break
104                DCD     TIM1_UP_IRQHandler         ; TIM1 Update
105                DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation
106                DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare
107                DCD     TIM2_IRQHandler            ; TIM2
108                DCD     TIM3_IRQHandler            ; TIM3
109                DCD     TIM4_IRQHandler            ; TIM4
110                DCD     I2C1_EV_IRQHandler         ; I2C1 Event
111                DCD     I2C1_ER_IRQHandler         ; I2C1 Error
112                DCD     I2C2_EV_IRQHandler         ; I2C2 Event
113                DCD     I2C2_ER_IRQHandler         ; I2C2 Error
114                DCD     SPI1_IRQHandler            ; SPI1
115                DCD     SPI2_IRQHandler            ; SPI2/I2S2
116                DCD     USART1_IRQHandler          ; USART1
117                DCD     USART2_IRQHandler          ; USART2
118                DCD     USART3_IRQHandler          ; USART3
119                DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10
120                DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line
121                DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend
122                DCD     TIM8_BRK_IRQHandler        ; TIM8 Break
123                DCD     TIM8_UP_IRQHandler         ; TIM8 Update
124                DCD     TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and Commutation
125                DCD     TIM8_CC_IRQHandler         ; TIM8 Capture Compare
126                DCD     RESERVE47_IRQHandler       ; RESERVE47
127                DCD     RESERVE48_IRQHandler       ; RESERVE48
128                DCD     SDIO_IRQHandler            ; SDIO
129                DCD     TIM5_IRQHandler            ; TIM5
130                DCD     SPI3_IRQHandler            ; SPI3/I2S3
131                DCD     UART4_IRQHandler           ; UART4
132                DCD     UART5_IRQHandler           ; UART5
133                DCD     TIM6_IRQHandler            ; TIM6
134                DCD     TIM7_IRQHandler            ; TIM7
135                DCD     DMA2_Channel1_IRQHandler   ; DMA2 Channel1
136                DCD     DMA2_Channel2_IRQHandler   ; DMA2 Channel2
137                DCD     DMA2_Channel3_IRQHandler   ; DMA2 Channel3
138                DCD     DMA2_Channel4_IRQHandler   ; DMA2 Channel4
139                DCD     DMA2_Channel5_IRQHandler   ; DMA2 Channel5
140                DCD     RESERVE61_IRQHandler       ; RESERVE61
141                DCD     RESERVE62_IRQHandler       ; RESERVE62
142                DCD     CAN2_TX_IRQHandler         ; CAN2 TX
143                DCD     CAN2_RX0_IRQHandler        ; CAN2 RX0
144                DCD     CAN2_RX1_IRQHandler        ; CAN2 RX1
145                DCD     CAN2_SCE_IRQHandler        ; CAN2 SCE
146                DCD     QSPI_IRQHandler            ; QSPI
147                DCD     DMA2_Channel6_IRQHandler   ; DMA2 Channel6
148                DCD     DMA2_Channel7_IRQHandler   ; DMA2 Channel7
149                DCD     I2C3_EV_IRQHandler         ; I2C3 event
150                DCD     I2C3_ER_IRQHandler         ; I2C3 error
151                DCD     I2C4_EV_IRQHandler         ; I2C4 event
152                DCD     I2C4_ER_IRQHandler         ; I2C4 error
153                DCD     UART6_IRQHandler           ; UART6
154                DCD     UART7_IRQHandler           ; UART7
155                DCD     DMA1_Channel8_IRQHandler   ; DMA1 Channel8
156                DCD     DMA2_Channel8_IRQHandler   ; DMA2 Channel8
157                DCD     DVP_IRQHandler             ; DVP
158                DCD     SAC_IRQHandler             ; SAC
159                DCD     MMU_IRQHandler             ; MMU
160                DCD     TSC_IRQHandler             ; TSC
161                DCD     RESERVE82_IRQHandler       ; RESERVE82
162                DCD     RESERVE83_IRQHandler       ; RESERVE83
163                DCD     RESERVE84_IRQHandler       ; RESERVE84
164                DCD     RSRAM_IRQHandler           ; R-SRAM parity error interrupt
165__Vectors_End
166
167__Vectors_Size  EQU  __Vectors_End - __Vectors
168
169                AREA    |.text|, CODE, READONLY
170
171; Reset handler
172Reset_Handler   PROC
173                EXPORT  Reset_Handler             [WEAK]
174                IMPORT  __main
175                IMPORT  SystemInit
176                LDR     R0, =SystemInit
177                BLX     R0
178                LDR     R0, =__main
179                BX      R0
180                ENDP
181
182; Dummy Exception Handlers (infinite loops which can be modified)
183
184NMI_Handler     PROC
185                EXPORT  NMI_Handler                [WEAK]
186                B       .
187                ENDP
188HardFault_Handler\
189                PROC
190                EXPORT  HardFault_Handler          [WEAK]
191                B       .
192                ENDP
193MemManage_Handler\
194                PROC
195                EXPORT  MemManage_Handler          [WEAK]
196                B       .
197                ENDP
198BusFault_Handler\
199                PROC
200                EXPORT  BusFault_Handler           [WEAK]
201                B       .
202                ENDP
203UsageFault_Handler\
204                PROC
205                EXPORT  UsageFault_Handler         [WEAK]
206                B       .
207                ENDP
208SVC_Handler     PROC
209                EXPORT  SVC_Handler                [WEAK]
210                B       .
211                ENDP
212DebugMon_Handler\
213                PROC
214                EXPORT  DebugMon_Handler           [WEAK]
215                B       .
216                ENDP
217PendSV_Handler  PROC
218                EXPORT  PendSV_Handler             [WEAK]
219                B       .
220                ENDP
221SysTick_Handler PROC
222                EXPORT  SysTick_Handler            [WEAK]
223                B       .
224                ENDP
225
226Default_Handler PROC
227
228                EXPORT  WWDG_IRQHandler            [WEAK]
229                EXPORT  PVD_IRQHandler             [WEAK]
230                EXPORT  TAMPER_IRQHandler          [WEAK]
231                EXPORT  RTC_WKUP_IRQHandler        [WEAK]
232                EXPORT  FLASH_IRQHandler           [WEAK]
233                EXPORT  RCC_IRQHandler             [WEAK]
234                EXPORT  EXTI0_IRQHandler           [WEAK]
235                EXPORT  EXTI1_IRQHandler           [WEAK]
236                EXPORT  EXTI2_IRQHandler           [WEAK]
237                EXPORT  EXTI3_IRQHandler           [WEAK]
238                EXPORT  EXTI4_IRQHandler           [WEAK]
239                EXPORT  DMA1_Channel1_IRQHandler   [WEAK]
240                EXPORT  DMA1_Channel2_IRQHandler   [WEAK]
241                EXPORT  DMA1_Channel3_IRQHandler   [WEAK]
242                EXPORT  DMA1_Channel4_IRQHandler   [WEAK]
243                EXPORT  DMA1_Channel5_IRQHandler   [WEAK]
244                EXPORT  DMA1_Channel6_IRQHandler   [WEAK]
245                EXPORT  DMA1_Channel7_IRQHandler   [WEAK]
246                EXPORT  ADC1_2_IRQHandler          [WEAK]
247                EXPORT  USB_HP_CAN1_TX_IRQHandler  [WEAK]
248                EXPORT  USB_LP_CAN1_RX0_IRQHandler [WEAK]
249                EXPORT  CAN1_RX1_IRQHandler        [WEAK]
250                EXPORT  CAN1_SCE_IRQHandler        [WEAK]
251                EXPORT  EXTI9_5_IRQHandler         [WEAK]
252                EXPORT  TIM1_BRK_IRQHandler        [WEAK]
253                EXPORT  TIM1_UP_IRQHandler         [WEAK]
254                EXPORT  TIM1_TRG_COM_IRQHandler    [WEAK]
255                EXPORT  TIM1_CC_IRQHandler         [WEAK]
256                EXPORT  TIM2_IRQHandler            [WEAK]
257                EXPORT  TIM3_IRQHandler            [WEAK]
258                EXPORT  TIM4_IRQHandler            [WEAK]
259                EXPORT  I2C1_EV_IRQHandler         [WEAK]
260                EXPORT  I2C1_ER_IRQHandler         [WEAK]
261                EXPORT  I2C2_EV_IRQHandler         [WEAK]
262                EXPORT  I2C2_ER_IRQHandler         [WEAK]
263                EXPORT  SPI1_IRQHandler            [WEAK]
264                EXPORT  SPI2_IRQHandler            [WEAK]
265                EXPORT  USART1_IRQHandler          [WEAK]
266                EXPORT  USART2_IRQHandler          [WEAK]
267                EXPORT  USART3_IRQHandler          [WEAK]
268                EXPORT  EXTI15_10_IRQHandler       [WEAK]
269                EXPORT  RTCAlarm_IRQHandler        [WEAK]
270                EXPORT  USBWakeUp_IRQHandler       [WEAK]
271                EXPORT  TIM8_BRK_IRQHandler        [WEAK]
272                EXPORT  TIM8_UP_IRQHandler         [WEAK]
273                EXPORT  TIM8_TRG_COM_IRQHandler    [WEAK]
274                EXPORT  TIM8_CC_IRQHandler         [WEAK]
275                EXPORT  SDIO_IRQHandler            [WEAK]
276                EXPORT  TIM5_IRQHandler            [WEAK]
277                EXPORT  SPI3_IRQHandler            [WEAK]
278                EXPORT  UART4_IRQHandler           [WEAK]
279                EXPORT  UART5_IRQHandler           [WEAK]
280                EXPORT  TIM6_IRQHandler            [WEAK]
281                EXPORT  TIM7_IRQHandler            [WEAK]
282                EXPORT  DMA2_Channel1_IRQHandler   [WEAK]
283                EXPORT  DMA2_Channel2_IRQHandler   [WEAK]
284                EXPORT  DMA2_Channel3_IRQHandler   [WEAK]
285                EXPORT  DMA2_Channel4_IRQHandler   [WEAK]
286                EXPORT  DMA2_Channel5_IRQHandler   [WEAK]
287                EXPORT  CAN2_TX_IRQHandler         [WEAK]
288                EXPORT  CAN2_RX0_IRQHandler        [WEAK]
289                EXPORT  CAN2_RX1_IRQHandler        [WEAK]
290                EXPORT  CAN2_SCE_IRQHandler        [WEAK]
291                EXPORT  QSPI_IRQHandler            [WEAK]
292                EXPORT  DMA2_Channel6_IRQHandler   [WEAK]
293                EXPORT  DMA2_Channel7_IRQHandler   [WEAK]
294                EXPORT  I2C3_EV_IRQHandler         [WEAK]
295                EXPORT  I2C3_ER_IRQHandler         [WEAK]
296                EXPORT  I2C4_EV_IRQHandler         [WEAK]
297                EXPORT  I2C4_ER_IRQHandler         [WEAK]
298                EXPORT  UART6_IRQHandler           [WEAK]
299                EXPORT  UART7_IRQHandler           [WEAK]
300                EXPORT  DMA1_Channel8_IRQHandler   [WEAK]
301                EXPORT  DMA2_Channel8_IRQHandler   [WEAK]
302                EXPORT  DVP_IRQHandler             [WEAK]
303                EXPORT  SAC_IRQHandler             [WEAK]
304                EXPORT  MMU_IRQHandler             [WEAK]
305                EXPORT  TSC_IRQHandler             [WEAK]
306                EXPORT  RSRAM_IRQHandler           [WEAK]
307
308WWDG_IRQHandler
309PVD_IRQHandler
310TAMPER_IRQHandler
311RTC_WKUP_IRQHandler
312FLASH_IRQHandler
313RCC_IRQHandler
314EXTI0_IRQHandler
315EXTI1_IRQHandler
316EXTI2_IRQHandler
317EXTI3_IRQHandler
318EXTI4_IRQHandler
319DMA1_Channel1_IRQHandler
320DMA1_Channel2_IRQHandler
321DMA1_Channel3_IRQHandler
322DMA1_Channel4_IRQHandler
323DMA1_Channel5_IRQHandler
324DMA1_Channel6_IRQHandler
325DMA1_Channel7_IRQHandler
326ADC1_2_IRQHandler
327USB_HP_CAN1_TX_IRQHandler
328USB_LP_CAN1_RX0_IRQHandler
329CAN1_RX1_IRQHandler
330CAN1_SCE_IRQHandler
331EXTI9_5_IRQHandler
332TIM1_BRK_IRQHandler
333TIM1_UP_IRQHandler
334TIM1_TRG_COM_IRQHandler
335TIM1_CC_IRQHandler
336TIM2_IRQHandler
337TIM3_IRQHandler
338TIM4_IRQHandler
339I2C1_EV_IRQHandler
340I2C1_ER_IRQHandler
341I2C2_EV_IRQHandler
342I2C2_ER_IRQHandler
343SPI1_IRQHandler
344SPI2_IRQHandler
345USART1_IRQHandler
346USART2_IRQHandler
347USART3_IRQHandler
348EXTI15_10_IRQHandler
349RTCAlarm_IRQHandler
350USBWakeUp_IRQHandler
351TIM8_BRK_IRQHandler
352TIM8_UP_IRQHandler
353TIM8_TRG_COM_IRQHandler
354TIM8_CC_IRQHandler
355RESERVE47_IRQHandler
356RESERVE48_IRQHandler
357SDIO_IRQHandler
358TIM5_IRQHandler
359SPI3_IRQHandler
360UART4_IRQHandler
361UART5_IRQHandler
362TIM6_IRQHandler
363TIM7_IRQHandler
364DMA2_Channel1_IRQHandler
365DMA2_Channel2_IRQHandler
366DMA2_Channel3_IRQHandler
367DMA2_Channel4_IRQHandler
368DMA2_Channel5_IRQHandler
369RESERVE61_IRQHandler
370RESERVE62_IRQHandler
371CAN2_TX_IRQHandler
372CAN2_RX0_IRQHandler
373CAN2_RX1_IRQHandler
374CAN2_SCE_IRQHandler
375QSPI_IRQHandler
376DMA2_Channel6_IRQHandler
377DMA2_Channel7_IRQHandler
378I2C3_EV_IRQHandler
379I2C3_ER_IRQHandler
380I2C4_EV_IRQHandler
381I2C4_ER_IRQHandler
382UART6_IRQHandler
383UART7_IRQHandler
384DMA1_Channel8_IRQHandler
385DMA2_Channel8_IRQHandler
386DVP_IRQHandler
387SAC_IRQHandler
388MMU_IRQHandler
389TSC_IRQHandler
390RESERVE82_IRQHandler
391RESERVE83_IRQHandler
392RESERVE84_IRQHandler
393RSRAM_IRQHandler
394                B       .
395
396                ENDP
397
398                ALIGN
399
400;*******************************************************************************
401; User Stack and Heap initialization
402;*******************************************************************************
403                 IF      :DEF:__MICROLIB
404
405                 EXPORT  __initial_sp
406                 EXPORT  __heap_base
407                 EXPORT  __heap_limit
408
409                 ELSE
410
411                 IMPORT  __use_two_region_memory
412                 EXPORT  __user_initial_stackheap
413
414__user_initial_stackheap
415
416                 LDR     R0, =  Heap_Mem
417                 LDR     R1, =(Stack_Mem + Stack_Size)
418                 LDR     R2, = (Heap_Mem +  Heap_Size)
419                 LDR     R3, = Stack_Mem
420                 BX      LR
421
422                 ALIGN
423
424                 ENDIF
425
426                 END
427