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          ; RTC Tamper interrupt or Timestamp through EXTI line 19 interrupt
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     DMA_Channel1_IRQHandler    ; DMA Channel 1
91                DCD     DMA_Channel2_IRQHandler    ; DMA Channel 2
92                DCD     DMA_Channel3_IRQHandler    ; DMA Channel 3
93                DCD     DMA_Channel4_IRQHandler    ; DMA Channel 4
94                DCD     DMA_Channel5_IRQHandler    ; DMA Channel 5
95                DCD     DMA_Channel6_IRQHandler    ; DMA Channel 6
96                DCD     DMA_Channel7_IRQHandler    ; DMA Channel 7
97                DCD     DMA_Channel8_IRQHandler    ; DMA Channel 8
98                DCD     ADC_IRQHandler             ; ADC
99                DCD     USB_HP_IRQHandler          ; USB High Priority
100                DCD     USB_LP_IRQHandler          ; USB Low  Priority
101                DCD     COMP_1_2_IRQHandler        ; COMP1 & COMP2 through EXTI line 21/22
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
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     UART4_IRQHandler           ; UART4
127                DCD     UART5_IRQHandler           ; UART5
128                DCD     LPUART_IRQHandler          ; LPUART
129                DCD     TIM5_IRQHandler            ; TIM5
130                DCD     TIM6_IRQHandler            ; TIM6
131                DCD     TIM7_IRQHandler            ; TIM7
132                DCD     CAN_TX_IRQHandler          ; CAN TX
133                DCD     CAN_RX0_IRQHandler         ; CAN RX0
134                DCD     CAN_RX1_IRQHandler         ; CAN RX1
135                DCD     CAN_SCE_IRQHandler         ; CAN SCE
136                DCD     LPUART_WKUP_IRQHandler     ; LPUART_WKUP
137                DCD     LPTIM_WKUP_IRQHandler      ; LPTIM_WKUP
138                DCD     LCD_IRQHandler             ; LCD
139                DCD     SAC_IRQHandler             ; SAC
140                DCD     MMU_IRQHandler             ; MMU
141                DCD     TSC_IRQHandler             ; TSC
142                DCD     RAMC_PERR_IRQHandler       ; RAMC ERR
143                DCD     TIM9_IRQHandler            ; TIM9
144                DCD     UCDR_IRQHandler            ; UCDR ERR
145__Vectors_End
146
147__Vectors_Size  EQU  __Vectors_End - __Vectors
148
149                AREA    |.text|, CODE, READONLY
150
151; Reset handler
152Reset_Handler   PROC
153                EXPORT  Reset_Handler             [WEAK]
154                IMPORT  __main
155                IMPORT  SystemInit
156                LDR     R0, =SystemInit
157                BLX     R0
158                LDR     R0, =__main
159                BX      R0
160                ENDP
161
162; Dummy Exception Handlers (infinite loops which can be modified)
163
164NMI_Handler     PROC
165                EXPORT  NMI_Handler                [WEAK]
166                B       .
167                ENDP
168HardFault_Handler\
169                PROC
170                EXPORT  HardFault_Handler          [WEAK]
171                B       .
172                ENDP
173MemManage_Handler\
174                PROC
175                EXPORT  MemManage_Handler          [WEAK]
176                B       .
177                ENDP
178BusFault_Handler\
179                PROC
180                EXPORT  BusFault_Handler           [WEAK]
181                B       .
182                ENDP
183UsageFault_Handler\
184                PROC
185                EXPORT  UsageFault_Handler         [WEAK]
186                B       .
187                ENDP
188SVC_Handler     PROC
189                EXPORT  SVC_Handler                [WEAK]
190                B       .
191                ENDP
192DebugMon_Handler\
193                PROC
194                EXPORT  DebugMon_Handler           [WEAK]
195                B       .
196                ENDP
197PendSV_Handler  PROC
198                EXPORT  PendSV_Handler             [WEAK]
199                B       .
200                ENDP
201SysTick_Handler PROC
202                EXPORT  SysTick_Handler            [WEAK]
203                B       .
204                ENDP
205
206Default_Handler PROC
207
208                EXPORT  WWDG_IRQHandler            [WEAK]
209                EXPORT  PVD_IRQHandler             [WEAK]
210                EXPORT  TAMPER_IRQHandler          [WEAK]
211                EXPORT  RTC_WKUP_IRQHandler        [WEAK]
212                EXPORT  FLASH_IRQHandler           [WEAK]
213                EXPORT  RCC_IRQHandler             [WEAK]
214                EXPORT  EXTI0_IRQHandler           [WEAK]
215                EXPORT  EXTI1_IRQHandler           [WEAK]
216                EXPORT  EXTI2_IRQHandler           [WEAK]
217                EXPORT  EXTI3_IRQHandler           [WEAK]
218                EXPORT  EXTI4_IRQHandler           [WEAK]
219                EXPORT  DMA_Channel1_IRQHandler    [WEAK]
220                EXPORT  DMA_Channel2_IRQHandler    [WEAK]
221                EXPORT  DMA_Channel3_IRQHandler    [WEAK]
222                EXPORT  DMA_Channel4_IRQHandler    [WEAK]
223                EXPORT  DMA_Channel5_IRQHandler    [WEAK]
224                EXPORT  DMA_Channel6_IRQHandler    [WEAK]
225                EXPORT  DMA_Channel7_IRQHandler    [WEAK]
226                EXPORT  DMA_Channel8_IRQHandler    [WEAK]
227                EXPORT  ADC_IRQHandler             [WEAK]
228                EXPORT  USB_HP_IRQHandler          [WEAK]
229                EXPORT  USB_LP_IRQHandler          [WEAK]
230                EXPORT  COMP_1_2_IRQHandler        [WEAK]
231                EXPORT  EXTI9_5_IRQHandler         [WEAK]
232                EXPORT  TIM1_BRK_IRQHandler        [WEAK]
233                EXPORT  TIM1_UP_IRQHandler         [WEAK]
234                EXPORT  TIM1_TRG_COM_IRQHandler    [WEAK]
235                EXPORT  TIM1_CC_IRQHandler         [WEAK]
236                EXPORT  TIM2_IRQHandler            [WEAK]
237                EXPORT  TIM3_IRQHandler            [WEAK]
238                EXPORT  TIM4_IRQHandler            [WEAK]
239                EXPORT  I2C1_EV_IRQHandler         [WEAK]
240                EXPORT  I2C1_ER_IRQHandler         [WEAK]
241                EXPORT  I2C2_EV_IRQHandler         [WEAK]
242                EXPORT  I2C2_ER_IRQHandler         [WEAK]
243                EXPORT  SPI1_IRQHandler            [WEAK]
244                EXPORT  SPI2_IRQHandler            [WEAK]
245                EXPORT  USART1_IRQHandler          [WEAK]
246                EXPORT  USART2_IRQHandler          [WEAK]
247                EXPORT  USART3_IRQHandler          [WEAK]
248                EXPORT  EXTI15_10_IRQHandler       [WEAK]
249                EXPORT  RTCAlarm_IRQHandler        [WEAK]
250                EXPORT  USBWakeUp_IRQHandler       [WEAK]
251                EXPORT  TIM8_BRK_IRQHandler        [WEAK]
252                EXPORT  TIM8_UP_IRQHandler         [WEAK]
253                EXPORT  TIM8_TRG_COM_IRQHandler    [WEAK]
254                EXPORT  TIM8_CC_IRQHandler         [WEAK]
255                EXPORT  UART4_IRQHandler           [WEAK]
256                EXPORT  UART5_IRQHandler           [WEAK]
257                EXPORT  LPUART_IRQHandler          [WEAK]
258                EXPORT  TIM5_IRQHandler            [WEAK]
259                EXPORT  TIM6_IRQHandler            [WEAK]
260                EXPORT  TIM7_IRQHandler            [WEAK]
261                EXPORT  CAN_TX_IRQHandler          [WEAK]
262                EXPORT  CAN_RX0_IRQHandler         [WEAK]
263                EXPORT  CAN_RX1_IRQHandler         [WEAK]
264                EXPORT  CAN_SCE_IRQHandler         [WEAK]
265                EXPORT  LPUART_WKUP_IRQHandler     [WEAK]
266                EXPORT  LPTIM_WKUP_IRQHandler      [WEAK]
267                EXPORT  LCD_IRQHandler             [WEAK]
268                EXPORT  SAC_IRQHandler             [WEAK]
269                EXPORT  MMU_IRQHandler             [WEAK]
270                EXPORT  TSC_IRQHandler             [WEAK]
271                EXPORT  RAMC_PERR_IRQHandler       [WEAK]
272                EXPORT  TIM9_IRQHandler            [WEAK]
273                EXPORT  UCDR_IRQHandler            [WEAK]
274
275WWDG_IRQHandler
276PVD_IRQHandler
277TAMPER_IRQHandler
278RTC_WKUP_IRQHandler
279FLASH_IRQHandler
280RCC_IRQHandler
281EXTI0_IRQHandler
282EXTI1_IRQHandler
283EXTI2_IRQHandler
284EXTI3_IRQHandler
285EXTI4_IRQHandler
286DMA_Channel1_IRQHandler
287DMA_Channel2_IRQHandler
288DMA_Channel3_IRQHandler
289DMA_Channel4_IRQHandler
290DMA_Channel5_IRQHandler
291DMA_Channel6_IRQHandler
292DMA_Channel7_IRQHandler
293DMA_Channel8_IRQHandler
294ADC_IRQHandler
295USB_HP_IRQHandler
296USB_LP_IRQHandler
297COMP_1_2_IRQHandler
298EXTI9_5_IRQHandler
299TIM1_BRK_IRQHandler
300TIM1_UP_IRQHandler
301TIM1_TRG_COM_IRQHandler
302TIM1_CC_IRQHandler
303TIM2_IRQHandler
304TIM3_IRQHandler
305TIM4_IRQHandler
306I2C1_EV_IRQHandler
307I2C1_ER_IRQHandler
308I2C2_EV_IRQHandler
309I2C2_ER_IRQHandler
310SPI1_IRQHandler
311SPI2_IRQHandler
312USART1_IRQHandler
313USART2_IRQHandler
314USART3_IRQHandler
315EXTI15_10_IRQHandler
316RTCAlarm_IRQHandler
317USBWakeUp_IRQHandler
318TIM8_BRK_IRQHandler
319TIM8_UP_IRQHandler
320TIM8_TRG_COM_IRQHandler
321TIM8_CC_IRQHandler
322UART4_IRQHandler
323UART5_IRQHandler
324LPUART_IRQHandler
325TIM5_IRQHandler
326TIM6_IRQHandler
327TIM7_IRQHandler
328CAN_TX_IRQHandler
329CAN_RX0_IRQHandler
330CAN_RX1_IRQHandler
331CAN_SCE_IRQHandler
332LPUART_WKUP_IRQHandler
333LPTIM_WKUP_IRQHandler
334LCD_IRQHandler
335SAC_IRQHandler
336MMU_IRQHandler
337TSC_IRQHandler
338RAMC_PERR_IRQHandler
339TIM9_IRQHandler
340UCDR_IRQHandler
341                B       .
342
343                ENDP
344
345                ALIGN
346
347;*******************************************************************************
348; User Stack and Heap initialization
349;*******************************************************************************
350                 IF      :DEF:__MICROLIB
351
352                 EXPORT  __initial_sp
353                 EXPORT  __heap_base
354                 EXPORT  __heap_limit
355
356                 ELSE
357
358                 IMPORT  __use_two_region_memory
359                 EXPORT  __user_initial_stackheap
360
361__user_initial_stackheap
362
363                 LDR     R0, =  Heap_Mem
364                 LDR     R1, =(Stack_Mem + Stack_Size)
365                 LDR     R2, = (Heap_Mem +  Heap_Size)
366                 LDR     R3, = Stack_Mem
367                 BX      LR
368
369                 ALIGN
370
371                 ENDIF
372
373                 END
374