annotate packages/hal/mips/arch/current/src/vectors.S @ 0:3111d98ba7b3 ecos-v1_1-release

Initial commit of eCos version 1.1
author jlarmour
date Tue, 11 May 1999 11:16:07 +0000
parents
children 443894e2e912
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3 ## vectors.S
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 ## MIPS exception vectors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 #####COPYRIGHTBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
9 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
10 # -------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
11 # The contents of this file are subject to the Cygnus eCos Public License
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
12 # Version 1.0 (the "License"); you may not use this file except in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
13 # compliance with the License. You may obtain a copy of the License at
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
14 # http://sourceware.cygnus.com/ecos
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
15 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
16 # Software distributed under the License is distributed on an "AS IS"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
17 # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
18 # License for the specific language governing rights and limitations under
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
19 # the License.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
20 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
21 # The Original Code is eCos - Embedded Cygnus Operating System, released
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
22 # September 30, 1998.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
23 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
24 # The Initial Developer of the Original Code is Cygnus. Portions created
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
25 # by Cygnus are Copyright (C) 1998 Cygnus Solutions. All Rights Reserved.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
26 # -------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
27 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
28 #####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
29 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 #######DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 ## Author(s): nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 ## Contributors: nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 ## Date: 1998-02-04
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 ## Purpose: MIPS exception vectors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 ## Description: This file defines the code placed into the exception
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 ## vectors. It also contains the first level default VSRs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 ## that save and restore state for both exceptions and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 ## interrupts.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 ######DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45 # .file "vectors.S"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47 #include <pkgconf/system.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 #include <pkgconf/hal.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 #ifdef CYGPKG_KERNEL
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 # include <pkgconf/kernel.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 #include <cyg/hal/mips.inc>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 .extern cyg_instrument
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 #define MAX_SAVE_REG 31
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 #if defined(CYG_HAL_STARTUP_RAM)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 # if defined(CYG_HAL_MIPS_SIM) || !defined(CYG_HAL_USE_ROM_MONITOR)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 # define INITIAL_SR 0x1000ff00 /* CP0 usable, Ints enabled */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 //#define INITIAL_SR 0x10000000 /* CP0 usable, Ints disabled */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 # else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 # define INITIAL_SR 0x1040ff00 /* as above + ROM vectors used */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 # endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 #elif defined(CYG_HAL_STARTUP_ROM)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 # define INITIAL_SR 0x1040ff00 /* as above + ROM vectors used */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 ## Hardware supplied vectors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 .set noreorder
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 .set noat
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 .section ".reset_vector","ax"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81 # Reset vector at 0xBFC00000
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 .globl reset_vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 reset_vector:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 la v0,_start # jump to start
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 jr v0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 nop # (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 .section ".debug_vector","ax"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91 # Debug vector at 0xBFC00200
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 .globl debug_vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 debug_vector:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 la k0,32
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 la k1,hal_vsr_table # Get VSR table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 lw k1,32*4(k1) # load debug vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 jr k1 # go there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99 nop # (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 .section ".other_vector","ax"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 # Common vector at 0x80000080 or 0xBFC00180
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 .globl other_vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 other_vector:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107 mfc0 k0,cause # K0 = exception cause
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 nop
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 andi k0,k0,0x7F # isolate exception code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 la k1,hal_vsr_table # address of VSR table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 add k1,k1,k0 # offset of VSR entry
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 lw k1,0(k1) # k1 = pointer to VSR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 jr k1 # go there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 nop # (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 .section ".utlb_vector","ax"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 .globl utlb_vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119 utlb_vector:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 la k0,33
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 la k1,hal_vsr_table # Get VSR table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 lw k1,33*4(k1) # load utlb vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 jr k1 # go there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 nop # (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 ## Startup code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 .text
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 .globl _start
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 .ent _start
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 _start:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 # init CPU registers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 mtc0 zero,cause # zero cause reg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 la v0,INITIAL_SR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138 mtc0 v0,sr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 mfc0 v0,config
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 nop
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 .set at
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 and v0,v0,0xffffffcf
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 # la v0,0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 .set noat
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145 mtc0 v0,config
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 # Initialize hardware
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 #ifdef CYG_HAL_MIPS_JMR3904
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152 # These mappings need to be set up before we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153 # can use the stack and make calls to other
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 # functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 # SCS0,1 base addr of ISA & PCI
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 la a0,0xffffe010
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 la a1,0x20201410
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 sw a1,0(a0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 la a0,0xffffe014
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 la a1,0x0000fcfc
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 sw a1,0(a0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165 # ROM configuration
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 la a0,0xffff9000
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 la a1,0x1fc00400
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168 sw a1,0(a0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 # SRAM config
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 la a0,0xffff9100
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 la a1,0x00000000
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 sw a1,0(a0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 la a0,0xfffff500
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 la a1,0xff
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 sb a1,0(a0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 la a1,0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 sb a1,4(a0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 # Load Global Pointer register.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 la gp,_gp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 # load initial stack pointer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 la a0,__interrupt_stack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 move sp,a0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 #if defined(CYG_HAL_STARTUP_ROM) || \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 (defined(CYG_HAL_STARTUP_RAM) && !defined(CYG_HAL_USE_ROM_MONITOR))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 # If we are starting up from ROM, or we are starting in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 # RAM and NOT using a ROM monitor, initialize the VSR table.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 la a0,__default_interrupt_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 la a1,__default_exception_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 la a3,hal_vsr_table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198 sw a0,0(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 sw a1,1*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 sw a1,2*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 sw a1,3*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 sw a1,4*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 sw a1,5*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 sw a1,6*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 sw a1,7*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 sw a1,8*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 sw a1,9*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 sw a1,10*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 sw a1,11*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 sw a1,12*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 sw a1,13*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 sw a1,14*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 sw a1,15*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215 sw a1,32*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 sw a1,33*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218 #ifdef CYG_HAL_ROM_MONITOR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 # Install vectors to debug read and write functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 .extern hal_diag_write_char
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 .extern hal_diag_read_char
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 .extern breakpoint
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 la a0,hal_diag_write_char
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227 sw a0,63*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 la a1,hal_diag_read_char
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 sw a1,62*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 la a0,breakpoint
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231 sw a0,61*4(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 #if defined(CYG_HAL_STARTUP_RAM) && defined(CYG_HAL_USE_ROM_MONITOR)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238 # initialize the VSR table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 # We only take control of the interrupt vector,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 # the rest are left to the ROM for now...
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 la a0,__default_interrupt_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243 la a3,hal_vsr_table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 sw a0,0(a3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 #ifdef CYG_HAL_STARTUP_ROM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249 # Copy data from ROM to RAM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251 .extern hal_copy_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 jal hal_copy_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253 nop
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 # Zero BSS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 .extern hal_zero_bss
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 jal hal_zero_bss
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 nop
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 # Call constructors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 .extern cyg_hal_invoke_constructors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 jal cyg_hal_invoke_constructors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 nop
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 # Call cyg_start
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
269
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270 .extern cyg_start
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 jal cyg_start
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272 nop
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274 9:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275 j 9b # Loop if we return
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 nop # (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 .end _start
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 ## Default exception VSR.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 ## Saves machine state and calls external handling code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 .globl __default_exception_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 .ent __default_exception_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286 __default_exception_vsr:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 # We enter here with all of the CPU state still
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 # in its registers except:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 # K0 = vector index
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291 # K1 = address of this function
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293 #ifdef CYG_HAL_ROM_MONITOR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294 # Switch to interrupt stack to handle exception
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295 move k1,sp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296 la sp,__interrupt_stack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299 addi sp,sp,-mips_exception_decrement
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 # space for registers + safety margin
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302 sw k0,mipsreg_vector(sp) # store vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
303
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304 .set noat
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 # store GPRs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 sw $0,(mipsreg_regs+0*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 sw $1,(mipsreg_regs+1*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308 sw $2,(mipsreg_regs+2*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309 sw $3,(mipsreg_regs+3*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310 sw $4,(mipsreg_regs+4*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311 sw $5,(mipsreg_regs+5*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 sw $6,(mipsreg_regs+6*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 sw $7,(mipsreg_regs+7*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 sw $8,(mipsreg_regs+8*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 sw $9,(mipsreg_regs+9*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 sw $10,(mipsreg_regs+10*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 sw $11,(mipsreg_regs+11*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 sw $12,(mipsreg_regs+12*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 sw $13,(mipsreg_regs+13*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 sw $14,(mipsreg_regs+14*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321 sw $15,(mipsreg_regs+15*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 sw $16,(mipsreg_regs+16*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 sw $17,(mipsreg_regs+17*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324 sw $18,(mipsreg_regs+18*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 sw $19,(mipsreg_regs+19*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326 sw $20,(mipsreg_regs+20*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 sw $21,(mipsreg_regs+21*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 sw $22,(mipsreg_regs+22*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 sw $23,(mipsreg_regs+23*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 sw $24,(mipsreg_regs+24*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331 sw $25,(mipsreg_regs+25*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332 # sw $26,(mipsreg_regs+26*4)(sp) # == K0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333 # sw $27,(mipsreg_regs+27*4)(sp) # == K1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 sw $28,(mipsreg_regs+28*4)(sp) # == GP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 # sw $29,(mipsreg_regs+29*4)(sp) # == SP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 sw $30,(mipsreg_regs+30*4)(sp) # == FP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 sw $31,(mipsreg_regs+31*4)(sp) # == RA
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
339 mfhi a0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340 mflo a1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
341 sw a0,mipsreg_hi(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
342 sw a1,mipsreg_lo(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
343
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
344 #ifdef CYG_HAL_ROM_MONITOR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345 # K1 contains original SP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346 sw k1,(mipsreg_regs+29*4)(sp) # store in reg dump
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348 # synthesize original SP value
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349 move a2,sp # a2 = sp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
350 addi a2,a2,mips_exception_decrement # a2 = original sp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
351 sw a2,(mipsreg_regs+29*4)(sp) # store in reg dump
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
352 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
353
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354 # save remaining machine state registers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355 mfc0 t0,cause
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
356 mfc0 t1,sr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
357 # mfc0 t2,cache
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 mfc0 t3,badvr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 mfc0 t4,config
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360 mfc0 t5,prid
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
361 mfc0 t6,epc
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
362
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
363 #ifndef CYG_HAL_MIPS_SIM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364 mfc0 t2,cache
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367 sw t0,mipsreg_cause(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 sw t1,mipsreg_sr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
369 sw t2,mipsreg_cache(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
370 sw t3,mipsreg_badvr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371 sw t4,mipsreg_config(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372 sw t5,mipsreg_prid(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373 sw t6,mipsreg_pc(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
374
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
375
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
376 # The machine state is now all saved on the stack.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
377
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378 # Load Global Pointer register.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379 la gp,_gp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
380
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 move s0,sp # save pointer to saved state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
383 addi sp,sp,-mips_stack_frame_size # make a null frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
384
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 # Need to set up back pointers etc. ???
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387 la ra,restore_state # load return address
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389 .extern exception_handler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 j exception_handler # call C code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 move a0,s0 # arg0 = register dump (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393 # When the exception handler returns, it will
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 # go back to restore_state, below.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396 .end __default_exception_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398 ##------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399 ## Default interrupt VSR.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 ## Saves machine state and calls appropriate ISR. When done, calls
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401 ## interrupt_end() to finish up and possibly reschedule.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403 .globl __default_interrupt_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404 .ent __default_interrupt_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 __default_interrupt_vsr:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
407
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
408 # We enter here with all of the CPU state still
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 # in its registers except:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410 # K0 = vector index
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 # K1 = address of this function
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413 addi sp,sp,-mips_exception_decrement
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414 # space for registers + safety margin
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
415
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416 sw k0,mipsreg_vector(sp) # store vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 # store GPRs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 sw $0,(mipsreg_regs+0*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420 sw $1,(mipsreg_regs+1*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421 sw $2,(mipsreg_regs+2*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
422 sw $3,(mipsreg_regs+3*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
423 sw $4,(mipsreg_regs+4*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
424 sw $5,(mipsreg_regs+5*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 sw $6,(mipsreg_regs+6*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
426 sw $7,(mipsreg_regs+7*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
427 sw $8,(mipsreg_regs+8*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
428 sw $9,(mipsreg_regs+9*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
429 sw $10,(mipsreg_regs+10*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
430 sw $11,(mipsreg_regs+11*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
431 sw $12,(mipsreg_regs+12*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
432 sw $13,(mipsreg_regs+13*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
433 sw $14,(mipsreg_regs+14*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
434 sw $15,(mipsreg_regs+15*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
435 sw $16,(mipsreg_regs+16*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
436 sw $17,(mipsreg_regs+17*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
437 sw $18,(mipsreg_regs+18*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
438 sw $19,(mipsreg_regs+19*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
439 sw $20,(mipsreg_regs+20*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
440 sw $21,(mipsreg_regs+21*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
441 sw $22,(mipsreg_regs+22*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
442 sw $23,(mipsreg_regs+23*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
443 sw $24,(mipsreg_regs+24*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
444 sw $25,(mipsreg_regs+25*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
445 # sw $26,(mipsreg_regs+26*4)(sp) # == K0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
446 # sw $27,(mipsreg_regs+27*4)(sp) # == K1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
447 sw $28,(mipsreg_regs+28*4)(sp) # == GP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
448 # sw $29,(mipsreg_regs+29*4)(sp) # == SP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
449 sw $30,(mipsreg_regs+30*4)(sp) # == FP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
450 sw $31,(mipsreg_regs+31*4)(sp) # == RA
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
451
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
452 mfhi a0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
453 mflo a1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
454 sw a0,mipsreg_hi(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
455 sw a1,mipsreg_lo(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
456
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
457 # synthesize original SP value
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
458 move a2,sp # a2 = sp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
459 addi a2,a2,mips_exception_decrement # a2 = original sp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
460 sw a2,(mipsreg_regs+29*4)(sp) # store in reg dump
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
461
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
462 mfc0 t1,sr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
463 mfc0 t3,epc
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
464
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
465 #ifndef CYG_HAL_MIPS_SIM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
466 mfc0 t2,cache
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
467 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
468 sw t1,mipsreg_sr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
469 sw t2,mipsreg_cache(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
470 sw t3,mipsreg_pc(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
471
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
472 # The machine state is now all saved on the stack.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
473
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
474 # Load Global Pointer register.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
475 la gp,_gp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
476
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
477 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
478 .extern _18Cyg_Scheduler_Base$sched_lock
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
479 la v0,_18Cyg_Scheduler_Base$sched_lock
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
480 lw a0,0(v0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
481 addi a0,a0,1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
482 sw a0,0(v0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
483 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
484
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
485 move s0,sp # save pointer to saved state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
486
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
487 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
488
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
489 la a0,__interrupt_stack # a0 = stack top
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
490 la a1,__interrupt_stack_base # a1 = stack base
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
491 sub a3,sp,a1 # a3 = sp - base
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
492 bltz a3,1f # if < 0 - not on istack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493 nop # delay slot
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494 sub t0,a0,sp # t0 = top - sp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
495 bgtz t0,8f # if > 0 - already on istack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
496 nop # delay slot
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
497 1:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
498 move sp,a0 # switch to istack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
499 8:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
500 addi sp,sp,-4 # space for old SP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
501 sw s0,0(sp) # save old SP on stack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
502
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
503 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
504
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
505 subu sp,sp,mips_stack_frame_size # make a null frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
506
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
507 # Need to set up back pointers etc. ???
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
508
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
509 # Decode external interrupt via interrupt controller
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
510
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
511 mfc0 a1,cause # get cause register
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
512 nop
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
513 srl a1,a1,10 # shift IP bits to ls bits
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
514 andi a1,a1,0x7F # isolate IP bits
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
515 la t0,interrupt_translation_table # address of translation table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
516 add t0,t0,a1 # offset of index byte
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
517 lb s2,0(t0) # load it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
518
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
519 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
520 move s1,zero # Just vector zero is supported
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
521 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
522 move s1,s2 # Vector == interrupt number
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
523 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
524
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
525 # Here s1 is the number of the vector to be called and s2 is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
526 # the number of the interrupt being serviced.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
527
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
528 #if defined(CYGPKG_KERNEL_INSTRUMENT) && defined(CYGDBG_KERNEL_INSTRUMENT_INTR)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
529
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
530 # Call cyg_instrument to record that this interrupt is being raised.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
531
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
532 li a0,0x0301 # a0 = type = INTR,RAISE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
533 move a1,s1 # a1 = vector number
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
534 jal cyg_instrument # call instrument function
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
535 xor a2,a2,a2 # arg2 = 0 (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
536 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
537
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
538 sll s1,s1,2 # s1 = byte offset of vector
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
539
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
540 la t2,hal_interrupt_handlers # handler table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
541 add t2,t2,s1 # address of ISR ptr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
542 lw t2,0(t2) # ISR pointer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
543
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
544 la a1,hal_interrupt_data # data table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
545 add a1,a1,s1 # address of data ptr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
546 lw a1,0(a1) # Data pointer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
547
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
548 move a0,s2 # pass interrupt number
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
549
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
550 jalr t2 # call ISR via t2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
551 nop # (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
552
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
553 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
554
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
555 # If we are returning from the last nested interrupt, move back
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
556 # to the thread stack. interrupt_end() must be called on the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
557 # thread stack since it potentially causes a context switch.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
558 # Since we have arranged for the top of stack location to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
559 # contain the sp we need to go back to here, just pop it off
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
560 # and put it in SP.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
561
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
562
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
563 lw sp,mips_stack_frame_size(sp) # sp = *sp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
564 subu sp,sp,mips_stack_frame_size # make a null frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
565 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
566
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
567 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
568
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
569 # We only need to call _interrupt_end() when there is a kernel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
570 # present to do any tidying up.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
571
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
572 # On return v0 bit 1 will indicate whether a DSR is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
573 # to be posted. Pass this together with a pointer to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
574 # the interrupt object we have just used to the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
575 # interrupt tidy up routine.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
576
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
577 # Note that s0, s1 and s2 are defined to be preserved across
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
578 # calls by the calling convention, so they still contain
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
579 # the register dump, the vector offset and the interrupt number
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
580 # respectively.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
581
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
582 move a0,v0 # put ISR result in arg0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
583
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
584 la a1,hal_interrupt_objects # interrupt object table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
585 add a1,a1,s1 # address of object ptr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
586 lw a1,0(a1) # a1 = object ptr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
587
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
588 move a2,s0 # arg3 = saved register dump
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
589
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
590 # interrupt_end() must be called with interrupts enabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
591
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
592 rfe # restore previous status bits
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
593 # this may enable interrupts
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
594
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
595 .extern interrupt_end
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
596 jal interrupt_end # call into C to finish off
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
597 nop # (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
598
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
599 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
600
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
601 restore_state:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
602
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
603 # All done, restore CPU state and continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
604
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
605 addi sp,sp,mips_stack_frame_size # retrieve CPU state ptr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
606
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
607 # Load status register and cache control register.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
608 # This will put the interrupt, mode and cache control
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
609 # bits back to their post-exception values, so we will
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
610 # need to do another RFE before we finish.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
611
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
612 lw t1,mipsreg_sr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
613 lw t2,mipsreg_cache(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
614
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
615 mtc0 t1,sr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
616 #ifndef CYG_HAL_MIPS_SIM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
617 mtc0 t2,cache
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
618 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
619
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
620 lw a0,mipsreg_hi(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
621 lw a1,mipsreg_lo(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
622 mthi a0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
623 mtlo a1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
624
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
625 # load GPRs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
626 # lw $0,(mipsreg_regs+0*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
627 lw $1,(mipsreg_regs+1*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
628 lw $2,(mipsreg_regs+2*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
629 lw $3,(mipsreg_regs+3*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
630 lw $4,(mipsreg_regs+4*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
631 lw $5,(mipsreg_regs+5*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
632 lw $6,(mipsreg_regs+6*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
633 lw $7,(mipsreg_regs+7*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
634 lw $8,(mipsreg_regs+8*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
635 lw $9,(mipsreg_regs+9*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
636 lw $10,(mipsreg_regs+10*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
637 lw $11,(mipsreg_regs+11*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
638 lw $12,(mipsreg_regs+12*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
639 lw $13,(mipsreg_regs+13*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
640 lw $14,(mipsreg_regs+14*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
641 lw $15,(mipsreg_regs+15*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
642 lw $16,(mipsreg_regs+16*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
643 lw $17,(mipsreg_regs+17*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
644 lw $18,(mipsreg_regs+18*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
645 lw $19,(mipsreg_regs+19*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
646 lw $20,(mipsreg_regs+20*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
647 lw $21,(mipsreg_regs+21*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
648 lw $22,(mipsreg_regs+22*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
649 lw $23,(mipsreg_regs+23*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
650 lw $24,(mipsreg_regs+24*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
651 lw $25,(mipsreg_regs+25*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
652 # lw $26,(mipsreg_regs+26*4)(sp) # == K0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
653 # lw $27,(mipsreg_regs+27*4)(sp) # == K1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
654 lw $28,(mipsreg_regs+28*4)(sp) # == GP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
655 # lw $29,(mipsreg_regs+29*4)(sp) # == SP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
656 lw $30,(mipsreg_regs+30*4)(sp) # == FP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
657 lw $31,(mipsreg_regs+31*4)(sp) # == RA
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
658
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
659 lw k0,mipsreg_pc(sp) # K0 = return PC
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
660 lw sp,(mipsreg_regs+29*4)(sp) # load SP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
661 sync
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
662 jr k0 # jump back to interrupted code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
663 rfe # restore state (delay slot)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
664
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
665 .end __default_interrupt_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
666
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
667 # This table translates from the 6 bit value supplied in the IP bits
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
668 # of the cause register into a 0..16 offset into the ISR tables.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
669 interrupt_translation_table:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
670 .byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
671 .byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
672 .byte 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
673 .byte 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
674
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
675 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
676 ## Interrupt Stack.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
677 ## Used during intialization and for executing ISRs.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
678
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
679 .bss
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
680
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
681 .balign 16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
682 __interrupt_stack_base:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
683 .rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
684 .byte 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
685 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
686 .balign 16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
687 __interrupt_stack:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
688
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
689 .long 0,0,0,0,0,0,0,0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
690
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
691 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
692
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
693 .globl idle_thread_stack
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
694 idle_thread_stack:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
695 .rept CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
696 .byte 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
697 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
698
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
699 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
700
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
701 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
702 ## VSR table.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
703 ## The main interrupt code indirects through here to find the VSR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
704 ## to execute for each architecture defined interrupt.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
705 ## This is only used for simulated targets, on real targets a fixed location VSR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
706 ## table is now allocated at 0x80000100.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
707
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
708 #if defined(CYG_HAL_MIPS_SIM) || \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
709 ( defined(CYG_HAL_MIPS_TX3904) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
710 defined(CYG_HAL_STARTUP_RAM) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
711 !defined(CYG_HAL_USE_ROM_MONITOR) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
712 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
713 .section ".vsr_table","a"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
714
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
715 .globl hal_vsr_table
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
716
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
717 hal_vsr_table:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
718 .long __default_interrupt_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
719 .rept 63
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
720 .long __default_exception_vsr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
721 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
722
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
723 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
724
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
725 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
726 # Interrupt vector tables.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
727 # These tables contain the isr, data and object pointers used to deliver
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
728 # interrupts to user code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
729 # hal_interrupt_level contains the interrupt level set by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
730 # HAL_INTERRUPT_CONFIGURE().
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
731
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
732
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
733 .extern hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
734
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
735 .data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
736
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
737 .globl hal_interrupt_handlers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
738 hal_interrupt_handlers:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
739 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
740 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
741 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
742 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
743 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
744 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
745 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
746 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
747 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
748 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
749 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
750 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
751 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
752 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
753 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
754 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
755 .long hal_default_isr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
756
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
757 .globl hal_interrupt_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
758 hal_interrupt_data:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
759 .rept 17
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
760 .long 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
761 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
762
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
763 .globl hal_interrupt_objects
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
764 hal_interrupt_objects:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
765 .rept 17
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
766 .long 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
767 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
768
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
769 .globl hal_interrupt_level
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
770 hal_interrupt_level:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
771 .rept 17
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
772 .byte 7
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
773 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
774
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
775 ##-----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
776 ## end of vectors.S