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     ADC3_4_IRQHandler          ; ADC3 & ADC4
127                DCD     RESERVE48_IRQHandler       ;
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     ETH_IRQHandler             ; Ethernet global interrupt
141                DCD     ETH_WKUP_IRQHandler        ; Ethernet Wakeup through EXTI line interrupt
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     COMP_1_2_3_IRQHandler      ; COMP1 & COMP2 & COMP3
162                DCD     COMP_4_5_6_IRQHandler      ; COMP4 & COMP5 & COMP6
163                DCD     COMP7_IRQHandler           ; COMP7
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  ADC3_4_IRQHandler          [WEAK]
276                EXPORT  SDIO_IRQHandler            [WEAK]
277                EXPORT  TIM5_IRQHandler            [WEAK]
278                EXPORT  SPI3_IRQHandler            [WEAK]
279                EXPORT  UART4_IRQHandler           [WEAK]
280                EXPORT  UART5_IRQHandler           [WEAK]
281                EXPORT  TIM6_IRQHandler            [WEAK]
282                EXPORT  TIM7_IRQHandler            [WEAK]
283                EXPORT  DMA2_Channel1_IRQHandler   [WEAK]
284                EXPORT  DMA2_Channel2_IRQHandler   [WEAK]
285                EXPORT  DMA2_Channel3_IRQHandler   [WEAK]
286                EXPORT  DMA2_Channel4_IRQHandler   [WEAK]
287                EXPORT  DMA2_Channel5_IRQHandler   [WEAK]
288                EXPORT  ETH_IRQHandler             [WEAK]
289                EXPORT  ETH_WKUP_IRQHandler        [WEAK]
290                EXPORT  CAN2_TX_IRQHandler         [WEAK]
291                EXPORT  CAN2_RX0_IRQHandler        [WEAK]
292                EXPORT  CAN2_RX1_IRQHandler        [WEAK]
293                EXPORT  CAN2_SCE_IRQHandler        [WEAK]
294                EXPORT  QSPI_IRQHandler            [WEAK]
295                EXPORT  DMA2_Channel6_IRQHandler   [WEAK]
296                EXPORT  DMA2_Channel7_IRQHandler   [WEAK]
297                EXPORT  I2C3_EV_IRQHandler         [WEAK]
298                EXPORT  I2C3_ER_IRQHandler         [WEAK]
299                EXPORT  I2C4_EV_IRQHandler         [WEAK]
300                EXPORT  I2C4_ER_IRQHandler         [WEAK]
301                EXPORT  UART6_IRQHandler           [WEAK]
302                EXPORT  UART7_IRQHandler           [WEAK]
303                EXPORT  DMA1_Channel8_IRQHandler   [WEAK]
304                EXPORT  DMA2_Channel8_IRQHandler   [WEAK]
305                EXPORT  DVP_IRQHandler             [WEAK]
306                EXPORT  SAC_IRQHandler             [WEAK]
307                EXPORT  MMU_IRQHandler             [WEAK]
308                EXPORT  TSC_IRQHandler             [WEAK]
309                EXPORT  COMP_1_2_3_IRQHandler      [WEAK]
310                EXPORT  COMP_4_5_6_IRQHandler      [WEAK]
311                EXPORT  COMP7_IRQHandler           [WEAK]
312                EXPORT  RSRAM_IRQHandler           [WEAK]
313
314WWDG_IRQHandler
315PVD_IRQHandler
316TAMPER_IRQHandler
317RTC_WKUP_IRQHandler
318FLASH_IRQHandler
319RCC_IRQHandler
320EXTI0_IRQHandler
321EXTI1_IRQHandler
322EXTI2_IRQHandler
323EXTI3_IRQHandler
324EXTI4_IRQHandler
325DMA1_Channel1_IRQHandler
326DMA1_Channel2_IRQHandler
327DMA1_Channel3_IRQHandler
328DMA1_Channel4_IRQHandler
329DMA1_Channel5_IRQHandler
330DMA1_Channel6_IRQHandler
331DMA1_Channel7_IRQHandler
332ADC1_2_IRQHandler
333USB_HP_CAN1_TX_IRQHandler
334USB_LP_CAN1_RX0_IRQHandler
335CAN1_RX1_IRQHandler
336CAN1_SCE_IRQHandler
337EXTI9_5_IRQHandler
338TIM1_BRK_IRQHandler
339TIM1_UP_IRQHandler
340TIM1_TRG_COM_IRQHandler
341TIM1_CC_IRQHandler
342TIM2_IRQHandler
343TIM3_IRQHandler
344TIM4_IRQHandler
345I2C1_EV_IRQHandler
346I2C1_ER_IRQHandler
347I2C2_EV_IRQHandler
348I2C2_ER_IRQHandler
349SPI1_IRQHandler
350SPI2_IRQHandler
351USART1_IRQHandler
352USART2_IRQHandler
353USART3_IRQHandler
354EXTI15_10_IRQHandler
355RTCAlarm_IRQHandler
356USBWakeUp_IRQHandler
357TIM8_BRK_IRQHandler
358TIM8_UP_IRQHandler
359TIM8_TRG_COM_IRQHandler
360TIM8_CC_IRQHandler
361ADC3_4_IRQHandler
362RESERVE48_IRQHandler
363SDIO_IRQHandler
364TIM5_IRQHandler
365SPI3_IRQHandler
366UART4_IRQHandler
367UART5_IRQHandler
368TIM6_IRQHandler
369TIM7_IRQHandler
370DMA2_Channel1_IRQHandler
371DMA2_Channel2_IRQHandler
372DMA2_Channel3_IRQHandler
373DMA2_Channel4_IRQHandler
374DMA2_Channel5_IRQHandler
375ETH_IRQHandler
376ETH_WKUP_IRQHandler
377CAN2_TX_IRQHandler
378CAN2_RX0_IRQHandler
379CAN2_RX1_IRQHandler
380CAN2_SCE_IRQHandler
381QSPI_IRQHandler
382DMA2_Channel6_IRQHandler
383DMA2_Channel7_IRQHandler
384I2C3_EV_IRQHandler
385I2C3_ER_IRQHandler
386I2C4_EV_IRQHandler
387I2C4_ER_IRQHandler
388UART6_IRQHandler
389UART7_IRQHandler
390DMA1_Channel8_IRQHandler
391DMA2_Channel8_IRQHandler
392DVP_IRQHandler
393SAC_IRQHandler
394MMU_IRQHandler
395TSC_IRQHandler
396COMP_1_2_3_IRQHandler
397COMP_4_5_6_IRQHandler
398COMP7_IRQHandler
399RSRAM_IRQHandler
400                B       .
401
402                ENDP
403
404                ALIGN
405
406;*******************************************************************************
407; User Stack and Heap initialization
408;*******************************************************************************
409                 IF      :DEF:__MICROLIB
410
411                 EXPORT  __initial_sp
412                 EXPORT  __heap_base
413                 EXPORT  __heap_limit
414
415                 ELSE
416
417                 IMPORT  __use_two_region_memory
418                 EXPORT  __user_initial_stackheap
419
420__user_initial_stackheap
421
422                 LDR     R0, =  Heap_Mem
423                 LDR     R1, =(Stack_Mem + Stack_Size)
424                 LDR     R2, = (Heap_Mem +  Heap_Size)
425                 LDR     R3, = Stack_Mem
426                 BX      LR
427
428                 ALIGN
429
430                 ENDIF
431
432                 END
433