]> git.sur5r.net Git - freertos/blob - Demo/MCF5235_GCC/system/crt0.S
Add PIC24, dsPIC and Coldfire files.
[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     See http://www.FreeRTOS.org for documentation, latest information, license
28     and contact details.  Please ensure to read the configuration and relevant
29     port sections of the online documentation.
30     ***************************************************************************
31 */
32
33   .title "crt0.S"
34
35   .extern main
36   .extern __stack
37   .extern __bss_start
38   .extern __text_start
39   .extern init_main
40
41   .equ    MCF5XXX_RAMBAR_SPV,   0x00000200
42   .equ    MCF5XXX_RAMBAR_V,     0x00000001
43   .global start
44
45   .align  4
46 debug:
47   .word   0x2C80    /* write to CSR */
48   .word   0x0010
49   .word   0x0400
50   .word   0x0000
51
52 start:
53   /* disable all interrupts on startup. */
54   move.w  #0x2700, sr
55
56   /* prepare internal SRAM. */
57   move.l  #__SRAM, d0
58   ori.l   #( MCF5XXX_RAMBAR_SPV | MCF5XXX_RAMBAR_V ), d0
59   movec   d0, rambar
60
61   /* prepare stack and frame pointer. */
62   move.l  #__stack, sp
63   link    a6, #-8
64
65   /* initialize hardware. */
66   jsr     init_main
67
68   /* zero out the bss section. */
69   move.l  #__bss_start, d1
70   move.l  #_end, d0
71   cmp.l   d0, d1
72   jbeq    3f
73   move.l  d1, a0
74   sub.l   d1, d0
75   subq.l  #1, d0
76 2:
77   clr.b   (a0)+
78   subq.l  #1, d0
79   jbpl    2b
80 3:
81
82   /* Relocate the data section. */
83   move.l  #__data_load_start, %a0         /* .data in ROM */
84   move.l  #copy_start, %a1                /* .data in RAM */
85
86   /* Test if the two sections overlap. This is the case when we are working
87    * with the debugger and the debugger loads the .data section.
88    */
89   cmpa.l  %a0, %a1
90   beq     2f
91 1:
92   /* Have we already copied everything. */
93   cmpa.l  #__data_load_end, %a0
94   beq     2f
95   move.b  (%a0)+, (%a1)+
96   bra     1b
97
98 2:
99
100   /* C library */
101   move.l  #__FINI_SECTION__, -(%sp)
102   jsr     atexit
103   jsr     __INIT_SECTION__
104
105   /* call main(int argc, char *argv[] */
106   move.l  #0, -(sp)
107   move.l  #0, -(sp)
108   move.l  #0, -(sp)
109   jsr     main
110   lea     (sp, 12), %sp
111
112   /* stop on exit from main. */
113 1:
114   halt
115