Changeset 7ffdc70 in rtems


Ignore:
Timestamp:
Jul 6, 2009, 3:28:09 PM (10 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, master
Children:
7c46cf5
Parents:
81551a2
Message:

2009-07-03 Josh Switnicki <josh.switnicki@…>

  • start/start.S: copied gcrt1.S and macros.inc from avr-libc. Change from call main to call boot_card for RTEMS.
  • start/macros.inc: New file.
Location:
c/src/lib/libbsp/avr/avrtest
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/avr/avrtest/ChangeLog

    r81551a2 r7ffdc70  
     12009-07-03      Josh Switnicki <josh.switnicki@utoronto.ca>
     2       
     3        * start/start.S: copied gcrt1.S and macros.inc from avr-libc.
     4        Change from call main to call boot_card for RTEMS.
     5        * start/macros.inc: New file.
     6
    172009-05-08      Joel Sherrill <joel.sherrill@oarcorp.com>
    28
  • c/src/lib/libbsp/avr/avrtest/start/start.S

    r81551a2 r7ffdc70  
    1 #warning Call to boot_card has changed and needs checking.
    2 #warning The call is "void boot_card(const char* cmdline);"
    3 #warning Please check and remove these warnings.
    4 
    5 #define SPL 0x3d
    6 #define SPH 0x3e
    7 #define SREG 0x3f
    8 #define RAMPZ 0x3b
    9 
    10 #define RAMEND (64 * 1024)
    11 
    12 /*
    13         .weak   __stack
    14         .set    __stack, RAMEND - 1
    15 */
    16 
    17         .weak   __heap_end
    18         .set    __heap_end, 0
    19 
     1/* Copyright (c) 2002, Marek Michalkiewicz <marekm@amelek.gda.pl>
     2   Copyright (c) 2007, Eric B. Weddington
     3   All rights reserved.
     4
     5   Redistribution and use in source and binary forms, with or without
     6   modification, are permitted provided that the following conditions are met:
     7
     8   * Redistributions of source code must retain the above copyright
     9     notice, this list of conditions and the following disclaimer.
     10
     11   * Redistributions in binary form must reproduce the above copyright
     12     notice, this list of conditions and the following disclaimer in
     13     the documentation and/or other materials provided with the
     14     distribution.
     15
     16   * Neither the name of the copyright holders nor the names of
     17     contributors may be used to endorse or promote products derived
     18     from this software without specific prior written permission.
     19
     20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
     24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     30   POSSIBILITY OF SUCH DAMAGE. */
     31
     32/* $Id$ */
     33
     34#if (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
     35#error "GCC version >= 3.3 required"
     36#endif
     37
     38#include "macros.inc"
     39
     40        .macro  vector name
     41        .if (. - __vectors < _VECTORS_SIZE)
     42        .weak   \name
     43        .set    \name, __bad_interrupt
     44        XJMP    \name
     45        .endif
     46        .endm
    2047
    2148        .section .vectors,"ax",@progbits
     
    2350        .func   __vectors
    2451__vectors:
    25 __reset:
    26         jmp     __start
    27         .endfunc       
     52        XJMP    __init
     53        vector  __vector_1
     54        vector  __vector_2
     55        vector  __vector_3
     56        vector  __vector_4
     57        vector  __vector_5
     58        vector  __vector_6
     59        vector  __vector_7
     60        vector  __vector_8
     61        vector  __vector_9
     62        vector  __vector_10
     63        vector  __vector_11
     64        vector  __vector_12
     65        vector  __vector_13
     66        vector  __vector_14
     67        vector  __vector_15
     68        vector  __vector_16
     69        vector  __vector_17
     70        vector  __vector_18
     71        vector  __vector_19
     72        vector  __vector_20
     73        vector  __vector_21
     74        vector  __vector_22
     75        vector  __vector_23
     76        vector  __vector_24
     77        vector  __vector_25
     78        vector  __vector_26
     79        vector  __vector_27
     80        vector  __vector_28
     81        vector  __vector_29
     82        vector  __vector_30
     83        vector  __vector_31
     84        vector  __vector_32
     85        vector  __vector_33
     86        vector  __vector_34
     87        vector  __vector_35
     88        vector  __vector_36
     89        vector  __vector_37
     90        vector  __vector_38
     91        vector  __vector_39
     92        vector  __vector_40
     93        vector  __vector_41
     94        vector  __vector_42
     95        vector  __vector_43
     96        vector  __vector_44
     97        vector  __vector_45
     98        vector  __vector_46
     99        vector  __vector_47
     100        vector  __vector_48
     101        vector  __vector_49
     102        vector  __vector_50
     103        vector  __vector_51
     104        vector  __vector_52
     105        vector  __vector_53
     106        vector  __vector_54
     107        vector  __vector_55
     108        vector  __vector_56
     109        vector  __vector_57
     110        vector  __vector_58
     111        vector  __vector_59
     112        vector  __vector_60
     113        vector  __vector_61
     114        vector  __vector_62
     115        vector  __vector_63
     116        vector  __vector_64
     117        vector  __vector_65
     118        vector  __vector_66
     119        vector  __vector_67
     120        vector  __vector_68
     121        vector  __vector_69
     122        vector  __vector_70
     123        vector  __vector_71
     124        vector  __vector_72
     125        vector  __vector_73
     126        vector  __vector_74
     127        vector  __vector_75
     128        vector  __vector_76
     129        vector  __vector_77
     130        vector  __vector_78
     131        vector  __vector_79
     132        vector  __vector_80
     133        vector  __vector_81
     134        vector  __vector_82
     135        vector  __vector_83
     136        vector  __vector_84
     137        vector  __vector_85
     138        vector  __vector_86
     139        vector  __vector_87
     140        vector  __vector_88
     141        vector  __vector_89
     142        vector  __vector_90
     143        vector  __vector_91
     144        vector  __vector_92
     145        vector  __vector_93
     146        vector  __vector_94
     147        vector  __vector_95
     148        vector  __vector_96
     149        vector  __vector_97
     150        vector  __vector_98
     151        vector  __vector_99
     152        vector  __vector_100
     153        vector  __vector_101
     154        vector  __vector_102
     155        vector  __vector_103
     156        vector  __vector_104
     157        vector  __vector_105
     158        vector  __vector_106
     159        vector  __vector_107
     160        vector  __vector_108
     161        vector  __vector_109
     162        vector  __vector_110
     163        vector  __vector_111
     164        vector  __vector_112
     165        vector  __vector_113
     166        vector  __vector_114
     167        vector  __vector_115
     168        vector  __vector_116
     169        vector  __vector_117
     170        vector  __vector_118
     171        vector  __vector_119
     172        vector  __vector_120
     173        vector  __vector_121
     174        vector  __vector_122
     175        vector  __vector_123
     176        vector  __vector_124
     177        vector  __vector_125
     178        .endfunc
     179
     180        /* Handle unexpected interrupts (enabled and no handler), which
     181           usually indicate a bug.  Jump to the __vector_default function
     182           if defined by the user, otherwise jump to the reset address.
     183
     184           This must be in a different section, otherwise the assembler
     185           will resolve "rjmp" offsets and there will be no relocs.  */
     186
     187        .text
     188        .global __bad_interrupt
     189        .func   __bad_interrupt
     190__bad_interrupt:
     191        .weak   __vector_default
     192        .set    __vector_default, __vectors
     193        XJMP    __vector_default
     194        .endfunc
    28195
    29196        .section .init0,"ax",@progbits
    30         .weak   __start
    31 ;       .func   __start
    32 __start:
    33        
     197        .weak   __init
     198;       .func   __init
     199__init:
     200
     201#ifndef __AVR_ASM_ONLY__
     202        .weak   __stack
     203
     204        /* By default, malloc() uses the current value of the stack pointer
     205           minus __malloc_margin as the highest available address.
     206
     207           In some applications with external SRAM, the stack can be below
     208           the data section (in the internal SRAM - faster), and __heap_end
     209           should be set to the highest address available for malloc().  */
     210        .weak   __heap_end
     211        .set    __heap_end, 0
     212
    34213        .section .init2,"ax",@progbits
    35         clr     r1
    36         out     0x3f, r1
     214        clr     __zero_reg__
     215        out     AVR_STATUS_ADDR, __zero_reg__
    37216        ldi     r28,lo8(__stack)
     217#ifdef _HAVE_AVR_STACK_POINTER_HI
    38218        ldi     r29,hi8(__stack)
    39         out     SPH, r29
    40         out     SPL, r28
    41 
     219        out     AVR_STACK_POINTER_HI_ADDR, r29
     220#endif  /* _HAVE_AVR_STACK_POINTER_HI */
     221        out     AVR_STACK_POINTER_LO_ADDR, r28
     222
     223#ifdef __AVR_3_BYTE_PC__
     224        ldi     r16, hh8(pm(__vectors))
     225        out     _SFR_IO_ADDR(EIND), r16
     226#endif  /* __AVR_3_BYTE_PC__ */
     227
     228#ifdef __AVR_HAVE_RAMPD__
     229        out     AVR_RAMPD_ADDR, __zero_reg__
     230        out     AVR_RAMPX_ADDR, __zero_reg__
     231        out     AVR_RAMPY_ADDR, __zero_reg__
     232        out     AVR_RAMPZ_ADDR, __zero_reg__
     233#endif
     234
     235#if BIG_CODE
    42236        /* Only for >64K devices with RAMPZ, replaces the default code
    43237           provided by libgcc.S which is only linked in if necessary.  */
     
    46240        .global __do_copy_data
    47241__do_copy_data:
    48         .global __do_clear_bss
    49 __do_clear_bss:
    50 #if 0
    51242        ldi     r17, hi8(__data_end)
    52        
    53243        ldi     r26, lo8(__data_start)
    54244        ldi     r27, hi8(__data_start)
    55        
    56245        ldi     r30, lo8(__data_load_start)
    57246        ldi     r31, hi8(__data_load_start)
     247
     248        /* On the enhanced core, "elpm" with post-increment updates RAMPZ
     249           automatically.  Otherwise we have to handle it ourselves.  */
     250
     251#ifdef __AVR_ENHANCED__
    58252        ldi     r16, hh8(__data_load_start)
    59         out     RAMPZ, r16
    60 
    61 0:     
     253#else
     254        ldi     r16, hh8(__data_load_start - 0x10000)
     255.L__do_copy_data_carry:
     256        inc     r16
     257#endif
     258        out     AVR_RAMPZ_ADDR, r16
     259        rjmp    .L__do_copy_data_start
     260.L__do_copy_data_loop:
     261#ifdef __AVR_ENHANCED__
     262        elpm    r0, Z+
     263#else
     264        elpm
     265#endif
     266        st      X+, r0
     267#ifndef __AVR_ENHANCED__
     268        adiw    r30, 1
     269        brcs    .L__do_copy_data_carry
     270#endif
     271.L__do_copy_data_start:
    62272        cpi     r26, lo8(__data_end)
    63273        cpc     r27, r17
    64         breq    1f
    65        
    66         elpm    r0, Z+
    67         st      X+, r0
    68         rjmp    0b
    69 1:     
    70 #endif
     274        brne    .L__do_copy_data_loop
     275#ifdef __AVR_HAVE_RAMPD__
     276        out     AVR_RAMPZ_ADDR, __zero_reg__
     277#endif /* __AVR_HAVE_RAMPD__*/
     278
     279#endif /* BIG_CODE */
     280
     281        .set    __stack, RAMEND
     282#endif /* !__AVR_ASM_ONLY__ */
    71283
    72284        .section .init9,"ax",@progbits
    73         call    boot_card
    74         jmp     exit
     285#ifdef __AVR_ASM_ONLY__
     286        XJMP    boot_card
     287#else   /* !__AVR_ASM_ONLY__ */
     288        XCALL   boot_card
     289        XJMP    exit
     290#endif  /* __AVR_ASM_ONLY__ */
    75291;       .endfunc
    76292
    77         .global exit
    78         .func   exit
    79 exit:   out 0x2f, r0
    80         .endfunc
    81 
    82         .global abort
    83         .func   abort
    84 abort:  out 0x29, r0
    85         .endfunc
Note: See TracChangeset for help on using the changeset viewer.