]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_STM32F107_GCC_Rowley/STM32F10x_Startup.s
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / CORTEX_STM32F107_GCC_Rowley / STM32F10x_Startup.s
1 /*****************************************************************************\r
2  * Copyright (c) 2007 Rowley Associates Limited.                             *\r
3  *                                                                           *\r
4  * This file may be distributed under the terms of the License Agreement     *\r
5  * provided with this software.                                              *\r
6  *                                                                           *\r
7  * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE   *\r
8  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. *\r
9  *****************************************************************************/\r
10 \r
11 /*****************************************************************************\r
12  *                           Preprocessor Definitions\r
13  *                           ------------------------\r
14  *\r
15  * STARTUP_FROM_RESET\r
16  *\r
17  *   If defined, the program will startup from power-on/reset. If not defined\r
18  *   the program will just loop endlessly from power-on/reset.\r
19  *\r
20  *   This definition is not defined by default on this target because the\r
21  *   debugger is unable to reset this target and maintain control of it over the\r
22  *   JTAG interface. The advantage of doing this is that it allows the debugger\r
23  *   to reset the CPU and run programs from a known reset CPU state on each run.\r
24  *   It also acts as a safety net if you accidently download a program in FLASH\r
25  *   that crashes and prevents the debugger from taking control over JTAG\r
26  *   rendering the target unusable over JTAG. The obvious disadvantage of doing\r
27  *   this is that your application will not startup without the debugger.\r
28  *\r
29  *   We advise that on this target you keep STARTUP_FROM_RESET undefined whilst\r
30  *   you are developing and only define STARTUP_FROM_RESET when development is\r
31  *   complete.\r
32  *\r
33  *****************************************************************************/\r
34 \r
35   .global reset_handler\r
36 \r
37   .section .vectors, "ax"\r
38   .code 16\r
39   .align 0\r
40   .global _vectors\r
41 \r
42 .macro DEFAULT_ISR_HANDLER name=\r
43   .thumb_func\r
44   .weak \name\r
45 \name:\r
46 1: b 1b /* endless loop */\r
47 .endm\r
48 \r
49 .extern xPortPendSVHandler\r
50 .extern xPortSysTickHandler\r
51 .extern vPortSVCHandler\r
52 .extern vMAC_ISR;\r
53 \r
54 _vectors:\r
55   .word __stack_end__\r
56 #ifdef STARTUP_FROM_RESET\r
57   .word reset_handler\r
58 #else\r
59   .word reset_wait\r
60 #endif /* STARTUP_FROM_RESET */\r
61   .word NMIException\r
62   .word HardFaultException\r
63   .word MemManageException\r
64   .word BusFaultException\r
65   .word UsageFaultException\r
66   .word 0 // Reserved\r
67   .word 0 // Reserved\r
68   .word 0 // Reserved\r
69   .word 0 // Reserved\r
70   .word vPortSVCHandler\r
71   .word DebugMonitor\r
72   .word 0 // Reserved\r
73   .word xPortPendSVHandler\r
74   .word xPortSysTickHandler\r
75   .word WWDG_IRQHandler\r
76   .word PVD_IRQHandler\r
77   .word TAMPER_IRQHandler\r
78   .word RTC_IRQHandler\r
79   .word FLASH_IRQHandler\r
80   .word RCC_IRQHandler\r
81   .word EXTI0_IRQHandler\r
82   .word EXTI1_IRQHandler\r
83   .word EXTI2_IRQHandler\r
84   .word EXTI3_IRQHandler\r
85   .word EXTI4_IRQHandler\r
86   .word DMAChannel1_IRQHandler\r
87   .word DMAChannel2_IRQHandler\r
88   .word DMAChannel3_IRQHandler\r
89   .word DMAChannel4_IRQHandler\r
90   .word DMAChannel5_IRQHandler\r
91   .word DMAChannel6_IRQHandler\r
92   .word DMAChannel7_IRQHandler\r
93   .word ADC_IRQHandler\r
94   .word USB_HP_CAN_TX_IRQHandler\r
95   .word USB_LP_CAN_RX0_IRQHandler\r
96   .word CAN_RX1_IRQHandler\r
97   .word CAN_SCE_IRQHandler\r
98   .word EXTI9_5_IRQHandler\r
99   .word TIM1_BRK_IRQHandler\r
100   .word TIM1_UP_IRQHandler\r
101   .word TIM1_TRG_COM_IRQHandler\r
102   .word TIM1_CC_IRQHandler\r
103   .word TIM2_IRQHandler\r
104   .word TIM3_IRQHandler\r
105   .word TIM4_IRQHandler\r
106   .word I2C1_EV_IRQHandler\r
107   .word I2C1_ER_IRQHandler\r
108   .word I2C2_EV_IRQHandler\r
109   .word I2C2_ER_IRQHandler\r
110   .word SPI1_IRQHandler\r
111   .word SPI2_IRQHandler\r
112   .word USART1_IRQHandler\r
113   .word USART2_IRQHandler\r
114   .word USART3_IRQHandler\r
115   .word EXTI15_10_IRQHandler\r
116   .word RTCAlarm_IRQHandler\r
117   .word USBWakeUp_IRQHandler\r
118   .word TIM8_BRK_IRQHandler\r
119   .word TIM8_UP_IRQHandler\r
120   .word TIM8_TRG_COM_IRQHandler\r
121   .word TIM8_CC_IRQHandler\r
122   .word ADC3_IRQHandler\r
123   .word FSMC_IRQHandler\r
124   .word SDIO_IRQHandler\r
125   .word TIM5_IRQHandler\r
126   .word SPI3_IRQHandler\r
127   .word UART4_IRQHandler\r
128   .word UART5_IRQHandler\r
129   .word TIM6_IRQHandler\r
130   .word TIM7_IRQHandler\r
131   .word DMA2_Channel1_IRQHandler\r
132   .word DMA2_Channel2_IRQHandler\r
133   .word DMA2_Channel3_IRQHandler\r
134   .word DMA2_Channel4_5_IRQHandler\r
135   .word vMAC_ISR\r
136   .word vMAC_ISR\r
137 \r
138   .section .init, "ax"\r
139   .thumb_func\r
140 \r
141   reset_handler:\r
142 #ifndef __FLASH_BUILD\r
143   /* If this is a RAM build, configure vector table offset register to point\r
144      to the RAM vector table. */\r
145   ldr r0, =0xE000ED08\r
146   ldr r1, =_vectors\r
147   str r1, [r0]\r
148 #endif\r
149   b _start\r
150 \r
151 DEFAULT_ISR_HANDLER HardFaultException\r
152 DEFAULT_ISR_HANDLER NMIException\r
153 DEFAULT_ISR_HANDLER MemManageException\r
154 DEFAULT_ISR_HANDLER BusFaultException\r
155 DEFAULT_ISR_HANDLER UsageFaultException\r
156 DEFAULT_ISR_HANDLER SVCHandler\r
157 DEFAULT_ISR_HANDLER DebugMonitor\r
158 DEFAULT_ISR_HANDLER PendSV\r
159 DEFAULT_ISR_HANDLER SysTickHandler\r
160 DEFAULT_ISR_HANDLER WWDG_IRQHandler\r
161 DEFAULT_ISR_HANDLER PVD_IRQHandler\r
162 DEFAULT_ISR_HANDLER TAMPER_IRQHandler\r
163 DEFAULT_ISR_HANDLER RTC_IRQHandler\r
164 DEFAULT_ISR_HANDLER FLASH_IRQHandler\r
165 DEFAULT_ISR_HANDLER RCC_IRQHandler\r
166 DEFAULT_ISR_HANDLER EXTI0_IRQHandler\r
167 DEFAULT_ISR_HANDLER EXTI1_IRQHandler\r
168 DEFAULT_ISR_HANDLER EXTI2_IRQHandler\r
169 DEFAULT_ISR_HANDLER EXTI3_IRQHandler\r
170 DEFAULT_ISR_HANDLER EXTI4_IRQHandler\r
171 DEFAULT_ISR_HANDLER DMAChannel1_IRQHandler\r
172 DEFAULT_ISR_HANDLER DMAChannel2_IRQHandler\r
173 DEFAULT_ISR_HANDLER DMAChannel3_IRQHandler\r
174 DEFAULT_ISR_HANDLER DMAChannel4_IRQHandler\r
175 DEFAULT_ISR_HANDLER DMAChannel5_IRQHandler\r
176 DEFAULT_ISR_HANDLER DMAChannel6_IRQHandler\r
177 DEFAULT_ISR_HANDLER DMAChannel7_IRQHandler\r
178 DEFAULT_ISR_HANDLER ADC_IRQHandler\r
179 DEFAULT_ISR_HANDLER USB_HP_CAN_TX_IRQHandler\r
180 DEFAULT_ISR_HANDLER USB_LP_CAN_RX0_IRQHandler\r
181 DEFAULT_ISR_HANDLER CAN_RX1_IRQHandler\r
182 DEFAULT_ISR_HANDLER CAN_SCE_IRQHandler\r
183 DEFAULT_ISR_HANDLER EXTI9_5_IRQHandler\r
184 DEFAULT_ISR_HANDLER TIM1_BRK_IRQHandler\r
185 DEFAULT_ISR_HANDLER TIM1_UP_IRQHandler\r
186 DEFAULT_ISR_HANDLER TIM1_TRG_COM_IRQHandler\r
187 DEFAULT_ISR_HANDLER TIM1_CC_IRQHandler\r
188 DEFAULT_ISR_HANDLER TIM2_IRQHandler\r
189 DEFAULT_ISR_HANDLER TIM3_IRQHandler\r
190 DEFAULT_ISR_HANDLER TIM4_IRQHandler\r
191 DEFAULT_ISR_HANDLER I2C1_EV_IRQHandler\r
192 DEFAULT_ISR_HANDLER I2C1_ER_IRQHandler\r
193 DEFAULT_ISR_HANDLER I2C2_EV_IRQHandler\r
194 DEFAULT_ISR_HANDLER I2C2_ER_IRQHandler\r
195 DEFAULT_ISR_HANDLER SPI1_IRQHandler\r
196 DEFAULT_ISR_HANDLER SPI2_IRQHandler\r
197 DEFAULT_ISR_HANDLER USART1_IRQHandler\r
198 DEFAULT_ISR_HANDLER USART2_IRQHandler\r
199 DEFAULT_ISR_HANDLER USART3_IRQHandler\r
200 DEFAULT_ISR_HANDLER EXTI15_10_IRQHandler\r
201 DEFAULT_ISR_HANDLER RTCAlarm_IRQHandler\r
202 DEFAULT_ISR_HANDLER USBWakeUp_IRQHandler\r
203 DEFAULT_ISR_HANDLER TIM8_BRK_IRQHandler\r
204 DEFAULT_ISR_HANDLER TIM8_UP_IRQHandler\r
205 DEFAULT_ISR_HANDLER TIM8_TRG_COM_IRQHandler\r
206 DEFAULT_ISR_HANDLER TIM8_CC_IRQHandler\r
207 DEFAULT_ISR_HANDLER ADC3_IRQHandler\r
208 DEFAULT_ISR_HANDLER FSMC_IRQHandler\r
209 DEFAULT_ISR_HANDLER SDIO_IRQHandler\r
210 DEFAULT_ISR_HANDLER TIM5_IRQHandler\r
211 DEFAULT_ISR_HANDLER SPI3_IRQHandler\r
212 DEFAULT_ISR_HANDLER UART4_IRQHandler\r
213 DEFAULT_ISR_HANDLER UART5_IRQHandler\r
214 DEFAULT_ISR_HANDLER TIM6_IRQHandler\r
215 DEFAULT_ISR_HANDLER TIM7_IRQHandler\r
216 DEFAULT_ISR_HANDLER DMA2_Channel1_IRQHandler\r
217 DEFAULT_ISR_HANDLER DMA2_Channel2_IRQHandler\r
218 DEFAULT_ISR_HANDLER DMA2_Channel3_IRQHandler\r
219 DEFAULT_ISR_HANDLER DMA2_Channel4_5_IRQHandler\r
220 \r
221 #ifndef STARTUP_FROM_RESET\r
222 DEFAULT_ISR_HANDLER reset_wait\r
223 #endif /* STARTUP_FROM_RESET */\r
224 \r
225   // STM32 library requires these\r
226   .global __WFI\r
227   .global __WFE\r
228   .global __SEV\r
229   .global __ISB\r
230   .global __DSB\r
231   .global __DMB\r
232   .global __SVC\r
233   .global __MRS_CONTROL\r
234   .global __MSR_CONTROL\r
235   .global __MRS_PSP\r
236   .global __MSR_PSP\r
237   .global __MRS_MSP\r
238   .global __MSR_MSP\r
239   .global __SETPRIMASK\r
240   .global __RESETPRIMASK\r
241   .global __SETFAULTMASK\r
242   .global __RESETFAULTMASK\r
243   .global __BASEPRICONFIG\r
244   .global __GetBASEPRI\r
245   .global __REV_HalfWord\r
246   .global __REV_Word\r
247 \r
248 .thumb_func\r
249 __WFI:\r
250   wfi\r
251   bx r14\r
252 .thumb_func\r
253 __WFE:\r
254   wfe\r
255   bx r14\r
256 .thumb_func\r
257 __SEV:\r
258   sev\r
259   bx r14\r
260 .thumb_func\r
261 __ISB:\r
262   isb\r
263   bx r14\r
264 .thumb_func\r
265 __DSB:\r
266   dsb\r
267   bx r14\r
268 .thumb_func\r
269 __DMB:\r
270   dmb\r
271   bx r14\r
272 .thumb_func\r
273 __SVC:\r
274   svc 0x01\r
275   bx r14\r
276 .thumb_func\r
277 __MRS_CONTROL:\r
278   mrs r0, control\r
279   bx r14\r
280 .thumb_func\r
281 __MSR_CONTROL:\r
282   msr control, r0\r
283   isb\r
284   bx r14\r
285 .thumb_func\r
286 __MRS_PSP:\r
287   mrs r0, psp\r
288   bx r14\r
289 .thumb_func\r
290 __MSR_PSP:\r
291   msr psp, r0\r
292   bx r14\r
293 .thumb_func\r
294 __MRS_MSP:\r
295   mrs r0, msp\r
296   bx r14\r
297 .thumb_func\r
298 __MSR_MSP:\r
299   msr msp, r0\r
300   bx r14\r
301 .thumb_func\r
302 __SETPRIMASK:\r
303   cpsid i\r
304   bx r14\r
305 .thumb_func\r
306 __RESETPRIMASK:\r
307   cpsie i\r
308   bx r14\r
309 .thumb_func\r
310 __SETFAULTMASK:\r
311   cpsid f\r
312   bx r14\r
313 .thumb_func\r
314 __RESETFAULTMASK:\r
315   cpsie f\r
316   bx r14\r
317 .thumb_func\r
318 __BASEPRICONFIG:\r
319   msr basepri, r0\r
320   bx r14\r
321 .thumb_func\r
322 __GetBASEPRI:\r
323   mrs r0, basepri_max\r
324   bx r14\r
325 .thumb_func\r
326 __REV_HalfWord:\r
327   rev16 r0, r0\r
328   bx r14\r
329 .thumb_func\r
330 __REV_Word:\r
331   rev r0, r0\r
332   bx r14\r
333 \r
334 \r
335 \r
336 \r