Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:47

0001 /*
0002  *  MCF5206eLITE startup code
0003  *
0004  *  This file contains the entry point for the application.
0005  *  The name of this entry point is compiler dependent.
0006  *  It jumps to the BSP which is responsible for performing
0007  *  all initialization.
0008  */
0009 
0010 /*
0011  *  Copyright (C) 2000 OKTET Ltd., St.-Petersburg, Russia
0012  *  Author: Victor V. Vengerov <vvv@oktet.ru>
0013  *
0014  *  Based on work:
0015  *  Author:
0016  *    David Fiddes, D.J@fiddes.surfaid.org
0017  *    http://www.calm.hw.ac.uk/davidf/coldfire/
0018  *
0019  *  COPYRIGHT (c) 1989-1998.
0020  *  On-Line Applications Research Corporation (OAR).
0021  *
0022  *  The license and distribution terms for this file may be
0023  *  found in the file LICENSE in this distribution or at
0024  *  http://www.rtems.org/license/LICENSE.
0025  */
0026 
0027 #include <rtems/asm.h>
0028 #include "bsp.h"
0029 
0030 BEGIN_CODE
0031 
0032 /* Initial stack situated in on-chip static memory */
0033 #define INITIAL_STACK BSP_MEM_ADDR_SRAM+BSP_MEM_SIZE_SRAM-4
0034 
0035     PUBLIC  (INTERRUPT_VECTOR)
0036 SYM(INTERRUPT_VECTOR):
0037     .long   INITIAL_STACK       | 00: initial SSP
0038     .long   start           | 01: Initial PC
0039     .long   _unexp_exception    | 02: Access Error
0040     .long   _unexp_exception    | 03: Address Error
0041     .long   _unexp_exception    | 04: Illegal Instruction
0042     .long   _reserved_int       | 05: Reserved
0043     .long   _reserved_int       | 06: Reserved
0044     .long   _reserved_int       | 07: Reserved
0045     .long   _unexp_exception    | 08: Priveledge Violation
0046     .long   _unexp_exception    | 09: Trace
0047     .long   _unexp_exception    | 0A: Unimplemented A-Line
0048     .long   _unexp_exception    | 0B: Unimplemented F-Line
0049     .long   _unexp_exception    | 0C: Debug interrupt
0050     .long   _reserved_int       | 0D: Reserved
0051     .long   _unexp_exception    | 0E: Format error
0052     .long   _unexp_exception    | 0F: Uninitialized interrupt
0053     .long   _reserved_int       | 10: Reserved
0054     .long   _reserved_int       | 11: Reserved
0055     .long   _reserved_int       | 12: Reserved
0056     .long   _reserved_int       | 13: Reserved
0057     .long   _reserved_int       | 14: Reserved
0058     .long   _reserved_int       | 15: Reserved
0059     .long   _reserved_int       | 16: Reserved
0060     .long   _reserved_int       | 17: Reserved
0061     .long   _spurious_int       | 18: Spurious interrupt
0062     .long   _avec1_int      | 19: Autovector Level 1
0063     .long   _avec2_int      | 1A: Autovector Level 2
0064     .long   _avec3_int      | 1B: Autovector Level 3
0065     .long   _avec4_int      | 1C: Autovector Level 4
0066     .long   _avec5_int      | 1D: Autovector Level 5
0067     .long   _avec6_int      | 1E: Autovector Level 6
0068     .long   _avec7_int      | 1F: Autovector Level 7
0069     .long   _unexp_exception    | 20: TRAP #0
0070     .long   _unexp_exception    | 21: TRAP #1
0071     .long   _unexp_exception    | 22: TRAP #2
0072     .long   _unexp_exception    | 23: TRAP #3
0073     .long   _unexp_exception    | 24: TRAP #4
0074     .long   _unexp_exception    | 25: TRAP #5
0075     .long   _unexp_exception    | 26: TRAP #6
0076     .long   _unexp_exception    | 27: TRAP #7
0077     .long   _unexp_exception    | 28: TRAP #8
0078     .long   _unexp_exception    | 29: TRAP #9
0079     .long   _unexp_exception    | 2A: TRAP #10
0080     .long   _unexp_exception    | 2B: TRAP #11
0081     .long   _unexp_exception    | 2C: TRAP #12
0082     .long   _unexp_exception    | 2D: TRAP #13
0083     .long   _unexp_exception    | 2E: TRAP #14
0084     .long   _unexp_exception    | 2F: TRAP #15
0085     .long   _reserved_int       | 30: Reserved
0086     .long   _reserved_int       | 31: Reserved
0087     .long   _reserved_int       | 32: Reserved
0088     .long   _reserved_int       | 33: Reserved
0089     .long   _reserved_int       | 34: Reserved
0090     .long   _reserved_int       | 35: Reserved
0091     .long   _reserved_int       | 36: Reserved
0092     .long   _reserved_int       | 37: Reserved
0093     .long   _reserved_int       | 38: Reserved
0094     .long   _reserved_int       | 39: Reserved
0095     .long   _reserved_int       | 3A: Reserved
0096     .long   _reserved_int       | 3B: Reserved
0097     .long   _reserved_int       | 3C: Reserved
0098     .long   _reserved_int       | 3D: Reserved
0099     .long   _reserved_int       | 3E: Reserved
0100     .long   _reserved_int       | 3F: Reserved
0101 
0102     .long   _unexp_int      | 40-FF: User defined interrupts
0103     .long   _unexp_int
0104     .long   _unexp_int
0105     .long   _unexp_int
0106     .long   _unexp_int
0107     .long   _unexp_int
0108     .long   _unexp_int
0109     .long   _unexp_int
0110     .long   _unexp_int
0111     .long   _unexp_int
0112     .long   _unexp_int
0113     .long   _unexp_int
0114     .long   _unexp_int
0115     .long   _unexp_int
0116     .long   _unexp_int
0117     .long   _unexp_int
0118 
0119     .long   _unexp_int      | 50:
0120     .long   _unexp_int
0121     .long   _unexp_int
0122     .long   _unexp_int
0123     .long   _unexp_int
0124     .long   _unexp_int
0125     .long   _unexp_int
0126     .long   _unexp_int
0127     .long   _unexp_int
0128     .long   _unexp_int
0129     .long   _unexp_int
0130     .long   _unexp_int
0131     .long   _unexp_int
0132     .long   _unexp_int
0133     .long   _unexp_int
0134     .long   _unexp_int
0135 
0136     .long   _unexp_int      | 60:
0137     .long   _unexp_int
0138     .long   _unexp_int
0139     .long   _unexp_int
0140     .long   _unexp_int
0141     .long   _unexp_int
0142     .long   _unexp_int
0143     .long   _unexp_int
0144     .long   _unexp_int
0145     .long   _unexp_int
0146     .long   _unexp_int
0147     .long   _unexp_int
0148     .long   _unexp_int
0149     .long   _unexp_int
0150     .long   _unexp_int
0151     .long   _unexp_int
0152 
0153     .long   _unexp_int      | 70:
0154     .long   _unexp_int
0155     .long   _unexp_int
0156     .long   _unexp_int
0157     .long   _unexp_int
0158     .long   _unexp_int
0159     .long   _unexp_int
0160     .long   _unexp_int
0161     .long   _unexp_int
0162     .long   _unexp_int
0163     .long   _unexp_int
0164     .long   _unexp_int
0165     .long   _unexp_int
0166     .long   _unexp_int
0167     .long   _unexp_int
0168     .long   _unexp_int
0169 
0170     .long   _unexp_int      | 80:
0171     .long   _unexp_int
0172     .long   _unexp_int
0173     .long   _unexp_int
0174     .long   _unexp_int
0175     .long   _unexp_int
0176     .long   _unexp_int
0177     .long   _unexp_int
0178     .long   _unexp_int
0179     .long   _unexp_int
0180     .long   _unexp_int
0181     .long   _unexp_int
0182     .long   _unexp_int
0183     .long   _unexp_int
0184     .long   _unexp_int
0185     .long   _unexp_int
0186 
0187     .long   _unexp_int      | 90:
0188     .long   _unexp_int
0189     .long   _unexp_int
0190     .long   _unexp_int
0191     .long   _unexp_int
0192     .long   _unexp_int
0193     .long   _unexp_int
0194     .long   _unexp_int
0195     .long   _unexp_int
0196     .long   _unexp_int
0197     .long   _unexp_int
0198     .long   _unexp_int
0199     .long   _unexp_int
0200     .long   _unexp_int
0201     .long   _unexp_int
0202     .long   _unexp_int
0203 
0204     .long   _unexp_int      | A0:
0205     .long   _unexp_int
0206     .long   _unexp_int
0207     .long   _unexp_int
0208     .long   _unexp_int
0209     .long   _unexp_int
0210     .long   _unexp_int
0211     .long   _unexp_int
0212     .long   _unexp_int
0213     .long   _unexp_int
0214     .long   _unexp_int
0215     .long   _unexp_int
0216     .long   _unexp_int
0217     .long   _unexp_int
0218     .long   _unexp_int
0219     .long   _unexp_int
0220 
0221     .long   _unexp_int      | B0:
0222     .long   _unexp_int
0223     .long   _unexp_int
0224     .long   _unexp_int
0225     .long   _unexp_int
0226     .long   _unexp_int
0227     .long   _unexp_int
0228     .long   _unexp_int
0229     .long   _unexp_int
0230     .long   _unexp_int
0231     .long   _unexp_int
0232     .long   _unexp_int
0233     .long   _unexp_int
0234     .long   _unexp_int
0235     .long   _unexp_int
0236     .long   _unexp_int
0237 
0238     .long   _unexp_int      | C0:
0239     .long   _unexp_int
0240     .long   _unexp_int
0241     .long   _unexp_int
0242     .long   _unexp_int
0243     .long   _unexp_int
0244     .long   _unexp_int
0245     .long   _unexp_int
0246     .long   _unexp_int
0247     .long   _unexp_int
0248     .long   _unexp_int
0249     .long   _unexp_int
0250     .long   _unexp_int
0251     .long   _unexp_int
0252     .long   _unexp_int
0253     .long   _unexp_int
0254 
0255     .long   _unexp_int      | D0:
0256     .long   _unexp_int
0257     .long   _unexp_int
0258     .long   _unexp_int
0259     .long   _unexp_int
0260     .long   _unexp_int
0261     .long   _unexp_int
0262     .long   _unexp_int
0263     .long   _unexp_int
0264     .long   _unexp_int
0265     .long   _unexp_int
0266     .long   _unexp_int
0267     .long   _unexp_int
0268     .long   _unexp_int
0269     .long   _unexp_int
0270     .long   _unexp_int
0271 
0272     .long   _unexp_int      | E0:
0273     .long   _unexp_int
0274     .long   _unexp_int
0275     .long   _unexp_int
0276     .long   _unexp_int
0277     .long   _unexp_int
0278     .long   _unexp_int
0279     .long   _unexp_int
0280     .long   _unexp_int
0281     .long   _unexp_int
0282     .long   _unexp_int
0283     .long   _unexp_int
0284     .long   _unexp_int
0285     .long   _unexp_int
0286     .long   _unexp_int
0287     .long   _unexp_int
0288 
0289     .long   _unexp_int      | F0:
0290     .long   _unexp_int
0291     .long   _unexp_int
0292     .long   _unexp_int
0293     .long   _unexp_int
0294     .long   _unexp_int
0295     .long   _unexp_int
0296     .long   _unexp_int
0297     .long   _unexp_int
0298     .long   _unexp_int
0299     .long   _unexp_int
0300     .long   _unexp_int
0301     .long   _unexp_int
0302     .long   _unexp_int
0303     .long   _unexp_int
0304     .long   _unexp_int
0305 
0306     PUBLIC(start)
0307 SYM(start):
0308     move.w  #0x2700,sr      | First turn off all interrupts!
0309 
0310     move.l  #(BSP_MEM_ADDR_SRAM + MCF5206E_RAMBAR_V),d0
0311     movec   d0,rambar0      | ...so we have a stack
0312 
0313     move.l  #(INITIAL_STACK),sp | Set up stack again (may be we are
0314                     | going here from monitor or with
0315                     | BDM interface assistance)
0316 
0317     /*
0318      * Remainder of the startup code is handled by C code
0319      */
0320     jmp SYM(Init5206e)      | Start C code (which never returns)
0321 
0322 /***************************************************************************
0323    Function : CopyDataClearBSSAndStart
0324 
0325    Description : Copy DATA segment, clear BSS segment, initialize heap,
0326    initialise real stack, start C program. Assume that DATA and BSS sizes
0327    are multiples of 4.
0328  ***************************************************************************/
0329     PUBLIC (CopyDataClearBSSAndStart)
0330 SYM(CopyDataClearBSSAndStart):
0331     lea copy_start,a0       | Get start of DATA in RAM
0332     lea SYM(etext),a2       | Get start of DATA in ROM
0333     cmpl    a0,a2           | Are they the same?
0334     beq.s   NOCOPY          | Yes, no copy necessary
0335     lea copy_end,a1     | Get end of DATA in RAM
0336     bra.s   COPYLOOPTEST        | Branch into copy loop
0337 COPYLOOP:
0338     movel   a2@+,a0@+       | Copy word from ROM to RAM
0339 COPYLOOPTEST:
0340     cmpl    a1,a0           | Done?
0341     bcs.s   COPYLOOP        | No, skip
0342 NOCOPY:
0343 
0344     lea clear_start,a0      | Get start of BSS
0345     lea clear_end,a1        | Get end of BSS
0346     clrl    d0          | Value to set
0347     bra.s   ZEROLOOPTEST        | Branch into clear loop
0348 ZEROLOOP:
0349     movel   d0,a0@+         | Clear a word
0350 ZEROLOOPTEST:
0351     cmpl    a1,a0           | Done?
0352     bcs.s   ZEROLOOP        | No, skip
0353     move    4(a7),d0
0354 
0355     /*
0356      * Right : Now we're ready to boot RTEMS
0357      */
0358     move.l  #_ISR_Stack_area_end,sp | Use configuration defined stack
0359     clrl    d0          | Pass in null to all boot_card() params
0360     movel   d0,a7@-         | command line
0361     jsr SYM(boot_card)      | Call C boot_card function to startup RTEMS
0362 
0363 # Wait forever
0364 _stop:
0365     nop
0366     stop    #0x2700
0367     jmp _stop
0368 
0369 # The following labelled nops is a placeholders for breakpoints
0370 _unexp_exception:
0371     nop
0372     jmp _stop
0373 
0374 _unexp_int:
0375     nop
0376     jmp _stop
0377 
0378 _reserved_int:
0379     nop
0380     jmp _stop
0381 
0382 _spurious_int:
0383     nop
0384     jmp _stop
0385 
0386 _avec1_int:
0387     nop
0388     jmp _unexp_int
0389 
0390 _avec2_int:
0391     nop
0392     jmp _unexp_int
0393 
0394 _avec3_int:
0395     nop
0396     jmp _unexp_int
0397 
0398 _avec4_int:
0399     nop
0400     jmp _unexp_int
0401 
0402 _avec5_int:
0403     nop
0404     jmp _unexp_int
0405 
0406 _avec6_int:
0407     nop
0408     jmp _unexp_int
0409 
0410 _avec7_int:
0411     nop
0412     jmp _unexp_int
0413 
0414 END_CODE
0415 
0416 END