annotate packages/hal/mips/arch/current/src/hal_misc.c @ 62:7a6ac9edc838 ecos-sw-2000-01-24

Merge from eCos master repository on 2000-01-24-19:43:49-GMT
author jlarmour
date Mon, 24 Jan 2000 21:43:17 +0000
parents a0774359f013
children c38311975d4f
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 /*------------------------------------------------------------------------*/
18
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
56 /* If required, define a variable to store the clock period. */
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
57
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
58 #ifdef CYGHWR_HAL_CLOCK_PERIOD_DEFINED
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
59
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
60 CYG_WORD32 cyg_hal_clock_period;
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
61
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
62 #endif
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
63
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
64 /*------------------------------------------------------------------------*/
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
65 /* First level C exception handler. */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 externC void __handle_exception (void);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 externC HAL_SavedRegisters *_hal_registers;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70
36
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
71 externC void *__mem_fault_handler;
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
72
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
73 externC cyg_uint8 cyg_hal_mips_process_fpe( HAL_SavedRegisters *regs );
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
74
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
75 externC cyg_uint32 cyg_hal_exception_handler(HAL_SavedRegisters *regs)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 {
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 50
diff changeset
77 #if defined(CYGHWR_HAL_MIPS_FPU) && \
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 50
diff changeset
78 defined(CYGSEM_HAL_MIPS_EMULATE_UNIMPLEMENTED_FPU_OPS)
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
79 // We may be required to emulate certain unimplemented Floating Point
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
80 // operations
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
81
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
82 if ((regs->vector>>2) == CYGNUM_HAL_VECTOR_FPE) {
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
83
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
84 // cyg_hal_mips_process_fpe() returns non-zero if it could handle
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
85 // the exception successfully. If so, we just return
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
86
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
87 if ( cyg_hal_mips_process_fpe(regs) )
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
88 return 0;
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
89 }
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
90 #endif
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 18
diff changeset
91
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93
36
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
94 // If we caught an exception inside the stubs, see if we were expecting it
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
95 // and if so jump to the saved address
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
96 if (__mem_fault_handler) {
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
97 regs->pc = (CYG_ADDRWORD)__mem_fault_handler;
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
98 return 0; // Caught an exception inside stubs
36
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
99 }
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 26
diff changeset
100
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 // Set the pointer to the registers of the current exception
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 // context. At entry the GDB stub will expand the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 // HAL_SavedRegisters structure into a (bigger) register array.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 _hal_registers = regs;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 __handle_exception();
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 #elif defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT) && defined(CYGPKG_HAL_EXCEPTIONS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 // We should decode the vector and pass a more appropriate
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 // value as the second argument. For now we simply pass a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 // pointer to the saved registers. We should also divert
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 // breakpoint and other debug vectors into the debug stubs.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
114 cyg_hal_deliver_exception( regs->vector>>2, (CYG_ADDRWORD)regs );
0
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 #else
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 CYG_FAIL("Exception!!!");
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 #endif
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
121 return 0;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
124 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
125 /* default ISR */
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 externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 {
50
a0774359f013 Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents: 38
diff changeset
129 #if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT) && \
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
130 defined(CYGHWR_HAL_GDB_PORT_VECTOR) && \
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
131 defined(HAL_CTRLC_ISR)
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
132
18
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
133 #ifndef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
134 if( vector == CYGHWR_HAL_GDB_PORT_VECTOR )
18
7253dcc42a09 Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents: 16
diff changeset
135 #endif
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
136 {
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
137 cyg_uint32 result = HAL_CTRLC_ISR( vector, data );
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
138 if( result != 0 ) return result;
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
139 }
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
140
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 50
diff changeset
141 #if defined(CYGSEM_HAL_USE_ROM_MONITOR_CygMon)
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
142 #if defined(HAL_DIAG_IRQ_CHECK)
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
143 {
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
144 cyg_uint32 ret;
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
145 /* let ROM monitor handle unexpected interrupts */
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
146 HAL_DIAG_IRQ_CHECK(vector, ret);
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
147 if (ret<=0)
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
148 return ret;
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
149 }
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 36
diff changeset
150 #endif // def HAL_DIAG_IRQ_CHECK
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 50
diff changeset
151 #endif // def CYGSEM_HAL_USE_ROM_MONITOR_CygMon
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
152 #endif
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 6
diff changeset
153
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 CYG_TRACE1(true, "Interrupt: %d", vector);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 CYG_FAIL("Spurious Interrupt!!!");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 return 0;
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
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
159 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
160 /* data copy and bss zero functions */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
162 typedef void (CYG_SYM_ADDRESS)(void);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
164 // All these must use this type of address to stop them being given relocations
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
165 // relative to $gp (i.e. assuming they would be in .sdata)
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
166 extern CYG_SYM_ADDRESS __ram_data_start;
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
167 extern CYG_SYM_ADDRESS __ram_data_end;
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
168 extern CYG_SYM_ADDRESS __rom_data_start;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
169
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
170 #ifdef CYG_HAL_STARTUP_ROM
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 void hal_copy_data(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 {
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
173 char *p = (char *)&__ram_data_start;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 char *q = (char *)&__rom_data_start;
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 while( p != (char *)&__ram_data_end )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 *p++ = *q++;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180
16
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
181 extern CYG_SYM_ADDRESS __bss_start;
4f2df4ab82c8 Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents: 12
diff changeset
182 extern CYG_SYM_ADDRESS __bss_end;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
183
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 void hal_zero_bss(void)
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 char *p = (char *)&__bss_start;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
188 while( p != (char *)&__bss_end )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 *p++ = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
192 /*------------------------------------------------------------------------*/
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
194 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
195 cyg_bool cyg_hal_stop_constructors;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
196 #endif
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 typedef void (*pfunc) (void);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
199 extern pfunc __CTOR_LIST__[];
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
200 extern pfunc __CTOR_END__[];
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 void
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
203 cyg_hal_invoke_constructors(void)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
205 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
206 static pfunc *p = &__CTOR_END__[-1];
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
207
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
208 cyg_hal_stop_constructors = 0;
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
209 for (; p >= __CTOR_LIST__; p--) {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
210 (*p) ();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
211 if (cyg_hal_stop_constructors) {
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
212 p--;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
213 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
214 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
215 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
216 #else
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
217 pfunc *p;
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
218
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
219 for (p = &__CTOR_END__[-1]; p >= __CTOR_LIST__; p--)
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 10
diff changeset
220 (*p) ();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
221 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
223 } // cyg_hal_invoke_constructors()
0
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 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
226 /* Determine the index of the ls bit of the supplied mask. */
0
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 cyg_uint32 hal_lsbit_index(cyg_uint32 mask)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 cyg_uint32 n = mask;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232 static const signed char tab[64] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 { -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
234 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
235 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
236 0, 23, 0, 19, 29, 0, 22, 18, 28, 17, 16, 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 n &= ~(n-1UL);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 n = (n<<16)-n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 n = (n<<6)+n;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 n = (n<<4)+n;
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 return tab[n>>26];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
247 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
248 /* Determine the index of the ms bit of the supplied mask. */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 cyg_uint32 hal_msbit_index(cyg_uint32 mask)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 cyg_uint32 x = mask;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253 cyg_uint32 w;
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 /* 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
256 x |= x >> 16;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 x |= x >> 8;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 x |= x >> 4;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 x |= x >> 2;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 x |= x >> 1;
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 /* Phase 2: calculate number of "1" bits in the word */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263 w = (x & 0x55555555) + ((x >> 1) & 0x55555555);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 w = (w & 0x33333333) + ((w >> 2) & 0x33333333);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 w = w + (w >> 4);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 w = (w & 0x000F000F) + ((w >> 8) & 0x000F000F);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 return (cyg_uint32)((w + (w >> 16)) & 0xFF);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268
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
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
271 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
272 /* Idle thread action */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
274 #include <cyg/infra/diag.h>
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
275
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 void hal_idle_thread_action( cyg_uint32 count )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 #if 0 //def CYG_HAL_MIPS_SIM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 if( (count % 1000) == 0 )
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 // This code causes a fake interrupt.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 asm volatile (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283 "xor $24,$24,$24;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 "mtc0 $24,$13;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 "lui $25,%%hi(1f);"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286 "ori $25,$25,%%lo(1f);"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 "j other_vector;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 "nop;"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 "1:"
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 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292 : "t8", "t9"
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 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296 #if 0 //def CYG_HAL_MIPS_JMR3904
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
298 if( (count % 100000 ) == 0 )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 // cyg_uint32 tval, isr, imr, ilr;
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
301 cyg_uint32 sr = 0, cr = 0, ctr = 0, cpr = 0;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302 // HAL_CLOCK_READ( &tval );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
303 // HAL_READ_UINT32( 0xFFFFC000, isr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304 // HAL_READ_UINT32( 0xFFFFC004, imr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 // HAL_READ_UINT32( 0xFFFFC01C, ilr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 // CYG_TRACE2(1, "Timer value, ISR ",tval, isr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 // CYG_TRACE2(1, "IMR ILR0 ", imr, ilr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
309 // asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
310 // "mfc0 %0,$12;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
311 // "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
312 // "mfc0 %1,$13;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
313 // "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
314 // "mfc0 %2,$9;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
315 // "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
316 // "mfc0 %3,$11;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
317 // "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
318 // : "=r"(sr), "=r"(cr), "=r"(ctr), "=r"(cpr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
319 // );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
320
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
321
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
322 // diag_printf("Status %08x ", sr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
323 // diag_printf("Cause %08x ", cr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
324 // diag_printf("Counter %08x ", ctr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
325 // diag_printf("Compare %08x\n", cpr);
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
326
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
327 #if 0
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 asm volatile (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 "mfc0 %0,$12;"
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
330 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
331 : "=r"(sr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
332 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
333 diag_write_string("Status "); diag_write_hex( sr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
334
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
335 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
336 "mfc0 %0,$13;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
337 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
338 : "=r"(cr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
339 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
340 diag_write_string(" Cause "); diag_write_hex( cr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
341
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
342 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
343 "mfc0 %0,$9;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
344 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
345 : "=r"(ctr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
346 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
347 diag_write_string(" Counter "); diag_write_hex( ctr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
348
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
349 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
350 "mfc0 %0,$11;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
351 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
352 : "=r"(cpr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
353 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
354 diag_write_string(" Compare "); diag_write_hex( cpr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
355 diag_write_string( "\n" );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
356
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
357 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
358 #if 1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
359 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
360 "mfc0 %0,$12;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
361 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
362 : "=r"(sr)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
363 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
365 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
366 "mfc0 %0,$13;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
367 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
368 : "=r"(cr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
369 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
370
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
371 CYG_INSTRUMENT_USER( 1, sr, cr );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
373 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
374 "mfc0 %0,$9;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
375 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
376 : "=r"(ctr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
377 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
378
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
379 asm volatile (
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
380 "mfc0 %0,$11;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
381 "nop; nop; nop;"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
382 : "=r"(cpr)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
383 );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
384
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
385 CYG_INSTRUMENT_USER( 2, ctr, cpr );
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
386 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents: 2
diff changeset
387
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388 // if( count == 4 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389 // {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 // HAL_ENABLE_INTERRUPTS();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 // }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393 // if( count >= 10 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 // for(;;);
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 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
399 /*------------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
400 /* End of hal_misc.c */