]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/startup/sys_startup.c
Complete RM4x and TMS570 demo.
[freertos] / FreeRTOS / Demo / CORTEX_R4_RM48_TMS570_CCS5 / startup / sys_startup.c
1 /** @file sys_startup.c \r
2 *   @brief Startup Source File\r
3 *   @date 05.November.2010\r
4 *   @version 1.01.001\r
5 *\r
6 *   This file contains:\r
7 *   - Include Files\r
8 *   - Type Definitions\r
9 *   - External Functions\r
10 *   - VIM RAM Setup\r
11 *   - Startup Routine\r
12 *   .\r
13 *   which are relevant for the Starup.\r
14 */\r
15 \r
16 /* (c) Texas Instruments 2010, All rights reserved. */\r
17 \r
18 /* Include Files */\r
19 \r
20 #include "sys_types.h"\r
21 #include "sys_common.h"\r
22 #include "sys_system.h"\r
23 #include "sys_vim.h"\r
24 #include "sys_core.h"\r
25 #include "sys_memory.h"\r
26 \r
27 \r
28 /* External Functions */\r
29 \r
30 extern void __TI_auto_init(void);\r
31 extern void main(void);\r
32 extern void exit(int);\r
33 \r
34 /* Vim Ram Definition */\r
35 /** @struct vimRam\r
36 *   @brief Vim Ram Definition\r
37 *\r
38 *   This type is used to access the Vim Ram.\r
39 */\r
40 \r
41 static const t_isrFuncPTR s_vim_init[] =\r
42 {\r
43     phantomInterrupt,\r
44     esmHighLevelInterrupt,\r
45     phantomInterrupt,\r
46     vPortPreemptiveTick,                /* RTI */\r
47     phantomInterrupt,\r
48     phantomInterrupt,\r
49     phantomInterrupt,\r
50     phantomInterrupt,\r
51     phantomInterrupt,\r
52     phantomInterrupt,\r
53     phantomInterrupt,\r
54     phantomInterrupt,\r
55     phantomInterrupt,\r
56     phantomInterrupt,\r
57     phantomInterrupt,\r
58     phantomInterrupt,\r
59     phantomInterrupt,\r
60     phantomInterrupt,\r
61     phantomInterrupt,\r
62     phantomInterrupt,\r
63     phantomInterrupt,\r
64     phantomInterrupt,\r
65     vPortYeildWithinAPI,    /* software interrupt */\r
66     phantomInterrupt,\r
67     phantomInterrupt,\r
68     phantomInterrupt,\r
69     phantomInterrupt,\r
70     phantomInterrupt,\r
71     phantomInterrupt,\r
72     phantomInterrupt,\r
73     phantomInterrupt,\r
74     phantomInterrupt,\r
75     phantomInterrupt,\r
76     phantomInterrupt,\r
77     phantomInterrupt,\r
78     phantomInterrupt,\r
79     phantomInterrupt,\r
80     phantomInterrupt,\r
81     phantomInterrupt,\r
82     phantomInterrupt,\r
83     phantomInterrupt,\r
84     phantomInterrupt,\r
85     phantomInterrupt,\r
86     phantomInterrupt,\r
87     phantomInterrupt,\r
88     phantomInterrupt,\r
89     phantomInterrupt,\r
90     phantomInterrupt,\r
91     phantomInterrupt,\r
92     phantomInterrupt,\r
93     phantomInterrupt,\r
94     phantomInterrupt,\r
95     phantomInterrupt,\r
96     phantomInterrupt,\r
97     phantomInterrupt,\r
98     phantomInterrupt,\r
99     phantomInterrupt,\r
100     phantomInterrupt,\r
101     phantomInterrupt,\r
102     phantomInterrupt,\r
103     phantomInterrupt,\r
104     phantomInterrupt,\r
105     phantomInterrupt,\r
106     phantomInterrupt,\r
107     phantomInterrupt,\r
108     phantomInterrupt,\r
109     phantomInterrupt,\r
110     phantomInterrupt,\r
111     phantomInterrupt,\r
112     phantomInterrupt,\r
113     phantomInterrupt,\r
114     phantomInterrupt,\r
115     phantomInterrupt,\r
116     phantomInterrupt,\r
117     phantomInterrupt,\r
118     phantomInterrupt,\r
119     phantomInterrupt,\r
120     phantomInterrupt,\r
121     phantomInterrupt,\r
122     phantomInterrupt,\r
123     phantomInterrupt,\r
124     phantomInterrupt,\r
125     phantomInterrupt,\r
126     phantomInterrupt,\r
127     phantomInterrupt,\r
128     phantomInterrupt,\r
129     phantomInterrupt,\r
130     phantomInterrupt,\r
131     phantomInterrupt,\r
132     phantomInterrupt,\r
133     phantomInterrupt,\r
134     phantomInterrupt,\r
135     phantomInterrupt,\r
136     phantomInterrupt,\r
137     phantomInterrupt,\r
138     phantomInterrupt,\r
139     phantomInterrupt,\r
140 };\r
141 \r
142 \r
143 /* Startup Routine */\r
144 \r
145 #pragma INTERRUPT(_c_int00, RESET)\r
146 \r
147 void _c_int00()\r
148 {\r
149     /* Enable VFP Unit */\r
150         _coreEnableVfp();\r
151 \r
152     /* Initialize Core Registers */\r
153     _coreInitRegisters();\r
154 \r
155     /* Initialize Stack Pointers */\r
156     _coreInitStackPointer();\r
157 \r
158     /* Enable IRQ offset via Vic controller */\r
159         _coreEnableIrqVicOffset();\r
160 \r
161     /* Initialize System */\r
162     systemInit();\r
163 \r
164     /* Initialize VIM table */\r
165     {\r
166         unsigned i;\r
167 \r
168         for (i = 0; i < 96U; i++)\r
169         {\r
170             vimRAM->ISR[i] = s_vim_init[i];\r
171         }\r
172     }\r
173 \r
174     /* set IRQ/FIQ priorities */\r
175     vimREG->FIRQPR0 =  SYS_FIQ\r
176                     | (SYS_FIQ <<  1U)\r
177                     | (SYS_IRQ <<  2U)\r
178                     | (SYS_IRQ <<  3U)\r
179                     | (SYS_IRQ <<  4U)\r
180                     | (SYS_IRQ <<  5U)\r
181                     | (SYS_IRQ <<  6U)\r
182                     | (SYS_IRQ <<  7U)\r
183                     | (SYS_IRQ <<  8U)\r
184                     | (SYS_IRQ <<  9U)\r
185                     | (SYS_IRQ << 10U)\r
186                     | (SYS_IRQ << 11U)\r
187                     | (SYS_IRQ << 12U)\r
188                     | (SYS_IRQ << 13U)\r
189                     | (SYS_IRQ << 14U)\r
190                     | (SYS_IRQ << 15U)\r
191                     | (SYS_IRQ << 16U)\r
192                     | (SYS_IRQ << 17U)\r
193                     | (SYS_IRQ << 18U)\r
194                     | (SYS_IRQ << 19U)\r
195                     | (SYS_IRQ << 20U)\r
196                     | (SYS_IRQ << 21U)\r
197                     | (SYS_IRQ << 22U)\r
198                     | (SYS_IRQ << 23U)\r
199                     | (SYS_IRQ << 24U)\r
200                     | (SYS_IRQ << 25U)\r
201                     | (SYS_IRQ << 26U)\r
202                     | (SYS_IRQ << 27U)\r
203                     | (SYS_IRQ << 28U)\r
204                     | (SYS_IRQ << 29U)\r
205                     | (SYS_IRQ << 30U)\r
206                     | (SYS_IRQ << 31U);\r
207 \r
208     vimREG->FIRQPR1 =  SYS_IRQ\r
209                     | (SYS_IRQ <<  1U)\r
210                     | (SYS_IRQ <<  2U)\r
211                     | (SYS_IRQ <<  3U)\r
212                     | (SYS_IRQ <<  4U)\r
213                     | (SYS_IRQ <<  5U)\r
214                     | (SYS_IRQ <<  6U)\r
215                     | (SYS_IRQ <<  7U)\r
216                     | (SYS_IRQ <<  8U)\r
217                     | (SYS_IRQ <<  9U)\r
218                     | (SYS_IRQ << 10U)\r
219                     | (SYS_IRQ << 11U)\r
220                     | (SYS_IRQ << 12U)\r
221                     | (SYS_IRQ << 13U)\r
222                     | (SYS_IRQ << 14U)\r
223                     | (SYS_IRQ << 15U)\r
224                     | (SYS_IRQ << 16U)\r
225                     | (SYS_IRQ << 17U)\r
226                     | (SYS_IRQ << 18U)\r
227                     | (SYS_IRQ << 19U)\r
228                     | (SYS_IRQ << 20U)\r
229                     | (SYS_IRQ << 21U)\r
230                     | (SYS_IRQ << 22U)\r
231                     | (SYS_IRQ << 23U)\r
232                     | (SYS_IRQ << 24U)\r
233                     | (SYS_IRQ << 25U)\r
234                     | (SYS_IRQ << 26U)\r
235                     | (SYS_IRQ << 27U)\r
236                     | (SYS_IRQ << 28U)\r
237                     | (SYS_IRQ << 29U)\r
238                     | (SYS_IRQ << 30U);\r
239 \r
240     /* enable interrupts */\r
241     vimREG->REQMASKSET0 = 1U\r
242                         | (0U << 1)\r
243                         | (1U << 2)       /* RTI */\r
244                         | (0U << 3)\r
245                         | (0U << 4)\r
246                         | (0U << 5)\r
247                         | (0U << 6)\r
248                         | (0U << 7)\r
249                         | (0U << 8)\r
250                         | (0U << 9)\r
251                         | (0U << 10)\r
252                         | (0U << 11)\r
253                         | (0U << 12)\r
254                         | (0U << 13)\r
255                         | (0U << 14)\r
256                         | (0U << 15)\r
257                         | (0U << 16)\r
258                         | (0U << 17)\r
259                         | (0U << 18)\r
260                         | (0U << 19)\r
261                         | (0U << 20)\r
262                         | (1U << 21)  /* Software Interrupt */\r
263                         | (0U << 22)\r
264                         | (0U << 23)\r
265                         | (0U << 24)\r
266                         | (0U << 25)\r
267                         | (0U << 26)\r
268                         | (0U << 27)\r
269                         | (0U << 28)\r
270                         | (0U << 29)\r
271                         | (0U << 30)\r
272                         | (0U << 31);\r
273 \r
274     vimREG->REQMASKSET1 = 0U\r
275                         | (0U << 1)\r
276                         | (0U << 2)\r
277                         | (0U << 3)\r
278                         | (0U << 4)\r
279                         | (0U << 5)\r
280                         | (0U << 6)\r
281                         | (0U << 7)\r
282                         | (0U << 8)\r
283                         | (0U << 9)\r
284                         | (0U << 10)\r
285                         | (0U << 11)\r
286                         | (0U << 12)\r
287                         | (0U << 13)\r
288                         | (0U << 14)\r
289                         | (0U << 15)\r
290                         | (0U << 16)\r
291                         | (0U << 17)\r
292                         | (0U << 18)\r
293                         | (0U << 19)\r
294                         | (0U << 20)\r
295                         | (0U << 21)\r
296                         | (0U << 22)\r
297                         | (0U << 23)\r
298                         | (0U << 24)\r
299                         | (0U << 25)\r
300                         | (0U << 26)\r
301                         | (0U << 27)\r
302                         | (0U << 28)\r
303                         | (0U << 29)\r
304                         | (0U << 30);\r
305 \r
306 \r
307     /* initalise global variable and constructors */\r
308         __TI_auto_init();\r
309 \r
310     /* call the application */\r
311     main();\r
312     exit(0);\r
313 }\r
314 \r
315 \r