File indexing completed on 2025-05-11 08:23:47
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 #include <rtems/asm.h>
0037
0038 #define SRAM_SIZE (64*1024)
0039 #define DEFAULT_IPSBAR 0x40000000
0040
0041 BEGIN_CODE
0042 #define INITIAL_STACK __SRAMBASE+SRAM_SIZE-4
0043
0044 PUBLIC (INTERRUPT_VECTOR)
0045 SYM(INTERRUPT_VECTOR):
0046 .long INITIAL_STACK | 0: Initial 'SSP'
0047 .long start | 1: Initial PC
0048 .long SYM(_uhoh) | 2: Bus error
0049 .long SYM(_uhoh) | 3: Address error
0050 .long SYM(_uhoh) | 4: Illegal instruction
0051 .long SYM(_uhoh) | 5: Zero division
0052 .long SYM(_uhoh) | 6: CHK, CHK2 instruction
0053 .long SYM(_uhoh) | 7: TRAPcc, TRAPV instructions
0054 .long SYM(_uhoh) | 8: Privilege violation
0055 .long SYM(_uhoh) | 9: Trace
0056 .long SYM(_uhoh) | 10: Line 1010 emulator
0057 .long SYM(_uhoh) | 11: Line 1111 emulator
0058 .long SYM(_uhoh) | 12: Hardware breakpoint
0059 .long SYM(_uhoh) | 13: Reserved for coprocessor violation
0060 .long SYM(_uhoh) | 14: Format error
0061 .long SYM(_uhoh) | 15: Uninitialized interrupt
0062 .long SYM(_uhoh) | 16: Unassigned, reserved
0063 .long SYM(_uhoh) | 17:
0064 .long SYM(_uhoh) | 18:
0065 .long SYM(_uhoh) | 19:
0066 .long SYM(_uhoh) | 20:
0067 .long SYM(_uhoh) | 21:
0068 .long SYM(_uhoh) | 22:
0069 .long SYM(_uhoh) | 23:
0070 .long SYM(_spuriousInterrupt) | 24: Spurious interrupt
0071 .long SYM(_uhoh) | 25: Level 1 interrupt autovector
0072 .long SYM(_uhoh) | 26: Level 2 interrupt autovector
0073 .long SYM(_uhoh) | 27: Level 3 interrupt autovector
0074 .long SYM(_uhoh) | 28: Level 4 interrupt autovector
0075 .long SYM(_uhoh) | 29: Level 5 interrupt autovector
0076 .long SYM(_uhoh) | 30: Level 6 interrupt autovector
0077 .long SYM(_uhoh) | 31: Level 7 interrupt autovector
0078 .long SYM(_uhoh) | 32: Trap instruction (0-15)
0079 .long SYM(_uhoh) | 33:
0080 .long SYM(_uhoh) | 34:
0081 .long SYM(_uhoh) | 35:
0082 .long SYM(_uhoh) | 36:
0083 .long SYM(_uhoh) | 37:
0084 .long SYM(_uhoh) | 38:
0085 .long SYM(_uhoh) | 39:
0086 .long SYM(_uhoh) | 40:
0087 .long SYM(_uhoh) | 41:
0088 .long SYM(_uhoh) | 42:
0089 .long SYM(_uhoh) | 43:
0090 .long SYM(_uhoh) | 44:
0091 .long SYM(_uhoh) | 45:
0092 .long SYM(_uhoh) | 46:
0093 .long SYM(_uhoh) | 47:
0094 .long SYM(_uhoh) | 48: Reserved for coprocessor
0095 .long SYM(_uhoh) | 49:
0096 .long SYM(_uhoh) | 50:
0097 .long SYM(_uhoh) | 51:
0098 .long SYM(_uhoh) | 52:
0099 .long SYM(_uhoh) | 53:
0100 .long SYM(_uhoh) | 54:
0101 .long SYM(_uhoh) | 55:
0102 .long SYM(_uhoh) | 56:
0103 .long SYM(_uhoh) | 57:
0104 .long SYM(_uhoh) | 58:
0105 .long SYM(_uhoh) | 59: Unassigned, reserved
0106 .long SYM(_uhoh) | 60:
0107 .long SYM(_uhoh) | 61:
0108 .long SYM(_uhoh) | 62:
0109 .long SYM(_uhoh) | 63:
0110 .long SYM(_spuriousInterrupt) | 64: User spurious handler
0111 .long SYM(_uhoh) | 65:
0112 .long SYM(_uhoh) | 66:
0113 .long SYM(_uhoh) | 67:
0114 .long SYM(_uhoh) | 68:
0115 .long SYM(_uhoh) | 69:
0116 .long SYM(_uhoh) | 70:
0117 .long SYM(_uhoh) | 71:
0118 .long SYM(_uhoh) | 72:
0119 .long SYM(_uhoh) | 73:
0120 .long SYM(_uhoh) | 74:
0121 .long SYM(_uhoh) | 75:
0122 .long SYM(_uhoh) | 76:
0123 .long SYM(_uhoh) | 77:
0124 .long SYM(_uhoh) | 78:
0125 .long SYM(_uhoh) | 79:
0126 .long SYM(_uhoh) | 80:
0127 .long SYM(_uhoh) | 81:
0128 .long SYM(_uhoh) | 82:
0129 .long SYM(_uhoh) | 83:
0130 .long SYM(_uhoh) | 84:
0131 .long SYM(_uhoh) | 85:
0132 .long SYM(_uhoh) | 86:
0133 .long SYM(_uhoh) | 87:
0134 .long SYM(_uhoh) | 88:
0135 .long SYM(_uhoh) | 89:
0136 .long SYM(_uhoh) | 90:
0137 .long SYM(_uhoh) | 91:
0138 .long SYM(_uhoh) | 92:
0139 .long SYM(_uhoh) | 93:
0140 .long SYM(_uhoh) | 94:
0141 .long SYM(_uhoh) | 95:
0142 .long SYM(_uhoh) | 96:
0143 .long SYM(_uhoh) | 97:
0144 .long SYM(_uhoh) | 98:
0145 .long SYM(_uhoh) | 99:
0146 .long SYM(_uhoh) | 100:
0147 .long SYM(_uhoh) | 101:
0148 .long SYM(_uhoh) | 102:
0149 .long SYM(_uhoh) | 103:
0150 .long SYM(_uhoh) | 104:
0151 .long SYM(_uhoh) | 105:
0152 .long SYM(_uhoh) | 106:
0153 .long SYM(_uhoh) | 107:
0154 .long SYM(_uhoh) | 108:
0155 .long SYM(_uhoh) | 109:
0156 .long SYM(_uhoh) | 110:
0157 .long SYM(_uhoh) | 111:
0158 .long SYM(_uhoh) | 112:
0159 .long SYM(_uhoh) | 113:
0160 .long SYM(_uhoh) | 114:
0161 .long SYM(_uhoh) | 115:
0162 .long SYM(_uhoh) | 116:
0163 .long SYM(_uhoh) | 117:
0164 .long SYM(_uhoh) | 118:
0165 .long SYM(_uhoh) | 119:
0166 .long SYM(_uhoh) | 120:
0167 .long SYM(_uhoh) | 121:
0168 .long SYM(_uhoh) | 122:
0169 .long SYM(_uhoh) | 123:
0170 .long SYM(_uhoh) | 124:
0171 .long SYM(_uhoh) | 125:
0172 .long SYM(_uhoh) | 126:
0173 .long SYM(_uhoh) | 127:
0174 .long SYM(_uhoh) | 128:
0175 .long SYM(_uhoh) | 129:
0176 .long SYM(_uhoh) | 130:
0177 .long SYM(_uhoh) | 131:
0178 .long SYM(_uhoh) | 132:
0179 .long SYM(_uhoh) | 133:
0180 .long SYM(_uhoh) | 134:
0181 .long SYM(_uhoh) | 135:
0182 .long SYM(_uhoh) | 136:
0183 .long SYM(_uhoh) | 137:
0184 .long SYM(_uhoh) | 138:
0185 .long SYM(_uhoh) | 139:
0186 .long SYM(_uhoh) | 140:
0187 .long SYM(_uhoh) | 141:
0188 .long SYM(_uhoh) | 142:
0189 .long SYM(_uhoh) | 143:
0190 .long SYM(_uhoh) | 144:
0191 .long SYM(_uhoh) | 145:
0192 .long SYM(_uhoh) | 146:
0193 .long SYM(_uhoh) | 147:
0194 .long SYM(_uhoh) | 148:
0195 .long SYM(_uhoh) | 149:
0196 .long SYM(_uhoh) | 150:
0197 .long SYM(_uhoh) | 151:
0198 .long SYM(_uhoh) | 152:
0199 .long SYM(_uhoh) | 153:
0200 .long SYM(_uhoh) | 154:
0201 .long SYM(_uhoh) | 155:
0202 .long SYM(_uhoh) | 156:
0203 .long SYM(_uhoh) | 157:
0204 .long SYM(_uhoh) | 158:
0205 .long SYM(_uhoh) | 159:
0206 .long SYM(_uhoh) | 160:
0207 .long SYM(_uhoh) | 161:
0208 .long SYM(_uhoh) | 162:
0209 .long SYM(_uhoh) | 163:
0210 .long SYM(_uhoh) | 164:
0211 .long SYM(_uhoh) | 165:
0212 .long SYM(_uhoh) | 166:
0213 .long SYM(_uhoh) | 167:
0214 .long SYM(_uhoh) | 168:
0215 .long SYM(_uhoh) | 169:
0216 .long SYM(_uhoh) | 170:
0217 .long SYM(_uhoh) | 171:
0218 .long SYM(_uhoh) | 172:
0219 .long SYM(_uhoh) | 173:
0220 .long SYM(_uhoh) | 174:
0221 .long SYM(_uhoh) | 175:
0222 .long SYM(_uhoh) | 176:
0223 .long SYM(_uhoh) | 177:
0224 .long SYM(_uhoh) | 178:
0225 .long SYM(_uhoh) | 179:
0226 .long SYM(_uhoh) | 180:
0227 .long SYM(_uhoh) | 181:
0228 .long SYM(_uhoh) | 182:
0229 .long SYM(_uhoh) | 183:
0230 .long SYM(_uhoh) | 184:
0231 .long SYM(_uhoh) | 185:
0232 .long SYM(_uhoh) | 186:
0233 .long SYM(_uhoh) | 187:
0234 .long SYM(_uhoh) | 188:
0235 .long SYM(_uhoh) | 189:
0236 .long SYM(_uhoh) | 190:
0237 .long SYM(_uhoh) | 191:
0238 .long SYM(_uhoh) | 192:
0239 .long SYM(_uhoh) | 193:
0240 .long SYM(_uhoh) | 194:
0241 .long SYM(_uhoh) | 195:
0242 .long SYM(_uhoh) | 196:
0243 .long SYM(_uhoh) | 197:
0244 .long SYM(_uhoh) | 198:
0245 .long SYM(_uhoh) | 199:
0246 .long SYM(_uhoh) | 200:
0247 .long SYM(_uhoh) | 201:
0248 .long SYM(_uhoh) | 202:
0249 .long SYM(_uhoh) | 203:
0250 .long SYM(_uhoh) | 204:
0251 .long SYM(_uhoh) | 205:
0252 .long SYM(_uhoh) | 206:
0253 .long SYM(_uhoh) | 207:
0254 .long SYM(_uhoh) | 208:
0255 .long SYM(_uhoh) | 209:
0256 .long SYM(_uhoh) | 210:
0257 .long SYM(_uhoh) | 211:
0258 .long SYM(_uhoh) | 212:
0259 .long SYM(_uhoh) | 213:
0260 .long SYM(_uhoh) | 214:
0261 .long SYM(_uhoh) | 215:
0262 .long SYM(_uhoh) | 216:
0263 .long SYM(_uhoh) | 217:
0264 .long SYM(_uhoh) | 218:
0265 .long SYM(_uhoh) | 219:
0266 .long SYM(_uhoh) | 220:
0267 .long SYM(_uhoh) | 221:
0268 .long SYM(_uhoh) | 222:
0269 .long SYM(_uhoh) | 223:
0270 .long SYM(_uhoh) | 224:
0271 .long SYM(_uhoh) | 225:
0272 .long SYM(_uhoh) | 226:
0273 .long SYM(_uhoh) | 227:
0274 .long SYM(_uhoh) | 228:
0275 .long SYM(_uhoh) | 229:
0276 .long SYM(_uhoh) | 230:
0277 .long SYM(_uhoh) | 231:
0278 .long SYM(_uhoh) | 232:
0279 .long SYM(_uhoh) | 233:
0280 .long SYM(_uhoh) | 234:
0281 .long SYM(_uhoh) | 235:
0282 .long SYM(_uhoh) | 236:
0283 .long SYM(_uhoh) | 237:
0284 .long SYM(_uhoh) | 238:
0285 .long SYM(_uhoh) | 239:
0286 .long SYM(_uhoh) | 240:
0287 .long SYM(_uhoh) | 241:
0288 .long SYM(_uhoh) | 242:
0289 .long SYM(_uhoh) | 243:
0290 .long SYM(_uhoh) | 244:
0291 .long SYM(_uhoh) | 245:
0292 .long SYM(_uhoh) | 246:
0293 .long SYM(_uhoh) | 247:
0294 .long SYM(_uhoh) | 248:
0295 .long SYM(_uhoh) | 249:
0296 .long SYM(_uhoh) | 250:
0297 .long SYM(_uhoh) | 251:
0298 .long SYM(_uhoh) | 252:
0299 .long SYM(_uhoh) | 253:
0300 .long SYM(_uhoh) | 254:
0301 .long SYM(_uhoh) | 255:
0302
0303
0304
0305
0306
0307 .align 4
0308 PUBLIC (_uhoh)
0309 SYM(_uhoh):
0310 nop | Leave spot for breakpoint
0311 stop #0x2700 | Stop with interrupts disabled
0312 bra.w SYM(_uhoh) | Stuck forever
0313
0314 .align 4
0315 PUBLIC (_spuriousInterrupt)
0316 SYM(_spuriousInterrupt):
0317 addql #1,SYM(_M68kSpuriousInterruptCount)
0318 rte
0319
0320
0321
0322
0323
0324
0325 .align 4
0326 PUBLIC (start)
0327 SYM(start):
0328 move.w #0x0000,d0 | Turn off watchdog timer
0329 move.w d0, (0x40140000)
0330 move.l #0x01000000,d0 | Set system frequency to 150 MHz
0331 move.l d0, (0x40120000)
0332 move.w #0x2700,sr | Disable interrupts
0333
0334 move.l #__SRAMBASE+1,d0 | Enable the MCF5235 internal SRAM
0335 movec d0,%rambar | ...so we have a stack
0336
0337 move.l #0x20000201, d0
0338 move.l d0,(0x40000008) | set up 2nd RAMBAR to make 2nd port avail to FEC
0339
0340 move.l #__IPSBAR+1,d0 | Enable the MCF5235 internal peripherals
0341 move.l d0,DEFAULT_IPSBAR
0342
0343
0344
0345
0346 jmp SYM(Init5235) | Start C code (which never returns)
0347
0348
0349
0350
0351
0352
0353
0354 .align 4
0355
0356 PUBLIC (CopyDataClearBSSAndStart)
0357 SYM(CopyDataClearBSSAndStart):
0358 lea SYM(_data_dest_start),a0 | Get start of DATA in RAM
0359 lea SYM(_data_src_start),a2 | Get start of DATA in ROM
0360 cmpl a0,a2 | Are they the same?
0361 beq.s NODATACOPY | Yes, no copy necessary
0362 lea SYM(_data_dest_end),a1 | Get end of DATA in RAM
0363 bra.s DATACOPYLOOPTEST | Branch into copy loop
0364 DATACOPYLOOP:
0365 movel a2@+,a0@+ | Copy word from ROM to RAM
0366 DATACOPYLOOPTEST:
0367 cmpl a1,a0 | Done?
0368 bcs.s DATACOPYLOOP | No, skip
0369 NODATACOPY:
0370
0371
0372 lea _clear_start,a0 | Get start of BSS
0373 lea _clear_end,a1 | Get end of BSS
0374 clrl d0 | Value to set
0375 bra.s ZEROLOOPTEST | Branch into clear loop
0376 ZEROLOOP:
0377 movel d0,a0@+ | Clear a word
0378 ZEROLOOPTEST:
0379 cmpl a1,a0 | Done?
0380 bcs.s ZEROLOOP | No, skip
0381
0382
0383
0384
0385
0386 move.l #_ISR_Stack_area_end,sp | Use configuration defined stack
0387 clrl d0 | Pass in null to all boot_card() params
0388 movel d0,a7@- | command line
0389 jsr SYM(boot_card) | Call C boot_card function to startup RTEMS
0390 movel a7@+,d0
0391 MULTI_TASK_EXIT:
0392 nop
0393 nop
0394 trap #14
0395 bra MULTI_TASK_EXIT
0396 .align 2
0397 END_CODE
0398
0399 BEGIN_DATA_DCL
0400 .align 2
0401 PUBLIC (_M68kSpuriousInterruptCount)
0402 SYM (_M68kSpuriousInterruptCount):
0403 .long 0
0404 END_DATA_DCL
0405
0406 END
0407