/* * File: exceptions.c * Purpose: Generic exception handling for ColdFire processors * */ #include "exceptions.h" #include "startcf.h" #include "support_common.h" #include #define REGISTER_ABI __REGABI__ extern void vPIT0InterruptHandler( void ); extern void vUART0InterruptHandler( void ); extern void vPortYieldISR( void ); extern void vFECISRHandler( void ); /***********************************************************************/ /* * Set NO_PRINTF to 0 in order the exceptions.c interrupt handler * to output messages to the standard io. * */ #define NO_PRINTF 1 #if NO_PRINTF #define VECTORDISPLAY(MESSAGE) asm { nop; }; #define VECTORDISPLAY2(MESSAGE,MESSAGE2) asm { nop; }; #define VECTORDISPLAY3(MESSAGE,MESSAGE2,MESSAGE3) asm { nop; }; #else #include #define VECTORDISPLAY(MESSAGE1) printf(MESSAGE1); #define VECTORDISPLAY2(MESSAGE1,MESSAGE2) printf(MESSAGE1,MESSAGE2); #define VECTORDISPLAY3(MESSAGE1,MESSAGE2,MESSAGE3) printf(MESSAGE1,MESSAGE2,MESSAGE3); #endif #ifdef __cplusplus extern "C" { #endif extern unsigned long far _SP_INIT[]; /***********************************************************************/ /* * Handling of the TRK ColdFire libs (printf support in Debugger Terminal) * * To enable this support (setup by default in CONSOLE_RAM build target * if available): * - Set CONSOLE_IO_SUPPORT to 1 in this file; this will enable * TrapHandler_printf for the trap #14 exception. * (this is set by default to 1 in the ColdFire Pre-Processor panel for * the CONSOLE_RAM build target) * * - Make sure the file: * {Compiler}ColdFire_Support\msl\MSL_C\MSL_ColdFire\Src\console_io_cf.c * is referenced from your project. * * - Make sure that in the CF Exceptions panel the check box * "46 TRAP #14 for Console I/O", in the "User Application Exceptions" * area is set. * */ #ifndef CONSOLE_IO_SUPPORT #define CONSOLE_IO_SUPPORT 0 #endif #if CONSOLE_IO_SUPPORT asm void TrapHandler_printf(void) { HALT RTE } #endif /***********************************************************************/ /* * This is the handler for all exceptions which are not common to all * ColdFire Chips. * * Called by mcf_exception_handler * */ void derivative_interrupt(unsigned long vector) { if (vector < 64 || vector > 192) { VECTORDISPLAY2("User Defined Vector #%d\n",vector); } } /*********************************************************************** * * This is the exception handler for all exceptions common to all * chips ColdFire. Most exceptions do nothing, but some of the more * important ones are handled to some extent. * * Called by asm_exception_handler * * The ColdFire family of processors has a simplified exception stack * frame that looks like the following: * * 3322222222221111 111111 * 1098765432109876 5432109876543210 * 8 +----------------+----------------+ * | Program Counter | * 4 +----------------+----------------+ * |FS/Fmt/Vector/FS| SR | * SP --> 0 +----------------+----------------+ * * The stack self-aligns to a 4-byte boundary at an exception, with * the FS/Fmt/Vector/FS field indicating the size of the adjustment * (SP += 0,1,2,3 bytes). * 31 28 27 26 25 18 17 16 15 0 * 4 +---------------------------------------+------------------------------------+ * | Format | FS[3..2] | Vector | FS[1..0] | SR | * SP --> 0 +---------------------------------------+------------------------------------+ */ #define MCF5XXX_RD_SF_FORMAT(PTR) \ ((*((unsigned short *)(PTR)) >> 12) & 0x00FF) #define MCF5XXX_RD_SF_VECTOR(PTR) \ ((*((unsigned short *)(PTR)) >> 2) & 0x00FF) #define MCF5XXX_RD_SF_FS(PTR) \ ( ((*((unsigned short *)(PTR)) & 0x0C00) >> 8) | (*((unsigned short *)(PTR)) & 0x0003) ) #define MCF5XXX_SF_SR(PTR) *(((unsigned short *)(PTR))+1) #define MCF5XXX_SF_PC(PTR) *((unsigned long *)(PTR)+1) #define MCF5XXX_EXCEPTFMT "%s -- PC = %#08X\n" void mcf_exception_handler(void *framepointer) { volatile unsigned long exceptionStackFrame = (*(unsigned long *)(framepointer)); volatile unsigned short stackFrameSR = MCF5XXX_SF_SR(framepointer); volatile unsigned short stackFrameWord = (*(unsigned short *)(framepointer)); volatile unsigned long stackFrameFormat = (unsigned long)MCF5XXX_RD_SF_FORMAT(&stackFrameWord); volatile unsigned long stackFrameFS = (unsigned long)MCF5XXX_RD_SF_FS(&stackFrameWord); volatile unsigned long stackFrameVector = (unsigned long)MCF5XXX_RD_SF_VECTOR(&stackFrameWord); volatile unsigned long stackFramePC = MCF5XXX_SF_PC(framepointer); switch (stackFrameFormat) { case 4: case 5: case 6: case 7: break; default: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT,"Illegal stack type", stackFramePC); break; } switch (stackFrameVector) { case 2: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Access Error", stackFramePC); switch (stackFrameFS) { case 4: VECTORDISPLAY("Error on instruction fetch\n"); break; case 8: VECTORDISPLAY("Error on operand write\n"); break; case 9: VECTORDISPLAY("Attempted write to write-protected space\n"); break; case 12: VECTORDISPLAY("Error on operand read\n"); break; default: VECTORDISPLAY("Reserved Fault Status Encoding\n"); break; } break; case 3: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Address Error", stackFramePC); switch (stackFrameFS) { case 4: VECTORDISPLAY("Error on instruction fetch\n"); break; case 8: VECTORDISPLAY("Error on operand write\n"); break; case 9: VECTORDISPLAY("Attempted write to write-protected space\n"); break; case 12: VECTORDISPLAY("Error on operand read\n"); break; default: VECTORDISPLAY("Reserved Fault Status Encoding\n"); break; } break; case 4: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Illegal instruction", stackFramePC); break; case 8: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Privilege violation", stackFramePC); break; case 9: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Trace Exception", stackFramePC); break; case 10: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Unimplemented A-Line Instruction", stackFramePC); break; case 11: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Unimplemented F-Line Instruction", stackFramePC); break; case 12: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Debug Interrupt", stackFramePC); break; case 14: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Format Error", stackFramePC); break; case 15: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Unitialized Interrupt", stackFramePC); break; case 24: VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Spurious Interrupt", stackFramePC); break; case 25: case 26: case 27: case 28: case 29: case 30: case 31: VECTORDISPLAY2("Autovector interrupt level %d\n", stackFrameVector - 24); break; case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: VECTORDISPLAY2("TRAP #%d\n", stackFrameVector - 32); break; case 5: case 6: case 7: case 13: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: VECTORDISPLAY2("Reserved: #%d\n", stackFrameVector); break; default: derivative_interrupt(stackFrameVector); break; } } #if REGISTER_ABI asm void asm_exception_handler(void) { link a6,#0 lea -20(sp), sp movem.l d0-d2/a0-a1, (sp) lea 24(sp),a0 /* A0 point to exception stack frame on the stack */ jsr mcf_exception_handler movem.l (sp), d0-d2/a0-a1 lea 20(sp), sp unlk a6 rte } #else asm void asm_exception_handler(void) { link a6,#0 lea -20(sp), sp movem.l d0-d2/a0-a1, (sp) pea 24(sp) /* push exception frame address */ jsr mcf_exception_handler movem.l 4(sp), d0-d2/a0-a1 lea 24(sp), sp unlk a6 rte } #endif typedef void (* vectorTableEntryType)(void); #pragma define_section vectortable ".vectortable" far_absolute R /* CF have 255 vector + SP_INIT in the vector table (256 entries) */ __declspec(vectortable) vectorTableEntryType _vect[256] = { /* Interrupt vector table */ (vectorTableEntryType)__SP_AFTER_RESET, /* 0 (0x000) Initial supervisor SP */ _startup, /* 1 (0x004) Initial PC */ asm_exception_handler, /* 2 (0x008) Access Error */ asm_exception_handler, /* 3 (0x00C) Address Error */ asm_exception_handler, /* 4 (0x010) Illegal Instruction */ asm_exception_handler, /* 5 (0x014) Reserved */ asm_exception_handler, /* 6 (0x018) Reserved */ asm_exception_handler, /* 7 (0x01C) Reserved */ asm_exception_handler, /* 8 (0x020) Privilege Violation */ asm_exception_handler, /* 9 (0x024) Trace */ asm_exception_handler, /* 10 (0x028) Unimplemented A-Line */ asm_exception_handler, /* 11 (0x02C) Unimplemented F-Line */ asm_exception_handler, /* 12 (0x030) Debug Interrupt */ asm_exception_handler, /* 13 (0x034) Reserved */ asm_exception_handler, /* 14 (0x038) Format Error */ asm_exception_handler, /* 15 (0x03C) Unitialized Int */ asm_exception_handler, /* 16 (0x040) Reserved */ asm_exception_handler, /* 17 (0x044) Reserved */ asm_exception_handler, /* 18 (0x048) Reserved */ asm_exception_handler, /* 19 (0x04C) Reserved */ asm_exception_handler, /* 20 (0x050) Reserved */ asm_exception_handler, /* 21 (0x054) Reserved */ asm_exception_handler, /* 22 (0x058) Reserved */ asm_exception_handler, /* 23 (0x05C) Reserved */ asm_exception_handler, /* 24 (0x060) Spurious Interrupt */ asm_exception_handler, /* 25 (0x064) Autovector Level 1 */ asm_exception_handler, /* 26 (0x068) Autovector Level 2 */ asm_exception_handler, /* 27 (0x06C) Autovector Level 3 */ asm_exception_handler, /* 28 (0x070) Autovector Level 4 */ asm_exception_handler, /* 29 (0x074) Autovector Level 5 */ asm_exception_handler, /* 30 (0x078) Autovector Level 6 */ asm_exception_handler, /* 31 (0x07C) Autovector Level 7 */ asm_exception_handler, /* 32 (0x080) TRAP #0 */ asm_exception_handler, /* 33 (0x084) TRAP #1 */ asm_exception_handler, /* 34 (0x088) TRAP #2 */ asm_exception_handler, /* 35 (0x08C) TRAP #3 */ asm_exception_handler, /* 36 (0x090) TRAP #4 */ asm_exception_handler, /* 37 (0x094) TRAP #5 */ asm_exception_handler, /* 38 (0x098) TRAP #6 */ asm_exception_handler, /* 39 (0x09C) TRAP #7 */ asm_exception_handler, /* 40 (0x0A0) TRAP #8 */ asm_exception_handler, /* 41 (0x0A4) TRAP #9 */ asm_exception_handler, /* 42 (0x0A8) TRAP #10 */ asm_exception_handler, /* 43 (0x0AC) TRAP #11 */ asm_exception_handler, /* 44 (0x0B0) TRAP #12 */ asm_exception_handler, /* 45 (0x0B4) TRAP #13 */ #if CONSOLE_IO_SUPPORT TrapHandler_printf, /* 46 (0x0B8) TRAP #14 */ #else asm_exception_handler, /* 46 (0x0B8) TRAP #14 */ #endif asm_exception_handler, /* 47 (0x0BC) TRAP #15 */ asm_exception_handler, /* 48 (0x0C0) Reserved */ asm_exception_handler, /* 49 (0x0C4) Reserved */ asm_exception_handler, /* 50 (0x0C8) Reserved */ asm_exception_handler, /* 51 (0x0CC) Reserved */ asm_exception_handler, /* 52 (0x0D0) Reserved */ asm_exception_handler, /* 53 (0x0D4) Reserved */ asm_exception_handler, /* 54 (0x0D8) Reserved */ asm_exception_handler, /* 55 (0x0DC) Reserved */ asm_exception_handler, /* 56 (0x0E0) Reserved */ asm_exception_handler, /* 57 (0x0E4) Reserved */ asm_exception_handler, /* 58 (0x0E8) Reserved */ asm_exception_handler, /* 59 (0x0EC) Reserved */ asm_exception_handler, /* 60 (0x0F0) Reserved */ asm_exception_handler, /* 61 (0x0F4) Reserved */ asm_exception_handler, /* 62 (0x0F8) Reserved */ asm_exception_handler, /* 63 (0x0FC) Reserved */ asm_exception_handler, /* 64 (0x100) Device-specific interrupts */ asm_exception_handler, /* 65 (0x104) Device-specific interrupts */ asm_exception_handler, /* 66 (0x108) Device-specific interrupts */ asm_exception_handler, /* 67 (0x10C) Device-specific interrupts */ asm_exception_handler, /* 68 (0x110) Device-specific interrupts */ asm_exception_handler, /* 69 (0x114) Device-specific interrupts */ asm_exception_handler, /* 70 (0x118) Device-specific interrupts */ asm_exception_handler, /* 71 (0x11C) Device-specific interrupts */ asm_exception_handler, /* 72 (0x120) Device-specific interrupts */ asm_exception_handler, /* 73 (0x124) Device-specific interrupts */ asm_exception_handler, /* 74 (0x128) Device-specific interrupts */ asm_exception_handler, /* 75 (0x12C) Device-specific interrupts */ asm_exception_handler, /* 76 (0x130) Device-specific interrupts */ vUART0InterruptHandler, /* 77 (0x134) Device-specific interrupts */ asm_exception_handler, /* 78 (0x138) Device-specific interrupts */ asm_exception_handler, /* 79 (0x13C) Device-specific interrupts */ vPortYieldISR, /* 80 (0x140) Device-specific interrupts */ asm_exception_handler, /* 81 (0x144) Device-specific interrupts */ asm_exception_handler, /* 82 (0x148) Device-specific interrupts */ asm_exception_handler, /* 83 (0x14C) Device-specific interrupts */ asm_exception_handler, /* 84 (0x150) Device-specific interrupts */ asm_exception_handler, /* 85 (0x154) Device-specific interrupts */ asm_exception_handler, /* 86 (0x158) Device-specific interrupts */ asm_exception_handler, /* 87 (0x15C) Device-specific interrupts */ asm_exception_handler, /* 88 (0x160) Device-specific interrupts */ asm_exception_handler, /* 89 (0x164) Device-specific interrupts */ asm_exception_handler, /* 90 (0x168) Device-specific interrupts */ asm_exception_handler, /* 91 (0x16C) Device-specific interrupts */ asm_exception_handler, /* 92 (0x170) Device-specific interrupts */ asm_exception_handler, /* 93 (0x174) Device-specific interrupts */ asm_exception_handler, /* 94 (0x178) Device-specific interrupts */ asm_exception_handler, /* 95 (0x17C) Device-specific interrupts */ asm_exception_handler, /* 96 (0x180) Level 1 software interrupt */ asm_exception_handler, /* 97 (0x184) Level 2 software interrupt */ asm_exception_handler, /* 98 (0x188) Level 3 software interrupt */ asm_exception_handler, /* 99 (0x18C) Level 4 software interrupt */ asm_exception_handler, /* 100 (0x190) Level 5 software interrupt */ asm_exception_handler, /* 101 (0x194) Level 6 software interrupt */ asm_exception_handler, /* 102 (0x198) Level 7 software interrupt */ asm_exception_handler, /* 103 (0x19C) Reserved */ asm_exception_handler, /* 104 (0x1A0) Reserved */ asm_exception_handler, /* 105 (0x1A4) Reserved */ asm_exception_handler, /* 106 (0x1A8) Reserved */ asm_exception_handler, /* 107 (0x___) Reserved */ asm_exception_handler, /* 108 (0x___) Reserved */ asm_exception_handler, /* 109 (0x___) Reserved */ asm_exception_handler, /* 110 (0x___) Reserved */ asm_exception_handler, /* 111 (0x___) Reserved */ asm_exception_handler, /* 112 (0x___) Reserved */ asm_exception_handler, /* 113 (0x___) Reserved */ asm_exception_handler, /* 114 (0x___) Reserved */ asm_exception_handler, /* 115 (0x___) Reserved */ asm_exception_handler, /* 116 (0x___) Reserved */ asm_exception_handler, /* 117 (0x___) Reserved */ asm_exception_handler, /* 118 (0x___) Reserved */ vPIT0InterruptHandler, /* 119 (0x___) Reserved */ asm_exception_handler, /* 120 (0x___) Reserved */ asm_exception_handler, /* 121 (0x___) Reserved */ asm_exception_handler, /* 122 (0x___) Reserved */ asm_exception_handler, /* 123 (0x___) Reserved */ asm_exception_handler, /* 124 (0x___) Reserved */ asm_exception_handler, /* 125 (0x___) Reserved */ asm_exception_handler, /* 126 (0x___) Reserved */ asm_exception_handler, /* 127 (0x___) Reserved */ asm_exception_handler, /* 128 (0x___) Reserved */ asm_exception_handler, /* 129 (0x___) Reserved */ asm_exception_handler, /* 130 (0x___) Reserved */ asm_exception_handler, /* 131 (0x___) Reserved */ asm_exception_handler, /* 132 (0x___) Reserved */ asm_exception_handler, /* 133 (0x___) Reserved */ asm_exception_handler, /* 134 (0x___) Reserved */ asm_exception_handler, /* 135 (0x___) Reserved */ asm_exception_handler, /* 136 (0x___) Reserved */ asm_exception_handler, /* 137 (0x___) Reserved */ asm_exception_handler, /* 138 (0x___) Reserved */ asm_exception_handler, /* 139 (0x___) Reserved */ asm_exception_handler, /* 140 (0x___) Reserved */ asm_exception_handler, /* 141 (0x___) Reserved */ asm_exception_handler, /* 142 (0x___) Reserved */ asm_exception_handler, /* 143 (0x___) Reserved */ asm_exception_handler, /* 144 (0x___) Reserved */ asm_exception_handler, /* 145 (0x___) Reserved */ asm_exception_handler, /* 146 (0x___) Reserved */ asm_exception_handler, /* 147 (0x___) Reserved */ asm_exception_handler, /* 148 (0x___) Reserved */ asm_exception_handler, /* 149 (0x___) Reserved */ asm_exception_handler, /* 150 (0x___) Reserved */ asm_exception_handler, /* 151 (0x___) Reserved */ asm_exception_handler, /* 152 (0x___) Reserved */ asm_exception_handler, /* 153 (0x___) Reserved */ asm_exception_handler, /* 154 (0x___) Reserved */ asm_exception_handler, /* 155 (0x___) Reserved */ asm_exception_handler, /* 156 (0x___) Reserved */ asm_exception_handler, /* 157 (0x___) Reserved */ asm_exception_handler, /* 158 (0x___) Reserved */ asm_exception_handler, /* 159 (0x___) Reserved */ asm_exception_handler, /* 160 (0x___) Reserved */ asm_exception_handler, /* 161 (0x___) Reserved */ asm_exception_handler, /* 162 (0x___) Reserved */ asm_exception_handler, /* 163 (0x___) Reserved */ asm_exception_handler, /* 164 (0x___) Reserved */ asm_exception_handler, /* 165 (0x___) Reserved */ asm_exception_handler, /* 166 (0x___) Reserved */ asm_exception_handler, /* 167 (0x___) Reserved */ asm_exception_handler, /* 168 (0x___) Reserved */ asm_exception_handler, /* 169 (0x___) Reserved */ asm_exception_handler, /* 170 (0x___) Reserved */ asm_exception_handler, /* 171 (0x___) Reserved */ asm_exception_handler, /* 172 (0x___) Reserved */ asm_exception_handler, /* 173 (0x___) Reserved */ asm_exception_handler, /* 174 (0x___) Reserved */ asm_exception_handler, /* 175 (0x___) Reserved */ asm_exception_handler, /* 176 (0x___) Reserved */ asm_exception_handler, /* 177 (0x___) Reserved */ asm_exception_handler, /* 178 (0x___) Reserved */ asm_exception_handler, /* 179 (0x___) Reserved */ asm_exception_handler, /* 180 (0x___) Reserved */ asm_exception_handler, /* 181 (0x___) Reserved */ asm_exception_handler, /* 182 (0x___) Reserved */ asm_exception_handler, /* 183 (0x___) Reserved */ asm_exception_handler, /* 184 (0x___) Reserved */ asm_exception_handler, /* 185 (0x___) Reserved */ asm_exception_handler, /* 186 (0x___) Reserved */ asm_exception_handler, /* 187 (0x___) Reserved */ asm_exception_handler, /* 188 (0x___) Reserved */ asm_exception_handler, /* 189 (0x___) Reserved */ asm_exception_handler, /* 190 (0x___) Reserved */ asm_exception_handler, /* 191 (0x___) Reserved */ asm_exception_handler, /* 192 (0x___) Reserved */ asm_exception_handler, /* 193 (0x___) Reserved */ asm_exception_handler, /* 194 (0x___) Reserved */ asm_exception_handler, /* 195 (0x___) Reserved */ asm_exception_handler, /* 196 (0x___) Reserved */ asm_exception_handler, /* 197 (0x___) Reserved */ asm_exception_handler, /* 198 (0x___) Reserved */ asm_exception_handler, /* 199 (0x___) Reserved */ asm_exception_handler, /* 200 (0x___) Reserved */ asm_exception_handler, /* 201 (0x___) Reserved */ asm_exception_handler, /* 202 (0x___) Reserved */ asm_exception_handler, /* 203 (0x___) Reserved */ asm_exception_handler, /* 204 (0x___) Reserved */ asm_exception_handler, /* 205 (0x___) Reserved */ asm_exception_handler, /* 206 (0x___) Reserved */ asm_exception_handler, /* 207 (0x___) Reserved */ asm_exception_handler, /* 208 (0x___) Reserved */ asm_exception_handler, /* 209 (0x___) Reserved */ asm_exception_handler, /* 210 (0x___) Reserved */ asm_exception_handler, /* 211 (0x___) Reserved */ asm_exception_handler, /* 212 (0x___) Reserved */ asm_exception_handler, /* 213 (0x___) Reserved */ asm_exception_handler, /* 214 (0x___) Reserved */ asm_exception_handler, /* 215 (0x___) Reserved */ asm_exception_handler, /* 216 (0x___) Reserved */ asm_exception_handler, /* 217 (0x___) Reserved */ asm_exception_handler, /* 218 (0x___) Reserved */ asm_exception_handler, /* 219 (0x___) Reserved */ asm_exception_handler, /* 220 (0x___) Reserved */ asm_exception_handler, /* 221 (0x___) Reserved */ asm_exception_handler, /* 222 (0x___) Reserved */ asm_exception_handler, /* 223 (0x___) Reserved */ asm_exception_handler, /* 224 (0x___) Reserved */ asm_exception_handler, /* 225 (0x___) Reserved */ asm_exception_handler, /* 226 (0x___) Reserved */ asm_exception_handler, /* 227 (0x___) Reserved */ asm_exception_handler, /* 228 (0x___) Reserved */ asm_exception_handler, /* 229 (0x___) Reserved */ asm_exception_handler, /* 230 (0x___) Reserved */ asm_exception_handler, /* 231 (0x___) Reserved */ asm_exception_handler, /* 232 (0x___) Reserved */ asm_exception_handler, /* 233 (0x___) Reserved */ asm_exception_handler, /* 234 (0x___) Reserved */ asm_exception_handler, /* 235 (0x___) Reserved */ asm_exception_handler, /* 236 (0x___) Reserved */ asm_exception_handler, /* 237 (0x___) Reserved */ asm_exception_handler, /* 238 (0x___) Reserved */ asm_exception_handler, /* 239 (0x___) Reserved */ asm_exception_handler, /* 240 (0x___) Reserved */ asm_exception_handler, /* 241 (0x___) Reserved */ asm_exception_handler, /* 242 (0x___) Reserved */ asm_exception_handler, /* 243 (0x___) Reserved */ asm_exception_handler, /* 244 (0x___) Reserved */ asm_exception_handler, /* 245 (0x___) Reserved */ asm_exception_handler, /* 246 (0x___) Reserved */ asm_exception_handler, /* 247 (0x___) Reserved */ asm_exception_handler, /* 248 (0x___) Reserved */ asm_exception_handler, /* 249 (0x___) Reserved */ asm_exception_handler, /* 250 (0x___) Reserved */ asm_exception_handler, /* 251 (0x___) Reserved */ asm_exception_handler, /* 252 (0x___) Reserved */ asm_exception_handler, /* 253 (0x___) Reserved */ asm_exception_handler, /* 254 (0x___) Reserved */ asm_exception_handler, /* 255 (0x___) Reserved */ }; /******************************************************************** * MCF5xxx ASM utility functions */ asm void mcf5xxx_wr_vbr(unsigned long) { /* Set VBR */ move.l 4(SP),D0 movec d0,VBR nop rts } /******************************************************************** * MCF5xxx startup copy functions: * * Set VBR and performs RAM vector table initializatiom. * The following symbol should be defined in the lcf: * __VECTOR_RAM * * _vect is the start of the exception table in the code * In case _vect address is different from __VECTOR_RAM, * the vector table is copied from _vect to __VECTOR_RAM. * In any case VBR is set to __VECTOR_RAM. */ void initialize_exceptions(void) { #if 0 /* * Memory map definitions from linker command files used by mcf5xxx_startup */ register uint32 n; /* * Copy the vector table to RAM */ if (__VECTOR_RAM != (unsigned long*)_vect) { for (n = 0; n < 256; n++) __VECTOR_RAM[n] = (unsigned long)_vect[n]; } mcf5xxx_wr_vbr((unsigned long)__VECTOR_RAM); #endif mcf5xxx_wr_vbr((unsigned long)_vect); } #ifdef __cplusplus } #endif