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 #include <rtems/asm.h>
0028 #include "bsp.h"
0029
0030 BEGIN_CODE
0031
0032
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
0319
0320 jmp SYM(Init5206e) | Start C code (which never returns)
0321
0322
0323
0324
0325
0326
0327
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
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