]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Tasking/Startup/Infineon/XMC4400/cstart_XMC4400.c
Update XMC4000 tasking project to use latest system files.
[freertos] / FreeRTOS / Demo / CORTEX_M4F_Infineon_XMC4000_Tasking / Startup / Infineon / XMC4400 / cstart_XMC4400.c
1 /*\r
2 **      @(#)cstart.c    1.9     $E%\r
3 **\r
4 **  Copyright 1997-2013 Altium BV                                         *\r
5 **\r
6 **      DESCRIPTION:\r
7 **\r
8 **      The system startup code initializes the processor's registers\r
9 **      and the application C variables.\r
10 **\r
11 */\r
12 \r
13 #pragma nomisrac\r
14 #pragma profiling       off                     /* prevent profiling information on cstart      */\r
15 #pragma optimize        abcefgIJKlopRsUy        /* preset optimization level                    */\r
16 #pragma tradeoff        4                       /* preset tradeoff level                        */\r
17 #pragma runtime         BCMSZ                   /* disable runtime error checking for cstart    */\r
18 #pragma warning         750                     /* do not warn about unsaved registers          */\r
19 #pragma section         .text=cstart            /* use: .text.cstart as the section name        */\r
20 \r
21 #include <stdlib.h>\r
22 #include <dbg.h>\r
23 \r
24 #define VTOR            (*(volatile unsigned int *)0xE000ED08)\r
25 #define PREF_FCON       (*(volatile unsigned int *)0x58002014)\r
26 #define SCU_GCU_PEEN    (*(volatile unsigned int *)0x5000413C)\r
27 #define SCU_GCU_PEFLAG  (*(volatile unsigned int *)0x50004150)\r
28 \r
29 /* In the absence of DAVE code engine, CMSIS SystemInit() must perform clock \r
30    tree setup. \r
31    \r
32    This decision routine defined here will always return TRUE.\r
33    \r
34    When overridden by a definition defined in DAVE code engine, this routine\r
35    returns FALSE indicating that the code engine has performed the clock setup\r
36 */   \r
37 #pragma weak AllowPLLInitByStartup\r
38 uint32_t AllowPLLInitByStartup( void )\r
39 {\r
40         return 1;\r
41 }\r
42 \r
43 \r
44 \r
45 extern  unsigned char   _lc_ub_stack[];\r
46 extern  unsigned char   _lc_vtor_value[];\r
47 \r
48 #pragma weak    exit\r
49 #pragma extern  _Exit\r
50 #pragma extern  main\r
51 extern  int     main( int argc, char *argv[] );\r
52 extern  void    SystemInit( void );\r
53 extern  void    __init( void );\r
54 #if     __PROF_ENABLE__\r
55 extern  void    __prof_init( void );\r
56 #endif\r
57 \r
58 #ifdef __POSIX__\r
59 extern  void *  _posix_boot_stack_top;\r
60 extern  int     posix_main( void );\r
61 #endif\r
62 \r
63 #ifdef  __USE_ARGC_ARGV\r
64 #ifndef __ARGCV_BUFSIZE\r
65 #define __ARGCV_BUFSIZE         256\r
66 #endif\r
67 static  char    argcv[__ARGCV_BUFSIZE];\r
68 #endif\r
69 \r
70 void    __interrupt() __frame() Reset_Handler( void )\r
71 {\r
72                                                 /* Set flash wait states to 3 */\r
73         PREF_FCON = (PREF_FCON & 0xFFFFFFF0) | 0x00000003;\r
74         SCU_GCU_PEFLAG =0xFFFFFFFF;             /* Clear existing parity errors if any */\r
75         SCU_GCU_PEEN = 0;                       /* Disable parity */\r
76 \r
77         /*\r
78          *      Anticipate possible ROM/RAM remapping\r
79          *      by loading the 'real' program address.\r
80          */\r
81         __remap_pc();\r
82         /*\r
83          *      Initialize stack pointer.\r
84          */\r
85         __setsp( _lc_ub_stack );\r
86         /*\r
87          *      Call a user function which initializes hardware,\r
88          *      such as ROM/RAM re-mapping or MMU configuration.\r
89          */\r
90         SystemInit();\r
91         /*\r
92          *      Copy initialized sections from ROM to RAM\r
93          *      and clear uninitialized data sections in RAM.\r
94          */\r
95         __init();\r
96         __asm( "_cptable_handled:" );                                   /* symbol may be used by debugger       */\r
97 \r
98         /*\r
99          * Load VTOR register with the actual vector table\r
100          * start address\r
101          */\r
102         VTOR = (unsigned int)_lc_vtor_value;\r
103         \r
104 #ifdef __POSIX__\r
105         __setsp( _posix_boot_stack_top );\r
106 #endif\r
107 #if  __PROF_ENABLE__\r
108         __prof_init();\r
109 #endif\r
110 #ifdef __POSIX__\r
111         exit( posix_main() );\r
112 #elif defined __USE_ARGC_ARGV\r
113         exit( main( _argcv( argcv, __ARGCV_BUFSIZE ), (char **)argcv ) );\r
114 #else\r
115         exit( main( 0, NULL ) );\r
116 #endif\r
117         return;\r
118 }\r