Mercurial > ecos-v2_0-branch
annotate packages/hal/mn10300/arch/current/include/hal_intr.h @ 66:bf00f99aec69 ecos-sw-2000-02-02
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
| author | jlarmour |
|---|---|
| date | Wed, 02 Feb 2000 19:57:02 +0000 |
| parents | c38311975d4f |
| children | e0c0827131d1 |
| rev | line source |
|---|---|
| 0 | 1 #ifndef CYGONCE_HAL_HAL_INTR_H |
| 2 #define CYGONCE_HAL_HAL_INTR_H | |
| 2 | 3 //========================================================================== |
| 4 // | |
| 5 // hal_intr.h | |
| 0 | 6 // |
| 2 | 7 // HAL Interrupt and clock support |
| 0 | 8 // |
| 2 | 9 //========================================================================== |
| 0 | 10 //####COPYRIGHTBEGIN#### |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
11 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
12 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
13 // 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
|
14 // 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:
60
diff
changeset
|
15 // 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
|
16 // http://www.redhat.com/ |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
17 // |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
18 // 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:
60
diff
changeset
|
19 // 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:
60
diff
changeset
|
20 // 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:
60
diff
changeset
|
21 // the License. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
22 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
23 // 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:
60
diff
changeset
|
24 // released September 30, 1998. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
25 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
26 // 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:
60
diff
changeset
|
27 // Portions created by Red Hat are |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
28 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
29 // All Rights Reserved. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
30 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
60
diff
changeset
|
31 // |
| 0 | 32 //####COPYRIGHTEND#### |
| 2 | 33 //========================================================================== |
| 0 | 34 //#####DESCRIPTIONBEGIN#### |
| 35 // | |
| 2 | 36 // Author(s): nickg |
| 37 // Contributors: nickg, jlarmour | |
| 38 // Date: 1999-02-18 | |
| 39 // Purpose: Define Interrupt support | |
| 40 // Description: The macros defined here provide the HAL APIs for handling | |
| 41 // interrupts and the clock. | |
| 42 // Usage: | |
| 43 // #include <cyg/hal/hal_intr.h> | |
| 44 // ... | |
| 0 | 45 // |
| 46 // | |
| 47 //####DESCRIPTIONEND#### | |
| 48 // | |
| 2 | 49 //========================================================================== |
| 0 | 50 |
| 51 #include <pkgconf/hal.h> | |
| 52 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
53 #include <cyg/infra/cyg_type.h> |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
54 #include <cyg/hal/hal_io.h> |
| 0 | 55 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
56 #include <cyg/hal/var_intr.h> |
| 0 | 57 |
| 2 | 58 //-------------------------------------------------------------------------- |
| 0 | 59 // Static data used by HAL |
| 60 | |
| 61 // ISR tables | |
| 2 | 62 externC volatile CYG_ADDRESS hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT]; |
| 63 externC volatile CYG_ADDRWORD hal_interrupt_data[CYGNUM_HAL_ISR_COUNT]; | |
| 64 externC volatile CYG_ADDRESS hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT]; | |
| 0 | 65 |
| 66 // VSR table | |
| 2 | 67 externC volatile CYG_ADDRESS hal_vsr_table[CYGNUM_HAL_VSR_COUNT]; |
| 0 | 68 |
| 69 // MN10300 interrupt control registers, mapped by linker script. | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
70 externC volatile cyg_uint16 mn10300_interrupt_control[]; |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
71 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
72 //-------------------------------------------------------------------------- |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
73 // Default ISR |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
74 // The #define is used to test whether this routine exists, and to allow |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
75 // us to call it. |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
76 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
77 externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data); |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
78 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
79 #define HAL_DEFAULT_ISR hal_default_isr |
| 0 | 80 |
| 2 | 81 //-------------------------------------------------------------------------- |
| 0 | 82 // Interrupt state storage |
| 83 | |
| 84 typedef cyg_uint32 CYG_INTERRUPT_STATE; | |
| 85 | |
| 2 | 86 //-------------------------------------------------------------------------- |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
87 |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
88 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
89 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
90 // Routine to execute DSRs using separate interrupt stack |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
91 externC void hal_interrupt_stack_call_pending_DSRs(void); |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
92 #define HAL_INTERRUPT_STACK_CALL_PENDING_DSRS() \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
93 hal_interrupt_stack_call_pending_DSRs() |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
94 |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
95 // these are offered solely for stack usage testing |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
96 // if they are not defined, then there is no interrupt stack. |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
97 #define HAL_INTERRUPT_STACK_BASE cyg_interrupt_stack_base |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
98 #define HAL_INTERRUPT_STACK_TOP cyg_interrupt_stack |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
99 // use them to declare these extern however you want: |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
100 // extern char HAL_INTERRUPT_STACK_BASE[]; |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
101 // extern char HAL_INTERRUPT_STACK_TOP[]; |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
102 // is recommended |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
103 |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
104 #endif |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
105 |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
106 //-------------------------------------------------------------------------- |
| 0 | 107 // Interrupt control macros |
| 108 | |
| 109 #define HAL_DISABLE_INTERRUPTS(_old_) \ | |
| 110 asm volatile ( \ | |
| 111 "mov psw,%0;" \ | |
| 112 "mov 0xF7FF,d0;" \ | |
| 113 "and %0,d0;" \ | |
| 114 "mov d0,psw;" \ | |
| 115 "and 0x0800,%0;" \ | |
| 116 : "=d"(_old_) \ | |
| 117 : \ | |
| 118 : "d0" \ | |
| 119 ); | |
| 120 | |
| 121 #define HAL_ENABLE_INTERRUPTS() \ | |
| 122 asm volatile ( \ | |
| 123 "mov psw,d0;" \ | |
| 124 "or 0x0800,d0;" \ | |
| 125 "mov d0,psw;" \ | |
| 126 : \ | |
| 127 : \ | |
| 128 : "d0" \ | |
| 129 ); | |
| 130 | |
| 131 #define HAL_RESTORE_INTERRUPTS(_old_) \ | |
| 132 asm volatile ( \ | |
| 133 "mov psw,d1;" \ | |
|
60
3836136e7743
Merge from eCos master repository on 1999-12-17-19:44:58-GMT
jlarmour
parents:
30
diff
changeset
|
134 "and 0xF7FF,d1;" \ |
| 0 | 135 "or %0,d1;" \ |
| 136 "mov d1,psw;" \ | |
| 137 : \ | |
| 138 : "d"(_old_) \ | |
| 139 : "d1" \ | |
| 140 ); | |
| 141 | |
| 142 #define HAL_QUERY_INTERRUPTS(_old_) \ | |
| 143 asm volatile ( \ | |
| 144 "mov psw,%0;" \ | |
| 145 "and 0x0800,%0;" \ | |
| 146 : "=d"(_old_) \ | |
| 147 ); | |
| 148 | |
| 2 | 149 //-------------------------------------------------------------------------- |
| 0 | 150 // Translate a vector number into an ISR table index. |
| 151 // If we have chained interrupts we have just a single ISR per priority | |
| 152 // level. On the MN103000 there are several interrupts per controller, | |
| 153 // so we have to decode to one of 100 vectors. On the MN103002 there is | |
| 154 // only one interrupt per controller, so we can have just one ISR per | |
| 155 // controller, except for the NMI vectors which occupy the first 3 slots. | |
| 156 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
157 #ifndef HAL_TRANSLATE_VECTOR |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
158 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
159 #if defined(CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN) |
| 0 | 160 |
| 2 | 161 #define HAL_TRANSLATE_VECTOR(_vector_,_index_) \ |
| 162 { \ | |
| 163 if( _vector_ <= CYGNUM_HAL_INTERRUPT_SYSTEM_ERROR ) \ | |
| 164 (_index_) = (_vector_); \ | |
| 165 else \ | |
| 166 { \ | |
| 167 /* ICRs are 16 bit regs at 32 bit spacing */ \ | |
| 168 cyg_ucount16 _ix_ = ((_vector_)>>2)<<1; \ | |
| 169 \ | |
| 170 /* read the appropriate interrupt control register */ \ | |
| 171 cyg_uint16 _icr_ = mn10300_interrupt_control[_ix_]; \ | |
| 172 \ | |
| 173 /* extract interrupt priority level */ \ | |
| 174 _index_ = CYGNUM_HAL_INTERRUPT_RESERVED_3 + ((_icr_ >> 12) & 0x7); \ | |
| 175 } \ | |
| 0 | 176 } |
| 177 | |
| 178 #else | |
| 179 | |
| 180 #define HAL_TRANSLATE_VECTOR(_vector_,_index_) _index_ = (_vector_) | |
| 181 | |
| 182 #endif | |
| 183 | |
| 184 #endif | |
| 185 | |
| 2 | 186 //-------------------------------------------------------------------------- |
| 0 | 187 // Interrupt and VSR attachment macros |
| 188 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
189 #define HAL_INTERRUPT_IN_USE( _vector_, _state_) \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
190 CYG_MACRO_START \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
191 cyg_uint32 _index_; \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
192 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
193 \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
194 if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)HAL_DEFAULT_ISR ) \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
195 (_state_) = 0; \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
196 else \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
197 (_state_) = 1; \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
198 CYG_MACRO_END |
| 2 | 199 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
200 #define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
201 CYG_MACRO_START \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
202 cyg_uint32 _index_; \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
203 HAL_TRANSLATE_VECTOR(_vector_,_index_); \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
204 \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
205 if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)HAL_DEFAULT_ISR ) \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
206 { \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
207 hal_interrupt_handlers[_index_] = (CYG_ADDRESS)_isr_; \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
208 hal_interrupt_data[_index_] = (CYG_ADDRWORD)_data_; \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
209 hal_interrupt_objects[_index_] = (CYG_ADDRESS)_object_; \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
210 } \ |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
211 CYG_MACRO_END |
| 0 | 212 |
| 213 #define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \ | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
214 CYG_MACRO_START \ |
| 0 | 215 cyg_uint32 _index_; \ |
| 216 HAL_TRANSLATE_VECTOR(_vector_,_index_); \ | |
| 217 \ | |
| 218 if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)_isr_ ) \ | |
| 219 { \ | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
220 hal_interrupt_handlers[_index_] = (CYG_ADDRESS)HAL_DEFAULT_ISR; \ |
| 0 | 221 hal_interrupt_data[_index_] = 0; \ |
| 222 hal_interrupt_objects[_index_] = 0; \ | |
| 223 } \ | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
224 CYG_MACRO_END |
| 0 | 225 |
| 226 #define HAL_VSR_GET( _vector_, _pvsr_ ) \ | |
| 227 *((CYG_ADDRESS *)_pvsr_) = hal_vsr_table[_vector_]; | |
| 228 | |
| 229 | |
| 230 #define HAL_VSR_SET( _vector_, _vsr_, _poldvsr_ ) \ | |
| 231 if( _poldvsr_ != NULL ) \ | |
| 232 *(CYG_ADDRESS *)_poldvsr_ = hal_vsr_table[_vector_]; \ | |
| 233 hal_vsr_table[_vector_] = (CYG_ADDRESS)_vsr_; | |
| 234 | |
| 235 | |
| 2 | 236 //-------------------------------------------------------------------------- |
| 0 | 237 // Interrupt controller access |
| 238 // Read interrupt control registers back after writing to them. This | |
| 239 // ensures that the written value is not sitting in the store buffers | |
| 240 // when interrupts are re-enabled. | |
| 241 #define HAL_INTERRUPT_MASK( _vector_ ) \ | |
| 242 { \ | |
| 243 /* ICRs are 16 bit regs at 32 bit spacing */ \ | |
| 244 cyg_ucount16 _index_ = ((_vector_)>>2)<<1; \ | |
| 245 \ | |
| 246 /* read the appropriate interrupt control register */ \ | |
| 247 cyg_uint16 _icr_ = mn10300_interrupt_control[_index_]; \ | |
| 248 \ | |
| 249 /* clear interrupt enable bit for this vector */ \ | |
| 250 _icr_ &= ~(0x0100<<((_vector_)&3)); \ | |
| 251 \ | |
| 252 /* restore the interrupt control register */ \ | |
| 253 mn10300_interrupt_control[_index_] = _icr_; \ | |
| 254 _icr_ = mn10300_interrupt_control[_index_]; \ | |
| 255 } | |
| 256 | |
| 257 #define HAL_INTERRUPT_UNMASK( _vector_ ) \ | |
| 258 { \ | |
| 259 /* ICRs are 16 bit regs at 32 bit spacing */ \ | |
| 260 cyg_ucount16 _index_ = (_vector_>>2)<<1; \ | |
| 261 \ | |
| 262 /* read the appropriate interrupt control register */ \ | |
| 263 cyg_uint16 _icr_ = mn10300_interrupt_control[_index_]; \ | |
| 264 \ | |
| 265 /* set interrupt enable bit for this vector */ \ | |
| 266 _icr_ |= (0x0100<<(_vector_&3)); \ | |
| 267 \ | |
| 268 /* restore the interrupt control register */ \ | |
| 269 mn10300_interrupt_control[_index_] = _icr_; \ | |
| 270 _icr_ = mn10300_interrupt_control[_index_]; \ | |
| 271 } | |
| 272 | |
| 273 #define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \ | |
| 274 { \ | |
| 275 /* ICRs are 16 bit regs at 32 bit spacing */ \ | |
| 276 cyg_ucount16 _index_ = ((_vector_)>>2)<<1; \ | |
| 277 \ | |
| 278 /* read the appropriate interrupt control register */ \ | |
| 279 cyg_uint16 _icr_ = mn10300_interrupt_control[_index_]; \ | |
| 280 \ | |
| 281 /* clear interrupt request bit for this vector */ \ | |
| 282 _icr_ &= ~(0x0010<<((_vector_)&3)); \ | |
| 283 \ | |
| 284 /* set interrupt detect bit for this vector */ \ | |
| 285 _icr_ |= (0x0001<<((_vector_)&3)); \ | |
| 286 \ | |
| 287 /* restore the interrupt control register */ \ | |
| 288 mn10300_interrupt_control[_index_] = _icr_; \ | |
| 289 _icr_ = mn10300_interrupt_control[_index_]; \ | |
| 290 } | |
| 291 | |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
292 #if !defined(HAL_INTERRUPT_CONFIGURE) |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
293 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
294 #error HAL_INTERRUPT_CONFIGURE not defined by variant |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
295 |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
296 #endif |
| 0 | 297 |
| 298 #define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) \ | |
| 299 { \ | |
| 300 /* ICRs are 16 bit regs at 32 bit spacing */ \ | |
| 301 cyg_ucount16 _index_ = (_vector_>>2)<<1; \ | |
| 302 \ | |
| 303 /* read the appropriate interrupt control register */ \ | |
| 304 cyg_uint16 _icr_ = mn10300_interrupt_control[_index_]; \ | |
| 305 \ | |
| 306 /* set interrupt level for this group of vectors */ \ | |
| 307 _icr_ &= 0x0FFF; \ | |
| 308 _icr_ |= (_level_)<<12; \ | |
| 309 \ | |
| 310 /* restore the interrupt control register */ \ | |
| 311 mn10300_interrupt_control[_index_] = _icr_; \ | |
| 312 _icr_ = mn10300_interrupt_control[_index_]; \ | |
| 313 } | |
| 314 | |
| 2 | 315 //-------------------------------------------------------------------------- |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
316 // Clock control. |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
8
diff
changeset
|
317 // This is almost all handled in the var_intr.h. |
| 2 | 318 |
| 319 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY | |
| 320 #define HAL_CLOCK_LATENCY(_pvalue_) HAL_CLOCK_READ(_pvalue_) | |
| 321 #endif | |
| 322 | |
| 323 //-------------------------------------------------------------------------- | |
| 0 | 324 #endif // ifndef CYGONCE_HAL_HAL_INTR_H |
| 2 | 325 // EOF hal_intr.h |
