annotate packages/hal/mips/arch/current/src/hal_misc.c @ 2:443894e2e912 ecos-v1_2_1-release

Block commit of eCos version 1.2.1
author jlarmour
date Tue, 11 May 1999 12:24:34 +0000
parents 3111d98ba7b3
children d376b777e2ce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1 //==========================================================================
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3 // hal_misc.c
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5 // HAL miscellaneous functions
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
7 //==========================================================================
0
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
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
25 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved.
0
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####
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
29 //==========================================================================
0
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 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
32 // Author(s): nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
33 // Contributors: nickg, jlarmour
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
34 // Date: 1999-01-21
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
35 // Purpose: HAL miscellaneous functions
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
36 // Description: This file contains miscellaneous functions provided by the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
37 // HAL.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
41 //========================================================================*/
0
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 #include <pkgconf/hal.h>
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 #include <cyg/infra/cyg_type.h> // Base types
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 #include <cyg/infra/cyg_trac.h> // tracing macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47 #include <cyg/infra/cyg_ass.h> // assertion macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49 #include <cyg/hal/hal_arch.h> // architectural definitions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 #include <cyg/hal/hal_intr.h> // Interrupt handling
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 #include <cyg/hal/hal_cache.h> // Cache handling
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
55 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
56 /* First level C exception handler. */
0
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 externC void __handle_exception (void);
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 externC HAL_SavedRegisters *_hal_registers;
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 externC void exception_handler(HAL_SavedRegisters *regs)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 // Set the pointer to the registers of the current exception
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 // context. At entry the GDB stub will expand the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 // HAL_SavedRegisters structure into a (bigger) register array.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 _hal_registers = regs;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 __handle_exception();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 #elif defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT) && defined(CYGPKG_HAL_EXCEPTIONS)
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 // We should decode the vector and pass a more appropriate
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 // value as the second argument. For now we simply pass a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 // pointer to the saved registers. We should also divert
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 // breakpoint and other debug vectors into the debug stubs.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
79 cyg_hal_deliver_exception( regs->vector>>2, (CYG_ADDRWORD)regs );
0
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 #else
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 CYG_FAIL("Exception!!!");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 return;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
89 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
90 /* default ISR */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 CYG_TRACE1(true, "Interrupt: %d", vector);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 CYG_FAIL("Spurious Interrupt!!!");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
99 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
100 /* data copy and bss zero functions */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 typedef void (CYG_ROM_ADDRESS)(void);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
104 extern char __ram_data_start;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
105 extern char __ram_data_end;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
106 extern CYG_ROM_ADDRESS __rom_data_start;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
107
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
108 #ifdef CYG_HAL_STARTUP_ROM
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 void hal_copy_data(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 char *p = &__ram_data_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 char *q = (char *)&__rom_data_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 while( p != (char *)&__ram_data_end )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 *p++ = *q++;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
119 extern CYG_ROM_ADDRESS __bss_start;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
120 extern CYG_ROM_ADDRESS __bss_end;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
121
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 void hal_zero_bss(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 char *p = (char *)&__bss_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
126 while( p != (char *)&__bss_end )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127 *p++ = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
130 /*------------------------------------------------------------------------*/
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
132 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
133 cyg_bool cyg_hal_stop_constructors;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
134 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
135
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
136 typedef void (*pfunc) (void);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
137 extern pfunc __CTOR_LIST__[];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
138 extern void patch_dbg_syscalls(void * vector);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 void
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
141 cyg_hal_invoke_constructors(void)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
143 pfunc p;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
145 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
146 static long i = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
147 long j = (long)(__CTOR_LIST__[0]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
148
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
149 cyg_hal_stop_constructors=0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
150 for ( ; i < j; i++ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
151 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
152 p = __CTOR_LIST__[j - i];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
153 p ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
154 if (cyg_hal_stop_constructors) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
155 i++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
156 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
157 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
158 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
159 #else
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 long i = (long)(__CTOR_LIST__[0]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 for ( ; i > 0; i-- )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 p = __CTOR_LIST__[i];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165 p ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
167 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
168 } // cyg_hal_invoke_constructors()
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
170 void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
171 cyg_hal_enable_caches(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
172 {
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 #ifdef CYG_HAL_MIPS_TX3904
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 // On the real hardware we also enable the cache.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 // doing this here is a temporary measure until we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 // have a proper platform specific place to do it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
179 #if !defined(CYGHWR_HAL_TX39_JMR3904_ENABLE_TOE)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
180
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 HAL_ICACHE_INVALIDATE_ALL();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 HAL_ICACHE_ENABLE();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 HAL_DCACHE_INVALIDATE_ALL();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 HAL_DCACHE_ENABLE();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
186 HAL_TX39_DEBUG_TOE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
187
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
188 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
189
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
190 // If TOE is enabled, caches are disabled by default
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
191 // until spurious Bus Timeout problem is fixed.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
192
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
193 HAL_ICACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
194 HAL_ICACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
195 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
196 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
197
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
198 HAL_TX39_DEBUG_TOE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
199
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
201
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
202 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
203 } // cyg_hal_enable_caches()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
204
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
205 void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
206 cyg_hal_debug_init(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
207 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
208 #ifdef CYGDBG_HAL_MIPS_INSTALL_CTRL_C_ISR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
209 #if defined(CYG_HAL_USE_ROM_MONITOR) && \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
210 !defined(CYGDBG_INFRA_DIAG_USE_DEVICE) && \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 defined(CYG_HAL_TX39_JMR3904)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 static void hal_init_ctrlc_intr(void);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215 hal_init_ctrlc_intr();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 }
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 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
219 #endif // CYGDBG_HAL_MIPS_INSTALL_CTRL_C_ISR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
220
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 #if defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 defined(CYG_HAL_USE_ROM_MONITOR) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
225 patch_dbg_syscalls( (void *)(&hal_vsr_table[0]) );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
228 } // cyg_hal_debug_init()
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
230 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
231 /* Determine the index of the ls bit of the supplied mask. */
0
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 cyg_uint32 hal_lsbit_index(cyg_uint32 mask)
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 cyg_uint32 n = mask;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 static const signed char tab[64] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238 { -1, 0, 1, 12, 2, 6, 0, 13, 3, 0, 7, 0, 0, 0, 0, 14, 10,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 4, 0, 0, 8, 0, 0, 25, 0, 0, 0, 0, 0, 21, 27 , 15, 31, 11,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 5, 0, 0, 0, 0, 0, 9, 0, 0, 24, 0, 0 , 20, 26, 30, 0, 0, 0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 0, 23, 0, 19, 29, 0, 22, 18, 28, 17, 16, 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 n &= ~(n-1UL);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245 n = (n<<16)-n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 n = (n<<6)+n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 n = (n<<4)+n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249 return tab[n>>26];
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
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
252 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
253 /* Determine the index of the ms bit of the supplied mask. */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255 cyg_uint32 hal_msbit_index(cyg_uint32 mask)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 cyg_uint32 x = mask;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 cyg_uint32 w;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 /* Phase 1: make word with all ones from that one to the right */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261 x |= x >> 16;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 x |= x >> 8;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263 x |= x >> 4;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 x |= x >> 2;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 x |= x >> 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 /* Phase 2: calculate number of "1" bits in the word */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 w = (x & 0x55555555) + ((x >> 1) & 0x55555555);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
269 w = (w & 0x33333333) + ((w >> 2) & 0x33333333);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270 w = w + (w >> 4);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 w = (w & 0x000F000F) + ((w >> 8) & 0x000F000F);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272 return (cyg_uint32)((w + (w >> 16)) & 0xFF);
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 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
276 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
277 /* Idle thread action */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 void hal_idle_thread_action( cyg_uint32 count )
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 #if 0 //def CYG_HAL_MIPS_SIM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 if( (count % 1000) == 0 )
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 // This code causes a fake interrupt.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 asm volatile (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286 "xor $24,$24,$24;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 "mtc0 $24,$13;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 "lui $25,%%hi(1f);"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 "ori $25,$25,%%lo(1f);"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 "j other_vector;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291 "nop;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292 "1:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295 : "t8", "t9"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299 #if 0 //def CYG_HAL_MIPS_JMR3904
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300
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 // cyg_uint32 tval, isr, imr, ilr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
303 cyg_uint32 sr, cr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304 // HAL_CLOCK_READ( &tval );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 // HAL_READ_UINT32( 0xFFFFC000, isr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 // HAL_READ_UINT32( 0xFFFFC004, imr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 // HAL_READ_UINT32( 0xFFFFC01C, ilr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308 // CYG_TRACE2(1, "Timer value, ISR ",tval, isr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309 // CYG_TRACE2(1, "IMR ILR0 ", imr, ilr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311 asm volatile (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 "mfc0 %0,$12;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 "mfc0 %1,$13;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 : "=r"(sr), "=r"(cr)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 CYG_TRACE2(1, "Status Cause ", sr, cr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 // if( count == 4 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 // {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321 // HAL_ENABLE_INTERRUPTS();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 // }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324 // if( count >= 10 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 // for(;;);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
330 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
331 /* Functions to support the detection and execution of a user provoked */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
332 /* program break. These are usually called from interrupt routines. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
333
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
334 cyg_bool cyg_hal_is_break(char *buf, int size)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
335 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
336 while( size )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
337 if( buf[--size] == 0x03 ) return true;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
338
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
339 return false;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
340 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
341
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
342 void cyg_hal_user_break( CYG_ADDRWORD *regs )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
343 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
344 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
345
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
346 // Ctrl-C: breakpoint.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
347 extern void breakpoint(void);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
348 breakpoint();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
349
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
350 #elif defined(CYG_HAL_USE_ROM_MONITOR) && defined(CYG_HAL_USE_ROM_MONITOR_GDB_STUBS)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
351
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
352 // Ctrl-C: breakpoint.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
353 typedef void bpt_fn(void);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
354 bpt_fn *bfn = ((bpt_fn **)0x80000100)[61];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
355 bfn();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
356
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
357 #elif defined(CYG_HAL_USE_ROM_MONITOR) && defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
358
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
359 // Ctrl-C: breakpoint.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
360 typedef void install_bpt_fn(void *epc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
361 HAL_SavedRegisters *sreg = (HAL_SavedRegisters *)regs;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
362 install_bpt_fn *ibp = (install_bpt_fn *)hal_vsr_table[35];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
363 if( ibp != NULL ) ibp((void *)sreg->pc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
364
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
365 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
366
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
367 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
368
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
369 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
370 /* This code installs an interrupt handler to capture Ctrl-C. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
371 /* It's here for lack of anywhere more suitable to put it. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
372
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
373 #ifdef CYGDBG_HAL_MIPS_INSTALL_CTRL_C_ISR
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
374 #if defined(CYG_HAL_USE_ROM_MONITOR) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
375 !defined(CYGDBG_INFRA_DIAG_USE_DEVICE) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
376 defined(CYG_HAL_TX39_JMR3904)
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 #define DIAG_BASE 0xfffff300
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379 #define DIAG_SLCR (DIAG_BASE+0x00)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
380 #define DIAG_SLSR (DIAG_BASE+0x04)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 #define DIAG_SLDICR (DIAG_BASE+0x08)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382 #define DIAG_SLDISR (DIAG_BASE+0x0C)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
383 #define DIAG_SFCR (DIAG_BASE+0x10)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
384 #define DIAG_SBRG (DIAG_BASE+0x14)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 #define DIAG_TFIFO (DIAG_BASE+0x20)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386 #define DIAG_RFIFO (DIAG_BASE+0x30)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388 #define BRG_T0 0x0000
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389 #define BRG_T2 0x0100
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 #define BRG_T4 0x0200
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 #define BRG_T5 0x0300
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
392
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
393 typedef cyg_uint32 (*original_isr_ptr_t)(CYG_ADDRWORD vector, CYG_ADDRWORD data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
394 static original_isr_ptr_t original_isr_ptr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
395 static CYG_ADDRWORD original_data, original_object;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
396
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
397 static cyg_uint32 hal_ctrlc_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data, CYG_ADDRWORD* regs)
0
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 char c;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 CYG_WORD16 disr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402 HAL_READ_UINT16( DIAG_SLDISR , disr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404 if( disr & 0x0001 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 {
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 disr = disr & ~0x0001;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
408
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 HAL_READ_UINT8( DIAG_RFIFO, c );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 HAL_WRITE_UINT16( DIAG_SLDISR , disr );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
412
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
413 if( cyg_hal_is_break( &c , 1 ) )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
414 cyg_hal_user_break( regs );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
415 return 0;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
417 /* else */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
418 return (*original_isr_ptr)(vector, data);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
422 static void hal_init_ctrlc_intr(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
423 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
424 CYG_WORD16 dicr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
426 cyg_uint32 index;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
427 HAL_TRANSLATE_VECTOR(CYGNUM_HAL_INTERRUPT_SIO_0, index);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
428
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
429 original_data = hal_interrupt_data[index];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
430 original_object = hal_interrupt_objects[index];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
431 original_isr_ptr = (original_isr_ptr_t) hal_interrupt_handlers[index];
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
432
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
433 hal_interrupt_handlers[index] =
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
434 (CYG_ADDRESS)hal_default_isr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
435
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
436 HAL_INTERRUPT_ATTACH( CYGNUM_HAL_INTERRUPT_SIO_0, hal_ctrlc_isr, original_data,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
437 original_object );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
438
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
439 HAL_INTERRUPT_UNMASK( CYGNUM_HAL_INTERRUPT_SIO_0 );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
440
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
441 HAL_READ_UINT16( DIAG_SLDICR , dicr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
442 dicr = 0x0001;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
443 HAL_WRITE_UINT16( DIAG_SLDICR , dicr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
444 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
445
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
446 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
447 #endif // CYGDBG_HAL_MIPS_INSTALL_CTRL_C_ISR
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
448
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
449 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
450 /* End of hal_misc.c */