blob: 810058115abf7b1fcf1137e42ae139b1733c2a2e [file] [log] [blame]
/*
* 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