annotate packages/hal/mips/arch/current/src/hal_misc.c @ 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 // hal_misc.c
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 // HAL miscellaneous functions
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-05
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 // Purpose: HAL miscellaneous functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 // Description: This file contains miscellaneous functions provided by the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 // HAL.
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 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 //===========================================================================*/
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
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 /* First level C exception handler. */
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 deliver_exception( regs->vector>>2, (CYG_ADDRWORD)regs );
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 /* default ISR */
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 /* data copy and bss zero functions */
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 #ifdef CYG_HAL_STARTUP_ROM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 void hal_copy_data(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107 extern char __ram_data_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 extern char __ram_data_end;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 extern CYG_ROM_ADDRESS __rom_data_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 char *p = &__ram_data_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 char *q = (char *)&__rom_data_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 while( p != (char *)&__ram_data_end )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 *p++ = *q++;
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 #endif
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 void hal_zero_bss(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 extern CYG_ROM_ADDRESS __bss_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 extern CYG_ROM_ADDRESS _end;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 char *p = (char *)&__bss_start;
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 while( p != (char *)&_end )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125 *p++ = 0;
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 /*---------------------------------------------------------------------------*/
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 void fake_ctor(void) {};
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 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 cyg_hal_invoke_constructors (void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 #ifdef CYG_KERNEL_USE_INIT_PRIORITY
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 typedef void (*pfunc) (void);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138 extern pfunc __CTOR_LIST__[];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 long i = (long)(__CTOR_LIST__[0]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 pfunc p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 for ( ; i > 0; i-- )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 p = __CTOR_LIST__[i];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145 p ();
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 #else
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 typedef void (CYG_CODE_ADDRESS)();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 extern CYG_CODE_ADDRESS __sched_text_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152 extern CYG_CODE_ADDRESS __sched_text_end;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153 extern CYG_CODE_ADDRESS __clock_text_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 extern CYG_CODE_ADDRESS __clock_text_end;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 extern CYG_CODE_ADDRESS __thread_text_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 extern CYG_CODE_ADDRESS __thread_text_end;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 typedef void (*pfunc) ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 extern pfunc __CTOR_LIST__[];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 pfunc *p;
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 (p = __CTOR_LIST__+1; *p != 0; p++)
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 CYG_ADDRESS *pp = (CYG_ADDRESS *)*p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 if( pp > (CYG_ADDRESS *)&__sched_text_start &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 pp < (CYG_ADDRESS *)&__sched_text_end )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 (*p) ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 *p = fake_ctor;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 for (p = __CTOR_LIST__+1; *p != 0; p++)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 CYG_ADDRESS *pp = (CYG_ADDRESS *)*p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 if( pp > (CYG_ADDRESS *)&__clock_text_start &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 pp < (CYG_ADDRESS *)&__clock_text_end )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 (*p) ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 *p = fake_ctor;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 }
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 for (p = __CTOR_LIST__+1; *p != 0; p++)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 CYG_ADDRESS *pp = (CYG_ADDRESS *)*p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 if( pp > (CYG_ADDRESS *)&__thread_text_start &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 pp < (CYG_ADDRESS *)&__thread_text_end )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 (*p) ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194 *p = fake_ctor;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198 for (p = __CTOR_LIST__+1; *p != 0; p++)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 (*p) ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 *p = fake_ctor;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 #ifdef CYG_HAL_MIPS_TX3904
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 // On the real hardware we also enable the cache.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 // doing this here is a temporary measure until we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 // have a proper platform specific place to do it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 HAL_ICACHE_INVALIDATE_ALL();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 HAL_ICACHE_ENABLE();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 HAL_DCACHE_INVALIDATE_ALL();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215 HAL_DCACHE_ENABLE();
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 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 #if defined(CYG_HAL_USE_ROM_MONITOR) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 !defined(CYGDBG_INFRA_DIAG_USE_DEVICE) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 defined(CYG_HAL_TX39_JMR3904)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 static void hal_init_ctrlc_intr(void);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225 hal_init_ctrlc_intr();
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 #if defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 defined(CYG_HAL_USE_ROM_MONITOR) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231 defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
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 extern void patch_dbg_syscalls(void * vector);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234 #define DBG_SYSCALL_VEC_NUM 15
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 patch_dbg_syscalls( (void *)(&hal_vsr_table[DBG_SYSCALL_VEC_NUM]) );
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 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 /* Determine the index of the ls bit of the supplied mask. */
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 cyg_uint32 hal_lsbit_index(cyg_uint32 mask)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245 cyg_uint32 n = mask;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 static const signed char tab[64] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 { -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
249 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
250 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
251 0, 23, 0, 19, 29, 0, 22, 18, 28, 17, 16, 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254 n &= ~(n-1UL);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255 n = (n<<16)-n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 n = (n<<6)+n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 n = (n<<4)+n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 return tab[n>>26];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 }
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 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263 /* Determine the index of the ms bit of the supplied mask. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 cyg_uint32 hal_msbit_index(cyg_uint32 mask)
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 cyg_uint32 x = mask;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 cyg_uint32 w;
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 /* 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
271 x |= x >> 16;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272 x |= x >> 8;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273 x |= x >> 4;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274 x |= x >> 2;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275 x |= x >> 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 /* Phase 2: calculate number of "1" bits in the word */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 w = (x & 0x55555555) + ((x >> 1) & 0x55555555);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 w = (w & 0x33333333) + ((w >> 2) & 0x33333333);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280 w = w + (w >> 4);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 w = (w & 0x000F000F) + ((w >> 8) & 0x000F000F);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 return (cyg_uint32)((w + (w >> 16)) & 0xFF);
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 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 /* Idle thread action */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 void hal_idle_thread_action( cyg_uint32 count )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291 #if 0 //def CYG_HAL_MIPS_SIM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292 if( (count % 1000) == 0 )
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 // This code causes a fake interrupt.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295 asm volatile (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296 "xor $24,$24,$24;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297 "mtc0 $24,$13;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298 "lui $25,%%hi(1f);"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299 "ori $25,$25,%%lo(1f);"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 "j other_vector;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301 "nop;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302 "1:"
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 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 : "t8", "t9"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309 #if 0 //def CYG_HAL_MIPS_JMR3904
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 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 // cyg_uint32 tval, isr, imr, ilr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 cyg_uint32 sr, cr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 // HAL_CLOCK_READ( &tval );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 // HAL_READ_UINT32( 0xFFFFC000, isr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 // HAL_READ_UINT32( 0xFFFFC004, imr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 // HAL_READ_UINT32( 0xFFFFC01C, ilr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 // CYG_TRACE2(1, "Timer value, ISR ",tval, isr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 // CYG_TRACE2(1, "IMR ILR0 ", imr, ilr);
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 asm volatile (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 "mfc0 %0,$12;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 "mfc0 %1,$13;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324 : "=r"(sr), "=r"(cr)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 );
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 CYG_TRACE2(1, "Status Cause ", sr, cr);
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 // if( count == 4 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 // {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331 // HAL_ENABLE_INTERRUPTS();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332 // }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 // if( count >= 10 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 // for(;;);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 #endif
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
341 /* This code installs an interrupt handler to capture Ctrl-C. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
342 /* It's here for lack of anywhere more suitable to put it. */
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 #if defined(CYG_HAL_USE_ROM_MONITOR) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345 !defined(CYGDBG_INFRA_DIAG_USE_DEVICE) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346 defined(CYG_HAL_TX39_JMR3904)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348 #define DIAG_BASE 0xfffff300
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349 #define DIAG_SLCR (DIAG_BASE+0x00)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
350 #define DIAG_SLSR (DIAG_BASE+0x04)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
351 #define DIAG_SLDICR (DIAG_BASE+0x08)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
352 #define DIAG_SLDISR (DIAG_BASE+0x0C)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
353 #define DIAG_SFCR (DIAG_BASE+0x10)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354 #define DIAG_SBRG (DIAG_BASE+0x14)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355 #define DIAG_TFIFO (DIAG_BASE+0x20)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
356 #define DIAG_RFIFO (DIAG_BASE+0x30)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
357
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 #define BRG_T0 0x0000
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 #define BRG_T2 0x0100
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360 #define BRG_T4 0x0200
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
361 #define BRG_T5 0x0300
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 static cyg_uint32 hal_ctrlc_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365 char c;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366 CYG_WORD16 disr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 HAL_READ_UINT16( DIAG_SLDISR , disr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
369
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
370 if( disr & 0x0001 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373 disr = disr & ~0x0001;
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 HAL_READ_UINT8( DIAG_RFIFO, c );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
376
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
377 HAL_WRITE_UINT16( DIAG_SLDISR , disr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
380 if( c == 3 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382 // Ctrl-C: breakpoint.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
383 extern void breakpoint(void);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
384 breakpoint();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386 #elif defined(CYG_HAL_USE_ROM_MONITOR) && defined(CYG_HAL_USE_ROM_MONITOR_GDB_STUBS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387 if( c == 3 )
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 // Ctrl-C: breakpoint.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 // HAL_BREAKPOINT(_breakinst);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 typedef void bpt_fn(void);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392 bpt_fn *bfn = ((bpt_fn **)0x80000100)[61];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 bfn();
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 #elif defined(CYG_HAL_USE_ROM_MONITOR) && defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397 if( c == 3 )
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 // Ctrl-C: breakpoint.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 HAL_BREAKPOINT(_breakinst1);
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 #endif
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 return 0;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 static void hal_init_ctrlc_intr(void)
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 CYG_WORD16 dicr;
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 HAL_INTERRUPT_ATTACH( CYG_VECTOR_SIO_0, hal_ctrlc_isr, NULL, NULL );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
415 HAL_INTERRUPT_UNMASK( CYG_VECTOR_SIO_0 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417 HAL_READ_UINT16( DIAG_SLDICR , dicr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 dicr = 0x0001;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 HAL_WRITE_UINT16( DIAG_SLDICR , dicr );
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 #endif
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 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 /* End of hal_misc.c */