]> rtime.felk.cvut.cz Git - pes-rpp/rpp-test-sw.git/blob - source/sys_startup.c
a490237d82c82842a9dc9908827033a32f7e846e
[pes-rpp/rpp-test-sw.git] / source / sys_startup.c
1 /** @file sys_startup.c \r
2 *   @brief Startup Source File\r
3 *   @date 15.Mar.2012\r
4 *   @version 03.01.00\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 Startup.\r
14 */\r
15 \r
16 /* (c) Texas Instruments 2009-2012, All rights reserved. */\r
17 \r
18 /* USER CODE BEGIN (0) */\r
19 /* USER CODE END */\r
20 \r
21 \r
22 /* Include Files */\r
23 \r
24 #include "sys_common.h"\r
25 #include "system.h"\r
26 #include "sys_vim.h"\r
27 #include "sys_core.h"\r
28 #include "sys_selftest.h"\r
29 #include "esm.h"\r
30 \r
31 \r
32 /* USER CODE BEGIN (1) */\r
33 /* USER CODE END */\r
34 \r
35 \r
36 /* Type Definitions */\r
37 \r
38 typedef void (*handler_fptr)(const uint8_t *in, uint8_t *out);\r
39 \r
40 /* USER CODE BEGIN (2) */\r
41 /* USER CODE END */\r
42 \r
43 \r
44 /* External Functions */\r
45 \r
46 #pragma WEAK(__TI_Handler_Table_Base)\r
47 #pragma WEAK(__TI_Handler_Table_Limit)\r
48 #pragma WEAK(__TI_CINIT_Base)\r
49 #pragma WEAK(__TI_CINIT_Limit)\r
50 \r
51 extern uint32_t   __TI_Handler_Table_Base;\r
52 extern uint32_t   __TI_Handler_Table_Limit;\r
53 extern uint32_t   __TI_CINIT_Base;\r
54 extern uint32_t   __TI_CINIT_Limit;\r
55 extern uint32_t   __TI_PINIT_Base;\r
56 extern uint32_t   __TI_PINIT_Limit;\r
57 extern uint32_t * __binit__;\r
58 \r
59 extern void main(void);\r
60 extern void exit(void);\r
61 \r
62 extern void muxInit(void);\r
63 \r
64 /* USER CODE BEGIN (3) */\r
65 /* USER CODE END */\r
66 \r
67 \r
68 /* Vim Ram Definition */\r
69 /** @struct vimRam\r
70 *   @brief Vim Ram Definition\r
71 *\r
72 *   This type is used to access the Vim Ram.\r
73 */\r
74 /** @typedef vimRAM_t\r
75 *   @brief Vim Ram Type Definition\r
76 *\r
77 *   This type is used to access the Vim Ram.\r
78 */\r
79 typedef volatile struct vimRam\r
80 {\r
81     t_isrFuncPTR ISR[VIM_CHANNELS + 1];\r
82 } vimRAM_t;\r
83 \r
84 #define vimRAM ((vimRAM_t *)0xFFF82000U)\r
85 \r
86 static const t_isrFuncPTR s_vim_init[] =\r
87 {\r
88     &phantomInterrupt,\r
89     &esmHighInterrupt,          // 0\r
90     &phantomInterrupt,\r
91     &vPreemptiveTick,\r
92     &phantomInterrupt,\r
93     &phantomInterrupt,\r
94     &phantomInterrupt,          // 5\r
95     &phantomInterrupt,\r
96     &phantomInterrupt,\r
97     &phantomInterrupt,\r
98     &phantomInterrupt,\r
99     &phantomInterrupt,          // 10\r
100     &phantomInterrupt,\r
101     &mibspi1HighLevelInterrupt,\r
102     &linHighLevelInterrupt,\r
103     &phantomInterrupt,\r
104     &adc1Group1Interrupt,       // 15\r
105     &can1HighLevelInterrupt,\r
106     &spi2HighLevelInterrupt,\r
107     &phantomInterrupt,\r
108     &phantomInterrupt,\r
109     &phantomInterrupt,          // 20\r
110     &phantomInterrupt,\r
111     &phantomInterrupt,\r
112     &phantomInterrupt,\r
113     &phantomInterrupt,\r
114     &phantomInterrupt,          // 25\r
115     &mibspi1LowLevelInterrupt,\r
116     &phantomInterrupt,\r
117     &phantomInterrupt,\r
118     &phantomInterrupt,\r
119     &spi2LowLevelInterrupt,     // 30\r
120     &phantomInterrupt,\r
121     &phantomInterrupt,\r
122     &phantomInterrupt,\r
123     &phantomInterrupt,\r
124     &can2HighLevelInterrupt,    // 35\r
125     &phantomInterrupt,\r
126     &mibspi3HighInterruptLevel,\r
127     &mibspi3LowLevelInterrupt,\r
128     &phantomInterrupt,\r
129     &phantomInterrupt,          // 40\r
130     &phantomInterrupt,\r
131     &phantomInterrupt,\r
132     &phantomInterrupt,\r
133     &phantomInterrupt,\r
134     &can3HighLevelInterrupt,    // 45\r
135     &phantomInterrupt,\r
136     &phantomInterrupt,\r
137     &phantomInterrupt,\r
138     &spi4HighLevelInterrupt,\r
139     &phantomInterrupt,          // 50\r
140     &adc2Group1Interrupt,\r
141     &phantomInterrupt,\r
142     &phantomInterrupt,\r
143     &spi4LowLevelInterrupt,\r
144     &phantomInterrupt,          // 55\r
145     &phantomInterrupt,\r
146     &phantomInterrupt,\r
147     &phantomInterrupt,\r
148     &phantomInterrupt,\r
149     &phantomInterrupt,          // 60\r
150     &phantomInterrupt,\r
151     &phantomInterrupt,\r
152     &phantomInterrupt,\r
153     &sciHighLevelInterrupt,\r
154     &phantomInterrupt,          // 65\r
155     &phantomInterrupt,\r
156     &phantomInterrupt,\r
157     &phantomInterrupt,\r
158     &phantomInterrupt,\r
159     &phantomInterrupt,          // 70\r
160     &phantomInterrupt,\r
161     &phantomInterrupt,\r
162     &phantomInterrupt,\r
163     &phantomInterrupt,\r
164     &phantomInterrupt,          // 75\r
165     &phantomInterrupt,\r
166     &EMACCore0TxIsr,\r
167     &phantomInterrupt,\r
168     &EMACCore0RxIsr,\r
169     &phantomInterrupt,          // 80\r
170     &phantomInterrupt,\r
171     &phantomInterrupt,\r
172     &phantomInterrupt,\r
173     &phantomInterrupt,\r
174     &phantomInterrupt,          // 85\r
175     &phantomInterrupt,\r
176     &phantomInterrupt,\r
177     &phantomInterrupt,\r
178     &phantomInterrupt,\r
179     &phantomInterrupt,          // 90\r
180     &phantomInterrupt,\r
181     &phantomInterrupt,\r
182     &phantomInterrupt,\r
183     &phantomInterrupt,\r
184     &phantomInterrupt,          // 95\r
185     &phantomInterrupt,\r
186     &phantomInterrupt,\r
187     &phantomInterrupt,\r
188     &phantomInterrupt,\r
189     &phantomInterrupt,          // 100\r
190     &phantomInterrupt,\r
191     &phantomInterrupt,\r
192     &phantomInterrupt,\r
193     &phantomInterrupt,\r
194     &phantomInterrupt,\r
195     &phantomInterrupt,\r
196     &phantomInterrupt,\r
197     &phantomInterrupt,\r
198     &phantomInterrupt,\r
199     &phantomInterrupt,\r
200     &phantomInterrupt,\r
201     &phantomInterrupt,\r
202     &phantomInterrupt,\r
203     &phantomInterrupt,\r
204     &phantomInterrupt,\r
205     &phantomInterrupt,\r
206     &phantomInterrupt,\r
207     &phantomInterrupt,\r
208     &phantomInterrupt,\r
209     &phantomInterrupt,\r
210     &phantomInterrupt,\r
211     &phantomInterrupt,\r
212     &phantomInterrupt,\r
213     &phantomInterrupt,\r
214     &phantomInterrupt,\r
215     &phantomInterrupt,\r
216     &phantomInterrupt,\r
217 };\r
218 \r
219 \r
220 /* Startup Routine */\r
221 \r
222 /* USER CODE BEGIN (4) */\r
223 /* USER CODE END */\r
224 \r
225 #pragma INTERRUPT(_c_int00, RESET)\r
226 \r
227 void _c_int00()\r
228 {\r
229         \r
230 /* USER CODE BEGIN (5) */\r
231 /* USER CODE END */\r
232 \r
233     /* Initialize Core Registers to avoid CCM Error */\r
234     _coreInitRegisters_();\r
235 \r
236 /* USER CODE BEGIN (6) */\r
237 /* USER CODE END */\r
238 \r
239     /* Initialize Stack Pointers */\r
240     _coreInitStackPointer_();\r
241 \r
242 /* USER CODE BEGIN (7) */\r
243 /* USER CODE END */\r
244 \r
245     /* Implement work-around for CCM-R4 issue on silicon revision A */\r
246     if (DEVICE_ID_REV == 0x802AAD05)\r
247     {\r
248         _esmCcmErrorsClear_();\r
249     }\r
250          \r
251 /* USER CODE BEGIN (8) */\r
252 /* USER CODE END */\r
253 \r
254     /* Enable response to ECC errors indicated by CPU for accesses to flash */\r
255     flashWREG->FEDACCTRL1 = 0x000A060A;\r
256 \r
257     /* Enable CPU Event Export */\r
258     /* This allows the CPU to signal any single-bit or double-bit errors detected\r
259      * by its ECC logic for accesses to program flash or data RAM.\r
260      */\r
261         _coreEnableEventBusExport_();\r
262         \r
263     /* Enable CPU ECC checking for ATCM (flash accesses) */\r
264         _coreEnableFlashEcc_();\r
265 \r
266 /* USER CODE BEGIN (9) */\r
267 /* USER CODE END */\r
268 \r
269     /* Reset handler: the following instructions read from the system exception status register\r
270      * to identify the cause of the CPU reset.\r
271      */\r
272 \r
273         /* check for power-on reset condition */\r
274         if ((SYS_EXCEPTION & POWERON_RESET) != 0)\r
275         {\r
276 /* USER CODE BEGIN (10) */\r
277 /* USER CODE END */\r
278             \r
279                 /* clear all reset status flags */\r
280                 SYS_EXCEPTION = 0xFFFF;\r
281 \r
282 /* USER CODE BEGIN (11) */\r
283 /* USER CODE END */\r
284 \r
285                 /* continue with normal start-up sequence */\r
286         }\r
287         else if ((SYS_EXCEPTION & OSC_FAILURE_RESET) != 0)\r
288         {\r
289                 /* Reset caused due to oscillator failure.\r
290                 Add user code here to handle oscillator failure */\r
291 \r
292 /* USER CODE BEGIN (12) */\r
293 /* USER CODE END */\r
294         }\r
295         else if ((SYS_EXCEPTION & WATCHDOG_RESET) !=0 )\r
296         {\r
297                 /* Reset caused due \r
298                  *  1) windowed watchdog violation - Add user code here to handle watchdog violation.\r
299                  *  2) ICEPICK Reset - After loading code via CCS / System Reset through CCS\r
300                  */\r
301                 /* Check the WatchDog Status register */\r
302             if(WATCHDOG_STATUS != 0U)\r
303                 {\r
304                     /* Add user code here to handle watchdog violation. */ \r
305 /* USER CODE BEGIN (13) */\r
306 /* USER CODE END */\r
307 \r
308                     /* Clear the Watchdog reset flag in Exception Status register */ \r
309                     SYS_EXCEPTION = WATCHDOG_RESET;\r
310                 \r
311 /* USER CODE BEGIN (14) */\r
312 /* USER CODE END */\r
313                 }\r
314                 else\r
315                 {\r
316                     /* Clear the ICEPICK reset flag in Exception Status register */ \r
317                     SYS_EXCEPTION = ICEPICK_RESET;\r
318 /* USER CODE BEGIN (15) */\r
319 /* USER CODE END */\r
320                 }\r
321         }\r
322         else if ((SYS_EXCEPTION & CPU_RESET) !=0 )\r
323         {\r
324                 /* Reset caused due to CPU reset.\r
325                 CPU reset can be caused by CPU self-test completion, or\r
326                 by toggling the "CPU RESET" bit of the CPU Reset Control Register. */\r
327 \r
328 /* USER CODE BEGIN (16) */\r
329 /* USER CODE END */\r
330 \r
331                 /* clear all reset status flags */\r
332                 SYS_EXCEPTION = CPU_RESET;\r
333 \r
334 /* USER CODE BEGIN (17) */\r
335 /* USER CODE END */\r
336 \r
337         }\r
338         else if ((SYS_EXCEPTION & SW_RESET) != 0)\r
339         {\r
340                 /* Reset caused due to software reset.\r
341                 Add user code to handle software reset. */\r
342 \r
343 /* USER CODE BEGIN (18) */\r
344 /* USER CODE END */\r
345         }\r
346         else\r
347         {\r
348                 /* Reset caused by nRST being driven low externally.\r
349                 Add user code to handle external reset. */\r
350 \r
351 /* USER CODE BEGIN (19) */\r
352 /* USER CODE END */\r
353         }\r
354 \r
355         /* Check if there were ESM group3 errors during power-up.\r
356          * These could occur during eFuse auto-load or during reads from flash OTP\r
357          * during power-up. Device operation is not reliable and not recommended\r
358          * in this case.\r
359          * An ESM group3 error only drives the nERROR pin low. An external circuit\r
360          * that monitors the nERROR pin must take the appropriate action to ensure that\r
361          * the system is placed in a safe state, as determined by the application.\r
362          */\r
363         if (esmREG->ESTATUS1[2])\r
364         {\r
365 /* USER CODE BEGIN (20) */\r
366 /* USER CODE END */\r
367         while(1);\r
368         }\r
369 \r
370 /* USER CODE BEGIN (21) */\r
371 /* USER CODE END */\r
372 \r
373     /* Initialize System - Clock, Flash settings with Efuse self check */\r
374         systemInit();\r
375 \r
376 \r
377 /* USER CODE BEGIN (24) */\r
378 /* USER CODE END */\r
379 \r
380         /* Run a diagnostic check on the memory self-test controller.\r
381          * This function chooses a RAM test algorithm and runs it on an on-chip ROM.\r
382          * The memory self-test is expected to fail. The function ensures that the PBIST controller\r
383          * is capable of detecting and indicating a memory self-test failure.\r
384          */\r
385         pbistSelfCheck();\r
386 \r
387 /* USER CODE BEGIN (26) */\r
388 /* USER CODE END */\r
389 \r
390 \r
391         /* Run PBIST on CPU RAM.\r
392          * The PBIST controller needs to be configured separately for single-port and dual-port SRAMs.\r
393          * The CPU RAM is a single-port memory. The actual "RAM Group" for all on-chip SRAMs is defined in the\r
394          * device datasheet.\r
395          */\r
396         pbistRun(0x08300020, /* ESRAM Single Port PBIST */\r
397              PBIST_March13N_SP);\r
398 \r
399 /* USER CODE BEGIN (27) */\r
400 /* USER CODE END */\r
401 \r
402         /* Wait for PBIST for CPU RAM to be completed */\r
403         while(!pbistIsTestCompleted());\r
404 \r
405 /* USER CODE BEGIN (28) */\r
406 /* USER CODE END */\r
407 \r
408         /* Check if CPU RAM passed the self-test */\r
409         if( pbistIsTestPassed() != TRUE)\r
410         {\r
411                 /* CPU RAM failed the self-test.\r
412                  * Need custom handler to check the memory failure\r
413                  * and to take the appropriate next step.\r
414                  */\r
415                 if(pbistPortTestStatus(PBIST_PORT0) != TRUE)\r
416                 {\r
417             memoryPort0TestFailNotification(pbistREG->RGS, pbistREG->RDS, pbistREG->FSRA0, pbistREG->FSRDL0);\r
418                 }\r
419         else if(pbistPortTestStatus(PBIST_PORT1) != TRUE)\r
420                 {\r
421             memoryPort1TestFailNotification(pbistREG->RGS, pbistREG->RDS, pbistREG->FSRA1, pbistREG->FSRDL1);\r
422                 }\r
423                 else\r
424                 {\r
425                    while(1);\r
426                 }\r
427         }\r
428 \r
429 /* USER CODE BEGIN (29) */\r
430 /* USER CODE END */\r
431 \r
432         /* Disable PBIST clocks and disable memory self-test mode */\r
433         pbistStop();\r
434 \r
435 /* USER CODE BEGIN (30) */\r
436 /* USER CODE END */\r
437 \r
438         /* Initialize CPU RAM.\r
439          * This function uses the system module's hardware for auto-initialization of memories and their\r
440          * associated protection schemes. The CPU RAM is initialized by setting bit 0 of the MSIENA register.\r
441          * Hence the value 0x1 passed to the function.\r
442          * This function will initialize the entire CPU RAM and the corresponding ECC locations.\r
443          */\r
444         _memoryInit_(0x1);\r
445 \r
446 /* USER CODE BEGIN (31) */\r
447 /* USER CODE END */\r
448         \r
449         /* Enable ECC checking for TCRAM accesses.\r
450          * This function enables the CPU's ECC logic for accesses to B0TCM and B1TCM.\r
451          */\r
452         _coreEnableRamEcc_();\r
453 \r
454 /* USER CODE BEGIN (32) */\r
455 /* USER CODE END */\r
456 \r
457         /* Start PBIST on all dual-port memories */\r
458     pbistRun(  0x00000000    /*   EMAC Dual Port PBIST  */\r
459              | 0x00000000    /*   USB Dual Port PBIST for RMx / Reserved for TMS570x */             \r
460                          | 0x00000800    /*   DMA Dual Port PBIST  */\r
461              | 0x00000200    /*   VIM Dual Port PBIST  */\r
462              | 0x00000040    /*   MIBSPI1 Dual Port PBIST  */\r
463              | 0x00000080    /*   MIBSPI3 Dual Port PBIST  */\r
464              | 0x00000100    /*   MIBSPI5 Dual Port PBIST  */\r
465              | 0x00000004    /*   CAN1 Dual Port PBIST  */\r
466              | 0x00000008    /*   CAN2 Dual Port PBIST  */\r
467              | 0x00000010    /*   CAN3 Dual Port PBIST  */\r
468              | 0x00000400    /*   ADC1 Dual Port PBIST  */\r
469              | 0x00020000    /*   ADC2 Dual Port PBIST  */\r
470              | 0x00001000    /*   HET1 Dual Port PBIST  */\r
471              | 0x00040000    /*   HET2 Dual Port PBIST  */\r
472              | 0x00002000    /*   HTU1 Dual Port PBIST  */\r
473              | 0x00080000    /*   HTU2 Dual Port PBIST  */\r
474              | 0x00004000    /*   RTP Dual Port PBIST  */\r
475                          | 0x00000000    /*   FTU Dual Port PBIST for TMS570x / Reserved for RMx */\r
476                          | 0x00008000    /*   FRAY Dual Port PBIST for TMS570x / Reserved for RMx */\r
477                          , PBIST_March13N_DP);\r
478 \r
479 /* USER CODE BEGIN (33) */\r
480 /* USER CODE END */\r
481 \r
482 \r
483         /* Test the CPU ECC mechanism for RAM accesses.\r
484          * The checkBxRAMECC functions cause deliberate single-bit and double-bit errors in TCRAM accesses\r
485          * by corrupting 1 or 2 bits in the ECC. Reading from the TCRAM location with a 2-bit error\r
486          * in the ECC causes a data abort exception. The data abort handler is written to look for\r
487          * deliberately caused exception and to return the code execution to the instruction\r
488          * following the one that caused the abort.\r
489          */\r
490         checkB0RAMECC();\r
491         tcram1REG->RAMCTRL &= ~(0x00000100);                            /* disable writes to ECC RAM */\r
492         tcram2REG->RAMCTRL &= ~(0x00000100);\r
493 \r
494         checkB1RAMECC();\r
495         tcram1REG->RAMCTRL &= ~(0x00000100);                            /* disable writes to ECC RAM */\r
496         tcram2REG->RAMCTRL &= ~(0x00000100);\r
497 \r
498 /* USER CODE BEGIN (34) */\r
499 /* USER CODE END */\r
500 \r
501 \r
502         /* Test the CPU ECC mechanism for Flash accesses.\r
503          * The checkFlashECC function uses the flash interface module's diagnostic mode 7\r
504          * to create single-bit and double-bit errors in CPU accesses to the flash. A double-bit\r
505          * error on reading from flash causes a data abort exception.\r
506          * The data abort handler is written to look for deliberately caused exception and\r
507          * to return the code execution to the instruction following the one that was aborted.\r
508          *\r
509          */\r
510         checkFlashECC();\r
511         flashWREG->FDIAGCTRL = 0x000A0007;                                      /* disable flash diagnostic mode */\r
512 \r
513 /* USER CODE BEGIN (35) */\r
514 /* USER CODE END */\r
515 \r
516 /* USER CODE BEGIN (36) */\r
517 /* USER CODE END */\r
518 \r
519         /* Wait for PBIST for CPU RAM to be completed */\r
520         while(!pbistIsTestCompleted());\r
521 \r
522 /* USER CODE BEGIN (37) */\r
523 /* USER CODE END */\r
524 \r
525         /* Check if CPU RAM passed the self-test */\r
526         if( pbistIsTestPassed() != TRUE)\r
527         {\r
528 \r
529 /* USER CODE BEGIN (38) */\r
530 /* USER CODE END */\r
531 \r
532         /* CPU RAM failed the self-test.\r
533                  * Need custom handler to check the memory failure\r
534                  * and to take the appropriate next step.\r
535                  */\r
536                 if(pbistPortTestStatus(PBIST_PORT0) != TRUE)\r
537                 {\r
538             memoryPort0TestFailNotification(pbistREG->RGS, pbistREG->RDS, pbistREG->FSRA0, pbistREG->FSRDL0);\r
539                 }\r
540         else if(pbistPortTestStatus(PBIST_PORT1) != TRUE)\r
541                 {\r
542             memoryPort1TestFailNotification(pbistREG->RGS, pbistREG->RDS, pbistREG->FSRA1, pbistREG->FSRDL1);\r
543                 }\r
544                 else\r
545                 {\r
546                    while(1);\r
547                 }\r
548         }\r
549 \r
550 /* USER CODE BEGIN (39) */\r
551 /* USER CODE END */\r
552 \r
553         /* Disable PBIST clocks and disable memory self-test mode */\r
554         pbistStop();\r
555 \r
556 \r
557 /* USER CODE BEGIN (45) */\r
558 /* USER CODE END */\r
559 \r
560         /* Release the MibSPI1 modules from local reset.\r
561          * This will cause the MibSPI1 RAMs to get initialized along with the parity memory.\r
562          */\r
563          mibspiREG1->GCR0 = 0x1;\r
564          \r
565         /* Release the MibSPI3 modules from local reset.\r
566          * This will cause the MibSPI3 RAMs to get initialized along with the parity memory.\r
567          */\r
568         mibspiREG3->GCR0 = 0x1;\r
569         \r
570         /* Release the MibSPI5 modules from local reset.\r
571          * This will cause the MibSPI5 RAMs to get initialized along with the parity memory.\r
572          */\r
573         mibspiREG5->GCR0 = 0x1;\r
574         \r
575 /* USER CODE BEGIN (46) */\r
576 /* USER CODE END */\r
577 \r
578     /* Initialize all on-chip SRAMs except for MibSPIx RAMs\r
579      * The MibSPIx modules have their own auto-initialization mechanism which is triggered\r
580      * as soon as the modules are brought out of local reset.\r
581      */\r
582         /* The system module auto-init will hang on the MibSPI RAM if the module is still in local reset.\r
583          */\r
584         _memoryInit_(  1 << 1    /*   DMA Memory Init  */\r
585                  | 1 << 2    /*   VIM Memory Init  */\r
586                  | 1 << 5    /*   CAN1 Memory Init  */\r
587                  | 1 << 6    /*   CAN2 Memory Init  */\r
588                  | 1 << 10    /*   CAN3 Memory Init  */\r
589                  | 1 << 8    /*   ADC1 Memory Init  */\r
590                  | 1 << 14    /*   ADC2 Memory Init  */\r
591                  | 1 << 3    /*   HET1 Memory Init  */\r
592                  | 1 << 4    /*   HTU1 Memory Init  */\r
593                  | 1 << 15    /*   HET2 Memory Init  */\r
594                  | 1 << 16    /*   HTU2 Memory Init  */\r
595                  | 0 << 13);    /*   Reserved for RMx Family / FTU Memory Init for TMS570x Family */\r
596 \r
597         /* Test the parity protection mechanism for peripheral RAMs\r
598          * The following memories have parity protection that needs to be checked:\r
599          * VIM, DMA, ADC1, ADC2, NHET1, NHET2, HTU1, HTU2, FlexRay, FTU,\r
600          * MibSPI1, MibSPI3, MibSPI5, DCAN1, DCAN2, DCAN3 based on user selection\r
601          */\r
602 \r
603 /* USER CODE BEGIN (47) */\r
604 /* USER CODE END */\r
605          \r
606         het1ParityCheck();\r
607         \r
608 /* USER CODE BEGIN (48) */\r
609 /* USER CODE END */\r
610 \r
611         htu1ParityCheck();\r
612         \r
613 /* USER CODE BEGIN (49) */\r
614 /* USER CODE END */\r
615 \r
616         het2ParityCheck();\r
617         \r
618 /* USER CODE BEGIN (50) */\r
619 /* USER CODE END */\r
620 \r
621         htu2ParityCheck();\r
622         \r
623 /* USER CODE BEGIN (51) */\r
624 /* USER CODE END */\r
625 \r
626         adc1ParityCheck();\r
627         \r
628 /* USER CODE BEGIN (52) */\r
629 /* USER CODE END */\r
630 \r
631         adc2ParityCheck();\r
632         \r
633 /* USER CODE BEGIN (53) */\r
634 /* USER CODE END */\r
635 \r
636         can1ParityCheck();\r
637         \r
638 /* USER CODE BEGIN (54) */\r
639 /* USER CODE END */\r
640 \r
641         can2ParityCheck();\r
642         \r
643 /* USER CODE BEGIN (55) */\r
644 /* USER CODE END */\r
645 \r
646         can3ParityCheck();\r
647         \r
648 /* USER CODE BEGIN (56) */\r
649 /* USER CODE END */\r
650 \r
651         vimParityCheck();\r
652         \r
653 /* USER CODE BEGIN (57) */\r
654 /* USER CODE END */\r
655 \r
656         dmaParityCheck();\r
657 \r
658 \r
659 /* USER CODE BEGIN (58) */\r
660 /* USER CODE END */\r
661 \r
662         while (mibspiREG1->BUFINIT);            /* wait for MibSPI1 RAM to complete initialization */\r
663         while (mibspiREG3->BUFINIT);            /* wait for MibSPI3 RAM to complete initialization */ \r
664         while (mibspiREG5->BUFINIT);            /* wait for MibSPI5 RAM to complete initialization */\r
665 \r
666 /* USER CODE BEGIN (59) */\r
667 /* USER CODE END */\r
668 \r
669         mibspi1ParityCheck();\r
670         \r
671 /* USER CODE BEGIN (60) */\r
672 /* USER CODE END */\r
673 \r
674         mibspi3ParityCheck();\r
675         \r
676 /* USER CODE BEGIN (61) */\r
677 /* USER CODE END */\r
678         \r
679         mibspi5ParityCheck();\r
680         \r
681 \r
682 /* USER CODE BEGIN (62) */\r
683 /* USER CODE END */\r
684         \r
685 \r
686 /* USER CODE BEGIN (63) */\r
687 /* USER CODE END */\r
688 \r
689         \r
690     /* Initialize VIM table */\r
691     {\r
692         uint32_t i;\r
693 \r
694         for (i = 0; i < (VIM_CHANNELS + 1); i++)\r
695         {\r
696             vimRAM->ISR[i] = s_vim_init[i];\r
697         }\r
698     }\r
699 \r
700     /* set IRQ/FIQ priorities */\r
701     vimREG->FIRQPR0 =  SYS_FIQ\r
702                     | (SYS_FIQ <<  1U)\r
703                     | (SYS_IRQ <<  2U)\r
704                     | (SYS_IRQ <<  3U)\r
705                     | (SYS_IRQ <<  4U)\r
706                     | (SYS_IRQ <<  5U)\r
707                     | (SYS_IRQ <<  6U)\r
708                     | (SYS_IRQ <<  7U)\r
709                     | (SYS_IRQ <<  8U)\r
710                     | (SYS_IRQ <<  9U)\r
711                     | (SYS_IRQ << 10U)\r
712                     | (SYS_IRQ << 11U)\r
713                     | (SYS_IRQ << 12U)\r
714                     | (SYS_IRQ << 13U)\r
715                     | (SYS_IRQ << 14U)\r
716                     | (SYS_IRQ << 15U)\r
717                     | (SYS_IRQ << 16U)\r
718                     | (SYS_IRQ << 17U)\r
719                     | (SYS_IRQ << 18U)\r
720                     | (SYS_IRQ << 19U)\r
721                     | (SYS_IRQ << 20U)\r
722                     | (SYS_IRQ << 21U)\r
723                     | (SYS_IRQ << 22U)\r
724                     | (SYS_IRQ << 23U)\r
725                     | (SYS_IRQ << 24U)\r
726                     | (SYS_IRQ << 25U)\r
727                     | (SYS_IRQ << 26U)\r
728                     | (SYS_IRQ << 27U)\r
729                     | (SYS_IRQ << 28U)\r
730                     | (SYS_IRQ << 29U)\r
731                     | (SYS_IRQ << 30U)\r
732                     | (SYS_IRQ << 31U);\r
733 \r
734     vimREG->FIRQPR1 =  SYS_IRQ\r
735                     | (SYS_IRQ <<  1U)\r
736                     | (SYS_IRQ <<  2U)\r
737                     | (SYS_IRQ <<  3U)\r
738                     | (SYS_IRQ <<  4U)\r
739                     | (SYS_IRQ <<  5U)\r
740                     | (SYS_IRQ <<  6U)\r
741                     | (SYS_IRQ <<  7U)\r
742                     | (SYS_IRQ <<  8U)\r
743                     | (SYS_IRQ <<  9U)\r
744                     | (SYS_IRQ << 10U)\r
745                     | (SYS_IRQ << 11U)\r
746                     | (SYS_IRQ << 12U)\r
747                     | (SYS_IRQ << 13U)\r
748                     | (SYS_IRQ << 14U)\r
749                     | (SYS_IRQ << 15U)\r
750                     | (SYS_IRQ << 16U)\r
751                     | (SYS_IRQ << 17U)\r
752                     | (SYS_IRQ << 18U)\r
753                     | (SYS_IRQ << 19U)\r
754                     | (SYS_IRQ << 20U)\r
755                     | (SYS_IRQ << 21U)\r
756                     | (SYS_IRQ << 22U)\r
757                     | (SYS_IRQ << 23U)\r
758                     | (SYS_IRQ << 24U)\r
759                     | (SYS_IRQ << 25U)\r
760                     | (SYS_IRQ << 26U)\r
761                     | (SYS_IRQ << 27U)\r
762                     | (SYS_IRQ << 28U)\r
763                     | (SYS_IRQ << 29U)\r
764                     | (SYS_IRQ << 30U)\r
765                     | (SYS_IRQ << 31U);\r
766 \r
767 \r
768     vimREG->FIRQPR2 =  SYS_IRQ\r
769                     | (SYS_IRQ << 1U)\r
770                     | (SYS_IRQ << 2U)\r
771                     | (SYS_IRQ << 3U)\r
772                     | (SYS_IRQ << 4U)\r
773                     | (SYS_IRQ << 5U)\r
774                     | (SYS_IRQ << 6U)\r
775                     | (SYS_IRQ << 7U)\r
776                     | (SYS_IRQ << 8U)\r
777                     | (SYS_IRQ << 9U)\r
778                     | (SYS_IRQ << 10U)\r
779                     | (SYS_IRQ << 11U)\r
780                     | (SYS_IRQ << 12U)\r
781                     | (SYS_FIQ << 13U)  // EMAC\r
782                     | (SYS_IRQ << 14U)\r
783                     | (SYS_FIQ << 15U)  // EMAC\r
784                     | (SYS_IRQ << 16U)\r
785                     | (SYS_IRQ << 17U)\r
786                     | (SYS_IRQ << 18U)\r
787                     | (SYS_IRQ << 19U)\r
788                     | (SYS_IRQ << 20U)\r
789                     | (SYS_IRQ << 21U)\r
790                     | (SYS_IRQ << 22U)\r
791                     | (SYS_IRQ << 23U)\r
792                     | (SYS_IRQ << 24U)\r
793                     | (SYS_IRQ << 25U)\r
794                                         | (SYS_IRQ << 26U)\r
795                     | (SYS_IRQ << 27U)\r
796                     | (SYS_IRQ << 28U)\r
797                     | (SYS_IRQ << 29U)\r
798                     | (SYS_IRQ << 30U)\r
799                     | (SYS_IRQ << 31U);\r
800 \r
801     vimREG->FIRQPR3 =  SYS_IRQ\r
802                     | (SYS_IRQ << 1U)\r
803                     | (SYS_IRQ << 2U)\r
804                     | (SYS_IRQ << 3U)\r
805                     | (SYS_IRQ << 4U)\r
806                     | (SYS_IRQ << 5U)\r
807                     | (SYS_IRQ << 6U)\r
808                     | (SYS_IRQ << 7U)\r
809                     | (SYS_IRQ << 8U)\r
810                     | (SYS_IRQ << 9U)\r
811                     | (SYS_IRQ << 10U)\r
812                     | (SYS_IRQ << 11U)\r
813                     | (SYS_IRQ << 12U)\r
814                     | (SYS_IRQ << 13U)\r
815                     | (SYS_IRQ << 14U)\r
816                     | (SYS_IRQ << 15U)\r
817                     | (SYS_IRQ << 16U)\r
818                     | (SYS_IRQ << 17U)\r
819                     | (SYS_IRQ << 18U)\r
820                     | (SYS_IRQ << 19U)\r
821                     | (SYS_IRQ << 20U)\r
822                     | (SYS_IRQ << 21U)\r
823                     | (SYS_IRQ << 22U)\r
824                     | (SYS_IRQ << 23U)\r
825                     | (SYS_IRQ << 24U)\r
826                     | (SYS_IRQ << 25U)\r
827                                         | (SYS_IRQ << 26U)\r
828                     | (SYS_IRQ << 27U)\r
829                     | (SYS_IRQ << 28U)\r
830                     | (SYS_IRQ << 29U)\r
831                     | (SYS_IRQ << 30U)\r
832                     | (SYS_IRQ << 31U);\r
833 \r
834                                         \r
835     /* enable interrupts */\r
836     vimREG->REQMASKSET0 = 1U\r
837                         | (1U << 1U)\r
838                         | (1U << 2U)\r
839                         | (0U << 3U)\r
840                         | (0U << 4U)\r
841                         | (0U << 5U)\r
842                         | (0U << 6U)\r
843                         | (0U << 7U)\r
844                         | (0U << 8U)\r
845                         | (0U << 9U)\r
846                         | (0U << 10U)\r
847                         | (0U << 11U)\r
848                         | (1U << 12U)\r
849                         | (1U << 13U)\r
850                         | (0U << 14U)\r
851                         | (1U << 15U)\r
852                         | (1U << 16U)\r
853                         | (1U << 17U)\r
854                         | (0U << 18U)\r
855                         | (0U << 19U)\r
856                         | (0U << 20U)\r
857                         | (0U << 21U)\r
858                         | (0U << 22U)\r
859                         | (0U << 23U)\r
860                         | (0U << 24U)\r
861                         | (0U << 25U)\r
862                         | (1U << 26U)\r
863                         | (0U << 27U)\r
864                         | (0U << 28U)\r
865                         | (0U << 29U)\r
866                         | (1U << 30U)\r
867                         | (0U << 31U);\r
868 \r
869     vimREG->REQMASKSET1 = 0U\r
870                         | (0U << 1U)\r
871                         | (0U << 2U)\r
872                         | (1U << 3U)\r
873                         | (0U << 4U)\r
874                         | (1U << 5U)\r
875                         | (1U << 6U)\r
876                         | (0U << 7U)\r
877                         | (0U << 8U)\r
878                         | (0U << 9U)\r
879                         | (0U << 10U)\r
880                         | (0U << 11U)\r
881                         | (0U << 12U)\r
882                         | (1U << 13U)\r
883                         | (0U << 14U)\r
884                         | (0U << 15U)\r
885                         | (0U << 16U)\r
886                         | (1U << 17U)\r
887                         | (0U << 18U)\r
888                         | (1U << 19U)\r
889                         | (0U << 20U)\r
890                         | (0U << 21U)\r
891                         | (1U << 22U)\r
892                         | (0U << 23U)\r
893                         | (0U << 24U)\r
894                         | (0U << 25U)\r
895                         | (0U << 26U)\r
896                         | (0U << 27U)\r
897                         | (0U << 28U)\r
898                         | (0U << 29U)\r
899                         | (0U << 30U)\r
900                         | (0U << 31U);\r
901 \r
902     vimREG->REQMASKSET2 = 1U\r
903                         | (0U << 1U)\r
904                         | (0U << 2U)\r
905                         | (0U << 3U)\r
906                         | (0U << 4U)\r
907                         | (0U << 5U)\r
908                         | (0U << 6U)\r
909                         | (0U << 7U)\r
910                         | (0U << 8U)\r
911                         | (0U << 9U)\r
912                         | (0U << 10U)\r
913                         | (0U << 11U)\r
914                         | (0U << 12U)\r
915                         | (1U << 13U)           // EMACCore0TxIsr\r
916                         | (0U << 14U)\r
917                         | (1U << 15U)           // EMACCore0RxIsr\r
918                         | (0U << 16U)\r
919                         | (0U << 17U)\r
920                         | (0U << 18U)\r
921                         | (0U << 19U)\r
922                         | (0U << 20U)\r
923                         | (0U << 21U)\r
924                         | (0U << 22U)\r
925                         | (0U << 23U)\r
926                         | (0U << 24U)\r
927                         | (0U << 25U)\r
928                                             | (0U << 26U)\r
929                         | (0U << 27U)\r
930                         | (0U << 28U)\r
931                         | (0U << 29U)\r
932                         | (0U << 30U)\r
933                         | (0U << 31U);\r
934                                                 \r
935     vimREG->REQMASKSET3 =  0U\r
936                         | (0U << 1U)\r
937                         | (0U << 2U)\r
938                         | (0U << 3U)\r
939                         | (0U << 4U)\r
940                         | (0U << 5U)\r
941                         | (0U << 6U)\r
942                         | (0U << 7U)\r
943                         | (0U << 8U)\r
944                         | (0U << 9U)\r
945                         | (0U << 10U)\r
946                         | (0U << 11U)\r
947                         | (0U << 12U)\r
948                         | (0U << 13U)\r
949                         | (0U << 14U)\r
950                         | (0U << 15U)\r
951                         | (0U << 16U)\r
952                         | (0U << 17U)\r
953                         | (0U << 18U)\r
954                         | (0U << 19U)\r
955                         | (0U << 20U)\r
956                         | (0U << 21U)\r
957                         | (0U << 22U)\r
958                         | (0U << 23U)\r
959                         | (0U << 24U)\r
960                         | (0U << 25U)\r
961                                                 | (0U << 26U)\r
962                         | (0U << 27U)\r
963                         | (0U << 28U)\r
964                         | (0U << 29U)\r
965                         | (0U << 30U)\r
966                         | (0U << 31U);  \r
967 \r
968 /* USER CODE BEGIN (64) */\r
969 /* USER CODE END */\r
970 \r
971         /* Configure system response to error conditions signaled to the ESM group1 */\r
972         /* This function can be configured from the ESM tab of HALCoGen */\r
973         esmInit();\r
974 \r
975     /* initalise copy table */\r
976     if ((uint32_t *)&__binit__ != (uint32_t *)0xFFFFFFFFU)\r
977     {\r
978         extern void copy_in(void *binit);\r
979         copy_in((void *)&__binit__);\r
980     }\r
981 \r
982     /* initalise the C global variables */\r
983     if (&__TI_Handler_Table_Base < &__TI_Handler_Table_Limit)\r
984     {\r
985         uint8_t **tablePtr   = (uint8_t **)&__TI_CINIT_Base;\r
986         uint8_t **tableLimit = (uint8_t **)&__TI_CINIT_Limit;\r
987 \r
988         while (tablePtr < tableLimit)\r
989         {\r
990             uint8_t *loadAdr = *tablePtr++;\r
991             uint8_t *runAdr  = *tablePtr++;\r
992             uint8_t  idx     = *loadAdr++;\r
993             handler_fptr   handler = (handler_fptr)(&__TI_Handler_Table_Base)[idx];\r
994 \r
995             (*handler)((const uint8_t *)loadAdr, runAdr);\r
996         }\r
997     }\r
998 \r
999     /* initalise contructors */\r
1000     if (__TI_PINIT_Base < __TI_PINIT_Limit)\r
1001     {\r
1002         void (**p0)() = (void *)__TI_PINIT_Base;\r
1003 \r
1004         while ((uint32_t)p0 < __TI_PINIT_Limit)\r
1005         {\r
1006             void (*p)() = *p0++;\r
1007             p();\r
1008         }\r
1009     }\r
1010 \r
1011 /* USER CODE BEGIN (65) */\r
1012 /* USER CODE END */\r
1013         \r
1014     /* call the application */\r
1015     main();\r
1016 \r
1017 /* USER CODE BEGIN (66) */\r
1018 /* USER CODE END */\r
1019 \r
1020     exit();\r
1021 /* USER CODE BEGIN (67) */\r
1022 /* USER CODE END */\r
1023 }\r
1024 \r
1025 /* USER CODE BEGIN (68) */\r
1026 /* USER CODE END */\r