]> git.sur5r.net Git - freertos/blob - Demo/lwIP_MCF5235_GCC/system/crt0.S
Comment the new MicroBlaze port layer files.
[freertos] / Demo / lwIP_MCF5235_GCC / system / crt0.S
1 /*\r
2     FreeRTOS MCF5235 port - Copyright (C) 2006 Christian Walter.\r
3 \r
4     This file is part of the FreeRTOS distribution.\r
5 \r
6     FreeRTOS is free software; you can redistribute it and/or modify\r
7     it under the terms of the GNU General Public License** as published by\r
8     the Free Software Foundation; either version 2 of the License, or\r
9     (at your option) any later version.\r
10 \r
11     FreeRTOS is distributed in the hope that it will be useful,\r
12     but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14     GNU General Public License for more details.\r
15 \r
16     You should have received a copy of the GNU General Public License\r
17     along with FreeRTOS; if not, write to the Free Software\r
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
19 \r
20     A special exception to the GPL can be applied should you wish to distribute\r
21     a combined work that includes FreeRTOS, without being obliged to provide\r
22     the source code for any proprietary components.  See the licensing section\r
23     of http://www.FreeRTOS.org for full details of how and when the exception\r
24     can be applied.\r
25 \r
26     ***************************************************************************\r
27     ***************************************************************************\r
28     *                                                                         *\r
29     * Get the FreeRTOS eBook!  See http://www.FreeRTOS.org/Documentation      *\r
30         *                                                                         *\r
31         * This is a concise, step by step, 'hands on' guide that describes both   *\r
32         * general multitasking concepts and FreeRTOS specifics. It presents and   *\r
33         * explains numerous examples that are written using the FreeRTOS API.     *\r
34         * Full source code for all the examples is provided in an accompanying    *\r
35         * .zip file.                                                              *\r
36     *                                                                         *\r
37     ***************************************************************************\r
38     ***************************************************************************\r
39 \r
40         Please ensure to read the configuration and relevant port sections of the\r
41         online documentation.\r
42 \r
43         http://www.FreeRTOS.org - Documentation, latest information, license and \r
44         contact details.\r
45 \r
46         http://www.SafeRTOS.com - A version that is certified for use in safety \r
47         critical systems.\r
48 \r
49         http://www.OpenRTOS.com - Commercial support, development, porting, \r
50         licensing and training services.\r
51 */\r
52 \r
53   .title "crt0.S"\r
54 \r
55   .extern main\r
56   .extern __stack\r
57   .extern __bss_start\r
58   .extern __text_start\r
59   .extern init_main\r
60 \r
61   .equ    MCF5XXX_RAMBAR_SPV,   0x00000200\r
62   .equ    MCF5XXX_RAMBAR_V,     0x00000001\r
63   .global start\r
64 \r
65   .align  4\r
66 debug:\r
67   .word   0x2C80    /* write to CSR */\r
68   .word   0x0010\r
69   .word   0x0400\r
70   .word   0x0000\r
71 \r
72 start:\r
73   /* disable all interrupts on startup. */\r
74   move.w  #0x2700, sr\r
75 \r
76   /* prepare internal SRAM. */\r
77   move.l  #__SRAM, d0\r
78   ori.l   #( MCF5XXX_RAMBAR_SPV | MCF5XXX_RAMBAR_V ), d0\r
79   movec   d0, rambar\r
80 \r
81   /* prepare stack and frame pointer. */\r
82   move.l  #__stack, sp\r
83   link    a6, #-8\r
84 \r
85   /* initialize hardware. */\r
86   jsr     init_main\r
87 \r
88   /* zero out the bss section. */\r
89   move.l  #__bss_start, d1\r
90   move.l  #_end, d0\r
91   cmp.l   d0, d1\r
92   jbeq    3f\r
93   move.l  d1, a0\r
94   sub.l   d1, d0\r
95   subq.l  #1, d0\r
96 2:\r
97   clr.b   (a0)+\r
98   subq.l  #1, d0\r
99   jbpl    2b\r
100 3:\r
101 \r
102   /* Relocate the data section. */\r
103   move.l  #__data_load_start, %a0         /* .data in ROM */\r
104   move.l  #copy_start, %a1                /* .data in RAM */\r
105 \r
106   /* Test if the two sections overlap. This is the case when we are working\r
107    * with the debugger and the debugger loads the .data section.\r
108    */\r
109   cmpa.l  %a0, %a1\r
110   beq     2f\r
111 1:\r
112   /* Have we already copied everything. */\r
113   cmpa.l  #__data_load_end, %a0\r
114   beq     2f\r
115   move.b  (%a0)+, (%a1)+\r
116   bra     1b\r
117 \r
118 2:\r
119 \r
120   /* C library */\r
121   move.l  #__FINI_SECTION__, -(%sp)\r
122   jsr     atexit\r
123   jsr     __INIT_SECTION__\r
124 \r
125   /* call main(int argc, char *argv[] */\r
126   move.l  #0, -(sp)\r
127   move.l  #0, -(sp)\r
128   move.l  #0, -(sp)\r
129   jsr     main\r
130   lea     (sp, 12), %sp\r
131 \r
132   /* stop on exit from main. */\r
133 1:\r
134   halt\r
135 \r