1
2
3  .syntax unified
4  .cpu cortex-m3
5  .fpu softvfp
6  .thumb
7
8.global g_pfnVectors
9.global Default_Handler
10
11/* start address for the initialization values of the .data section.
12defined in linker script */
13.word _sidata
14/* start address for the .data section. defined in linker script */
15.word _sdata
16/* end address for the .data section. defined in linker script */
17.word _edata
18/* start address for the .bss section. defined in linker script */
19.word _sbss
20/* end address for the .bss section. defined in linker script */
21.word _ebss
22
23.equ  BootRAM, 0xF108F85F
24/**
25 * @brief  This is the code that gets called when the processor first
26 *          starts execution following a reset event. Only the absolutely
27 *          necessary set is performed, after which the application
28 *          supplied main() routine is called.
29 * @param  None
30 * @retval : None
31*/
32
33  .section .text.Reset_Handler
34  .weak Reset_Handler
35  .type Reset_Handler, %function
36Reset_Handler:
37
38/* Copy the data segment initializers from flash to SRAM */
39  ldr r0, =_sdata
40  ldr r1, =_edata
41  ldr r2, =_sidata
42  movs r3, #0
43  b LoopCopyDataInit
44
45CopyDataInit:
46  ldr r4, [r2, r3]
47  str r4, [r0, r3]
48  adds r3, r3, #4
49
50LoopCopyDataInit:
51  adds r4, r0, r3
52  cmp r4, r1
53  bcc CopyDataInit
54
55/* Zero fill the bss segment. */
56  ldr r2, =_sbss
57  ldr r4, =_ebss
58  movs r3, #0
59  b LoopFillZerobss
60
61FillZerobss:
62  str  r3, [r2]
63  adds r2, r2, #4
64
65LoopFillZerobss:
66  cmp r2, r4
67  bcc FillZerobss
68/*unlock*/
69  ldr r0,=0x400210F0
70  mov r1,#0x00000001
71  str r1,[r0]
72  ldr r2,=0x40016C00
73  ldr r3,=0xa7d93a86
74  str r3,[r2]
75  ldr r3,=0xab12dfcd
76  str r3,[r2]
77  ldr r3,=0xcded3526
78  str r3,[r2]
79  ldr r3,=0x200183FF
80  str r3,[r2,#0x18]
81  ldr r4,=0x4002228c
82  ldr r5,=0xa5a5a5a5
83  str r5,[r4]
84/*lock*/
85  ldr r2,=0x400210f0
86  ldr r3,=0x00000000
87  str r3,[r2]
88  ldr r2,=0x40016c00
89  ldr r3,=0x5826c579
90  str r3,[r2]
91  ldr r3,=0x54ed2032
92  str r3,[r2]
93  ldr r3,=0x3212cad9
94  str r3,[r2]
95  ldr r2,=0x4002228c
96  ldr r3,=0x5a5a5a5a
97  str r3,[r2]
98
99  mov r1,#0x00000000
100
101/* Call the clock system intitialization function.*/
102    bl  SystemInit
103/* Call static constructors */
104    bl __libc_init_array
105/* Call the application's entry point.*/
106  bl entry
107  bx lr
108.size Reset_Handler, .-Reset_Handler
109
110/**
111 * @brief  This is the code that gets called when the processor receives an
112 *         unexpected interrupt.  This simply enters an infinite loop, preserving
113 *         the system state for examination by a debugger.
114 *
115 * @param  None
116 * @retval : None
117*/
118    .section .text.Default_Handler,"ax",%progbits
119Default_Handler:
120Infinite_Loop:
121  b Infinite_Loop
122  .size Default_Handler, .-Default_Handler
123/******************************************************************************
124*
125* The minimal vector table for a Cortex M3.  Note that the proper constructs
126* must be placed on this to ensure that it ends up at physical address
127* 0x0000.0000.
128*
129******************************************************************************/
130  .section .isr_vector,"a",%progbits
131  .type g_pfnVectors, %object
132  .size g_pfnVectors, .-g_pfnVectors
133
134
135g_pfnVectors:
136
137  .word _estack
138  .word Reset_Handler
139  .word NMI_Handler
140  .word HardFault_Handler
141  .word MemManage_Handler
142  .word BusFault_Handler
143  .word UsageFault_Handler
144  .word 0
145  .word 0
146  .word 0
147  .word 0
148  .word SVC_Handler
149  .word DebugMon_Handler
150  .word 0
151  .word PendSV_Handler
152  .word SysTick_Handler
153  .word WWDG_IRQHandler
154  .word PVD_IRQHandler
155  .word TAMPER_IRQHandler
156  .word RTC_IRQHandler
157  .word FLASH_IRQHandler
158  .word RCC_IRQHandler
159  .word EXTI0_IRQHandler
160  .word EXTI1_IRQHandler
161  .word EXTI2_IRQHandler
162  .word EXTI3_IRQHandler
163  .word EXTI4_IRQHandler
164  .word DMA1_Channel1_IRQHandler
165  .word DMA1_Channel2_IRQHandler
166  .word DMA1_Channel3_IRQHandler
167  .word DMA1_Channel4_IRQHandler
168  .word DMA1_Channel5_IRQHandler
169  .word DMA1_Channel6_IRQHandler
170  .word DMA1_Channel7_IRQHandler
171  .word ADC1_2_IRQHandler
172  .word USB_HP_CAN1_TX_IRQHandler
173  .word USB_LP_CAN1_RX0_IRQHandler
174  .word CAN1_RX1_IRQHandler
175  .word CAN1_SCE_IRQHandler
176  .word EXTI9_5_IRQHandler
177  .word TIM1_BRK_IRQHandler
178  .word TIM1_UP_IRQHandler
179  .word TIM1_TRG_COM_IRQHandler
180  .word TIM1_CC_IRQHandler
181  .word TIM2_IRQHandler
182  .word TIM3_IRQHandler
183  .word TIM4_IRQHandler
184  .word I2C1_EV_IRQHandler
185  .word I2C1_ER_IRQHandler
186  .word I2C2_EV_IRQHandler
187  .word I2C2_ER_IRQHandler
188  .word SPI1_IRQHandler
189  .word SPI2_IRQHandler
190  .word USART1_IRQHandler
191  .word USART2_IRQHandler
192  .word USART3_IRQHandler
193  .word EXTI15_10_IRQHandler
194  .word RTC_Alarm_IRQHandler
195  .word USBWakeUp_IRQHandler
196  .word 0
197  .word 0
198  .word 0
199  .word 0
200  .word 0
201  .word 0
202  .word 0
203  .word BootRAM
204
205/*******************************************************************************
206*
207* Provide weak aliases for each Exception handler to the Default_Handler.
208* As they are weak aliases, any function with the same name will override
209* this definition.
210*
211*******************************************************************************/
212
213  .weak NMI_Handler
214  .thumb_set NMI_Handler,Default_Handler
215
216  .weak HardFault_Handler
217  .thumb_set HardFault_Handler,Default_Handler
218
219  .weak MemManage_Handler
220  .thumb_set MemManage_Handler,Default_Handler
221
222  .weak BusFault_Handler
223  .thumb_set BusFault_Handler,Default_Handler
224
225  .weak UsageFault_Handler
226  .thumb_set UsageFault_Handler,Default_Handler
227
228  .weak SVC_Handler
229  .thumb_set SVC_Handler,Default_Handler
230
231  .weak DebugMon_Handler
232  .thumb_set DebugMon_Handler,Default_Handler
233
234  .weak PendSV_Handler
235  .thumb_set PendSV_Handler,Default_Handler
236
237  .weak SysTick_Handler
238  .thumb_set SysTick_Handler,Default_Handler
239
240  .weak WWDG_IRQHandler
241  .thumb_set WWDG_IRQHandler,Default_Handler
242
243  .weak PVD_IRQHandler
244  .thumb_set PVD_IRQHandler,Default_Handler
245
246  .weak TAMPER_IRQHandler
247  .thumb_set TAMPER_IRQHandler,Default_Handler
248
249  .weak RTC_IRQHandler
250  .thumb_set RTC_IRQHandler,Default_Handler
251
252  .weak FLASH_IRQHandler
253  .thumb_set FLASH_IRQHandler,Default_Handler
254
255  .weak RCC_IRQHandler
256  .thumb_set RCC_IRQHandler,Default_Handler
257
258  .weak EXTI0_IRQHandler
259  .thumb_set EXTI0_IRQHandler,Default_Handler
260
261  .weak EXTI1_IRQHandler
262  .thumb_set EXTI1_IRQHandler,Default_Handler
263
264  .weak EXTI2_IRQHandler
265  .thumb_set EXTI2_IRQHandler,Default_Handler
266
267  .weak EXTI3_IRQHandler
268  .thumb_set EXTI3_IRQHandler,Default_Handler
269
270  .weak EXTI4_IRQHandler
271  .thumb_set EXTI4_IRQHandler,Default_Handler
272
273  .weak DMA1_Channel1_IRQHandler
274  .thumb_set DMA1_Channel1_IRQHandler,Default_Handler
275
276  .weak DMA1_Channel2_IRQHandler
277  .thumb_set DMA1_Channel2_IRQHandler,Default_Handler
278
279  .weak DMA1_Channel3_IRQHandler
280  .thumb_set DMA1_Channel3_IRQHandler,Default_Handler
281
282  .weak DMA1_Channel4_IRQHandler
283  .thumb_set DMA1_Channel4_IRQHandler,Default_Handler
284
285  .weak DMA1_Channel5_IRQHandler
286  .thumb_set DMA1_Channel5_IRQHandler,Default_Handler
287
288  .weak DMA1_Channel6_IRQHandler
289  .thumb_set DMA1_Channel6_IRQHandler,Default_Handler
290
291  .weak DMA1_Channel7_IRQHandler
292  .thumb_set DMA1_Channel7_IRQHandler,Default_Handler
293
294  .weak ADC1_2_IRQHandler
295  .thumb_set ADC1_2_IRQHandler,Default_Handler
296
297  .weak USB_HP_CAN1_TX_IRQHandler
298  .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler
299
300  .weak USB_LP_CAN1_RX0_IRQHandler
301  .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler
302
303  .weak CAN1_RX1_IRQHandler
304  .thumb_set CAN1_RX1_IRQHandler,Default_Handler
305
306  .weak CAN1_SCE_IRQHandler
307  .thumb_set CAN1_SCE_IRQHandler,Default_Handler
308
309  .weak EXTI9_5_IRQHandler
310  .thumb_set EXTI9_5_IRQHandler,Default_Handler
311
312  .weak TIM1_BRK_IRQHandler
313  .thumb_set TIM1_BRK_IRQHandler,Default_Handler
314
315  .weak TIM1_UP_IRQHandler
316  .thumb_set TIM1_UP_IRQHandler,Default_Handler
317
318  .weak TIM1_TRG_COM_IRQHandler
319  .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler
320
321  .weak TIM1_CC_IRQHandler
322  .thumb_set TIM1_CC_IRQHandler,Default_Handler
323
324  .weak TIM2_IRQHandler
325  .thumb_set TIM2_IRQHandler,Default_Handler
326
327  .weak TIM3_IRQHandler
328  .thumb_set TIM3_IRQHandler,Default_Handler
329
330  .weak TIM4_IRQHandler
331  .thumb_set TIM4_IRQHandler,Default_Handler
332
333  .weak I2C1_EV_IRQHandler
334  .thumb_set I2C1_EV_IRQHandler,Default_Handler
335
336  .weak I2C1_ER_IRQHandler
337  .thumb_set I2C1_ER_IRQHandler,Default_Handler
338
339  .weak I2C2_EV_IRQHandler
340  .thumb_set I2C2_EV_IRQHandler,Default_Handler
341
342  .weak I2C2_ER_IRQHandler
343  .thumb_set I2C2_ER_IRQHandler,Default_Handler
344
345  .weak SPI1_IRQHandler
346  .thumb_set SPI1_IRQHandler,Default_Handler
347
348  .weak SPI2_IRQHandler
349  .thumb_set SPI2_IRQHandler,Default_Handler
350
351  .weak USART1_IRQHandler
352  .thumb_set USART1_IRQHandler,Default_Handler
353
354  .weak USART2_IRQHandler
355  .thumb_set USART2_IRQHandler,Default_Handler
356
357  .weak USART3_IRQHandler
358  .thumb_set USART3_IRQHandler,Default_Handler
359
360  .weak EXTI15_10_IRQHandler
361  .thumb_set EXTI15_10_IRQHandler,Default_Handler
362
363  .weak RTC_Alarm_IRQHandler
364  .thumb_set RTC_Alarm_IRQHandler,Default_Handler
365
366  .weak USBWakeUp_IRQHandler
367  .thumb_set USBWakeUp_IRQHandler,Default_Handler
368
369
370