]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Tasking/Startup/Infineon/XMC4500/cstart_XMC4500.c
Rename directories with XMC4500 in their name that now contain XMC4200 and XMC4000...
[freertos] / FreeRTOS / Demo / CORTEX_M4F_Infineon_XMC4000_Tasking / Startup / Infineon / XMC4500 / cstart_XMC4500.c
1 /*\r
2 **      @(#)cstart.c    1.8     $E%\r
3 **\r
4 **  Copyright 1997-2012 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 #pragma alias           Reset_Handler = _START  /* requirement for CMSIS                        */\r
21 #pragma extern          Reset_Handler           /* required for mil-linking with CMSIS          */\r
22 \r
23 #include <stdlib.h>\r
24 #include <dbg.h>\r
25 \r
26 #define VTOR            (*(volatile unsigned int *)0xE000ED08)\r
27 #define PREF_PCON       (*(volatile unsigned int *)0x58004000)\r
28 #define SCU_GCU_PEEN    (*(volatile unsigned int *)0x5000413C)\r
29 #define SCU_GCU_PEFLAG  (*(volatile unsigned int *)0x50004150)\r
30 \r
31 \r
32 extern  unsigned char   _lc_ub_stack[];\r
33 extern  unsigned char   _lc_vtor_value[];\r
34 \r
35 #pragma weak    exit\r
36 #pragma extern  _Exit\r
37 #pragma extern  main\r
38 extern  int     main( int argc, char *argv[] );\r
39 extern  void    SystemInit( void );\r
40 extern  void    __init( void );\r
41 #if     __PROF_ENABLE__\r
42 extern  void    __prof_init( void );\r
43 #endif\r
44 \r
45 #ifdef __POSIX__\r
46 extern  void *  _posix_boot_stack_top;\r
47 extern  int     posix_main( void );\r
48 #endif\r
49 \r
50 #ifdef  __USE_ARGC_ARGV\r
51 #ifndef __ARGCV_BUFSIZE\r
52 #define __ARGCV_BUFSIZE         256\r
53 #endif\r
54 static  char    argcv[__ARGCV_BUFSIZE];\r
55 #endif\r
56 \r
57 void    __interrupt() __frame() _START( void )\r
58 {\r
59         PREF_PCON |= 0x00010000;                /* Disable Branch prediction */\r
60         SCU_GCU_PEFLAG =0xFFFFFFFF;             /* Clear existing parity errors if any */\r
61         SCU_GCU_PEEN = 0;                       /* Disable parity */\r
62 \r
63         /*\r
64          *      Anticipate possible ROM/RAM remapping\r
65          *      by loading the 'real' program address.\r
66          */\r
67         __remap_pc();\r
68         /*\r
69          *      Initialize stack pointer.\r
70          */\r
71         __setsp( _lc_ub_stack );\r
72         /*\r
73          *      Call a user function which initializes hardware,\r
74          *      such as ROM/RAM re-mapping or MMU configuration.\r
75          */\r
76         SystemInit();\r
77         /*\r
78          *      Copy initialized sections from ROM to RAM\r
79          *      and clear uninitialized data sections in RAM.\r
80          */\r
81         __init();\r
82         __asm( "_cptable_handled:" );                                   /* symbol may be used by debugger       */\r
83 \r
84         /*\r
85          * Load VTOR register with the actual vector table\r
86          * start address\r
87          */\r
88         VTOR = (unsigned int)_lc_vtor_value;\r
89         \r
90 #ifdef __POSIX__\r
91         __setsp( _posix_boot_stack_top );\r
92 #endif\r
93 #if  __PROF_ENABLE__\r
94         __prof_init();\r
95 #endif\r
96 #ifdef __POSIX__\r
97         exit( posix_main() );\r
98 #elif defined __USE_ARGC_ARGV\r
99         exit( main( _argcv( argcv, __ARGCV_BUFSIZE ), (char **)argcv ) );\r
100 #else\r
101         exit( main( 0, NULL ) );\r
102 #endif\r
103         return;\r
104 }\r