Mercurial > ecos
annotate packages/hal/mips/arch/current/src/hal_misc.c @ 198:ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
| author | jlarmour |
|---|---|
| date | Fri, 07 Dec 2001 14:15:03 +0000 |
| parents | 9b55e9c69693 |
| children | 8147f1c99f15 |
| rev | line source |
|---|---|
| 2 | 1 //========================================================================== |
| 0 | 2 // |
| 2 | 3 // hal_misc.c |
| 0 | 4 // |
| 2 | 5 // HAL miscellaneous functions |
| 0 | 6 // |
| 2 | 7 //========================================================================== |
| 0 | 8 //####COPYRIGHTBEGIN#### |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
9 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
10 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
11 // The contents of this file are subject to the Red Hat eCos Public License |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
12 // Version 1.1 (the "License"); you may not use this file except in |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
13 // compliance with the License. You may obtain a copy of the License at |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
14 // http://www.redhat.com/ |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
15 // |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
16 // Software distributed under the License is distributed on an "AS IS" |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
18 // License for the specific language governing rights and limitations under |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
19 // the License. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
20 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
21 // The Original Code is eCos - Embedded Configurable Operating System, |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
22 // released September 30, 1998. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
23 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
24 // The Initial Developer of the Original Code is Red Hat. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
25 // Portions created by Red Hat are |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
27 // All Rights Reserved. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
28 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
29 // |
| 0 | 30 //####COPYRIGHTEND#### |
| 2 | 31 //========================================================================== |
| 0 | 32 //#####DESCRIPTIONBEGIN#### |
| 33 // | |
| 2 | 34 // Author(s): nickg |
| 35 // Contributors: nickg, jlarmour | |
| 36 // Date: 1999-01-21 | |
| 37 // Purpose: HAL miscellaneous functions | |
| 38 // Description: This file contains miscellaneous functions provided by the | |
| 39 // HAL. | |
| 0 | 40 // |
| 41 //####DESCRIPTIONEND#### | |
| 42 // | |
| 2 | 43 //========================================================================*/ |
| 0 | 44 |
| 45 #include <pkgconf/hal.h> | |
| 46 | |
| 47 #include <cyg/infra/cyg_type.h> // Base types | |
| 48 #include <cyg/infra/cyg_trac.h> // tracing macros | |
| 49 #include <cyg/infra/cyg_ass.h> // assertion macros | |
| 50 | |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
51 #define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS |
| 0 | 52 #include <cyg/hal/hal_arch.h> // architectural definitions |
| 53 | |
| 54 #include <cyg/hal/hal_intr.h> // Interrupt handling | |
| 55 | |
| 56 #include <cyg/hal/hal_cache.h> // Cache handling | |
|
165
d63db767121d
Merge from eCos master repository on 2001-06-29-06:43:03-BST
jlarmour
parents:
154
diff
changeset
|
57 #include <cyg/hal/hal_if.h> // hal_ctrlc_isr() |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
58 #include <cyg/hal/mips-regs.h> // FPU cause register definitions |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
59 |
|
198
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
60 #include CYGHWR_MEMORY_LAYOUT_H |
|
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
61 |
| 2 | 62 /*------------------------------------------------------------------------*/ |
|
18
7253dcc42a09
Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents:
16
diff
changeset
|
63 /* 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
|
64 |
|
7253dcc42a09
Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents:
16
diff
changeset
|
65 #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
|
66 |
|
7253dcc42a09
Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents:
16
diff
changeset
|
67 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
|
68 |
|
7253dcc42a09
Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents:
16
diff
changeset
|
69 #endif |
|
7253dcc42a09
Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents:
16
diff
changeset
|
70 |
|
7253dcc42a09
Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents:
16
diff
changeset
|
71 /*------------------------------------------------------------------------*/ |
| 2 | 72 /* First level C exception handler. */ |
| 0 | 73 |
| 74 externC void __handle_exception (void); | |
| 75 | |
| 76 externC HAL_SavedRegisters *_hal_registers; | |
| 77 | |
|
130
eb9fd8c04db3
Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents:
126
diff
changeset
|
78 externC void* volatile __mem_fault_handler; |
|
36
e97d78785e2d
Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents:
26
diff
changeset
|
79 |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
18
diff
changeset
|
80 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
|
81 |
|
38
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
82 externC cyg_uint32 cyg_hal_exception_handler(HAL_SavedRegisters *regs) |
| 0 | 83 { |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
84 int vec = regs->vector>>2; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
18
diff
changeset
|
85 |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
86 #if defined(CYGHWR_HAL_MIPS_FPU) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
87 // Special handling of FPU exceptions |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
88 if (CYGNUM_HAL_VECTOR_FPE == vec) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
89 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
90 #if defined(CYGSEM_HAL_MIPS_EMULATE_UNIMPLEMENTED_FPU_OPS) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
91 // We may be required to emulate certain unimplemented Floating Point |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
92 // operations |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
18
diff
changeset
|
93 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
18
diff
changeset
|
94 // 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
|
95 // 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
|
96 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
18
diff
changeset
|
97 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
|
98 return 0; |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
99 #endif |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
100 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
101 // Find the cause of the FPU exception, clear the flag and use |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
102 // the decoded vector number. |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
103 { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
104 cyg_uint32 cause = regs->fcr31; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
105 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
106 if (cause & FCR31_CAUSE_I) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
107 vec = CYGNUM_HAL_EXCEPTION_FPU_INEXACT; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
108 cause &= ~(FCR31_FLAGS_I | FCR31_CAUSE_I); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
109 } else if (cause & FCR31_CAUSE_U) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
110 vec = CYGNUM_HAL_EXCEPTION_FPU_UNDERFLOW; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
111 cause &= ~(FCR31_FLAGS_U | FCR31_CAUSE_U); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
112 } else if (cause & FCR31_CAUSE_O) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
113 vec = CYGNUM_HAL_EXCEPTION_FPU_OVERFLOW; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
114 cause &= ~(FCR31_FLAGS_O | FCR31_CAUSE_O); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
115 } else if (cause & FCR31_CAUSE_Z) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
116 vec = CYGNUM_HAL_EXCEPTION_FPU_DIV_BY_ZERO; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
117 cause &= ~(FCR31_FLAGS_Z | FCR31_CAUSE_Z); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
118 } else if (cause & FCR31_CAUSE_V) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
119 vec = CYGNUM_HAL_EXCEPTION_FPU_INVALID; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
120 cause &= ~(FCR31_FLAGS_V | FCR31_CAUSE_V); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
121 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
122 regs->fcr31 = cause; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
123 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
124 #if 1 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
125 // Update the FPU status register with the new |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
126 // setting. This is a workaround for the signal2 test |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
127 // which does a longjump in the exception handler and thus |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
128 // never gets around to executing the register restore |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
129 // code. |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
130 asm ("ctc1 %0,$31" : : "r" (cause)); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
131 #endif |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
132 } |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
18
diff
changeset
|
133 } |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
134 #endif // CYGHWR_HAL_MIPS_FPU |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
135 |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
18
diff
changeset
|
136 |
| 0 | 137 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) |
| 138 | |
|
36
e97d78785e2d
Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents:
26
diff
changeset
|
139 // 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
|
140 // 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
|
141 if (__mem_fault_handler) { |
|
194
feb0fcf83327
Merge from eCos master repository on 2001-10-26-06:43:03-BST
jlarmour
parents:
184
diff
changeset
|
142 regs->pc = (CYG_HAL_MIPS_REG)(signed long)__mem_fault_handler; |
|
38
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
143 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
|
144 } |
|
e97d78785e2d
Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents:
26
diff
changeset
|
145 |
| 0 | 146 // Set the pointer to the registers of the current exception |
| 147 // context. At entry the GDB stub will expand the | |
| 148 // HAL_SavedRegisters structure into a (bigger) register array. | |
| 149 _hal_registers = regs; | |
| 150 __handle_exception(); | |
| 151 | |
| 152 #elif defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT) && defined(CYGPKG_HAL_EXCEPTIONS) | |
| 153 | |
| 154 // We should decode the vector and pass a more appropriate | |
| 155 // value as the second argument. For now we simply pass a | |
| 156 // pointer to the saved registers. We should also divert | |
| 157 // breakpoint and other debug vectors into the debug stubs. | |
| 158 | |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
101
diff
changeset
|
159 cyg_hal_deliver_exception( vec, (CYG_ADDRWORD)regs ); |
| 0 | 160 |
| 161 #else | |
| 162 | |
| 163 CYG_FAIL("Exception!!!"); | |
| 164 | |
| 165 #endif | |
|
38
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
166 return 0; |
| 0 | 167 } |
| 168 | |
| 2 | 169 /*------------------------------------------------------------------------*/ |
| 170 /* default ISR */ | |
| 0 | 171 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
172 #ifndef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT |
| 0 | 173 externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data) |
| 174 { | |
|
50
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
38
diff
changeset
|
175 #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
|
176 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
|
177 defined(HAL_CTRLC_ISR) |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
6
diff
changeset
|
178 |
|
18
7253dcc42a09
Merge from eCos master repository on 1999-06-25-15:31:50-BST
jlarmour
parents:
16
diff
changeset
|
179 #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
|
180 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
|
181 #endif |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
6
diff
changeset
|
182 { |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
6
diff
changeset
|
183 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
|
184 if( result != 0 ) return result; |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
6
diff
changeset
|
185 } |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
6
diff
changeset
|
186 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
50
diff
changeset
|
187 #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
|
188 #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
|
189 { |
|
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
190 cyg_uint32 ret; |
|
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
191 /* 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
|
192 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
|
193 if (ret<=0) |
|
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
194 return ret; |
|
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
195 } |
|
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
196 #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
|
197 #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
|
198 #endif |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
6
diff
changeset
|
199 |
| 0 | 200 CYG_TRACE1(true, "Interrupt: %d", vector); |
| 201 CYG_FAIL("Spurious Interrupt!!!"); | |
| 202 return 0; | |
| 203 } | |
| 204 | |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
205 #else // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
206 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
207 externC cyg_uint32 hal_arch_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
208 { |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
209 #if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT) && \ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
210 defined(CYGHWR_HAL_GDB_PORT_VECTOR) && \ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
211 defined(HAL_CTRLC_ISR) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
212 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
213 #if defined(CYGSEM_HAL_USE_ROM_MONITOR_CygMon) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
214 #if defined(HAL_DIAG_IRQ_CHECK) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
215 { |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
216 cyg_uint32 ret; |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
217 /* let ROM monitor handle unexpected interrupts */ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
218 HAL_DIAG_IRQ_CHECK(vector, ret); |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
219 if (ret<=0) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
220 return ret; |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
221 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
222 #endif // def HAL_DIAG_IRQ_CHECK |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
223 #endif // def CYGSEM_HAL_USE_ROM_MONITOR_CygMon |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
224 #endif |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
225 |
|
153
5e8f3b328bb3
Merge from eCos master repository on 2001-02-19-15:48:12-GMT
jlarmour
parents:
143
diff
changeset
|
226 #ifdef CYGPKG_REDBOOT |
|
5e8f3b328bb3
Merge from eCos master repository on 2001-02-19-15:48:12-GMT
jlarmour
parents:
143
diff
changeset
|
227 hal_ctrlc_isr( vector, data ); |
|
5e8f3b328bb3
Merge from eCos master repository on 2001-02-19-15:48:12-GMT
jlarmour
parents:
143
diff
changeset
|
228 #endif |
|
5e8f3b328bb3
Merge from eCos master repository on 2001-02-19-15:48:12-GMT
jlarmour
parents:
143
diff
changeset
|
229 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
230 return 0; |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
231 } |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
232 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
233 #endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
234 |
| 2 | 235 /*------------------------------------------------------------------------*/ |
| 236 /* data copy and bss zero functions */ | |
| 0 | 237 |
|
16
4f2df4ab82c8
Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents:
12
diff
changeset
|
238 typedef void (CYG_SYM_ADDRESS)(void); |
| 0 | 239 |
|
16
4f2df4ab82c8
Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents:
12
diff
changeset
|
240 // 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
|
241 // 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
|
242 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
|
243 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
|
244 extern CYG_SYM_ADDRESS __rom_data_start; |
| 2 | 245 |
| 246 #ifdef CYG_HAL_STARTUP_ROM | |
| 0 | 247 void hal_copy_data(void) |
| 248 { | |
|
16
4f2df4ab82c8
Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents:
12
diff
changeset
|
249 char *p = (char *)&__ram_data_start; |
| 0 | 250 char *q = (char *)&__rom_data_start; |
| 251 | |
| 252 while( p != (char *)&__ram_data_end ) | |
| 253 *p++ = *q++; | |
| 254 } | |
| 255 #endif | |
| 256 | |
| 2 | 257 /*------------------------------------------------------------------------*/ |
| 0 | 258 |
| 2 | 259 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG |
| 260 cyg_bool cyg_hal_stop_constructors; | |
| 261 #endif | |
| 262 | |
| 263 typedef void (*pfunc) (void); | |
| 264 extern pfunc __CTOR_LIST__[]; | |
|
12
4cc3eff958ab
Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents:
10
diff
changeset
|
265 extern pfunc __CTOR_END__[]; |
| 0 | 266 |
| 267 void | |
| 2 | 268 cyg_hal_invoke_constructors(void) |
| 0 | 269 { |
| 2 | 270 #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
|
271 static pfunc *p = &__CTOR_END__[-1]; |
| 2 | 272 |
|
12
4cc3eff958ab
Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents:
10
diff
changeset
|
273 cyg_hal_stop_constructors = 0; |
|
4cc3eff958ab
Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents:
10
diff
changeset
|
274 for (; p >= __CTOR_LIST__; p--) { |
|
4cc3eff958ab
Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents:
10
diff
changeset
|
275 (*p) (); |
| 2 | 276 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
|
277 p--; |
| 2 | 278 break; |
| 279 } | |
| 280 } | |
| 281 #else | |
|
12
4cc3eff958ab
Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents:
10
diff
changeset
|
282 pfunc *p; |
|
4cc3eff958ab
Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents:
10
diff
changeset
|
283 |
|
4cc3eff958ab
Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents:
10
diff
changeset
|
284 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
|
285 (*p) (); |
| 2 | 286 #endif |
| 0 | 287 |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
288 } // cyg_hal_invoke_constructors() |
| 0 | 289 |
| 2 | 290 /*------------------------------------------------------------------------*/ |
| 291 /* Determine the index of the ls bit of the supplied mask. */ | |
| 0 | 292 |
| 293 cyg_uint32 hal_lsbit_index(cyg_uint32 mask) | |
| 294 { | |
| 295 cyg_uint32 n = mask; | |
| 296 | |
| 297 static const signed char tab[64] = | |
| 298 { -1, 0, 1, 12, 2, 6, 0, 13, 3, 0, 7, 0, 0, 0, 0, 14, 10, | |
| 299 4, 0, 0, 8, 0, 0, 25, 0, 0, 0, 0, 0, 21, 27 , 15, 31, 11, | |
| 300 5, 0, 0, 0, 0, 0, 9, 0, 0, 24, 0, 0 , 20, 26, 30, 0, 0, 0, | |
| 301 0, 23, 0, 19, 29, 0, 22, 18, 28, 17, 16, 0 | |
| 302 }; | |
| 303 | |
| 304 n &= ~(n-1UL); | |
| 305 n = (n<<16)-n; | |
| 306 n = (n<<6)+n; | |
| 307 n = (n<<4)+n; | |
| 308 | |
| 309 return tab[n>>26]; | |
| 310 } | |
| 311 | |
| 2 | 312 /*------------------------------------------------------------------------*/ |
| 313 /* Determine the index of the ms bit of the supplied mask. */ | |
| 0 | 314 |
| 315 cyg_uint32 hal_msbit_index(cyg_uint32 mask) | |
| 316 { | |
| 317 cyg_uint32 x = mask; | |
| 318 cyg_uint32 w; | |
| 319 | |
| 320 /* Phase 1: make word with all ones from that one to the right */ | |
| 321 x |= x >> 16; | |
| 322 x |= x >> 8; | |
| 323 x |= x >> 4; | |
| 324 x |= x >> 2; | |
| 325 x |= x >> 1; | |
| 326 | |
| 327 /* Phase 2: calculate number of "1" bits in the word */ | |
| 328 w = (x & 0x55555555) + ((x >> 1) & 0x55555555); | |
| 329 w = (w & 0x33333333) + ((w >> 2) & 0x33333333); | |
| 330 w = w + (w >> 4); | |
| 331 w = (w & 0x000F000F) + ((w >> 8) & 0x000F000F); | |
|
196
9b55e9c69693
Merge from eCos master repository on 2001-11-23-15:32:03-GMT
jlarmour
parents:
194
diff
changeset
|
332 return (cyg_uint32)((w + (w >> 16)) & 0xFF) - 1; |
| 0 | 333 |
| 334 } | |
| 335 | |
| 2 | 336 /*------------------------------------------------------------------------*/ |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
337 /* Delay for some number of useconds. */ |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
338 void |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
339 hal_delay_us(int us) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
340 { |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
341 cyg_uint32 val1, val2; |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
342 int diff; |
|
184
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
343 long usticks; |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
344 long ticks; |
|
184
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
345 |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
346 // Calculate the number of counter register ticks per microsecond. |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
347 |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
348 usticks = (CYGNUM_HAL_RTC_PERIOD * CYGNUM_HAL_RTC_DENOMINATOR) / 1000000; |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
349 |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
350 // Make sure that the value is not zero. This will only happen if the |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
351 // CPU is running at < 2MHz. |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
352 if( usticks == 0 ) usticks = 1; |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
353 |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
354 while( us > 0 ) |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
355 { |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
356 int us1 = us; |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
357 |
|
184
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
358 // Wait in bursts of less than 10000us to avoid any overflow |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
359 // problems in the multiply. |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
360 if( us1 > 10000 ) |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
361 us1 = 10000; |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
362 |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
363 us -= us1; |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
364 |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
365 ticks = us1 * usticks; |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
366 |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
367 asm volatile("mfc0 %0,$9;" : "=r"(val1)); |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
368 while (ticks > 0) { |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
369 do { |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
370 asm volatile("mfc0 %0,$9;" : "=r"(val2)); |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
371 } while (val1 == val2); |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
372 diff = val2 - val1; |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
373 if (diff < 0) diff += CYGNUM_HAL_RTC_PERIOD; |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
374 ticks -= diff; |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
375 val1 = val2; |
|
022f1e506033
Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
165
diff
changeset
|
376 } |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
377 } |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
378 } |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
379 |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
130
diff
changeset
|
380 /*------------------------------------------------------------------------*/ |
|
198
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
381 |
|
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
382 void hal_arch_program_new_stack(void *_func) |
|
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
383 { |
|
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
384 externC void hal_program_new_stack( void *func, CYG_ADDRESS addr); |
|
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
385 hal_program_new_stack( (void *)_func, |
|
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
386 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - sizeof(CYG_ADDRESS)) & ~15 ); |
|
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
387 } |
|
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
388 |
|
ea3f0bd33a73
Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents:
196
diff
changeset
|
389 /*------------------------------------------------------------------------*/ |
| 2 | 390 /* Idle thread action */ |
| 0 | 391 |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
392 #include <cyg/infra/diag.h> |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
393 |
| 0 | 394 void hal_idle_thread_action( cyg_uint32 count ) |
| 395 { | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
396 #if 0 //def CYGPKG_HAL_MIPS_SIM |
| 0 | 397 if( (count % 1000) == 0 ) |
| 398 { | |
| 399 // This code causes a fake interrupt. | |
| 400 asm volatile ( | |
| 401 "xor $24,$24,$24;" | |
| 402 "mtc0 $24,$13;" | |
| 403 "lui $25,%%hi(1f);" | |
| 404 "ori $25,$25,%%lo(1f);" | |
| 405 "j other_vector;" | |
| 406 "nop;" | |
| 407 "1:" | |
| 408 : | |
| 409 : | |
| 410 : "t8", "t9" | |
| 411 ); | |
| 412 } | |
| 413 #endif | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
414 #if 0 //def CYGPKG_HAL_MIPS_TX39_JMR3904 |
| 0 | 415 |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
416 if( (count % 100000 ) == 0 ) |
| 0 | 417 { |
| 418 // 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
|
419 cyg_uint32 sr = 0, cr = 0, ctr = 0, cpr = 0; |
| 0 | 420 // HAL_CLOCK_READ( &tval ); |
| 421 // HAL_READ_UINT32( 0xFFFFC000, isr ); | |
| 422 // HAL_READ_UINT32( 0xFFFFC004, imr ); | |
| 423 // HAL_READ_UINT32( 0xFFFFC01C, ilr ); | |
| 424 // CYG_TRACE2(1, "Timer value, ISR ",tval, isr); | |
| 425 // CYG_TRACE2(1, "IMR ILR0 ", imr, ilr); | |
| 426 | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
427 // asm volatile ( |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
428 // "mfc0 %0,$12;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
429 // "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
430 // "mfc0 %1,$13;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
431 // "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
432 // "mfc0 %2,$9;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
433 // "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
434 // "mfc0 %3,$11;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
435 // "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
436 // : "=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
|
437 // ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
438 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
439 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
440 // diag_printf("Status %08x ", sr ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
441 // diag_printf("Cause %08x ", cr ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
442 // diag_printf("Counter %08x ", ctr ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
443 // 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
|
444 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
445 #if 0 |
| 0 | 446 asm volatile ( |
| 447 "mfc0 %0,$12;" | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
448 "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
449 : "=r"(sr) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
450 ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
451 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
|
452 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
453 asm volatile ( |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
454 "mfc0 %0,$13;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
455 "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
456 : "=r"(cr) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
457 ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
458 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
|
459 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
460 asm volatile ( |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
461 "mfc0 %0,$9;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
462 "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
463 : "=r"(ctr) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
464 ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
465 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
|
466 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
467 asm volatile ( |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
468 "mfc0 %0,$11;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
469 "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
470 : "=r"(cpr) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
471 ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
472 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
|
473 diag_write_string( "\n" ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
474 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
475 #endif |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
476 #if 1 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
477 asm volatile ( |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
478 "mfc0 %0,$12;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
479 "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
480 : "=r"(sr) |
| 0 | 481 ); |
| 482 | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
483 asm volatile ( |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
484 "mfc0 %0,$13;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
485 "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
486 : "=r"(cr) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
487 ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
488 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
489 CYG_INSTRUMENT_USER( 1, sr, cr ); |
| 0 | 490 |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
491 asm volatile ( |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
492 "mfc0 %0,$9;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
493 "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
494 : "=r"(ctr) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
495 ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
496 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
497 asm volatile ( |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
498 "mfc0 %0,$11;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
499 "nop; nop; nop;" |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
500 : "=r"(cpr) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
501 ); |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
502 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
503 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
|
504 #endif |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
505 |
| 0 | 506 // if( count == 4 ) |
| 507 // { | |
| 508 // HAL_ENABLE_INTERRUPTS(); | |
| 509 // } | |
| 510 | |
| 511 // if( count >= 10 ) | |
| 512 // for(;;); | |
| 513 } | |
| 514 #endif | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
515 #if 0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
516 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
517 static CYG_WORD32 istat[3] = { 0xffffffff,0xffffffff,0xffffffff }; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
518 int i; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
519 for( i = 0; i < 3; i++ ) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
520 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
521 CYG_WORD32 reg, sr; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
522 HAL_READ_UINT32( CYGHWR_HAL_MIPS_VRC4373_INTC_STAT0 + i * CYGHWR_HAL_MIPS_VRC4373_INTC_MASK_OFF, reg ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
523 if( reg != istat[i] ) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
524 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
525 hal_diag_ai_write_char('~'); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
526 hal_diag_ai_write_char('0'+i); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
527 hal_diag_ai_write_hex8( reg ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
528 istat[i] = reg; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
529 HAL_READ_UINT32( CYGHWR_HAL_MIPS_VRC4373_INTC_MASK0 + i * CYGHWR_HAL_MIPS_VRC4373_INTC_MASK_OFF, reg ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
530 hal_diag_ai_write_char('.'); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
531 hal_diag_ai_write_hex8( reg ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
532 #if 0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
533 asm volatile ( |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
534 "mfc0 %0,$12;" |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
535 "nop; nop; nop;" |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
536 : "=r"(sr) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
537 ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
538 hal_diag_ai_write_char('.'); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
539 hal_diag_ai_write_hex8( sr ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
540 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
541 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
542 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
543 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
544 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
545 static CYG_WORD32 old_pins = 0; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
546 CYG_WORD32 reg; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
547 HAL_READ_UINT32( CYGHWR_HAL_MIPS_VRC4373_INTC_PINS, reg ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
548 if( reg != old_pins ) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
549 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
550 hal_diag_ai_write_char('%'); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
551 hal_diag_ai_write_hex8( reg ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
552 old_pins = reg; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
553 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
554 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
555 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
556 #if 0 //def CYGPKG_HAL_MIPS_VR4300_VRC4373 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
557 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
558 // Wiggle one of the leds to show we are running |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
559 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
560 if( (count % 50000 ) == 0 ) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
561 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
562 cyg_uint8 lr; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
563 { int i; for( i = 0; i < 200; i++ ); } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
564 HAL_READ_UINT8( 0xc2000008, lr ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
565 lr ^= 2; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
566 { int i; for( i = 0; i < 200; i++ ); } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
567 HAL_WRITE_UINT8( 0xc2000008, lr ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
568 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
569 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
570 #endif |
| 0 | 571 } |
| 572 | |
| 2 | 573 /*------------------------------------------------------------------------*/ |
| 574 /* End of hal_misc.c */ |
