]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/crt0_STM32x.c
Add STM32 Primer demo. Remove the .lock file from the Eclipse demos.
[freertos] / Demo / CORTEX_STM32F103_Primer_GCC / ST_Code / crt0_STM32x.c
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
2 * File Name          : stm32f10x_vector.c\r
3 * Author             : MCD Tools Team\r
4 * Date First Issued  : 05/14/2007\r
5 * Description        : This file contains the vector table for STM32F10x.\r
6 *                        After Reset the Cortex-M3 processor is in Thread mode,\r
7 *                        priority is Privileged, and the Stack is set to Main.\r
8 ********************************************************************************\r
9 * History:\r
10 * 05/14/2007: V0.2\r
11 *\r
12 ********************************************************************************\r
13 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
14 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
15 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
16 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
17 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
18 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
19 *******************************************************************************/\r
20 \r
21 /* Includes ----------------------------------------------------------------------*/\r
22 \r
23 void NMIException(void);\r
24 void HardFaultException(void);\r
25 void MemManageException(void);\r
26 void BusFaultException(void);\r
27 void UsageFaultException(void);\r
28 void DebugMonitor(void);\r
29 void SVCHandler(void);\r
30 void PendSVC(void);\r
31 void SysTickHandler(void);\r
32 void WWDG_IRQHandler(void);\r
33 void PVD_IRQHandler(void);\r
34 void TAMPER_IRQHandler(void);\r
35 void RTC_IRQHandler(void);\r
36 void FLASH_IRQHandler(void);\r
37 void RCC_IRQHandler(void);\r
38 void EXTI0_IRQHandler(void);\r
39 void EXTI1_IRQHandler(void);\r
40 void EXTI2_IRQHandler(void);\r
41 void EXTI3_IRQHandler(void);\r
42 void EXTI4_IRQHandler(void);\r
43 void DMAChannel1_IRQHandler(void);\r
44 void DMAChannel2_IRQHandler(void);\r
45 void DMAChannel3_IRQHandler(void);\r
46 void DMAChannel4_IRQHandler(void);\r
47 void DMAChannel5_IRQHandler(void);\r
48 void DMAChannel6_IRQHandler(void);\r
49 void DMAChannel7_IRQHandler(void);\r
50 void ADC_IRQHandler(void);\r
51 void USB_HP_CAN_TX_IRQHandler(void);\r
52 void USB_LP_CAN_RX0_IRQHandler(void);\r
53 void CAN_RX1_IRQHandler(void);\r
54 void CAN_SCE_IRQHandler(void);\r
55 void EXTI9_5_IRQHandler(void);\r
56 void TIM1_BRK_IRQHandler(void);\r
57 void TIM1_UP_IRQHandler(void);\r
58 void TIM1_TRG_COM_IRQHandler(void);\r
59 void TIM1_CC_IRQHandler(void);\r
60 void TIM2_IRQHandler(void);\r
61 void TIM3_IRQHandler(void);\r
62 void TIM4_IRQHandler(void);\r
63 void I2C1_EV_IRQHandler(void);\r
64 void I2C1_ER_IRQHandler(void);\r
65 void I2C2_EV_IRQHandler(void);\r
66 void I2C2_ER_IRQHandler(void);\r
67 void SPI1_IRQHandler(void);\r
68 void SPI2_IRQHandler(void);\r
69 void USART1_IRQHandler(void);\r
70 void USART2_IRQHandler(void);\r
71 void USART3_IRQHandler(void);\r
72 void EXTI15_10_IRQHandler(void);\r
73 void RTCAlarm_IRQHandler(void);\r
74 void USBWakeUp_IRQHandler(void);\r
75 \r
76 \r
77 /* Exported types --------------------------------------------------------------*/\r
78 /* Exported constants --------------------------------------------------------*/\r
79 extern unsigned long _etext;\r
80 extern unsigned long _sidata;           /* start address for the initialization values of the .data section. defined in linker script */\r
81 extern unsigned long _sdata;            /* start address for the .data section. defined in linker script */\r
82 extern unsigned long _edata;            /* end address for the .data section. defined in linker script */\r
83 \r
84 extern unsigned long _sbss;                     /* start address for the .bss section. defined in linker script */\r
85 extern unsigned long _ebss;                     /* end address for the .bss section. defined in linker script */\r
86 \r
87 extern void _estack;            /* init value for the stack pointer. defined in linker script */\r
88 \r
89 \r
90 \r
91 /* Private typedef -----------------------------------------------------------*/\r
92 /* function prototypes ------------------------------------------------------*/\r
93 void Reset_Handler(void) __attribute__((__interrupt__));\r
94 extern int main(void);\r
95 extern void xPortPendSVHandler(void);\r
96 extern void xPortSysTickHandler(void);\r
97 extern void vTimer2IntHandler( void );\r
98 \r
99 \r
100 /******************************************************************************\r
101 *\r
102 * The minimal vector table for a Cortex M3.  Note that the proper constructs\r
103 * must be placed on this to ensure that it ends up at physical address\r
104 * 0x0000.0000.\r
105 *\r
106 ******************************************************************************/\r
107 \r
108 \r
109 __attribute__ ((section(".isr_vector")))\r
110 void (* const g_pfnVectors[])(void) =\r
111 {\r
112   &_estack,            // The initial stack pointer\r
113   Reset_Handler,             // The reset handler\r
114   NMIException,\r
115   HardFaultException,\r
116   MemManageException,\r
117   BusFaultException,\r
118   UsageFaultException,\r
119   0, 0, 0, 0,            /* Reserved */ \r
120   SVCHandler,\r
121   DebugMonitor,\r
122   0,                      /* Reserved */\r
123   xPortPendSVHandler,\r
124   xPortSysTickHandler,\r
125   WWDG_IRQHandler,\r
126   PVD_IRQHandler,\r
127   TAMPER_IRQHandler,\r
128   RTC_IRQHandler,\r
129   FLASH_IRQHandler,\r
130   RCC_IRQHandler,\r
131   EXTI0_IRQHandler,\r
132   EXTI1_IRQHandler,\r
133   EXTI2_IRQHandler,\r
134   EXTI3_IRQHandler,\r
135   EXTI4_IRQHandler,\r
136   DMAChannel1_IRQHandler,\r
137   DMAChannel2_IRQHandler,\r
138   DMAChannel3_IRQHandler,\r
139   DMAChannel4_IRQHandler,\r
140   DMAChannel5_IRQHandler,\r
141   DMAChannel6_IRQHandler,\r
142   DMAChannel7_IRQHandler,\r
143   ADC_IRQHandler,\r
144   USB_HP_CAN_TX_IRQHandler,\r
145   USB_LP_CAN_RX0_IRQHandler,\r
146   CAN_RX1_IRQHandler,\r
147   CAN_SCE_IRQHandler,\r
148   EXTI9_5_IRQHandler,\r
149   TIM1_BRK_IRQHandler,\r
150   TIM1_UP_IRQHandler,\r
151   TIM1_TRG_COM_IRQHandler,\r
152   TIM1_CC_IRQHandler,\r
153   vTimer2IntHandler,\r
154   TIM3_IRQHandler,\r
155   TIM4_IRQHandler,\r
156   I2C1_EV_IRQHandler,\r
157   I2C1_ER_IRQHandler,\r
158   I2C2_EV_IRQHandler,\r
159   I2C2_ER_IRQHandler,\r
160   SPI1_IRQHandler,\r
161   SPI2_IRQHandler,\r
162   USART1_IRQHandler,\r
163   USART2_IRQHandler,\r
164   USART3_IRQHandler,\r
165   EXTI15_10_IRQHandler,\r
166   RTCAlarm_IRQHandler,\r
167   USBWakeUp_IRQHandler,\r
168   0,\r
169   0,\r
170   0,\r
171   0,\r
172   0,\r
173   0,\r
174   0,\r
175   (unsigned long)0xF108F85F //this is a workaround for boot in RAM mode.\r
176 };\r
177 \r
178 /*******************************************************************************\r
179 * Function Name  : Reset_Handler\r
180 * Description    : This is the code that gets called when the processor first starts execution\r
181 *                      following a reset event.  Only the absolutely necessary set is performed,\r
182 *                      after which the application supplied main() routine is called. \r
183 * Input          :\r
184 * Output         :\r
185 * Return         :\r
186 *******************************************************************************/\r
187 void Reset_Handler(void)\r
188 {\r
189     unsigned long *pulSrc, *pulDest;\r
190 \r
191     //\r
192     // Copy the data segment initializers from flash to SRAM.\r
193     //\r
194     pulSrc = &_sidata;\r
195     for(pulDest = &_sdata; pulDest < &_edata; )\r
196     {\r
197         *(pulDest++) = *(pulSrc++);\r
198     }\r
199 \r
200     //\r
201     // Zero fill the bss segment.\r
202     //\r
203     for(pulDest = &_sbss; pulDest < &_ebss; )\r
204     {\r
205         *(pulDest++) = 0;\r
206     }\r
207 \r
208     //\r
209     // Call the application's entry point.\r
210     //\r
211     main();\r
212 }\r
213 \r
214 \r
215 /********************* (C) COPYRIGHT 2007 STMicroelectronics  *****END OF FILE****/\r
216 \r
217 \r