File indexing completed on 2025-05-11 08:23:44
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
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
0308
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
0324
0325
0326
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
0343
0344
0345 move.l #__IPSBAR+1,d0 | Enable the MCF5282 internal peripherals
0346 move.l d0,DEFAULT_IPSBAR
0347
0348
0349
0350
0351 jmp SYM(Init5282) | Start C code (which never returns)
0352
0353
0354
0355
0356
0357
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
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
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