Back to home page

LXR

 
 

    


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

0001 /*
0002  *  CSB360 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) 2004 Cogent Computer Systems
0012  *  Author: Jay Monkman <jtm@lopingdog.com>
0013  *
0014  *  Based on start.S from mcf520elite BSP:
0015  *    Copyright (C) 2000 OKTET Ltd., St.-Petersburg, Russia
0016  *    Author: Victor V. Vengerov <vvv@oktet.ru>
0017  *
0018  *  Based on work:
0019  *    David Fiddes, D.J@fiddes.surfaid.org
0020  *    http://www.calm.hw.ac.uk/davidf/coldfire/
0021  *
0022  *  COPYRIGHT (c) 1989-1998.
0023  *  On-Line Applications Research Corporation (OAR).
0024  *
0025  *  The license and distribution terms for this file may be
0026  *  found in the file LICENSE in this distribution or at
0027  *  http://www.rtems.org/license/LICENSE.
0028  */
0029 
0030 #include <rtems/asm.h>
0031 #include <bsp.h>
0032 
0033 BEGIN_CODE
0034 
0035 /* Initial stack situated in on-chip static memory */
0036 #define INITIAL_STACK BSP_MEM_ADDR_SRAM+BSP_MEM_SIZE_SRAM-4
0037 
0038     PUBLIC  (INTERRUPT_VECTOR)
0039 SYM(INTERRUPT_VECTOR):
0040     .long   INITIAL_STACK       | 00: initial SSP
0041     .long   start           | 01: Initial PC
0042     .long   _unexp_exception    | 02: Access Error
0043     .long   _unexp_exception    | 03: Address Error
0044     .long   _unexp_exception    | 04: Illegal Instruction
0045     .long   _reserved_int       | 05: Reserved
0046     .long   _reserved_int       | 06: Reserved
0047     .long   _reserved_int       | 07: Reserved
0048     .long   _unexp_exception    | 08: Priveledge Violation
0049     .long   _unexp_exception    | 09: Trace
0050     .long   _unexp_exception    | 0A: Unimplemented A-Line
0051     .long   _unexp_exception    | 0B: Unimplemented F-Line
0052     .long   _unexp_exception    | 0C: Debug interrupt
0053     .long   _reserved_int       | 0D: Reserved
0054     .long   _unexp_exception    | 0E: Format error
0055     .long   _unexp_exception    | 0F: Uninitialized interrupt
0056     .long   _reserved_int       | 10: Reserved
0057     .long   _reserved_int       | 11: Reserved
0058     .long   _reserved_int       | 12: Reserved
0059     .long   _reserved_int       | 13: Reserved
0060     .long   _reserved_int       | 14: Reserved
0061     .long   _reserved_int       | 15: Reserved
0062     .long   _reserved_int       | 16: Reserved
0063     .long   _reserved_int       | 17: Reserved
0064     .long   _spurious_int       | 18: Spurious interrupt
0065     .long   _avec1_int      | 19: Autovector Level 1
0066     .long   _avec2_int      | 1A: Autovector Level 2
0067     .long   _avec3_int      | 1B: Autovector Level 3
0068     .long   _avec4_int      | 1C: Autovector Level 4
0069     .long   _avec5_int      | 1D: Autovector Level 5
0070     .long   _avec6_int      | 1E: Autovector Level 6
0071     .long   _avec7_int      | 1F: Autovector Level 7
0072     .long   _unexp_exception    | 20: TRAP #0
0073     .long   _unexp_exception    | 21: TRAP #1
0074     .long   _unexp_exception    | 22: TRAP #2
0075     .long   _unexp_exception    | 23: TRAP #3
0076     .long   _unexp_exception    | 24: TRAP #4
0077     .long   _unexp_exception    | 25: TRAP #5
0078     .long   _unexp_exception    | 26: TRAP #6
0079     .long   _unexp_exception    | 27: TRAP #7
0080     .long   _unexp_exception    | 28: TRAP #8
0081     .long   _unexp_exception    | 29: TRAP #9
0082     .long   _unexp_exception    | 2A: TRAP #10
0083     .long   _unexp_exception    | 2B: TRAP #11
0084     .long   _unexp_exception    | 2C: TRAP #12
0085     .long   _unexp_exception    | 2D: TRAP #13
0086     .long   _unexp_exception    | 2E: TRAP #14
0087     .long   _unexp_exception    | 2F: TRAP #15
0088     .long   _reserved_int       | 30: Reserved
0089     .long   _reserved_int       | 31: Reserved
0090     .long   _reserved_int       | 32: Reserved
0091     .long   _reserved_int       | 33: Reserved
0092     .long   _reserved_int       | 34: Reserved
0093     .long   _reserved_int       | 35: Reserved
0094     .long   _reserved_int       | 36: Reserved
0095     .long   _reserved_int       | 37: Reserved
0096     .long   _reserved_int       | 38: Reserved
0097     .long   _reserved_int       | 39: Reserved
0098     .long   _reserved_int       | 3A: Reserved
0099     .long   _reserved_int       | 3B: Reserved
0100     .long   _reserved_int       | 3C: Reserved
0101     .long   _reserved_int       | 3D: Reserved
0102     .long   _reserved_int       | 3E: Reserved
0103     .long   _reserved_int       | 3F: Reserved
0104 
0105     .long   _unexp_int      | 40-FF: User defined interrupts
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     .long   _unexp_int
0119     .long   _unexp_int
0120     .long   _unexp_int
0121 
0122     .long   _unexp_int      | 50:
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     .long   _unexp_int
0136     .long   _unexp_int
0137     .long   _unexp_int
0138 
0139     .long   _unexp_int      | 60:
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     .long   _unexp_int
0153     .long   _unexp_int
0154     .long   _unexp_int
0155 
0156     .long   _unexp_int      | 70:
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     .long   _unexp_int
0170     .long   _unexp_int
0171     .long   _unexp_int
0172 
0173     .long   _unexp_int      | 80:
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     .long   _unexp_int
0187     .long   _unexp_int
0188     .long   _unexp_int
0189 
0190     .long   _unexp_int      | 90:
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     .long   _unexp_int
0204     .long   _unexp_int
0205     .long   _unexp_int
0206 
0207     .long   _unexp_int      | A0:
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     .long   _unexp_int
0221     .long   _unexp_int
0222     .long   _unexp_int
0223 
0224     .long   _unexp_int      | B0:
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     .long   _unexp_int
0238     .long   _unexp_int
0239     .long   _unexp_int
0240 
0241     .long   _unexp_int      | C0:
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     .long   _unexp_int
0255     .long   _unexp_int
0256     .long   _unexp_int
0257 
0258     .long   _unexp_int      | D0:
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     .long   _unexp_int
0272     .long   _unexp_int
0273     .long   _unexp_int
0274 
0275     .long   _unexp_int      | E0:
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     .long   _unexp_int
0289     .long   _unexp_int
0290     .long   _unexp_int
0291 
0292     .long   _unexp_int      | F0:
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     .long   _unexp_int
0306     .long   _unexp_int
0307     .long   _unexp_int
0308 
0309     PUBLIC(start)
0310 SYM(start):
0311     move.w  #0x2700,sr      | First turn off all interrupts!
0312 
0313     move.l  #(BSP_RAMBAR + MCF5272_RAMBAR_V), d0
0314     movec   d0,rambar0      | ...so we have a stack
0315 
0316     move.l  #(INITIAL_STACK),sp | Set up stack again (may be we are
0317                     | going here from monitor or with
0318                     | BDM interface assistance)
0319 
0320     /*
0321      * Remainder of the startup code is handled by C code
0322      */
0323     jmp SYM(init5272)       | Start C code (which never returns)
0324 
0325 /***************************************************************************
0326    Function : clear_bss
0327 
0328    Description : clear BSS segment
0329  ***************************************************************************/
0330     PUBLIC (clear_bss)
0331 SYM(clear_bss):
0332     lea clear_start,a0      | Get start of BSS
0333     lea clear_end,a1        | Get end of BSS
0334     clrl    d0          | Value to set
0335     bra.s   ZEROLOOPTEST        | Branch into clear loop
0336 ZEROLOOP:
0337     movel   d0,a0@+         | Clear a word
0338 ZEROLOOPTEST:
0339     cmpl    a1,a0           | Done?
0340     bcs.s   ZEROLOOP        | No, skip
0341 
0342     rts
0343 
0344 
0345 
0346 
0347     PUBLIC (start_csb360)
0348 SYM(start_csb360):
0349     /*
0350      * Right : Now we're ready to boot RTEMS
0351      */
0352     move.l  #_ISR_Stack_area_end,sp | Use configuration defined stack
0353     clrl    d0          | Pass in null to all boot_card() params
0354     movel   d0,a7@-         | command line
0355     jsr SYM(boot_card)      | Call C boot_card function to startup RTEMS
0356 
0357 
0358 
0359 # Wait forever
0360 _stop:
0361     nop
0362     stop    #0x2700
0363     jmp _stop
0364 
0365 # The following labelled nops is a placeholders for breakpoints
0366 _unexp_exception:
0367     nop
0368     jmp _stop
0369 
0370 _unexp_int:
0371     nop
0372     jmp _stop
0373 
0374 _reserved_int:
0375     nop
0376     jmp _stop
0377 
0378 _spurious_int:
0379     nop
0380     jmp _stop
0381 
0382 _avec1_int:
0383     nop
0384     jmp _unexp_int
0385 
0386 _avec2_int:
0387     nop
0388     jmp _unexp_int
0389 
0390 _avec3_int:
0391     nop
0392     jmp _unexp_int
0393 
0394 _avec4_int:
0395     nop
0396     jmp _unexp_int
0397 
0398 _avec5_int:
0399     nop
0400     jmp _unexp_int
0401 
0402 _avec6_int:
0403     nop
0404     jmp _unexp_int
0405 
0406 _avec7_int:
0407     nop
0408     jmp _unexp_int
0409 
0410 
0411 END_CODE
0412 
0413 END
0414