]> begriffs open source - freertos/blob - Demo/lwIP_MCF5235_GCC/system/crt0.S
Small mods, and update file headers.
[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     * SAVE TIME AND MONEY!  We can port FreeRTOS.org to your own hardware,    *\r
30     * and even write all or part of your application on your behalf.          *\r
31     * See http://www.OpenRTOS.com for details of the services we provide to   *\r
32     * expedite your project.                                                  *\r
33     *                                                                         *\r
34     ***************************************************************************\r
35     ***************************************************************************\r
36 \r
37         Please ensure to read the configuration and relevant port sections of the\r
38         online documentation.\r
39 \r
40         http://www.FreeRTOS.org - Documentation, latest information, license and \r
41         contact details.\r
42 \r
43         http://www.SafeRTOS.com - A version that is certified for use in safety \r
44         critical systems.\r
45 \r
46         http://www.OpenRTOS.com - Commercial support, development, porting, \r
47         licensing and training services.\r
48 */\r
49 \r
50   .title "crt0.S"\r
51 \r
52   .extern main\r
53   .extern __stack\r
54   .extern __bss_start\r
55   .extern __text_start\r
56   .extern init_main\r
57 \r
58   .equ    MCF5XXX_RAMBAR_SPV,   0x00000200\r
59   .equ    MCF5XXX_RAMBAR_V,     0x00000001\r
60   .global start\r
61 \r
62   .align  4\r
63 debug:\r
64   .word   0x2C80    /* write to CSR */\r
65   .word   0x0010\r
66   .word   0x0400\r
67   .word   0x0000\r
68 \r
69 start:\r
70   /* disable all interrupts on startup. */\r
71   move.w  #0x2700, sr\r
72 \r
73   /* prepare internal SRAM. */\r
74   move.l  #__SRAM, d0\r
75   ori.l   #( MCF5XXX_RAMBAR_SPV | MCF5XXX_RAMBAR_V ), d0\r
76   movec   d0, rambar\r
77 \r
78   /* prepare stack and frame pointer. */\r
79   move.l  #__stack, sp\r
80   link    a6, #-8\r
81 \r
82   /* initialize hardware. */\r
83   jsr     init_main\r
84 \r
85   /* zero out the bss section. */\r
86   move.l  #__bss_start, d1\r
87   move.l  #_end, d0\r
88   cmp.l   d0, d1\r
89   jbeq    3f\r
90   move.l  d1, a0\r
91   sub.l   d1, d0\r
92   subq.l  #1, d0\r
93 2:\r
94   clr.b   (a0)+\r
95   subq.l  #1, d0\r
96   jbpl    2b\r
97 3:\r
98 \r
99   /* Relocate the data section. */\r
100   move.l  #__data_load_start, %a0         /* .data in ROM */\r
101   move.l  #copy_start, %a1                /* .data in RAM */\r
102 \r
103   /* Test if the two sections overlap. This is the case when we are working\r
104    * with the debugger and the debugger loads the .data section.\r
105    */\r
106   cmpa.l  %a0, %a1\r
107   beq     2f\r
108 1:\r
109   /* Have we already copied everything. */\r
110   cmpa.l  #__data_load_end, %a0\r
111   beq     2f\r
112   move.b  (%a0)+, (%a1)+\r
113   bra     1b\r
114 \r
115 2:\r
116 \r
117   /* C library */\r
118   move.l  #__FINI_SECTION__, -(%sp)\r
119   jsr     atexit\r
120   jsr     __INIT_SECTION__\r
121 \r
122   /* call main(int argc, char *argv[] */\r
123   move.l  #0, -(sp)\r
124   move.l  #0, -(sp)\r
125   move.l  #0, -(sp)\r
126   jsr     main\r
127   lea     (sp, 12), %sp\r
128 \r
129   /* stop on exit from main. */\r
130 1:\r
131   halt\r
132 \r