]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_LM3S811_IAR/startup.c
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_LM3S811_IAR / startup.c
1 //*****************************************************************************\r
2 //\r
3 // startup_ewarm.c - Boot code for Stellaris.\r
4 //\r
5 // Copyright (c) 2005,2006 Luminary Micro, Inc.  All rights reserved.\r
6 //\r
7 // Software License Agreement\r
8 //\r
9 // Luminary Micro, Inc. (LMI) is supplying this software for use solely and\r
10 // exclusively on LMI's Stellaris Family of microcontroller products.\r
11 //\r
12 // The software is owned by LMI and/or its suppliers, and is protected under\r
13 // applicable copyright laws.  All rights are reserved.  Any use in violation\r
14 // of the foregoing restrictions may subject the user to criminal sanctions\r
15 // under applicable laws, as well as to civil liability for the breach of the\r
16 // terms and conditions of this license.\r
17 //\r
18 // THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED\r
19 // OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF\r
20 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.\r
21 // LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR\r
22 // CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.\r
23 //\r
24 // This is part of revision 991 of the Stellaris Driver Library.\r
25 //\r
26 //*****************************************************************************\r
27 \r
28 //*****************************************************************************\r
29 //\r
30 // Enable the IAR extensions for this source file.\r
31 //\r
32 //*****************************************************************************\r
33 #pragma language=extended\r
34 \r
35 //*****************************************************************************\r
36 //\r
37 // Forward declaration of the default fault handlers.\r
38 //\r
39 //*****************************************************************************\r
40 static void NmiSR(void);\r
41 static void FaultISR(void);\r
42 static void IntDefaultHandler(void);\r
43 \r
44 //*****************************************************************************\r
45 //\r
46 // The entry point for the application.\r
47 //\r
48 //*****************************************************************************\r
49 extern void __iar_program_start(void);\r
50 \r
51 //*****************************************************************************\r
52 //\r
53 // External declaration for the interrupt handler used by the application.\r
54 //\r
55 //*****************************************************************************\r
56 extern void xPortPendSVHandler(void);\r
57 extern void xPortSysTickHandler(void);\r
58 extern void vGPIO_ISR(void);\r
59 extern void vUART_ISR(void);\r
60 extern void vPortSVCHandler( void );\r
61 \r
62 //*****************************************************************************\r
63 //\r
64 // Reserve space for the system stack.\r
65 //\r
66 //*****************************************************************************\r
67 #ifndef STACK_SIZE\r
68 #define STACK_SIZE                              64\r
69 #endif\r
70 static unsigned long pulStack[STACK_SIZE] @ ".noinit";\r
71 \r
72 //*****************************************************************************\r
73 //\r
74 // A union that describes the entries of the vector table.  The union is needed\r
75 // since the first entry is the stack pointer and the remainder are function\r
76 // pointers.\r
77 //\r
78 //*****************************************************************************\r
79 typedef union\r
80 {\r
81     void (*pfnHandler)(void);\r
82     unsigned long ulPtr;\r
83 }\r
84 uVectorEntry;\r
85 \r
86 //*****************************************************************************\r
87 //\r
88 // The minimal vector table for a Cortex-M3.  Note that the proper constructs\r
89 // must be placed on this to ensure that it ends up at physical address\r
90 // 0x0000.0000.\r
91 //\r
92 //*****************************************************************************\r
93 __root const uVectorEntry __vector_table[] @ ".intvec" =\r
94 {\r
95     { .ulPtr = (unsigned long)pulStack + sizeof(pulStack) },\r
96                                             // The initial stack pointer\r
97     __iar_program_start,                    // The reset handler\r
98     NmiSR,                                  // The NMI handler\r
99     FaultISR,                               // The hard fault handler\r
100     IntDefaultHandler,                      // The MPU fault handler\r
101     IntDefaultHandler,                      // The bus fault handler\r
102     IntDefaultHandler,                      // The usage fault handler\r
103     0,                                      // Reserved\r
104     0,                                      // Reserved\r
105     0,                                      // Reserved\r
106     0,                                      // Reserved\r
107     vPortSVCHandler,                        // SVCall handler\r
108     IntDefaultHandler,                      // Debug monitor handler\r
109     0,                                      // Reserved\r
110     xPortPendSVHandler,                     // The PendSV handler\r
111     xPortSysTickHandler,                    // The SysTick handler\r
112     IntDefaultHandler,                      // GPIO Port A\r
113     IntDefaultHandler,                      // GPIO Port B\r
114     vGPIO_ISR,                              // GPIO Port C\r
115     IntDefaultHandler,                      // GPIO Port D\r
116     IntDefaultHandler,                      // GPIO Port E\r
117     vUART_ISR,                              // UART0 Rx and Tx\r
118     IntDefaultHandler,                      // UART1 Rx and Tx\r
119     IntDefaultHandler,                      // SSI Rx and Tx\r
120     IntDefaultHandler,                      // I2C Master and Slave\r
121     IntDefaultHandler,                      // PWM Fault\r
122     IntDefaultHandler,                      // PWM Generator 0\r
123     IntDefaultHandler,                      // PWM Generator 1\r
124     IntDefaultHandler,                      // PWM Generator 2\r
125     IntDefaultHandler,                      // Quadrature Encoder\r
126     IntDefaultHandler,                      // ADC Sequence 0\r
127     IntDefaultHandler,                      // ADC Sequence 1\r
128     IntDefaultHandler,                      // ADC Sequence 2\r
129     IntDefaultHandler,                      // ADC Sequence 3\r
130     IntDefaultHandler,                      // Watchdog timer\r
131     IntDefaultHandler,                      // Timer 0 subtimer A\r
132     IntDefaultHandler,                      // Timer 0 subtimer B\r
133     IntDefaultHandler,                      // Timer 1 subtimer A\r
134     IntDefaultHandler,                      // Timer 1 subtimer B\r
135     IntDefaultHandler,                      // Timer 2 subtimer A\r
136     IntDefaultHandler,                      // Timer 2 subtimer B\r
137     IntDefaultHandler,                      // Analog Comparator 0\r
138     IntDefaultHandler,                      // Analog Comparator 1\r
139     IntDefaultHandler,                      // Analog Comparator 2\r
140     IntDefaultHandler,                      // System Control (PLL, OSC, BO)\r
141     IntDefaultHandler                       // FLASH Control\r
142 };\r
143 \r
144 \r
145 //*****************************************************************************\r
146 //\r
147 // This is the code that gets called when the processor receives a NMI.  This\r
148 // simply enters an infinite loop, preserving the system state for examination\r
149 // by a debugger.\r
150 //\r
151 //*****************************************************************************\r
152 static void\r
153 NmiSR(void)\r
154 {\r
155     //\r
156     // Enter an infinite loop.\r
157     //\r
158     while(1)\r
159     {\r
160     }\r
161 }\r
162 \r
163 //*****************************************************************************\r
164 //\r
165 // This is the code that gets called when the processor receives a fault\r
166 // interrupt.  This simply enters an infinite loop, preserving the system state\r
167 // for examination by a debugger.\r
168 //\r
169 //*****************************************************************************\r
170 static void\r
171 FaultISR(void)\r
172 {\r
173     //\r
174     // Enter an infinite loop.\r
175     //\r
176     while(1)\r
177     {\r
178     }\r
179 }\r
180 \r
181 //*****************************************************************************\r
182 //\r
183 // This is the code that gets called when the processor receives an unexpected\r
184 // interrupt.  This simply enters an infinite loop, preserving the system state\r
185 // for examination by a debugger.\r
186 //\r
187 //*****************************************************************************\r
188 static void\r
189 IntDefaultHandler(void)\r
190 {\r
191     //\r
192     // Go into an infinite loop.\r
193     //\r
194     while(1)\r
195     {\r
196     }\r
197 }\r