]> git.sur5r.net Git - freertos/blob - Demo/ColdFire_MCF52221_CodeWarrior/sources/exceptions.c
Start of a new ColdFire/CodeWarrior demo.
[freertos] / Demo / ColdFire_MCF52221_CodeWarrior / sources / exceptions.c
1 /*\r
2  * File:    exceptions.c\r
3  * Purpose: Generic exception handling for ColdFire processors\r
4  *\r
5  */\r
6 #include "exceptions.h"\r
7 #include "startcf.h"\r
8 #include "support_common.h"\r
9 #include <ansi_parms.h>\r
10 \r
11 #define REGISTER_ABI __REGABI__\r
12 \r
13 extern __declspec(system) unsigned long __VECTOR_RAM[];\r
14 #define VECTOR_RAM_ADDRESS    (uint32)__VECTOR_RAM\r
15 \r
16 /***********************************************************************/\r
17 /*\r
18  *  Set NO_PRINTF to 0 in order the exceptions.c interrupt handler\r
19  *  to output messages to the standard io. \r
20  * \r
21  */\r
22 #define NO_PRINTF    1\r
23 \r
24 #if NO_PRINTF\r
25 #define VECTORDISPLAY(MESSAGE)                    asm { nop; };\r
26 #define VECTORDISPLAY2(MESSAGE,MESSAGE2)          asm { nop; };\r
27 #define VECTORDISPLAY3(MESSAGE,MESSAGE2,MESSAGE3) asm { nop; };\r
28 #else\r
29 #include <stdio.h>\r
30 #define VECTORDISPLAY(MESSAGE1)                    printf(MESSAGE1);\r
31 #define VECTORDISPLAY2(MESSAGE1,MESSAGE2)          printf(MESSAGE1,MESSAGE2);\r
32 #define VECTORDISPLAY3(MESSAGE1,MESSAGE2,MESSAGE3) printf(MESSAGE1,MESSAGE2,MESSAGE3);\r
33 #endif\r
34 \r
35 #ifdef __cplusplus\r
36 extern "C" {\r
37 #endif\r
38 \r
39 extern unsigned long far _SP_INIT[];\r
40 \r
41 /***********************************************************************/\r
42 /*\r
43  * Handling of the TRK ColdFire libs (printf support in Debugger Terminal) \r
44  * \r
45  * To enable this support (setup by default in CONSOLE_RAM build target\r
46  * if available):  \r
47  * - Set CONSOLE_IO_SUPPORT to 1 in this file; this will enable \r
48  *   TrapHandler_printf for the trap #14 exception.\r
49  *   (this is set by default to 1 in the ColdFire Pre-Processor panel for\r
50  *   the CONSOLE_RAM build target)\r
51  *\r
52  * - Make sure the file:\r
53  *   {Compiler}ColdFire_Support\msl\MSL_C\MSL_ColdFire\Src\console_io_cf.c\r
54  *   is referenced from your project. \r
55  *\r
56  * - Make sure that in the CF Exceptions panel the check box\r
57  *   "46 TRAP #14 for Console I/O", in the "User Application Exceptions"\r
58  *   area is set.\r
59  *\r
60  */\r
61 #ifndef CONSOLE_IO_SUPPORT\r
62 #define CONSOLE_IO_SUPPORT  0 \r
63 #endif\r
64 \r
65 #if CONSOLE_IO_SUPPORT\r
66 asm void TrapHandler_printf(void) {\r
67    HALT\r
68    RTE\r
69 }\r
70 #endif                                                   \r
71 \r
72 /***********************************************************************/\r
73 /*\r
74  * This is the handler for all exceptions which are not common to all \r
75  * ColdFire Chips.  \r
76  *\r
77  * Called by mcf_exception_handler\r
78  * \r
79  */\r
80 void derivative_interrupt(unsigned long vector)\r
81 {\r
82    if (vector < 64 || vector > 192) {\r
83       VECTORDISPLAY2("User Defined Vector #%d\n",vector);\r
84    }\r
85 }\r
86 \r
87 /***********************************************************************\r
88  *\r
89  * This is the exception handler for all  exceptions common to all \r
90  * chips ColdFire.  Most exceptions do nothing, but some of the more \r
91  * important ones are handled to some extent.\r
92  *\r
93  * Called by asm_exception_handler \r
94  *\r
95  * The ColdFire family of processors has a simplified exception stack\r
96  * frame that looks like the following:\r
97  *\r
98  *              3322222222221111 111111\r
99  *              1098765432109876 5432109876543210\r
100  *           8 +----------------+----------------+\r
101  *             |         Program Counter         |\r
102  *           4 +----------------+----------------+\r
103  *             |FS/Fmt/Vector/FS|      SR        |\r
104  *   SP -->  0 +----------------+----------------+\r
105  *\r
106  * The stack self-aligns to a 4-byte boundary at an exception, with\r
107  * the FS/Fmt/Vector/FS field indicating the size of the adjustment\r
108  * (SP += 0,1,2,3 bytes).\r
109  *             31     28 27      26 25    18 17      16 15                                  0\r
110  *           4 +---------------------------------------+------------------------------------+\r
111  *             | Format | FS[3..2] | Vector | FS[1..0] |                 SR                 |\r
112  *   SP -->  0 +---------------------------------------+------------------------------------+\r
113  */ \r
114 #define MCF5XXX_RD_SF_FORMAT(PTR)   \\r
115    ((*((unsigned short *)(PTR)) >> 12) & 0x00FF)\r
116 \r
117 #define MCF5XXX_RD_SF_VECTOR(PTR)   \\r
118    ((*((unsigned short *)(PTR)) >>  2) & 0x00FF)\r
119 \r
120 #define MCF5XXX_RD_SF_FS(PTR)    \\r
121    ( ((*((unsigned short *)(PTR)) & 0x0C00) >> 8) | (*((unsigned short *)(PTR)) & 0x0003) )\r
122 \r
123 #define MCF5XXX_SF_SR(PTR)    *(((unsigned short *)(PTR))+1)\r
124 \r
125 #define MCF5XXX_SF_PC(PTR)    *((unsigned long *)(PTR)+1)\r
126 \r
127 #define MCF5XXX_EXCEPTFMT     "%s -- PC = %#08X\n"\r
128 \r
129 \r
130 void mcf_exception_handler(void *framepointer) \r
131 {\r
132    volatile unsigned long exceptionStackFrame = (*(unsigned long *)(framepointer)); \r
133    volatile unsigned short stackFrameSR       = MCF5XXX_SF_SR(framepointer);  \r
134    volatile unsigned short stackFrameWord     = (*(unsigned short *)(framepointer));  \r
135    volatile unsigned long  stackFrameFormat   = (unsigned long)MCF5XXX_RD_SF_FORMAT(&stackFrameWord);\r
136    volatile unsigned long  stackFrameFS       = (unsigned long)MCF5XXX_RD_SF_FS(&stackFrameWord);\r
137    volatile unsigned long  stackFrameVector   = (unsigned long)MCF5XXX_RD_SF_VECTOR(&stackFrameWord);\r
138    volatile unsigned long  stackFramePC       = MCF5XXX_SF_PC(framepointer);\r
139 \r
140    switch (stackFrameFormat)\r
141    {\r
142       case 4:\r
143       case 5:\r
144       case 6:\r
145       case 7:\r
146          break;\r
147       default:\r
148          VECTORDISPLAY3(MCF5XXX_EXCEPTFMT,"Illegal stack type", stackFramePC);\r
149          break;\r
150    }\r
151 \r
152    switch (stackFrameVector)\r
153    {\r
154    case 2:\r
155       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Access Error", stackFramePC);\r
156       switch (stackFrameFS)\r
157       {\r
158          case 4:\r
159             VECTORDISPLAY("Error on instruction fetch\n");\r
160             break;\r
161          case 8:\r
162             VECTORDISPLAY("Error on operand write\n");\r
163             break;\r
164          case 9:\r
165             VECTORDISPLAY("Attempted write to write-protected space\n");\r
166             break;\r
167          case 12:\r
168             VECTORDISPLAY("Error on operand read\n");\r
169             break;\r
170          default:\r
171             VECTORDISPLAY("Reserved Fault Status Encoding\n");\r
172             break;\r
173       }\r
174       break;\r
175    case 3:\r
176       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Address Error", stackFramePC);\r
177       switch (stackFrameFS)\r
178       {\r
179          case 4:\r
180             VECTORDISPLAY("Error on instruction fetch\n");\r
181             break;\r
182          case 8:\r
183             VECTORDISPLAY("Error on operand write\n");\r
184             break;\r
185          case 9:\r
186             VECTORDISPLAY("Attempted write to write-protected space\n");\r
187             break;\r
188          case 12:\r
189             VECTORDISPLAY("Error on operand read\n");\r
190             break;\r
191          default:\r
192             VECTORDISPLAY("Reserved Fault Status Encoding\n");\r
193             break;\r
194       }\r
195       break;\r
196    case 4:\r
197       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Illegal instruction", stackFramePC);\r
198       break;\r
199    case 8:\r
200       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Privilege violation", stackFramePC);\r
201       break;\r
202    case 9:\r
203       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Trace Exception", stackFramePC);\r
204       break;\r
205    case 10:\r
206       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Unimplemented A-Line Instruction",     stackFramePC);\r
207       break;\r
208    case 11:\r
209       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Unimplemented F-Line Instruction",     stackFramePC);\r
210       break;\r
211    case 12:\r
212       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Debug Interrupt", stackFramePC);\r
213       break;\r
214    case 14:\r
215       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Format Error", stackFramePC);\r
216       break;\r
217    case 15:\r
218       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Unitialized Interrupt", stackFramePC);\r
219       break;\r
220    case 24:\r
221       VECTORDISPLAY3(MCF5XXX_EXCEPTFMT, "Spurious Interrupt", stackFramePC);\r
222       break;\r
223    case 25:\r
224    case 26:\r
225    case 27:\r
226    case 28:\r
227    case 29:\r
228    case 30:\r
229    case 31:\r
230       VECTORDISPLAY2("Autovector interrupt level %d\n", stackFrameVector - 24);\r
231       break;\r
232    case 32:\r
233    case 33:\r
234    case 34:\r
235    case 35:\r
236    case 36:\r
237    case 37:\r
238    case 38:\r
239    case 39:\r
240    case 40:\r
241    case 41:\r
242    case 42:\r
243    case 43:\r
244    case 44:\r
245    case 45:\r
246    case 46:\r
247    case 47:\r
248       VECTORDISPLAY2("TRAP #%d\n", stackFrameVector - 32);\r
249       break;\r
250    case 5:\r
251    case 6:\r
252    case 7:\r
253    case 13:\r
254    case 16:\r
255    case 17:\r
256    case 18:\r
257    case 19:\r
258    case 20:\r
259    case 21:\r
260    case 22:\r
261    case 23:\r
262    case 48:\r
263    case 49:\r
264    case 50:\r
265    case 51:\r
266    case 52:\r
267    case 53:\r
268    case 54:\r
269    case 55:\r
270    case 56:\r
271    case 57:\r
272    case 58:\r
273    case 59:\r
274    case 60:\r
275    case 61:\r
276    case 62:\r
277    case 63:\r
278       VECTORDISPLAY2("Reserved: #%d\n", stackFrameVector);\r
279       break;\r
280    default:\r
281       derivative_interrupt(stackFrameVector);\r
282    break;\r
283    }\r
284 }\r
285 \r
286 #if REGISTER_ABI\r
287 asm void asm_exception_handler(void)\r
288 {\r
289    link     a6,#0 \r
290    lea     -20(sp), sp\r
291    movem.l d0-d2/a0-a1, (sp)\r
292    lea     24(sp),a0   /* A0 point to exception stack frame on the stack */\r
293    jsr     mcf_exception_handler\r
294    movem.l (sp), d0-d2/a0-a1\r
295    lea     20(sp), sp\r
296    unlk a6\r
297    rte\r
298 }\r
299 #else\r
300 asm void asm_exception_handler(void)\r
301 {\r
302    link     a6,#0 \r
303    lea     -20(sp), sp\r
304    movem.l d0-d2/a0-a1, (sp)\r
305    pea     24(sp)   /* push exception frame address */\r
306    jsr     mcf_exception_handler\r
307    movem.l 4(sp), d0-d2/a0-a1\r
308    lea     24(sp), sp\r
309    unlk a6\r
310    rte\r
311 }\r
312 #endif\r
313 \r
314 typedef void (* vectorTableEntryType)(void);\r
315 \r
316 #pragma define_section vectortable ".vectortable" far_absolute R\r
317 \r
318 /* CF have 255 vector + SP_INIT in the vector table (256 entries)\r
319 */  \r
320 __declspec(vectortable) vectorTableEntryType _vect[256] = {   /* Interrupt vector table */\r
321    (vectorTableEntryType)__SP_AFTER_RESET,  /*   0 (0x000) Initial supervisor SP      */\r
322    _startup,                        /*   1 (0x004) Initial PC                 */\r
323    asm_exception_handler,           /*   2 (0x008) Access Error               */\r
324    asm_exception_handler,           /*   3 (0x00C) Address Error              */\r
325    asm_exception_handler,           /*   4 (0x010) Illegal Instruction        */\r
326    asm_exception_handler,           /*   5 (0x014) Reserved                   */\r
327    asm_exception_handler,           /*   6 (0x018) Reserved                   */\r
328    asm_exception_handler,           /*   7 (0x01C) Reserved                   */\r
329    asm_exception_handler,           /*   8 (0x020) Privilege Violation        */\r
330    asm_exception_handler,           /*   9 (0x024) Trace                      */\r
331    asm_exception_handler,           /*  10 (0x028) Unimplemented A-Line       */\r
332    asm_exception_handler,           /*  11 (0x02C) Unimplemented F-Line       */\r
333    asm_exception_handler,           /*  12 (0x030) Debug Interrupt            */\r
334    asm_exception_handler,           /*  13 (0x034) Reserved                   */\r
335    asm_exception_handler,           /*  14 (0x038) Format Error               */\r
336    asm_exception_handler,           /*  15 (0x03C) Unitialized Int            */\r
337    asm_exception_handler,           /*  16 (0x040) Reserved                   */\r
338    asm_exception_handler,           /*  17 (0x044) Reserved                   */\r
339    asm_exception_handler,           /*  18 (0x048) Reserved                   */\r
340    asm_exception_handler,           /*  19 (0x04C) Reserved                   */\r
341    asm_exception_handler,           /*  20 (0x050) Reserved                   */\r
342    asm_exception_handler,           /*  21 (0x054) Reserved                   */\r
343    asm_exception_handler,           /*  22 (0x058) Reserved                   */\r
344    asm_exception_handler,           /*  23 (0x05C) Reserved                   */\r
345    asm_exception_handler,           /*  24 (0x060) Spurious Interrupt         */\r
346    asm_exception_handler,           /*  25 (0x064) Autovector Level 1         */\r
347    asm_exception_handler,           /*  26 (0x068) Autovector Level 2         */\r
348    asm_exception_handler,           /*  27 (0x06C) Autovector Level 3         */\r
349    asm_exception_handler,           /*  28 (0x070) Autovector Level 4         */\r
350    asm_exception_handler,           /*  29 (0x074) Autovector Level 5         */\r
351    asm_exception_handler,           /*  30 (0x078) Autovector Level 6         */\r
352    asm_exception_handler,           /*  31 (0x07C) Autovector Level 7         */\r
353    asm_exception_handler,           /*  32 (0x080) TRAP #0                    */\r
354    asm_exception_handler,           /*  33 (0x084) TRAP #1                    */\r
355    asm_exception_handler,           /*  34 (0x088) TRAP #2                    */\r
356    asm_exception_handler,           /*  35 (0x08C) TRAP #3                    */\r
357    asm_exception_handler,           /*  36 (0x090) TRAP #4                    */\r
358    asm_exception_handler,           /*  37 (0x094) TRAP #5                    */\r
359    asm_exception_handler,           /*  38 (0x098) TRAP #6                    */\r
360    asm_exception_handler,           /*  39 (0x09C) TRAP #7                    */\r
361    asm_exception_handler,           /*  40 (0x0A0) TRAP #8                    */\r
362    asm_exception_handler,           /*  41 (0x0A4) TRAP #9                    */\r
363    asm_exception_handler,           /*  42 (0x0A8) TRAP #10                   */\r
364    asm_exception_handler,           /*  43 (0x0AC) TRAP #11                   */\r
365    asm_exception_handler,           /*  44 (0x0B0) TRAP #12                   */\r
366    asm_exception_handler,           /*  45 (0x0B4) TRAP #13                   */\r
367 #if CONSOLE_IO_SUPPORT   \r
368    TrapHandler_printf,              /*  46 (0x0B8) TRAP #14                   */\r
369 #else\r
370    asm_exception_handler,           /*  46 (0x0B8) TRAP #14                   */\r
371 #endif   \r
372    asm_exception_handler,           /*  47 (0x0BC) TRAP #15                   */\r
373    asm_exception_handler,           /*  48 (0x0C0) Reserved                   */\r
374    asm_exception_handler,           /*  49 (0x0C4) Reserved                   */\r
375    asm_exception_handler,           /*  50 (0x0C8) Reserved                   */\r
376    asm_exception_handler,           /*  51 (0x0CC) Reserved                   */\r
377    asm_exception_handler,           /*  52 (0x0D0) Reserved                   */\r
378    asm_exception_handler,           /*  53 (0x0D4) Reserved                   */\r
379    asm_exception_handler,           /*  54 (0x0D8) Reserved                   */\r
380    asm_exception_handler,           /*  55 (0x0DC) Reserved                   */\r
381    asm_exception_handler,           /*  56 (0x0E0) Reserved                   */\r
382    asm_exception_handler,           /*  57 (0x0E4) Reserved                   */\r
383    asm_exception_handler,           /*  58 (0x0E8) Reserved                   */\r
384    asm_exception_handler,           /*  59 (0x0EC) Reserved                   */\r
385    asm_exception_handler,           /*  60 (0x0F0) Reserved                   */\r
386    asm_exception_handler,           /*  61 (0x0F4) Reserved                   */\r
387    asm_exception_handler,           /*  62 (0x0F8) Reserved                   */\r
388    asm_exception_handler,           /*  63 (0x0FC) Reserved                   */\r
389    asm_exception_handler,           /*  64 (0x100) Device-specific interrupts */\r
390    asm_exception_handler,           /*  65 (0x104) Device-specific interrupts */\r
391    asm_exception_handler,           /*  66 (0x108) Device-specific interrupts */\r
392    asm_exception_handler,           /*  67 (0x10C) Device-specific interrupts */\r
393    asm_exception_handler,           /*  68 (0x110) Device-specific interrupts */\r
394    asm_exception_handler,           /*  69 (0x114) Device-specific interrupts */\r
395    asm_exception_handler,           /*  70 (0x118) Device-specific interrupts */\r
396    asm_exception_handler,           /*  71 (0x11C) Device-specific interrupts */\r
397    asm_exception_handler,           /*  72 (0x120) Device-specific interrupts */\r
398    asm_exception_handler,           /*  73 (0x124) Device-specific interrupts */\r
399    asm_exception_handler,           /*  74 (0x128) Device-specific interrupts */\r
400    asm_exception_handler,           /*  75 (0x12C) Device-specific interrupts */\r
401    asm_exception_handler,           /*  76 (0x130) Device-specific interrupts */\r
402    asm_exception_handler,           /*  77 (0x134) Device-specific interrupts */\r
403    asm_exception_handler,           /*  78 (0x138) Device-specific interrupts */\r
404    asm_exception_handler,           /*  79 (0x13C) Device-specific interrupts */\r
405    asm_exception_handler,           /*  80 (0x140) Device-specific interrupts */\r
406    asm_exception_handler,           /*  81 (0x144) Device-specific interrupts */\r
407    asm_exception_handler,           /*  82 (0x148) Device-specific interrupts */\r
408    asm_exception_handler,           /*  83 (0x14C) Device-specific interrupts */\r
409    asm_exception_handler,           /*  84 (0x150) Device-specific interrupts */\r
410    asm_exception_handler,           /*  85 (0x154) Device-specific interrupts */\r
411    asm_exception_handler,           /*  86 (0x158) Device-specific interrupts */\r
412    asm_exception_handler,           /*  87 (0x15C) Device-specific interrupts */\r
413    asm_exception_handler,           /*  88 (0x160) Device-specific interrupts */\r
414    asm_exception_handler,           /*  89 (0x164) Device-specific interrupts */\r
415    asm_exception_handler,           /*  90 (0x168) Device-specific interrupts */\r
416    asm_exception_handler,           /*  91 (0x16C) Device-specific interrupts */\r
417    asm_exception_handler,           /*  92 (0x170) Device-specific interrupts */\r
418    asm_exception_handler,           /*  93 (0x174) Device-specific interrupts */\r
419    asm_exception_handler,           /*  94 (0x178) Device-specific interrupts */\r
420    asm_exception_handler,           /*  95 (0x17C) Device-specific interrupts */\r
421    asm_exception_handler,           /*  96 (0x180) Level 1 software interrupt */\r
422    asm_exception_handler,           /*  97 (0x184) Level 2 software interrupt */\r
423    asm_exception_handler,           /*  98 (0x188) Level 3 software interrupt */\r
424    asm_exception_handler,           /*  99 (0x18C) Level 4 software interrupt */\r
425    asm_exception_handler,           /* 100 (0x190) Level 5 software interrupt */\r
426    asm_exception_handler,           /* 101 (0x194) Level 6 software interrupt */\r
427    asm_exception_handler,           /* 102 (0x198) Level 7 software interrupt */\r
428    asm_exception_handler,           /* 103 (0x19C) Reserved                   */\r
429    asm_exception_handler,           /* 104 (0x1A0) Reserved                   */\r
430    asm_exception_handler,           /* 105 (0x1A4) Reserved                   */\r
431    asm_exception_handler,           /* 106 (0x1A8) Reserved                   */\r
432    asm_exception_handler,           /* 107 (0x___) Reserved                   */\r
433    asm_exception_handler,           /* 108 (0x___) Reserved                   */\r
434    asm_exception_handler,           /* 109 (0x___) Reserved                   */\r
435    asm_exception_handler,           /* 110 (0x___) Reserved                   */\r
436    asm_exception_handler,           /* 111 (0x___) Reserved                   */\r
437    asm_exception_handler,           /* 112 (0x___) Reserved                   */\r
438    asm_exception_handler,           /* 113 (0x___) Reserved                   */\r
439    asm_exception_handler,           /* 114 (0x___) Reserved                   */\r
440    asm_exception_handler,           /* 115 (0x___) Reserved                   */\r
441    asm_exception_handler,           /* 116 (0x___) Reserved                   */\r
442    asm_exception_handler,           /* 117 (0x___) Reserved                   */\r
443    asm_exception_handler,           /* 118 (0x___) Reserved                   */\r
444    asm_exception_handler,           /* 119 (0x___) Reserved                   */\r
445    asm_exception_handler,           /* 120 (0x___) Reserved                   */\r
446    asm_exception_handler,           /* 121 (0x___) Reserved                   */\r
447    asm_exception_handler,           /* 122 (0x___) Reserved                   */\r
448    asm_exception_handler,           /* 123 (0x___) Reserved                   */\r
449    asm_exception_handler,           /* 124 (0x___) Reserved                   */\r
450    asm_exception_handler,           /* 125 (0x___) Reserved                   */\r
451    asm_exception_handler,           /* 126 (0x___) Reserved                   */\r
452    asm_exception_handler,           /* 127 (0x___) Reserved                   */\r
453    asm_exception_handler,           /* 128 (0x___) Reserved                   */\r
454    asm_exception_handler,           /* 129 (0x___) Reserved                   */\r
455    asm_exception_handler,           /* 130 (0x___) Reserved                   */\r
456    asm_exception_handler,           /* 131 (0x___) Reserved                   */\r
457    asm_exception_handler,           /* 132 (0x___) Reserved                   */\r
458    asm_exception_handler,           /* 133 (0x___) Reserved                   */\r
459    asm_exception_handler,           /* 134 (0x___) Reserved                   */\r
460    asm_exception_handler,           /* 135 (0x___) Reserved                   */\r
461    asm_exception_handler,           /* 136 (0x___) Reserved                   */\r
462    asm_exception_handler,           /* 137 (0x___) Reserved                   */\r
463    asm_exception_handler,           /* 138 (0x___) Reserved                   */\r
464    asm_exception_handler,           /* 139 (0x___) Reserved                   */\r
465    asm_exception_handler,           /* 140 (0x___) Reserved                   */\r
466    asm_exception_handler,           /* 141 (0x___) Reserved                   */\r
467    asm_exception_handler,           /* 142 (0x___) Reserved                   */\r
468    asm_exception_handler,           /* 143 (0x___) Reserved                   */\r
469    asm_exception_handler,           /* 144 (0x___) Reserved                   */\r
470    asm_exception_handler,           /* 145 (0x___) Reserved                   */\r
471    asm_exception_handler,           /* 146 (0x___) Reserved                   */\r
472    asm_exception_handler,           /* 147 (0x___) Reserved                   */\r
473    asm_exception_handler,           /* 148 (0x___) Reserved                   */\r
474    asm_exception_handler,           /* 149 (0x___) Reserved                   */\r
475    asm_exception_handler,           /* 150 (0x___) Reserved                   */\r
476    asm_exception_handler,           /* 151 (0x___) Reserved                   */\r
477    asm_exception_handler,           /* 152 (0x___) Reserved                   */\r
478    asm_exception_handler,           /* 153 (0x___) Reserved                   */\r
479    asm_exception_handler,           /* 154 (0x___) Reserved                   */\r
480    asm_exception_handler,           /* 155 (0x___) Reserved                   */\r
481    asm_exception_handler,           /* 156 (0x___) Reserved                   */\r
482    asm_exception_handler,           /* 157 (0x___) Reserved                   */\r
483    asm_exception_handler,           /* 158 (0x___) Reserved                   */\r
484    asm_exception_handler,           /* 159 (0x___) Reserved                   */\r
485    asm_exception_handler,           /* 160 (0x___) Reserved                   */\r
486    asm_exception_handler,           /* 161 (0x___) Reserved                   */\r
487    asm_exception_handler,           /* 162 (0x___) Reserved                   */\r
488    asm_exception_handler,           /* 163 (0x___) Reserved                   */\r
489    asm_exception_handler,           /* 164 (0x___) Reserved                   */\r
490    asm_exception_handler,           /* 165 (0x___) Reserved                   */\r
491    asm_exception_handler,           /* 166 (0x___) Reserved                   */\r
492    asm_exception_handler,           /* 167 (0x___) Reserved                   */\r
493    asm_exception_handler,           /* 168 (0x___) Reserved                   */\r
494    asm_exception_handler,           /* 169 (0x___) Reserved                   */\r
495    asm_exception_handler,           /* 170 (0x___) Reserved                   */\r
496    asm_exception_handler,           /* 171 (0x___) Reserved                   */\r
497    asm_exception_handler,           /* 172 (0x___) Reserved                   */\r
498    asm_exception_handler,           /* 173 (0x___) Reserved                   */\r
499    asm_exception_handler,           /* 174 (0x___) Reserved                   */\r
500    asm_exception_handler,           /* 175 (0x___) Reserved                   */\r
501    asm_exception_handler,           /* 176 (0x___) Reserved                   */\r
502    asm_exception_handler,           /* 177 (0x___) Reserved                   */\r
503    asm_exception_handler,           /* 178 (0x___) Reserved                   */\r
504    asm_exception_handler,           /* 179 (0x___) Reserved                   */\r
505    asm_exception_handler,           /* 180 (0x___) Reserved                   */\r
506    asm_exception_handler,           /* 181 (0x___) Reserved                   */\r
507    asm_exception_handler,           /* 182 (0x___) Reserved                   */\r
508    asm_exception_handler,           /* 183 (0x___) Reserved                   */\r
509    asm_exception_handler,           /* 184 (0x___) Reserved                   */\r
510    asm_exception_handler,           /* 185 (0x___) Reserved                   */\r
511    asm_exception_handler,           /* 186 (0x___) Reserved                   */\r
512    asm_exception_handler,           /* 187 (0x___) Reserved                   */\r
513    asm_exception_handler,           /* 188 (0x___) Reserved                   */\r
514    asm_exception_handler,           /* 189 (0x___) Reserved                   */\r
515    asm_exception_handler,           /* 190 (0x___) Reserved                   */\r
516    asm_exception_handler,           /* 191 (0x___) Reserved                   */\r
517    asm_exception_handler,           /* 192 (0x___) Reserved                   */\r
518    asm_exception_handler,           /* 193 (0x___) Reserved                   */\r
519    asm_exception_handler,           /* 194 (0x___) Reserved                   */\r
520    asm_exception_handler,           /* 195 (0x___) Reserved                   */\r
521    asm_exception_handler,           /* 196 (0x___) Reserved                   */\r
522    asm_exception_handler,           /* 197 (0x___) Reserved                   */\r
523    asm_exception_handler,           /* 198 (0x___) Reserved                   */\r
524    asm_exception_handler,           /* 199 (0x___) Reserved                   */\r
525    asm_exception_handler,           /* 200 (0x___) Reserved                   */\r
526    asm_exception_handler,           /* 201 (0x___) Reserved                   */\r
527    asm_exception_handler,           /* 202 (0x___) Reserved                   */\r
528    asm_exception_handler,           /* 203 (0x___) Reserved                   */\r
529    asm_exception_handler,           /* 204 (0x___) Reserved                   */\r
530    asm_exception_handler,           /* 205 (0x___) Reserved                   */\r
531    asm_exception_handler,           /* 206 (0x___) Reserved                   */\r
532    asm_exception_handler,           /* 207 (0x___) Reserved                   */\r
533    asm_exception_handler,           /* 208 (0x___) Reserved                   */\r
534    asm_exception_handler,           /* 209 (0x___) Reserved                   */\r
535    asm_exception_handler,           /* 210 (0x___) Reserved                   */\r
536    asm_exception_handler,           /* 211 (0x___) Reserved                   */\r
537    asm_exception_handler,           /* 212 (0x___) Reserved                   */\r
538    asm_exception_handler,           /* 213 (0x___) Reserved                   */\r
539    asm_exception_handler,           /* 214 (0x___) Reserved                   */\r
540    asm_exception_handler,           /* 215 (0x___) Reserved                   */\r
541    asm_exception_handler,           /* 216 (0x___) Reserved                   */\r
542    asm_exception_handler,           /* 217 (0x___) Reserved                   */\r
543    asm_exception_handler,           /* 218 (0x___) Reserved                   */\r
544    asm_exception_handler,           /* 219 (0x___) Reserved                   */\r
545    asm_exception_handler,           /* 220 (0x___) Reserved                   */\r
546    asm_exception_handler,           /* 221 (0x___) Reserved                   */\r
547    asm_exception_handler,           /* 222 (0x___) Reserved                   */\r
548    asm_exception_handler,           /* 223 (0x___) Reserved                   */\r
549    asm_exception_handler,           /* 224 (0x___) Reserved                   */\r
550    asm_exception_handler,           /* 225 (0x___) Reserved                   */\r
551    asm_exception_handler,           /* 226 (0x___) Reserved                   */\r
552    asm_exception_handler,           /* 227 (0x___) Reserved                   */\r
553    asm_exception_handler,           /* 228 (0x___) Reserved                   */\r
554    asm_exception_handler,           /* 229 (0x___) Reserved                   */\r
555    asm_exception_handler,           /* 230 (0x___) Reserved                   */\r
556    asm_exception_handler,           /* 231 (0x___) Reserved                   */\r
557    asm_exception_handler,           /* 232 (0x___) Reserved                   */\r
558    asm_exception_handler,           /* 233 (0x___) Reserved                   */\r
559    asm_exception_handler,           /* 234 (0x___) Reserved                   */\r
560    asm_exception_handler,           /* 235 (0x___) Reserved                   */\r
561    asm_exception_handler,           /* 236 (0x___) Reserved                   */\r
562    asm_exception_handler,           /* 237 (0x___) Reserved                   */\r
563    asm_exception_handler,           /* 238 (0x___) Reserved                   */\r
564    asm_exception_handler,           /* 239 (0x___) Reserved                   */\r
565    asm_exception_handler,           /* 240 (0x___) Reserved                   */\r
566    asm_exception_handler,           /* 241 (0x___) Reserved                   */\r
567    asm_exception_handler,           /* 242 (0x___) Reserved                   */\r
568    asm_exception_handler,           /* 243 (0x___) Reserved                   */\r
569    asm_exception_handler,           /* 244 (0x___) Reserved                   */\r
570    asm_exception_handler,           /* 245 (0x___) Reserved                   */\r
571    asm_exception_handler,           /* 246 (0x___) Reserved                   */\r
572    asm_exception_handler,           /* 247 (0x___) Reserved                   */\r
573    asm_exception_handler,           /* 248 (0x___) Reserved                   */\r
574    asm_exception_handler,           /* 249 (0x___) Reserved                   */\r
575    asm_exception_handler,           /* 250 (0x___) Reserved                   */\r
576    asm_exception_handler,           /* 251 (0x___) Reserved                   */\r
577    asm_exception_handler,           /* 252 (0x___) Reserved                   */\r
578    asm_exception_handler,           /* 253 (0x___) Reserved                   */\r
579    asm_exception_handler,           /* 254 (0x___) Reserved                   */\r
580    asm_exception_handler,           /* 255 (0x___) Reserved                   */ \r
581 };\r
582 \r
583 /********************************************************************\r
584  * MCF5xxx ASM utility functions\r
585  */\r
586 asm void mcf5xxx_wr_vbr(unsigned long) { /* Set VBR */\r
587         move.l  4(SP),D0\r
588     movec d0,VBR \r
589         nop\r
590         rts     \r
591 }       \r
592 \r
593 /********************************************************************\r
594  * MCF5xxx startup copy functions:\r
595  *\r
596  * Set VBR and performs RAM vector table initializatiom.\r
597  * The following symbol should be defined in the lcf:\r
598  * __VECTOR_RAM\r
599  *\r
600  * _vect is the start of the exception table in the code\r
601  * In case _vect address is different from __VECTOR_RAM,\r
602  * the vector table is copied from _vect to __VECTOR_RAM.\r
603  * In any case VBR is set to __VECTOR_RAM.\r
604  */ \r
605 void initialize_exceptions(void)\r
606 {\r
607         /*\r
608          * Memory map definitions from linker command files used by mcf5xxx_startup\r
609          */\r
610 \r
611         register uint32 n;\r
612     \r
613         /* \r
614      * Copy the vector table to RAM \r
615      */\r
616         if (__VECTOR_RAM != (unsigned long*)_vect)\r
617         {\r
618                 for (n = 0; n < 256; n++)\r
619                         __VECTOR_RAM[n] = (unsigned long)_vect[n];\r
620         }\r
621         mcf5xxx_wr_vbr((unsigned long)__VECTOR_RAM);\r
622 }\r
623 \r
624 #ifdef __cplusplus\r
625 }\r
626 #endif\r