OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [lwIP_MCF5235_GCC/] [system/] [crt0.S] - Rev 586

Go to most recent revision | Compare with Previous | Blame | View Log

/*
    FreeRTOS MCF5235 port - Copyright (C) 2006 Christian Walter.

    This file is part of the FreeRTOS distribution.

    FreeRTOS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License** as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    FreeRTOS is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with FreeRTOS; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    A special exception to the GPL can be applied should you wish to distribute
    a combined work that includes FreeRTOS, without being obliged to provide
    the source code for any proprietary components.  See the licensing section
    of http://www.FreeRTOS.org for full details of how and when the exception
    can be applied.

    ***************************************************************************
    ***************************************************************************
    *                                                                         *
    * Get the FreeRTOS eBook!  See http://www.FreeRTOS.org/Documentation      *
        *                                                                         *
        * This is a concise, step by step, 'hands on' guide that describes both   *
        * general multitasking concepts and FreeRTOS specifics. It presents and   *
        * explains numerous examples that are written using the FreeRTOS API.     *
        * Full source code for all the examples is provided in an accompanying    *
        * .zip file.                                                              *
    *                                                                         *
    ***************************************************************************
    ***************************************************************************

        Please ensure to read the configuration and relevant port sections of the
        online documentation.

        http://www.FreeRTOS.org - Documentation, latest information, license and 
        contact details.

        http://www.SafeRTOS.com - A version that is certified for use in safety 
        critical systems.

        http://www.OpenRTOS.com - Commercial support, development, porting, 
        licensing and training services.
*/

  .title "crt0.S"

  .extern main
  .extern __stack
  .extern __bss_start
  .extern __text_start
  .extern init_main

  .equ    MCF5XXX_RAMBAR_SPV,   0x00000200
  .equ    MCF5XXX_RAMBAR_V,     0x00000001
  .global start

  .align  4
debug:
  .word   0x2C80    /* write to CSR */
  .word   0x0010
  .word   0x0400
  .word   0x0000

start:
  /* disable all interrupts on startup. */
  move.w  #0x2700, sr

  /* prepare internal SRAM. */
  move.l  #__SRAM, d0
  ori.l   #( MCF5XXX_RAMBAR_SPV | MCF5XXX_RAMBAR_V ), d0
  movec   d0, rambar

  /* prepare stack and frame pointer. */
  move.l  #__stack, sp
  link    a6, #-8

  /* initialize hardware. */
  jsr     init_main

  /* zero out the bss section. */
  move.l  #__bss_start, d1
  move.l  #_end, d0
  cmp.l   d0, d1
  jbeq    3f
  move.l  d1, a0
  sub.l   d1, d0
  subq.l  #1, d0
2:
  clr.b   (a0)+
  subq.l  #1, d0
  jbpl    2b
3:

  /* Relocate the data section. */
  move.l  #__data_load_start, %a0         /* .data in ROM */
  move.l  #copy_start, %a1                /* .data in RAM */

  /* Test if the two sections overlap. This is the case when we are working
   * with the debugger and the debugger loads the .data section.
   */
  cmpa.l  %a0, %a1
  beq     2f
1:
  /* Have we already copied everything. */
  cmpa.l  #__data_load_end, %a0
  beq     2f
  move.b  (%a0)+, (%a1)+
  bra     1b

2:

  /* C library */
  move.l  #__FINI_SECTION__, -(%sp)
  jsr     atexit
  jsr     __INIT_SECTION__

  /* call main(int argc, char *argv[] */
  move.l  #0, -(sp)
  move.l  #0, -(sp)
  move.l  #0, -(sp)
  jsr     main
  lea     (sp, 12), %sp

  /* stop on exit from main. */
1:
  halt

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.