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