/* | |
* File: exceptions.c | |
* Purpose: Generic exception handling for ColdFire processors | |
* | |
*/ | |
#include "exceptions.h" | |
#include "startcf.h" | |
#include "support_common.h" | |
#include <ansi_parms.h> | |
#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 <stdio.h> | |
#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 |