Mercurial > flash_v2
annotate packages/hal/mn10300/arch/current/src/vectors.S @ 1777:c16341b1bac6 default tip
* Added execute permissions to files missed in conversion from CVS
| author | alexs |
|---|---|
| date | Mon, 12 Oct 2009 02:26:09 +0100 |
| parents | d2c90368aeef |
| children |
| rev | line source |
|---|---|
| 0 | 1 ##============================================================================= |
| 2 ## | |
| 3 ## vectors.S | |
| 4 ## | |
| 5 ## MN10300 exception vectors | |
| 6 ## | |
| 7 ##============================================================================= | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
191
diff
changeset
|
8 #####ECOSGPLCOPYRIGHTBEGIN#### |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
9 ## ------------------------------------------- |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
10 ## This file is part of eCos, the Embedded Configurable Operating System. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
11 ## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
12 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
13 ## eCos is free software; you can redistribute it and/or modify it under |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
14 ## the terms of the GNU General Public License as published by the Free |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
15 ## Software Foundation; either version 2 or (at your option) any later version. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
16 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
17 ## eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
18 ## WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
19 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
20 ## for more details. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
21 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
22 ## You should have received a copy of the GNU General Public License along |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
23 ## with eCos; if not, write to the Free Software Foundation, Inc., |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
24 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
25 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
26 ## As a special exception, if other files instantiate templates or use macros |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
27 ## or inline functions from this file, or you compile this file and link it |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
28 ## with other works to produce a work based on this file, this file does not |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
29 ## by itself cause the resulting work to be covered by the GNU General Public |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
30 ## License. However the source code for this file must still be made available |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
31 ## in accordance with section (3) of the GNU General Public License. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
32 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
33 ## This exception does not invalidate any other reasons why a work based on |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
34 ## this file might be covered by the GNU General Public License. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
35 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
36 ## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
37 ## at http://sources.redhat.com/ecos/ecos-license/ |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
38 ## ------------------------------------------- |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
191
diff
changeset
|
39 #####ECOSGPLCOPYRIGHTEND#### |
| 0 | 40 ##============================================================================= |
| 41 #######DESCRIPTIONBEGIN#### | |
| 42 ## | |
| 43 ## Author(s): nickg | |
|
174
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
44 ## Contributors: nickg, dmoseley, dhowells |
| 0 | 45 ## Date: 1997-10-16 |
| 46 ## Purpose: MN10300 exception vectors | |
| 47 ## Description: This file defines the code placed into the exception | |
| 48 ## vectors. It also contains the first level default VSRs | |
| 49 ## that save and restore state for both exceptions and | |
| 50 ## interrupts. | |
| 51 ## | |
| 52 ######DESCRIPTIONEND#### | |
| 53 ## | |
| 54 ##============================================================================= | |
| 55 | |
| 56 #include <pkgconf/hal.h> | |
| 57 | |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
58 #ifdef CYGPKG_REDBOOT |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
59 #include <pkgconf/redboot.h> |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
60 #endif |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
61 |
| 0 | 62 #ifdef CYGPKG_KERNEL |
| 63 | |
| 64 #include <pkgconf/kernel.h> | |
| 65 | |
| 66 #endif | |
| 67 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
68 #include <cyg/hal/arch.inc> |
|
174
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
69 #include <cyg/hal/basetype.h> |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
70 |
| 0 | 71 |
| 72 ##----------------------------------------------------------------------------- | |
| 73 | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
191
diff
changeset
|
74 // .file "vectors.S" |
| 0 | 75 |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
76 #ifdef CYGPKG_CYGMON |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
77 ##----------------------------------------------------------------------------- |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
78 ## Macros for Stack handling when running Cygmon |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
79 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
80 .macro hal_cygmon_switch_app_stack |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
81 # |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
82 # Switch to interrupt stack to handle exception |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
83 # |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
84 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
85 # First, save some scratch registers |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
86 mov a2(a2_save) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
87 mov a3,(a3_save) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
88 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
89 # Copy the exception frame |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
90 mov __cygmon_interrupt_stack-8,a2 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
91 mov (sp),a3 // Copy over the saved EPSW |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
92 mov a3,(a2) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
93 mov (4,sp),a3 // Copy over the saved PC |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
94 mov a3,(4,a2) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
95 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
96 # Save the pre-exception sp in the register image |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
97 add -4,a2 # space for SP |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
98 mov sp,a3 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
99 add 8,a3 # adjust for exception frame |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
100 mov a3,(a2) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
101 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
102 # Actually switch the stack |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
103 mov a2,sp |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
104 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
105 # Now, restore the scratch registers |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
106 mov (a2_save),a2 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
107 mov (a3_save),a3 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
108 .endm |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
109 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
110 .macro hal_cygmon_restore_app_stack |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
111 // For cygmon we are switching stacks immediately on exception. |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
112 // We must wait until the very end before restoring the original stack. |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
113 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
114 # Save some scratch registers |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
115 mov a2,(a2_save) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
116 mov a3,(a3_save) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
117 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
118 # We need to restore the application stack pointer, but we also |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
119 # need to restore the exception frame. |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
120 mov (sp),a2 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
121 add 4,sp // remove saved sp |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
122 add -8,a2 // adjust for exception frame |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
123 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
124 mov (sp),a3 // Copy the saved EPSW |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
125 mov a3,(a2) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
126 mov (4,sp),a3 // Copy the saved PC |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
127 mov a3,(4,a2) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
128 mov a2,sp // Restore the frame-adjusted SP |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
129 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
130 # Restore the scratch registers |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
131 mov (a2_save),a2 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
132 mov (a3_save),a3 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
133 .endm |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
134 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
135 #endif // CYGPKG_CYGMON |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
136 |
| 0 | 137 ##----------------------------------------------------------------------------- |
|
174
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
138 #define EXCEPTION_HANDLER(VECTOR,NAME,HANDLER) .org VECTOR; \ |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
139 NAME##_vector: \ |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
140 jmp HANDLER |
| 0 | 141 |
| 142 .section ".vectors","ax" | |
|
174
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
143 |
| 0 | 144 .globl reset_vector |
|
174
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
145 |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
146 .org 0x000 |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
147 reset_vector: |
| 0 | 148 # Reset vector |
| 149 jmp _start | |
| 150 | |
|
174
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
151 EXCEPTION_HANDLER(0x008, nmi ,__nmi) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
152 EXCEPTION_HANDLER(0x010, trap ,__trap) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
153 EXCEPTION_HANDLER(0x100, ins_tlb_miss_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
154 EXCEPTION_HANDLER(0x108, data_tlb_miss_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
155 EXCEPTION_HANDLER(0x110, ins_access_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
156 EXCEPTION_HANDLER(0x118, data_access_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
157 EXCEPTION_HANDLER(0x160, priv_ins_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
158 EXCEPTION_HANDLER(0x168, unimpl_ins_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
159 EXCEPTION_HANDLER(0x170, unimpl_ext_ins_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
160 EXCEPTION_HANDLER(0x180, misalignment_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
161 EXCEPTION_HANDLER(0x188, bus_error ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
162 EXCEPTION_HANDLER(0x190, illegal_ins_access_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
163 EXCEPTION_HANDLER(0x198, illegal_data_access_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
164 EXCEPTION_HANDLER(0x1a0, iospace_ins_access_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
165 EXCEPTION_HANDLER(0x1a8, priv_space_ins_access_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
166 EXCEPTION_HANDLER(0x1b0, priv_space_data_access_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
167 EXCEPTION_HANDLER(0x1b8, data_space_ins_access_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
168 EXCEPTION_HANDLER(0x1c0, fpu_disabled_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
169 EXCEPTION_HANDLER(0x1c8, fpu_unimplemented_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
170 EXCEPTION_HANDLER(0x1d0, fpu_operation_exception ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
171 EXCEPTION_HANDLER(0x200, double_fault ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
172 EXCEPTION_HANDLER(0x240, wdt_overflow ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
173 EXCEPTION_HANDLER(0x248, nmi_pin ,__nmi) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
174 EXCEPTION_HANDLER(0x280, maskable_int0 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
175 EXCEPTION_HANDLER(0x288, maskable_int1 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
176 EXCEPTION_HANDLER(0x290, maskable_int2 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
177 EXCEPTION_HANDLER(0x298, maskable_int3 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
178 EXCEPTION_HANDLER(0x2a0, maskable_int4 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
179 EXCEPTION_HANDLER(0x2a8, maskable_int5 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
180 EXCEPTION_HANDLER(0x2b0, maskable_int6 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
181 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
182 // We need to put the syscall handler at 0x300 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
183 // For cygmon, we will use the am33 "syscall 0" as the syscall trap. |
|
174
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
184 EXCEPTION_HANDLER(0x300, syscall0 ,__nmi) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
185 EXCEPTION_HANDLER(0x308, syscall1 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
186 EXCEPTION_HANDLER(0x310, syscall2 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
187 EXCEPTION_HANDLER(0x318, syscall3 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
188 EXCEPTION_HANDLER(0x320, syscall4 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
189 EXCEPTION_HANDLER(0x328, syscall5 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
190 EXCEPTION_HANDLER(0x330, syscall6 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
191 EXCEPTION_HANDLER(0x338, syscall7 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
192 EXCEPTION_HANDLER(0x340, syscall8 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
193 EXCEPTION_HANDLER(0x348, syscall9 ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
194 EXCEPTION_HANDLER(0x350, syscalla ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
195 EXCEPTION_HANDLER(0x358, syscallb ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
196 EXCEPTION_HANDLER(0x360, syscallc ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
197 EXCEPTION_HANDLER(0x368, syscalld ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
198 EXCEPTION_HANDLER(0x370, syscalle ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
199 EXCEPTION_HANDLER(0x378, syscallf ,__unknown) |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
200 |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
201 ##----------------------------------------------------------------------------- |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
202 ## unknown interrupt or exception vector |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
203 __unknown: |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
204 #ifdef CYG_HAL_HANDLE_UNKNOWN_INT_DEFINED |
|
38892b97b685
Merge from eCos master repository on 2001-07-28-00:17:32-BST
jlarmour
parents:
149
diff
changeset
|
205 hal_handle_unknown_int |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
206 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
207 |
| 0 | 208 ##----------------------------------------------------------------------------- |
| 209 ## NMI vector | |
| 210 | |
| 211 .globl __nmi | |
| 212 __nmi: | |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
213 #ifdef CYGPKG_CYGMON |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
214 hal_cygmon_switch_app_stack |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
215 #else |
| 0 | 216 add -4,sp # space for SP |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
217 #endif |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
218 hal_cpu_save_all # push all registers |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
219 mov (_hal_vsr_table+28),a0 |
| 0 | 220 jmp (a0) |
| 221 | |
| 222 ##----------------------------------------------------------------------------- | |
| 223 ## Trap vector | |
| 224 | |
| 225 .globl __trap | |
| 226 __trap: | |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
227 #ifdef CYGPKG_CYGMON |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
228 add -4,sp # space for PSW |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
229 hal_cygmon_switch_app_stack |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
230 #else |
| 0 | 231 add -8,sp # space for SP and PSW |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
232 #endif |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
233 hal_cpu_save_all # push all registers |
| 0 | 234 mov (_hal_vsr_table+32),a0 |
| 235 jmp (a0) | |
| 236 | |
| 237 ##----------------------------------------------------------------------------- | |
| 238 ## Macro to define a hardware VSR | |
| 239 | |
| 240 .macro hardware_vector name | |
| 241 .globl __hardware_vector_\name | |
| 242 __hardware_vector_\name: | |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
243 #ifdef CYGPKG_CYGMON |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
244 hal_cygmon_switch_app_stack |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
245 #else |
| 0 | 246 add -4,sp # space for SP |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
247 #endif |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
248 hal_cpu_save_all |
| 0 | 249 mov \name,d0 # d0 = vector id |
| 250 mov d0,(0,sp) # save in dummy stack loc | |
| 251 mov _hal_vsr_table,a0 # a0 = vsr table | |
| 252 add \name<<2,a0 # a0 = &required vsr | |
| 253 mov (a0),a0 # a0 = required vsr | |
| 254 jmp (a0) # go there | |
| 255 .endm | |
| 256 | |
| 257 ##----------------------------------------------------------------------------- | |
| 258 ## Hardware Vectors. These are pointed to by the registers in | |
| 259 ## mn10300_interrupt_vectors and must be in the range 0x4000XXXX. | |
| 260 | |
| 261 hardware_vector 0 | |
| 262 hardware_vector 1 | |
| 263 hardware_vector 2 | |
| 264 hardware_vector 3 | |
| 265 hardware_vector 4 | |
| 266 hardware_vector 5 | |
| 267 hardware_vector 6 | |
| 268 | |
| 269 ##----------------------------------------------------------------------------- | |
| 270 ## Startup code | |
| 271 | |
| 272 .text | |
| 273 | |
| 274 .globl _start | |
| 275 _start: | |
| 276 | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
277 #ifdef HAL_EARLY_INIT |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
278 HAL_EARLY_INIT |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
279 #endif |
| 0 | 280 # set up stack |
| 281 | |
| 282 mov __interrupt_stack,a0 | |
| 283 sub 8,a0 | |
| 284 mov a0,sp | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
285 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
286 # Initialize hardware |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
287 hal_cpu_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
288 hal_mmu_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
289 hal_memc_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
290 hal_diag_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
291 hal_intc_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
292 hal_cache_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
293 hal_timer_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
294 hal_mon_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
295 |
| 0 | 296 #ifdef CYG_HAL_STARTUP_ROM |
| 297 | |
| 298 # Copy data from ROM to RAM | |
| 299 | |
| 300 mov __rom_data_start,a0 | |
| 301 mov __ram_data_end,a1 | |
| 302 mov __ram_data_start,a2 | |
| 303 | |
| 304 cmp a2,a1 | |
| 305 beq 8f | |
| 306 1: | |
| 307 movbu (a0),d0 | |
| 308 movbu d0,(a2) | |
| 309 inc a0 | |
| 310 inc a2 | |
| 311 cmp a2,a1 | |
| 312 bne 1b | |
| 313 8: | |
| 314 | |
| 315 #endif | |
| 316 | |
| 317 # Clear BSS | |
| 318 mov __bss_start,a0 | |
| 2 | 319 mov __bss_end,a1 |
| 0 | 320 |
| 321 cmp a0,a1 | |
| 322 beq 8f | |
| 323 clr d0 | |
| 324 1: | |
| 325 movbu d0,(a0) | |
| 326 inc a0 | |
| 327 cmp a0,a1 | |
| 328 bne 1b | |
| 329 8: | |
| 330 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
331 # Call variant and platform HAL |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
332 # initialization routines. |
| 0 | 333 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
334 .extern _hal_variant_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
335 call _hal_variant_init,[],0 |
| 0 | 336 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
337 .extern _hal_platform_init |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
338 call _hal_platform_init,[],0 |
| 0 | 339 |
| 340 # Call constructors | |
| 341 | |
| 342 .extern _cyg_hal_invoke_constructors | |
| 343 call _cyg_hal_invoke_constructors,[],0 | |
| 344 | |
| 2 | 345 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
| 346 .extern _initialize_stub | |
| 347 call _initialize_stub,[],0 | |
| 348 #endif | |
| 349 | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
350 #ifdef CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
351 .extern hal_ctrlc_isr_init |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
352 call hal_ctrlc_isr_init,[],0 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
353 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
354 |
| 2 | 355 # Call cyg_start |
| 0 | 356 clr d0 |
| 357 mov d0,(4,sp) | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
358 |
| 0 | 359 .extern _cyg_start |
| 360 call _cyg_start,[],0 | |
| 361 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
362 9: |
| 0 | 363 bra 9b # Loop if we return |
| 364 | |
| 365 ##----------------------------------------------------------------------------- | |
| 366 ## The following macros are defined depending on whether the HAL is configured | |
| 367 ## to support the kernel or not. | |
| 368 | |
| 369 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT | |
| 370 | |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
143
diff
changeset
|
371 .extern _cyg_scheduler_sched_lock |
| 2 | 372 |
| 0 | 373 # Increment the scheduler lock |
| 374 | |
| 375 .macro increment_sched_lock reg=d0 | |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
143
diff
changeset
|
376 mov (_cyg_scheduler_sched_lock),\reg |
| 0 | 377 inc \reg |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
143
diff
changeset
|
378 mov \reg,(_cyg_scheduler_sched_lock) |
| 0 | 379 .endm |
| 380 | |
| 381 #else | |
| 382 | |
| 383 .macro increment_sched_lock reg=d0 | |
| 384 .endm | |
| 385 | |
| 386 #endif | |
| 387 | |
| 388 ##----------------------------------------------------------------------------- | |
| 389 ## Default interrupt VSR | |
| 390 | |
| 391 .text | |
| 392 .globl __default_interrupt_vsr | |
| 393 __default_interrupt_vsr: | |
| 394 | |
| 395 # We come here with all the registers pushed | |
| 396 # onto the stack. | |
| 397 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
398 hal_diag_intr_start |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
399 |
| 0 | 400 increment_sched_lock |
| 401 | |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
402 #if defined(CYGPKG_CYGMON) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
403 // For Cygmon, we saved this back when we originally switched stacks. |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
404 mov (sp),a2 # A2 = saved thread state |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
405 #elif defined(CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK) |
| 0 | 406 # Increment interrupt nesting counter |
| 407 mov __interrupt_stack,a0 # A0 = interrupt stack top | |
| 408 mov sp,a2 # A2 = SP | |
| 409 cmp __interrupt_stack_base,a2 # compare with base of stack | |
| 410 blt 1f # if lt switch to int stack | |
| 411 cmp a0,a2 # compare sp with stack top | |
| 412 ble 8f # if le already on istack | |
| 413 1: | |
| 414 mov a0,sp # switch to new SP | |
| 415 8: | |
| 416 movm [a2],(sp) # save old SP | |
| 417 | |
| 418 #else | |
| 419 mov sp,a2 # A2 = saved thread state | |
| 420 #endif | |
| 421 | |
| 422 # Here A2 -> saved thread state on the threads own | |
| 423 # stack. We will be executing either on the same stack | |
| 424 # or on the interrupt stack, depending on config options. | |
| 425 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
426 hal_intc_decode d3,a3,d0 |
| 0 | 427 |
| 428 # Here D3 contains the table byte offset of the vector to | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
429 # call. |
| 2 | 430 |
| 0 | 431 #if defined(CYGPKG_KERNEL_INSTRUMENT) && defined(CYGDBG_KERNEL_INSTRUMENT_INTR) |
| 432 | |
| 433 # Call cyg_instrument to record that this interrupt is being raised. | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
434 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
435 .extern _cyg_instrument |
| 0 | 436 add -16,sp # make space for return link + args |
| 437 mov 0x0301,d0 # d0 = type = INTR,RAISE | |
| 438 mov (0,a2),d1 # d1 = arg1 = vector | |
| 439 mov d3,(12,sp) # (12,sp) = arg2 = table offset | |
| 440 calls _cyg_instrument # call instrumentation | |
| 441 add 16,sp # pop space | |
| 442 | |
| 443 #endif | |
| 2 | 444 |
| 445 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT | |
| 446 .extern _cyg_hal_gdb_isr | |
| 447 add -16,sp # make space for return link + args | |
| 448 mov (0,a2),d0 # d0 = vector | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
449 mov (SAVED_CONTEXT_PC_OFFSET,a2),d1 # d1 = pc |
| 2 | 450 calls _cyg_hal_gdb_isr # call GDB isr function |
| 451 cmp 0x00,d0 # Call ISR proper? | |
| 452 beq 2f # (d0 is 0 when skipping | |
| 453 # to avoid DSR call) | |
| 454 add 16,sp # pop space | |
| 455 #endif | |
| 0 | 456 |
| 457 #ifdef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING | |
| 458 | |
| 459 # To allow nested interrupts, we set the IE bit. We do | |
| 460 # not touch the IPL bits, so only higher priority interrupts | |
| 461 # will be nested on top of us. Also, new interrupts will not | |
| 462 # be delivered until the ISR calls | |
| 463 # Cyg_Interrupt::acknowledge_interrupt(). At some future point | |
| 464 # we may want to do the ack stuff here to allow immediate nesting. | |
| 465 | |
| 466 or 0x0800,psw | |
| 467 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
468 #endif |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
469 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
470 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
471 # If we have Ctrl-C support enabled, save a pointer to the |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
472 # saved CPU state here so we can plant a breakpoint there if |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
473 # this is a ^C. |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
474 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
475 .extern _hal_saved_interrupt_state |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
476 mov a2,(_hal_saved_interrupt_state) |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
477 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
478 #endif |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
479 |
| 0 | 480 mov _hal_interrupt_handlers,a0 # a0 = isr table |
| 481 mov (d3,a0),a0 # a0 = isr | |
| 482 | |
| 483 mov _hal_interrupt_data,a1 # a1 = data table | |
| 484 mov (d3,a1),d1 # d1 = isr data | |
| 485 | |
| 486 mov (0,a2),d0 # d0 = vector. (d3 is... | |
| 487 # ...adjusted for table reads) | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
488 |
| 0 | 489 add -16,sp # make space for return link |
| 490 | |
| 491 calls (a0) # call isr | |
| 492 | |
| 493 # on return d0 bit 1 will indicate whether a DSR is | |
| 494 # to be posted. Pass this together with a pointer to | |
| 495 # the interrupt object we have just used to the | |
| 496 # interrupt tidy up routine. | |
| 497 | |
| 498 # D3 is defined to be saved across procedure calls, and | |
| 499 # should still contain the vector byte index. Similarly, | |
| 500 # A2 should still point to the saved machine state. | |
| 501 | |
| 2 | 502 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT |
| 503 # If interrupt was caused by GDB, the ISR call above | |
| 504 # is skipped by jumping here. | |
| 505 2: | |
| 506 #endif | |
| 507 | |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
508 #if defined(CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK) && !defined(CYGPKG_CYGMON) |
| 0 | 509 |
| 510 # If we are returning from the last nested interrupt, move back | |
| 511 # to the thread stack. interrupt_end() must be called on the | |
| 512 # thread stack since it potentially causes a context switch. | |
| 513 | |
| 514 add 16,sp # pop call frame from int stack | |
| 515 movm (sp),[a3] # pop old sp | |
| 516 mov a3,sp # put in SP | |
| 517 | |
| 518 add -16,sp # make call frame for call | |
| 519 | |
| 520 #endif | |
| 521 | |
| 522 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT | |
| 523 | |
| 524 # We only need to call _interrupt_end() when there is a kernel | |
| 525 # present to do any tidying up. | |
| 526 | |
| 527 # Using the vector offset in D3, get the interrupt object pointer | |
| 528 # into D1. | |
| 529 mov _hal_interrupt_objects,a0 # a0 = object table | |
| 530 mov (d3,a0),d1 # d1 = object | |
| 531 | |
| 532 # Even when this is not the last nested interrupt, we must call | |
| 533 # _interrupt_end() to post the DSR and decrement the scheduler | |
| 534 # lock. | |
| 535 | |
| 536 mov a2,(12,sp) # arg3 = saved state. | |
| 537 | |
| 538 calls _interrupt_end # call interrupt end fn | |
| 539 #endif | |
| 540 | |
| 541 add 16,sp # pop return link | |
| 542 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
543 # show_interrupts |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
544 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
545 hal_diag_restore |
| 0 | 546 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
547 hal_cpu_load_all |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
548 #ifdef CYGPKG_CYGMON |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
549 hal_cygmon_restore_app_stack |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
550 #else |
| 0 | 551 add 4,sp |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
552 #endif |
| 0 | 553 rti # and return |
| 554 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
555 ##----------------------------------------------------------------------------- |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
556 ## Execute pending DSRs on the interrupt stack with interrupts enabled. |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
557 ## Note: this can only be called from code running on a thread stack |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
558 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
559 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
560 .extern _cyg_interrupt_call_pending_DSRs |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
561 .global _hal_interrupt_stack_call_pending_DSRs |
| 0 | 562 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
563 _hal_interrupt_stack_call_pending_DSRs: |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
564 movm [d2,a2],(sp) # save some work regs |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
565 mov __interrupt_stack,a0 # interrupt stack pointer |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
566 mov sp,a2 # save current SP |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
567 mov a0,sp # set SP to interrupt stack |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
568 hal_cpu_get_psw d2 # save PSW |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
569 hal_cpu_int_enable # enable interrupts |
| 0 | 570 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
571 # Call kernel code to invoke DSRs. |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
572 calls _cyg_interrupt_call_pending_DSRs |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
573 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
574 # On return the old SP in a2 and the old PSW in d2 will |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
575 # have been preserved by the calling conventions. |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
576 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
577 hal_cpu_int_merge d2 # Restore previous PSW |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
578 mov a2,sp # restore old SP |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
579 movm (sp),[d2,a2] # Retrieve old work regs |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
580 ret [],0 # and return |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
581 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
582 #endif |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
583 |
| 0 | 584 ##----------------------------------------------------------------------------- |
| 585 ## Default NMI VSR | |
| 586 | |
| 2 | 587 .globl _cyg_hal_exception_handler |
| 0 | 588 |
| 589 .text | |
| 590 .globl __default_nmi_vsr | |
| 591 __default_nmi_vsr: | |
| 592 | |
| 593 # We come here with all the registers saved | |
| 594 # on the stack. | |
| 595 | |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
596 #ifdef CYG_HAL_DIAG_EXCPT_END |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
597 hal_diag_excpt_start |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
598 #endif |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
599 |
| 2 | 600 # Decode the cause of the NMI and cancel all the bits in all |
| 601 # the registers. We need to clear any bits set in the ISR and | |
| 602 # then clear any bits set in the NMICR. Note that we can only | |
| 603 # access the ISR if the DCR:DE bit is set. | |
| 604 | |
| 605 movhu (NMICR),d0 # D0 = NMI Control register | |
| 606 | |
| 607 movhu (DCR),d1 # D1 = Debug Control Register | |
| 608 mov d1,d2 # D2 = copy of DCR | |
| 609 movhu (ISR),d3 # D3 = Interrupt Status Register | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
610 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
611 or DCR_DE,d1 # Set DE bit |
| 2 | 612 movhu d1,(DCR) |
| 613 | |
| 614 movhu d3,(ISR) # clear ISR bits | |
| 615 | |
| 616 movhu d2,(DCR) # restore DCR to original value | |
| 617 | |
| 618 movhu d0,(NMICR) # clear NMI bits | |
| 619 and 0x7,d0 # LS 3 bits only | |
| 620 | |
| 621 mov hal_lsbit_table,a0 | |
| 622 movbu (d0,a0),d1 # D1 = NMI code | |
| 623 ## 0 = NMI | |
| 624 ## 1 = Watchdog | |
| 625 ## 2 = System Error | |
| 626 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
627 add 9,d1 # offset into exception number space |
| 2 | 628 |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
629 #if defined(CYGPKG_CYGMON) || defined(CYGSEM_REDBOOT_BSP_SYSCALLS) |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
630 # Check to see if this was a syscall. |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
631 # If so, set d1 appropriately |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
632 #define TBR 0xC0000024 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
633 mov (TBR), d0 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
634 and 0x00FFFFFF, d0 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
635 cmp 0x300, d0 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
636 bne 0f |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
637 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
638 # This was apparently a syscall. |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
639 mov SIGSYSCALL, d1 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
640 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
641 0: |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
642 #endif |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
643 hal_cpu_clear_nmid |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
644 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
645 mov d1,(sp) # save initial vector in spare save slot |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
646 |
| 0 | 647 mov sp,a1 # a1 = saved state |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
648 |
| 0 | 649 mov a1,d0 # d0 = arg1 = saved state |
| 650 | |
| 651 add -16,sp # return link + args | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
652 mov d3,d1 # d1 = arg2 = ISR value |
| 0 | 653 |
| 2 | 654 calls _cyg_hal_exception_handler # call C code |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
655 |
| 0 | 656 add 16,sp # pop args |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
657 |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
658 #ifdef CYG_HAL_DIAG_EXCPT_END |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
659 hal_diag_excpt_end |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
660 #endif |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
661 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
662 hal_cpu_load_all |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
663 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
664 #ifdef CYGPKG_CYGMON |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
665 hal_cygmon_restore_app_stack |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
666 #else |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
667 add 4,sp |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
668 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
669 |
| 0 | 670 rti |
| 2 | 671 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
672 .globl hal_lsbit_table |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
673 hal_lsbit_table: |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
674 .byte 0, 0, 1, 0 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
675 .byte 2, 0, 1, 0 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
676 .byte 3, 0, 1, 0 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
677 .byte 2, 0, 1, 0 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
678 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
679 #ifdef CYGPKG_CYGMON |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
680 .section ".bss" |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
681 d0_save: |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
682 .long 0 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
683 d1_save: |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
684 .long 0 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
685 d2_save: |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
686 .long 0 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
687 d3_save: |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
688 .long 0 |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
689 a0_save: |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
690 .long 0 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
691 a1_save: |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
692 .long 0 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
693 a2_save: |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
694 .long 0 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
695 a3_save: |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
696 .long 0 |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
697 sp_save: |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
698 .long 0 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
699 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
76
diff
changeset
|
700 |
| 0 | 701 ##----------------------------------------------------------------------------- |
| 702 ## Default TRAP VSR | |
| 703 | |
| 704 .text | |
| 705 .globl __default_trap_vsr | |
| 706 __default_trap_vsr: | |
| 707 | |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
708 #ifdef CYG_HAL_DIAG_EXCPT_END |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
709 hal_diag_excpt_start |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
710 #endif |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
711 |
| 0 | 712 # We come here with all the registers saved |
| 713 # on the stack. | |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
714 mov 8,d1 |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
715 mov d1,(sp) # set the VSR vector number |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
716 mov sp,a1 # a1 = saved state |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
717 mov a1,d0 # d0 = arg1 = saved state |
| 0 | 718 |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
719 add -16,sp # return link + arg |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
720 mov 3,d1 # d1 = arg2 = ISR value (3 == TRAP trap) |
| 2 | 721 calls _cyg_hal_exception_handler # call C code |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
722 add 16,sp # pop args |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
723 |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
724 #ifdef CYG_HAL_DIAG_EXCPT_END |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
725 hal_diag_excpt_end |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
726 #endif |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
727 hal_cpu_load_all |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
728 #ifdef CYGPKG_CYGMON |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
729 hal_cygmon_restore_app_stack |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
730 add 4,sp |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
731 #else |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
174
diff
changeset
|
732 add 8,sp |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
733 #endif |
| 0 | 734 rets |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
735 |
| 0 | 736 ##----------------------------------------------------------------------------- |
| 737 ## VSR table. The VSRs pointed to by this table are called from the stubs | |
| 738 ## connected to the hardware. | |
| 739 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
740 #ifndef CYG_HAL_MN10300_VSR_TABLE_DEFINED |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
741 |
| 0 | 742 .data |
| 743 | |
| 744 .globl _hal_vsr_table | |
| 745 _hal_vsr_table: | |
| 746 .long __default_interrupt_vsr | |
| 747 .long __default_interrupt_vsr | |
| 748 .long __default_interrupt_vsr | |
| 749 .long __default_interrupt_vsr | |
| 750 .long __default_interrupt_vsr | |
| 751 .long __default_interrupt_vsr | |
| 752 .long __default_interrupt_vsr | |
| 753 .long __default_nmi_vsr | |
| 754 .long __default_trap_vsr | |
| 755 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
756 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
757 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
758 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
759 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
760 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
761 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
762 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
763 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
764 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
765 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
766 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
767 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
768 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
769 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
770 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
771 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
772 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
773 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
774 .long __default_nmi_vsr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
775 .long __default_nmi_vsr |
| 0 | 776 #endif |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
777 |
| 0 | 778 ##----------------------------------------------------------------------------- |
| 779 ## Interrupt tables | |
| 780 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
781 .data |
| 0 | 782 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
783 .extern _hal_default_isr |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
784 |
| 0 | 785 .globl _hal_interrupt_handlers |
| 786 _hal_interrupt_handlers: | |
| 787 .rept CYG_ISR_TABLE_SIZE | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
788 .long _hal_default_isr |
| 0 | 789 .endr |
| 790 | |
| 791 .globl _hal_interrupt_data | |
| 792 _hal_interrupt_data: | |
| 793 .rept CYG_ISR_TABLE_SIZE | |
| 794 .long 0 | |
| 795 .endr | |
| 796 | |
| 797 .globl _hal_interrupt_objects | |
| 798 _hal_interrupt_objects: | |
| 799 .rept CYG_ISR_TABLE_SIZE | |
| 800 .long 0 | |
| 801 .endr | |
| 802 | |
| 803 | |
| 804 ##----------------------------------------------------------------------------- | |
| 805 ## Temporary interrupt stack | |
| 806 | |
| 807 .section ".bss" | |
| 808 | |
| 809 .balign 16 | |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
810 .global _cyg_interrupt_stack_base |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
811 _cyg_interrupt_stack_base: |
| 0 | 812 __interrupt_stack_base: |
| 813 .rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE | |
| 814 .byte 0 | |
| 815 .endr | |
| 816 .balign 16 | |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
817 .global _cyg_interrupt_stack |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
818 _cyg_interrupt_stack: |
| 0 | 819 __interrupt_stack: |
| 820 | |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
821 #ifdef CYGPKG_CYGMON |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
822 .balign 16 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
823 .global __cygmon_interrupt_stack_base |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
824 __cygmon_interrupt_stack_base: |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
825 .rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
826 .byte 0 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
827 .endr |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
828 .balign 16 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
829 .global __cygmon_interrupt_stack |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
830 __cygmon_interrupt_stack: |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
831 #endif |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
119
diff
changeset
|
832 |
| 0 | 833 .long 0,0,0,0,0,0,0,0 |
| 834 | |
| 835 ##----------------------------------------------------------------------------- | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
836 |
| 0 | 837 .data |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
838 hal_diag_data |
| 0 | 839 |
| 840 ##----------------------------------------------------------------------------- | |
| 841 ## end of vectors.S | |
| 842 |
