Back to home page

LXR

 
 

    


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

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  *  uC5282 startup code
0005  *
0006  *  This file contains the entry point for the application.
0007  *  The name of this entry point is compiler dependent.
0008  *  It jumps to the BSP which is responsible for performing
0009  *  all initialization.
0010  */
0011 
0012 /*
0013  *  COPYRIGHT (c) 1989-2014.
0014  *  On-Line Applications Research Corporation (OAR).
0015  *
0016  * Redistribution and use in source and binary forms, with or without
0017  * modification, are permitted provided that the following conditions
0018  * are met:
0019  * 1. Redistributions of source code must retain the above copyright
0020  *    notice, this list of conditions and the following disclaimer.
0021  * 2. Redistributions in binary form must reproduce the above copyright
0022  *    notice, this list of conditions and the following disclaimer in the
0023  *    documentation and/or other materials provided with the distribution.
0024  *
0025  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0026  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0027  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0028  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0029  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0030  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0031  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0032  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0033  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0034  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0035  * POSSIBILITY OF SUCH DAMAGE.
0036  */
0037 
0038 #include <bsp.h>
0039 #include <rtems/asm.h>
0040 
0041 #define SRAM_SIZE (64*1024)
0042 #define DEFAULT_IPSBAR  0x40000000
0043 
0044 BEGIN_CODE
0045 #define INITIAL_STACK __SRAMBASE+SRAM_SIZE-4
0046 
0047     PUBLIC (INTERRUPT_VECTOR)
0048 SYM(INTERRUPT_VECTOR):
0049     .long   INITIAL_STACK   |   0: Initial 'SSP'
0050     .long   start           |   1: Initial PC
0051     .long   SYM(_uhoh)      |   2: Bus error
0052     .long   SYM(_uhoh)      |   3: Address error
0053     .long   SYM(_uhoh)      |   4: Illegal instruction
0054     .long   SYM(_uhoh)      |   5: Zero division
0055     .long   SYM(_uhoh)      |   6: CHK, CHK2 instruction
0056     .long   SYM(_uhoh)      |   7: TRAPcc, TRAPV instructions
0057     .long   SYM(_uhoh)      |   8: Privilege violation
0058     .long   SYM(_uhoh)      |   9: Trace
0059     .long   SYM(_uhoh)      |  10: Line 1010 emulator
0060     .long   SYM(_uhoh)      |  11: Line 1111 emulator
0061     .long   SYM(_uhoh)      |  12: Hardware breakpoint
0062     .long   SYM(_uhoh)      |  13: Reserved for coprocessor violation
0063     .long   SYM(_uhoh)      |  14: Format error
0064     .long   SYM(_uhoh)      |  15: Uninitialized interrupt
0065     .long   SYM(_uhoh)      |  16: Unassigned, reserved
0066     .long   SYM(_uhoh)      |  17:
0067     .long   SYM(_uhoh)      |  18:
0068     .long   SYM(_uhoh)      |  19:
0069     .long   SYM(_uhoh)      |  20:
0070     .long   SYM(_uhoh)      |  21:
0071     .long   SYM(_uhoh)      |  22:
0072     .long   SYM(_uhoh)      |  23:
0073     .long   SYM(_spuriousInterrupt) |  24: Spurious interrupt
0074     .long   SYM(_uhoh)      |  25: Level 1 interrupt autovector
0075     .long   SYM(_uhoh)      |  26: Level 2 interrupt autovector
0076     .long   SYM(_uhoh)      |  27: Level 3 interrupt autovector
0077     .long   SYM(_uhoh)      |  28: Level 4 interrupt autovector
0078     .long   SYM(_uhoh)      |  29: Level 5 interrupt autovector
0079     .long   SYM(_uhoh)      |  30: Level 6 interrupt autovector
0080     .long   SYM(_uhoh)      |  31: Level 7 interrupt autovector
0081     .long   SYM(_uhoh)      |  32: Trap instruction (0-15)
0082     .long   SYM(_uhoh)      |  33:
0083     .long   SYM(_uhoh)      |  34:
0084     .long   SYM(_uhoh)      |  35:
0085     .long   SYM(_uhoh)      |  36:
0086     .long   SYM(_uhoh)      |  37:
0087     .long   SYM(_uhoh)      |  38:
0088     .long   SYM(_uhoh)      |  39:
0089     .long   SYM(_uhoh)      |  40:
0090     .long   SYM(_uhoh)      |  41:
0091     .long   SYM(_uhoh)      |  42:
0092     .long   SYM(_uhoh)      |  43:
0093     .long   SYM(_uhoh)      |  44:
0094     .long   SYM(_uhoh)      |  45:
0095     .long   SYM(_uhoh)      |  46:
0096     .long   SYM(_uhoh)      |  47:
0097     .long   SYM(_uhoh)      |  48: Reserved for coprocessor
0098     .long   SYM(_uhoh)      |  49:
0099     .long   SYM(_uhoh)      |  50:
0100     .long   SYM(_uhoh)      |  51:
0101     .long   SYM(_uhoh)      |  52:
0102     .long   SYM(_uhoh)      |  53:
0103     .long   SYM(_uhoh)      |  54:
0104     .long   SYM(_uhoh)      |  55:
0105     .long   SYM(_uhoh)      |  56:
0106     .long   SYM(_uhoh)      |  57:
0107     .long   SYM(_uhoh)      |  58:
0108     .long   SYM(_uhoh)      |  59: Unassigned, reserved
0109     .long   SYM(_uhoh)      |  60:
0110     .long   SYM(_uhoh)      |  61:
0111     .long   SYM(_uhoh)      |  62:
0112     .long   SYM(_uhoh)      |  63:
0113     .long   SYM(_spuriousInterrupt) |  64: User spurious handler
0114     .long   SYM(_uhoh)      |  65:
0115     .long   SYM(_uhoh)      |  66:
0116     .long   SYM(_uhoh)      |  67:
0117     .long   SYM(_uhoh)      |  68:
0118     .long   SYM(_uhoh)      |  69:
0119     .long   SYM(_uhoh)      |  70:
0120     .long   SYM(_uhoh)      |  71:
0121     .long   SYM(_uhoh)      |  72:
0122     .long   SYM(_uhoh)      |  73:
0123     .long   SYM(_uhoh)      |  74:
0124     .long   SYM(_uhoh)      |  75:
0125     .long   SYM(_uhoh)      |  76:
0126     .long   SYM(_uhoh)      |  77:
0127     .long   SYM(_uhoh)      |  78:
0128     .long   SYM(_uhoh)      |  79:
0129     .long   SYM(_uhoh)      |  80:
0130     .long   SYM(_uhoh)      |  81:
0131     .long   SYM(_uhoh)      |  82:
0132     .long   SYM(_uhoh)      |  83:
0133     .long   SYM(_uhoh)      |  84:
0134     .long   SYM(_uhoh)      |  85:
0135     .long   SYM(_uhoh)      |  86:
0136     .long   SYM(_uhoh)      |  87:
0137     .long   SYM(_uhoh)      |  88:
0138     .long   SYM(_uhoh)      |  89:
0139     .long   SYM(_uhoh)      |  90:
0140     .long   SYM(_uhoh)      |  91:
0141     .long   SYM(_uhoh)      |  92:
0142     .long   SYM(_uhoh)      |  93:
0143     .long   SYM(_uhoh)      |  94:
0144     .long   SYM(_uhoh)      |  95:
0145     .long   SYM(_uhoh)      |  96:
0146     .long   SYM(_uhoh)      |  97:
0147     .long   SYM(_uhoh)      |  98:
0148     .long   SYM(_uhoh)      |  99:
0149     .long   SYM(_uhoh)      | 100:
0150     .long   SYM(_uhoh)      | 101:
0151     .long   SYM(_uhoh)      | 102:
0152     .long   SYM(_uhoh)      | 103:
0153     .long   SYM(_uhoh)      | 104:
0154     .long   SYM(_uhoh)      | 105:
0155     .long   SYM(_uhoh)      | 106:
0156     .long   SYM(_uhoh)      | 107:
0157     .long   SYM(_uhoh)      | 108:
0158     .long   SYM(_uhoh)      | 109:
0159     .long   SYM(_uhoh)      | 110:
0160     .long   SYM(_uhoh)      | 111:
0161     .long   SYM(_uhoh)      | 112:
0162     .long   SYM(_uhoh)      | 113:
0163     .long   SYM(_uhoh)      | 114:
0164     .long   SYM(_uhoh)      | 115:
0165     .long   SYM(_uhoh)      | 116:
0166     .long   SYM(_uhoh)      | 117:
0167     .long   SYM(_uhoh)      | 118:
0168     .long   SYM(_uhoh)      | 119:
0169     .long   SYM(_uhoh)      | 120:
0170     .long   SYM(_uhoh)      | 121:
0171     .long   SYM(_uhoh)      | 122:
0172     .long   SYM(_uhoh)      | 123:
0173     .long   SYM(_uhoh)      | 124:
0174     .long   SYM(_uhoh)      | 125:
0175     .long   SYM(_uhoh)      | 126:
0176     .long   SYM(_uhoh)      | 127:
0177     .long   SYM(_uhoh)      | 128:
0178     .long   SYM(_uhoh)      | 129:
0179     .long   SYM(_uhoh)      | 130:
0180     .long   SYM(_uhoh)      | 131:
0181     .long   SYM(_uhoh)      | 132:
0182     .long   SYM(_uhoh)      | 133:
0183     .long   SYM(_uhoh)      | 134:
0184     .long   SYM(_uhoh)      | 135:
0185     .long   SYM(_uhoh)      | 136:
0186     .long   SYM(_uhoh)      | 137:
0187     .long   SYM(_uhoh)      | 138:
0188     .long   SYM(_uhoh)      | 139:
0189     .long   SYM(_uhoh)      | 140:
0190     .long   SYM(_uhoh)      | 141:
0191     .long   SYM(_uhoh)      | 142:
0192     .long   SYM(_uhoh)      | 143:
0193     .long   SYM(_uhoh)      | 144:
0194     .long   SYM(_uhoh)      | 145:
0195     .long   SYM(_uhoh)      | 146:
0196     .long   SYM(_uhoh)      | 147:
0197     .long   SYM(_uhoh)      | 148:
0198     .long   SYM(_uhoh)      | 149:
0199     .long   SYM(_uhoh)      | 150:
0200     .long   SYM(_uhoh)      | 151:
0201     .long   SYM(_uhoh)      | 152:
0202     .long   SYM(_uhoh)      | 153:
0203     .long   SYM(_uhoh)      | 154:
0204     .long   SYM(_uhoh)      | 155:
0205     .long   SYM(_uhoh)      | 156:
0206     .long   SYM(_uhoh)      | 157:
0207     .long   SYM(_uhoh)      | 158:
0208     .long   SYM(_uhoh)      | 159:
0209     .long   SYM(_uhoh)      | 160:
0210     .long   SYM(_uhoh)      | 161:
0211     .long   SYM(_uhoh)      | 162:
0212     .long   SYM(_uhoh)      | 163:
0213     .long   SYM(_uhoh)      | 164:
0214     .long   SYM(_uhoh)      | 165:
0215     .long   SYM(_uhoh)      | 166:
0216     .long   SYM(_uhoh)      | 167:
0217     .long   SYM(_uhoh)      | 168:
0218     .long   SYM(_uhoh)      | 169:
0219     .long   SYM(_uhoh)      | 170:
0220     .long   SYM(_uhoh)      | 171:
0221     .long   SYM(_uhoh)      | 172:
0222     .long   SYM(_uhoh)      | 173:
0223     .long   SYM(_uhoh)      | 174:
0224     .long   SYM(_uhoh)      | 175:
0225     .long   SYM(_uhoh)      | 176:
0226     .long   SYM(_uhoh)      | 177:
0227     .long   SYM(_uhoh)      | 178:
0228     .long   SYM(_uhoh)      | 179:
0229     .long   SYM(_uhoh)      | 180:
0230     .long   SYM(_uhoh)      | 181:
0231     .long   SYM(_uhoh)      | 182:
0232     .long   SYM(_uhoh)      | 183:
0233     .long   SYM(_uhoh)      | 184:
0234     .long   SYM(_uhoh)      | 185:
0235     .long   SYM(_uhoh)      | 186:
0236     .long   SYM(_uhoh)      | 187:
0237     .long   SYM(_uhoh)      | 188:
0238     .long   SYM(_uhoh)      | 189:
0239     .long   SYM(_uhoh)      | 190:
0240     .long   SYM(_uhoh)      | 191:
0241     .long   SYM(_uhoh)      | 192:
0242     .long   SYM(_uhoh)      | 193:
0243     .long   SYM(_uhoh)      | 194:
0244     .long   SYM(_uhoh)      | 195:
0245     .long   SYM(_uhoh)      | 196:
0246     .long   SYM(_uhoh)      | 197:
0247     .long   SYM(_uhoh)      | 198:
0248     .long   SYM(_uhoh)      | 199:
0249     .long   SYM(_uhoh)      | 200:
0250     .long   SYM(_uhoh)      | 201:
0251     .long   SYM(_uhoh)      | 202:
0252     .long   SYM(_uhoh)      | 203:
0253     .long   SYM(_uhoh)      | 204:
0254     .long   SYM(_uhoh)      | 205:
0255     .long   SYM(_uhoh)      | 206:
0256     .long   SYM(_uhoh)      | 207:
0257     .long   SYM(_uhoh)      | 208:
0258     .long   SYM(_uhoh)      | 209:
0259     .long   SYM(_uhoh)      | 210:
0260     .long   SYM(_uhoh)      | 211:
0261     .long   SYM(_uhoh)      | 212:
0262     .long   SYM(_uhoh)      | 213:
0263     .long   SYM(_uhoh)      | 214:
0264     .long   SYM(_uhoh)      | 215:
0265     .long   SYM(_uhoh)      | 216:
0266     .long   SYM(_uhoh)      | 217:
0267     .long   SYM(_uhoh)      | 218:
0268     .long   SYM(_uhoh)      | 219:
0269     .long   SYM(_uhoh)      | 220:
0270     .long   SYM(_uhoh)      | 221:
0271     .long   SYM(_uhoh)      | 222:
0272     .long   SYM(_uhoh)      | 223:
0273     .long   SYM(_uhoh)      | 224:
0274     .long   SYM(_uhoh)      | 225:
0275     .long   SYM(_uhoh)      | 226:
0276     .long   SYM(_uhoh)      | 227:
0277     .long   SYM(_uhoh)      | 228:
0278     .long   SYM(_uhoh)      | 229:
0279     .long   SYM(_uhoh)      | 230:
0280     .long   SYM(_uhoh)      | 231:
0281     .long   SYM(_uhoh)      | 232:
0282     .long   SYM(_uhoh)      | 233:
0283     .long   SYM(_uhoh)      | 234:
0284     .long   SYM(_uhoh)      | 235:
0285     .long   SYM(_uhoh)      | 236:
0286     .long   SYM(_uhoh)      | 237:
0287     .long   SYM(_uhoh)      | 238:
0288     .long   SYM(_uhoh)      | 239:
0289     .long   SYM(_uhoh)      | 240:
0290     .long   SYM(_uhoh)      | 241:
0291     .long   SYM(_uhoh)      | 242:
0292     .long   SYM(_uhoh)      | 243:
0293     .long   SYM(_uhoh)      | 244:
0294     .long   SYM(_uhoh)      | 245:
0295     .long   SYM(_uhoh)      | 246:
0296     .long   SYM(_uhoh)      | 247:
0297     .long   SYM(_uhoh)      | 248:
0298     .long   SYM(_uhoh)      | 249:
0299     .long   SYM(_uhoh)      | 250:
0300     .long   SYM(_uhoh)      | 251:
0301     .long   SYM(_uhoh)      | 252:
0302     .long   SYM(_uhoh)      | 253:
0303     .long   SYM(_uhoh)      | 254:
0304     .long   SYM(_uhoh)      | 255:
0305 
0306 /*
0307  * Default trap handler
0308  * With an oscilloscope you can see AS* stop
0309  */
0310 .align 4
0311     PUBLIC (_uhoh)
0312 SYM(_uhoh):
0313     nop                 | Leave spot for breakpoint
0314     stop    #0x2700             | Stop with interrupts disabled
0315     bra.w   SYM(_uhoh)          | Stuck forever
0316 
0317 .align 4
0318     PUBLIC (_spuriousInterrupt)
0319 SYM(_spuriousInterrupt):
0320     addql   #1,SYM(_M68kSpuriousInterruptCount)
0321     rte
0322 /***************************************************************************
0323    Function : start
0324 
0325    Description : setup the internal SRAM for use and setup the INITIAL STACK ptr.
0326     Also enable the internal peripherals
0327  ***************************************************************************/
0328 .align 4
0329     PUBLIC (start)
0330 SYM(start):
0331     move.w  #0x0000,d0          | Turn off watchdog timer
0332     move.w  d0, (0x40140000)
0333     move.w  #0x2000,d0          | Set system frequency to 58960000
0334     move.w  d0, (0x40120000)
0335     move.w  #0x2700,sr                  | Disable interrupts
0336 
0337     move.l  #__SRAMBASE+1,d0            | Enable the MCF5282 internal SRAM
0338     movec   d0,%rambar                  | ...so we have a stack
0339     move.l  #(INITIAL_STACK),sp         | Overwrite the fake stack pointer
0340 
0341     /*
0342      * If we're being started by the debugger, and the debugger has
0343      * moved the IPSBAR, we're doomed........
0344      */
0345     move.l  #__IPSBAR+1,d0      | Enable the MCF5282 internal peripherals
0346     move.l  d0,DEFAULT_IPSBAR
0347 
0348     /*
0349      * Remainder of the startup code is handled by C code
0350      */
0351     jmp SYM(Init5282)       | Start C code (which never returns)
0352 
0353 /***************************************************************************
0354    Function : CopyDataClearBSSAndStart
0355 
0356    Description : Copy DATA segment, Copy SRAM segment, clear BSS segment,
0357    start C program. Assume that DATA and BSS sizes are multiples of 4.
0358  ***************************************************************************/
0359 .align 4
0360 
0361     PUBLIC (CopyDataClearBSSAndStart)
0362 SYM(CopyDataClearBSSAndStart):
0363     lea SYM(_data_dest_start),a0        | Get start of DATA in RAM
0364     lea SYM(_data_src_start),a2     | Get start of DATA in ROM
0365     cmpl    a0,a2                   | Are they the same?
0366     beq.s   NODATACOPY              | Yes, no copy necessary
0367     lea SYM(_data_dest_end),a1      | Get end of DATA in RAM
0368     bra.s   DATACOPYLOOPTEST            | Branch into copy loop
0369 DATACOPYLOOP:
0370     movel   a2@+,a0@+               | Copy word from ROM to RAM
0371 DATACOPYLOOPTEST:
0372     cmpl    a1,a0                   | Done?
0373     bcs.s   DATACOPYLOOP                | No, skip
0374 NODATACOPY:
0375 
0376 /* Now, clear BSS */
0377         lea _clear_start,a0     | Get start of BSS
0378     lea _clear_end,a1       | Get end of BSS
0379     clrl    d0          | Value to set
0380     bra.s   ZEROLOOPTEST        | Branch into clear loop
0381 ZEROLOOP:
0382     movel   d0,a0@+         | Clear a word
0383 ZEROLOOPTEST:
0384     cmpl    a1,a0           | Done?
0385     bcs.s   ZEROLOOP        | No, skip
0386 
0387 
0388     /*
0389      * Right : Now we're ready to boot RTEMS
0390      */
0391     move.l  #_ISR_Stack_area_end,sp | Use configuration defined stack
0392     clrl    d0          | Pass in null to all boot_card() params
0393     movel   d0,a7@-         | command line
0394     jsr SYM(boot_card)      | Call C boot_card function to startup RTEMS
0395     movel   a7@+,d0
0396 MULTI_TASK_EXIT:
0397         nop
0398         nop
0399         trap    #14
0400         bra     MULTI_TASK_EXIT
0401 
0402 END_CODE
0403 
0404         .align 2
0405 BEGIN_DATA_DCL
0406         .align 2
0407     PUBLIC (_M68kSpuriousInterruptCount)
0408 SYM (_M68kSpuriousInterruptCount):
0409     .long   0
0410 END_DATA_DCL
0411 
0412 END
0413