]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_STM32F103_GCC_Rowley/STM32F10x_Startup.s
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
[freertos] / FreeRTOS / Demo / CORTEX_STM32F103_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 .extern xPortPendSVHandler\r
36 .extern xPortSysTickHandler\r
37 .extern vPortSVCHandler\r
38 \r
39   .global reset_handler\r
40 \r
41   .section .vectors, "ax"\r
42   .code 16\r
43   .align 0\r
44   .global _vectors\r
45 \r
46 .macro DEFAULT_ISR_HANDLER name=\r
47   .thumb_func\r
48   .weak \name\r
49 \name:\r
50 1: b 1b /* endless loop */\r
51 .endm\r
52 \r
53 _vectors:\r
54   .word __stack_end__\r
55 #ifdef STARTUP_FROM_RESET\r
56   .word reset_handler\r
57 #else\r
58   .word reset_wait\r
59 #endif /* STARTUP_FROM_RESET */\r
60   .word NMIException\r
61   .word HardFaultException\r
62   .word MemManageException \r
63   .word BusFaultException\r
64   .word UsageFaultException\r
65   .word 0 // Reserved\r
66   .word 0 // Reserved\r
67   .word 0 // Reserved\r
68   .word 0 // Reserved\r
69   .word vPortSVCHandler\r
70   .word DebugMonitor\r
71   .word 0 // Reserved\r
72   .word xPortPendSVHandler\r
73   .word xPortSysTickHandler\r
74   .word WWDG_IRQHandler\r
75   .word PVD_IRQHandler\r
76   .word TAMPER_IRQHandler\r
77   .word RTC_IRQHandler\r
78   .word FLASH_IRQHandler\r
79   .word RCC_IRQHandler\r
80   .word EXTI0_IRQHandler\r
81   .word EXTI1_IRQHandler\r
82   .word EXTI2_IRQHandler\r
83   .word EXTI3_IRQHandler\r
84   .word EXTI4_IRQHandler\r
85   .word DMAChannel1_IRQHandler\r
86   .word DMAChannel2_IRQHandler\r
87   .word DMAChannel3_IRQHandler\r
88   .word DMAChannel4_IRQHandler\r
89   .word DMAChannel5_IRQHandler\r
90   .word DMAChannel6_IRQHandler\r
91   .word DMAChannel7_IRQHandler\r
92   .word ADC_IRQHandler\r
93   .word USB_HP_CAN_TX_IRQHandler\r
94   .word USB_LP_CAN_RX0_IRQHandler\r
95   .word CAN_RX1_IRQHandler\r
96   .word CAN_SCE_IRQHandler\r
97   .word EXTI9_5_IRQHandler\r
98   .word TIM1_BRK_IRQHandler\r
99   .word TIM1_UP_IRQHandler\r
100   .word TIM1_TRG_COM_IRQHandler\r
101   .word TIM1_CC_IRQHandler\r
102   .word TIM2_IRQHandler\r
103   .word TIM3_IRQHandler\r
104   .word TIM4_IRQHandler  \r
105   .word I2C1_EV_IRQHandler\r
106   .word I2C1_ER_IRQHandler\r
107   .word I2C2_EV_IRQHandler\r
108   .word I2C2_ER_IRQHandler\r
109   .word SPI1_IRQHandler\r
110   .word SPI2_IRQHandler\r
111   .word USART1_IRQHandler\r
112   .word USART2_IRQHandler\r
113   .word USART3_IRQHandler\r
114   .word EXTI15_10_IRQHandler\r
115   .word RTCAlarm_IRQHandler\r
116   .word USBWakeUp_IRQHandler\r
117   .word TIM8_BRK_IRQHandler\r
118   .word TIM8_UP_IRQHandler\r
119   .word TIM8_TRG_COM_IRQHandler\r
120   .word TIM8_CC_IRQHandler\r
121   .word ADC3_IRQHandler\r
122   .word FSMC_IRQHandler\r
123   .word SDIO_IRQHandler\r
124   .word TIM5_IRQHandler\r
125   .word SPI3_IRQHandler\r
126   .word UART4_IRQHandler\r
127   .word UART5_IRQHandler\r
128   .word TIM6_IRQHandler\r
129   .word TIM7_IRQHandler\r
130   .word DMA2_Channel1_IRQHandler\r
131   .word DMA2_Channel2_IRQHandler\r
132   .word DMA2_Channel3_IRQHandler\r
133   .word DMA2_Channel4_5_IRQHandler\r
134 \r
135   .section .init, "ax"\r
136   .thumb_func\r
137 \r
138   reset_handler:\r
139 #ifndef __FLASH_BUILD\r
140   /* If this is a RAM build, configure vector table offset register to point \r
141      to the RAM vector table. */\r
142   ldr r0, =0xE000ED08\r
143   ldr r1, =_vectors\r
144   str r1, [r0]\r
145 #endif\r
146   b _start\r
147 \r
148 DEFAULT_ISR_HANDLER NMIException\r
149 DEFAULT_ISR_HANDLER HardFaultException \r
150 DEFAULT_ISR_HANDLER MemManageException \r
151 DEFAULT_ISR_HANDLER BusFaultException \r
152 DEFAULT_ISR_HANDLER UsageFaultException \r
153 DEFAULT_ISR_HANDLER SVCHandler \r
154 DEFAULT_ISR_HANDLER DebugMonitor  \r
155 DEFAULT_ISR_HANDLER PendSV \r
156 DEFAULT_ISR_HANDLER SysTickHandler \r
157 DEFAULT_ISR_HANDLER WWDG_IRQHandler \r
158 DEFAULT_ISR_HANDLER PVD_IRQHandler \r
159 DEFAULT_ISR_HANDLER TAMPER_IRQHandler \r
160 DEFAULT_ISR_HANDLER RTC_IRQHandler \r
161 DEFAULT_ISR_HANDLER FLASH_IRQHandler \r
162 DEFAULT_ISR_HANDLER RCC_IRQHandler \r
163 DEFAULT_ISR_HANDLER EXTI0_IRQHandler \r
164 DEFAULT_ISR_HANDLER EXTI1_IRQHandler \r
165 DEFAULT_ISR_HANDLER EXTI2_IRQHandler \r
166 DEFAULT_ISR_HANDLER EXTI3_IRQHandler \r
167 DEFAULT_ISR_HANDLER EXTI4_IRQHandler \r
168 DEFAULT_ISR_HANDLER DMAChannel1_IRQHandler \r
169 DEFAULT_ISR_HANDLER DMAChannel2_IRQHandler \r
170 DEFAULT_ISR_HANDLER DMAChannel3_IRQHandler \r
171 DEFAULT_ISR_HANDLER DMAChannel4_IRQHandler \r
172 DEFAULT_ISR_HANDLER DMAChannel5_IRQHandler \r
173 DEFAULT_ISR_HANDLER DMAChannel6_IRQHandler \r
174 DEFAULT_ISR_HANDLER DMAChannel7_IRQHandler \r
175 DEFAULT_ISR_HANDLER ADC_IRQHandler \r
176 DEFAULT_ISR_HANDLER USB_HP_CAN_TX_IRQHandler \r
177 DEFAULT_ISR_HANDLER USB_LP_CAN_RX0_IRQHandler \r
178 DEFAULT_ISR_HANDLER CAN_RX1_IRQHandler \r
179 DEFAULT_ISR_HANDLER CAN_SCE_IRQHandler \r
180 DEFAULT_ISR_HANDLER EXTI9_5_IRQHandler \r
181 DEFAULT_ISR_HANDLER TIM1_BRK_IRQHandler \r
182 DEFAULT_ISR_HANDLER TIM1_UP_IRQHandler \r
183 DEFAULT_ISR_HANDLER TIM1_TRG_COM_IRQHandler \r
184 DEFAULT_ISR_HANDLER TIM1_CC_IRQHandler \r
185 DEFAULT_ISR_HANDLER TIM2_IRQHandler \r
186 DEFAULT_ISR_HANDLER TIM3_IRQHandler \r
187 DEFAULT_ISR_HANDLER TIM4_IRQHandler \r
188 DEFAULT_ISR_HANDLER I2C1_EV_IRQHandler \r
189 DEFAULT_ISR_HANDLER I2C1_ER_IRQHandler \r
190 DEFAULT_ISR_HANDLER I2C2_EV_IRQHandler \r
191 DEFAULT_ISR_HANDLER I2C2_ER_IRQHandler \r
192 DEFAULT_ISR_HANDLER SPI1_IRQHandler \r
193 DEFAULT_ISR_HANDLER SPI2_IRQHandler \r
194 DEFAULT_ISR_HANDLER USART1_IRQHandler \r
195 DEFAULT_ISR_HANDLER USART2_IRQHandler \r
196 DEFAULT_ISR_HANDLER USART3_IRQHandler \r
197 DEFAULT_ISR_HANDLER EXTI15_10_IRQHandler \r
198 DEFAULT_ISR_HANDLER RTCAlarm_IRQHandler \r
199 DEFAULT_ISR_HANDLER USBWakeUp_IRQHandler \r
200 DEFAULT_ISR_HANDLER TIM8_BRK_IRQHandler\r
201 DEFAULT_ISR_HANDLER TIM8_UP_IRQHandler\r
202 DEFAULT_ISR_HANDLER TIM8_TRG_COM_IRQHandler\r
203 DEFAULT_ISR_HANDLER TIM8_CC_IRQHandler\r
204 DEFAULT_ISR_HANDLER ADC3_IRQHandler\r
205 DEFAULT_ISR_HANDLER FSMC_IRQHandler\r
206 DEFAULT_ISR_HANDLER SDIO_IRQHandler\r
207 DEFAULT_ISR_HANDLER TIM5_IRQHandler\r
208 DEFAULT_ISR_HANDLER SPI3_IRQHandler\r
209 DEFAULT_ISR_HANDLER UART4_IRQHandler\r
210 DEFAULT_ISR_HANDLER UART5_IRQHandler\r
211 DEFAULT_ISR_HANDLER TIM6_IRQHandler\r
212 DEFAULT_ISR_HANDLER TIM7_IRQHandler\r
213 DEFAULT_ISR_HANDLER DMA2_Channel1_IRQHandler\r
214 DEFAULT_ISR_HANDLER DMA2_Channel2_IRQHandler\r
215 DEFAULT_ISR_HANDLER DMA2_Channel3_IRQHandler\r
216 DEFAULT_ISR_HANDLER DMA2_Channel4_5_IRQHandler\r
217 \r
218 #ifndef STARTUP_FROM_RESET\r
219 DEFAULT_ISR_HANDLER reset_wait\r
220 #endif /* STARTUP_FROM_RESET */\r
221 \r
222   // STM32 library requires these\r
223   .global __WFI\r
224   .global __WFE\r
225   .global __SEV\r
226   .global __ISB\r
227   .global __DSB\r
228   .global __DMB\r
229   .global __SVC\r
230   .global __MRS_CONTROL\r
231   .global __MSR_CONTROL\r
232   .global __MRS_PSP\r
233   .global __MSR_PSP\r
234   .global __MRS_MSP\r
235   .global __MSR_MSP   \r
236   .global __SETPRIMASK\r
237   .global __RESETPRIMASK\r
238   .global __SETFAULTMASK\r
239   .global __RESETFAULTMASK\r
240   .global __BASEPRICONFIG\r
241   .global __GetBASEPRI\r
242   .global __REV_HalfWord\r
243   .global __REV_Word\r
244 \r
245 .thumb_func\r
246 __WFI: \r
247   wfi\r
248   bx r14\r
249 .thumb_func\r
250 __WFE:\r
251   wfe\r
252   bx r14\r
253 .thumb_func\r
254 __SEV:\r
255   sev\r
256   bx r14\r
257 .thumb_func\r
258 __ISB:\r
259   isb\r
260   bx r14\r
261 .thumb_func\r
262 __DSB:\r
263   dsb\r
264   bx r14\r
265 .thumb_func\r
266 __DMB:\r
267   dmb\r
268   bx r14\r
269 .thumb_func\r
270 __SVC:\r
271   svc 0x01\r
272   bx r14\r
273 .thumb_func\r
274 __MRS_CONTROL:\r
275   mrs r0, control\r
276   bx r14\r
277 .thumb_func\r
278 __MSR_CONTROL:\r
279   msr control, r0\r
280   isb\r
281   bx r14\r
282 .thumb_func\r
283 __MRS_PSP:\r
284   mrs r0, psp\r
285   bx r14\r
286 .thumb_func\r
287 __MSR_PSP: \r
288   msr psp, r0\r
289   bx r14\r
290 .thumb_func\r
291 __MRS_MSP:\r
292   mrs r0, msp\r
293   bx r14\r
294 .thumb_func\r
295 __MSR_MSP: \r
296   msr msp, r0\r
297   bx r14\r
298 .thumb_func\r
299 __SETPRIMASK:\r
300   cpsid i\r
301   bx r14\r
302 .thumb_func\r
303 __RESETPRIMASK:\r
304   cpsie i\r
305   bx r14\r
306 .thumb_func\r
307 __SETFAULTMASK:\r
308   cpsid f\r
309   bx r14\r
310 .thumb_func\r
311 __RESETFAULTMASK:\r
312   cpsie f\r
313   bx r14\r
314 .thumb_func\r
315 __BASEPRICONFIG:\r
316   msr basepri, r0\r
317   bx r14\r
318 .thumb_func\r
319 __GetBASEPRI:\r
320   mrs r0, basepri_max\r
321   bx r14\r
322 .thumb_func\r
323 __REV_HalfWord:\r
324   rev16 r0, r0\r
325   bx r14\r
326 .thumb_func\r
327 __REV_Word:  \r
328   rev r0, r0\r
329   bx r14\r
330       \r
331 \r
332 \r
333 \r
334 \r
335 \r