1 #ifndef CYGONCE_HAL_VAR_INTR_H
2 #define CYGONCE_HAL_VAR_INTR_H
4 //==========================================================================
8 // AM33 Interrupt and clock support
10 //==========================================================================
11 //####ECOSGPLCOPYRIGHTBEGIN####
12 // -------------------------------------------
13 // This file is part of eCos, the Embedded Configurable Operating System.
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
16 // eCos is free software; you can redistribute it and/or modify it under
17 // the terms of the GNU General Public License as published by the Free
18 // Software Foundation; either version 2 or (at your option) any later version.
20 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
21 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
25 // You should have received a copy of the GNU General Public License along
26 // with eCos; if not, write to the Free Software Foundation, Inc.,
27 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
29 // As a special exception, if other files instantiate templates or use macros
30 // or inline functions from this file, or you compile this file and link it
31 // with other works to produce a work based on this file, this file does not
32 // by itself cause the resulting work to be covered by the GNU General Public
33 // License. However the source code for this file must still be made available
34 // in accordance with section (3) of the GNU General Public License.
36 // This exception does not invalidate any other reasons why a work based on
37 // this file might be covered by the GNU General Public License.
39 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
40 // at http://sources.redhat.com/ecos/ecos-license/
41 // -------------------------------------------
42 //####ECOSGPLCOPYRIGHTEND####
43 //==========================================================================
44 //#####DESCRIPTIONBEGIN####
47 // Contributors: nickg, jskov,
48 // gthomas, jlarmour, dmoseley
50 // Purpose: VR4300 Interrupt support
51 // Description: The macros defined here provide the HAL APIs for handling
52 // interrupts and the clock for AM33 variants of the MN10300
56 // #include <cyg/hal/var_intr.h>
60 //####DESCRIPTIONEND####
62 //==========================================================================
64 #include <pkgconf/hal.h>
66 #include <cyg/infra/cyg_type.h>
68 #include <cyg/hal/plf_intr.h>
70 //--------------------------------------------------------------------------
72 // The MN10300 has a somewhat complex interrupt structure. Besides the
73 // reset and NMI vectors there are seven maskable interrupt vectors
74 // which must point to code in the 64k starting at 0x40000000. There
75 // are also 25 Interrupt control groups, each of which can have 4
76 // interrupt lines attached, for a theoretical total of 100 interrupts
77 // (!). Some of these are dedicated to specific devices, other to
78 // external pins, and others are not connected to anything, resulting
79 // in only 45 that can actually be delivered. Each control group may
80 // be assigned one of seven interrupt levels, and is delivered to the
81 // corresponding vector. Software can then use a register to determine
82 // the delivering group and detect from there which interrupt has been
85 // The approach we will adopt at present is for the code attached to
86 // each vector to save state and jump via a table to a VSR. The
87 // default VSR will fully decode the delivered interrupt into a table
88 // of isr/data/object entries. VSR replacement will operate on the
89 // first level indirection table rather than the hardware
90 // vectors. This is the fastest mechanism, however it needs 100*3*4 +
91 // 7*4 = 1228 bytes for the tables.
94 //--------------------------------------------------------------------------
97 // The level-specific hardware vectors
98 // These correspond to VSRs and are the values to use for HAL_VSR_GET/SET
99 #define CYGNUM_HAL_VECTOR_0 0
100 #define CYGNUM_HAL_VECTOR_1 1
101 #define CYGNUM_HAL_VECTOR_2 2
102 #define CYGNUM_HAL_VECTOR_3 3
103 #define CYGNUM_HAL_VECTOR_4 4
104 #define CYGNUM_HAL_VECTOR_5 5
105 #define CYGNUM_HAL_VECTOR_6 6
106 #define CYGNUM_HAL_VECTOR_NMI_ENTRY 7
107 #define CYGNUM_HAL_VECTOR_TRAP 8
108 #define CYGNUM_HAL_VECTOR_NMI 9
109 #define CYGNUM_HAL_VECTOR_WATCHDOG 10
110 #define CYGNUM_HAL_VECTOR_SYSTEM_ERROR 11
111 #define CYGNUM_HAL_VECTOR_JTAG 12
112 #define CYGNUM_HAL_VECTOR_ISTEP 13
113 #define CYGNUM_HAL_VECTOR_MISSA 14
114 #define CYGNUM_HAL_VECTOR_UNIMP 15
115 #define CYGNUM_HAL_VECTOR_PIEXE 16
116 #define CYGNUM_HAL_VECTOR_MEMERR 17
117 #define CYGNUM_HAL_VECTOR_IBREAK 18
118 #define CYGNUM_HAL_VECTOR_DBSRL 19
119 #define CYGNUM_HAL_VECTOR_PERIDB 20
120 #define CYGNUM_HAL_VECTOR_EXUNIMP 21
121 #define CYGNUM_HAL_VECTOR_OBREAK 22
122 #define CYGNUM_HAL_VECTOR_PRIV 23
123 #define CYGNUM_HAL_VECTOR_BUSERR 24
124 #define CYGNUM_HAL_VECTOR_DBFLT 25
125 #define CYGNUM_HAL_VECTOR_UNUSED_1 26
126 #define CYGNUM_HAL_VECTOR_UNUSED_2 27
129 #define CYGNUM_HAL_VSR_MIN 0
130 #define CYGNUM_HAL_VSR_MAX 27
131 #define CYGNUM_HAL_VSR_COUNT 28
133 // Exception numbers. These are the values used when passed out to an
134 // external exception handler using cyg_hal_deliver_exception()
136 #define CYGNUM_HAL_EXCEPTION_NMI CYGNUM_HAL_VECTOR_NMI
137 #define CYGNUM_HAL_EXCEPTION_WATCHDOG CYGNUM_HAL_VECTOR_WATCHDOG
138 #define CYGNUM_HAL_EXCEPTION_SYSTEM_ERROR CYGNUM_HAL_VECTOR_SYSTEM_ERROR
139 #define CYGNUM_HAL_EXCEPTION_TRAP CYGNUM_HAL_VECTOR_TRAP
140 #define CYGNUM_HAL_EXCEPTION_JTAG CYGNUM_HAL_VECTOR_JTAG
141 #define CYGNUM_HAL_EXCEPTION_ISTEP CYGNUM_HAL_VECTOR_ISTEP
142 #define CYGNUM_HAL_EXCEPTION_MISSA CYGNUM_HAL_VECTOR_MISSA
143 #define CYGNUM_HAL_EXCEPTION_UNIMP CYGNUM_HAL_VECTOR_UNIMP
144 #define CYGNUM_HAL_EXCEPTION_PIEXE CYGNUM_HAL_VECTOR_PIEXE
145 #define CYGNUM_HAL_EXCEPTION_MEMERR CYGNUM_HAL_VECTOR_MEMERR
146 #define CYGNUM_HAL_EXCEPTION_IBREAK CYGNUM_HAL_VECTOR_IBREAK
147 #define CYGNUM_HAL_EXCEPTION_DBSRL CYGNUM_HAL_VECTOR_DBSRL
148 #define CYGNUM_HAL_EXCEPTION_PERIDB CYGNUM_HAL_VECTOR_PERIDB
149 #define CYGNUM_HAL_EXCEPTION_EXUNIMP CYGNUM_HAL_VECTOR_EXUNIMP
150 #define CYGNUM_HAL_EXCEPTION_OBREAK CYGNUM_HAL_VECTOR_OBREAK
151 #define CYGNUM_HAL_EXCEPTION_PRIV CYGNUM_HAL_VECTOR_PRIV
152 #define CYGNUM_HAL_EXCEPTION_BUSERR CYGNUM_HAL_VECTOR_BUSERR
153 #define CYGNUM_HAL_EXCEPTION_DBLFLT CYGNUM_HAL_VECTOR_DBLFLT
156 #define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_VSR_MIN
157 #define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_VSR_MAX
158 #define CYGNUM_HAL_EXCEPTION_COUNT CYGNUM_HAL_VSR_COUNT
160 #define CYGNUM_HAL_EXCEPTION_INTERRUPT CYGNUM_HAL_EXCEPTION_SYSTEM_ERROR
161 #define CYGNUM_HAL_VECTOR_BREAKPOINT CYGNUM_HAL_EXCEPTION_SYSTEM_ERROR
163 // Canonical names for various exceptions. These are used
164 // by generic exception handling code to make sense of
165 // excptions that have been delivered.
167 #define CYGNUM_HAL_EXCEPTION_DATA_ACCESS \
168 CYGNUM_HAL_EXCEPTION_BUSERR
169 #define CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS \
170 CYGNUM_HAL_EXCEPTION_MISSA
171 #define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION \
172 CYGNUM_HAL_EXCEPTION_UNIMP
175 // The decoded interrupts
177 #define CYGNUM_HAL_INTERRUPT_NMIRQ 0
178 #define CYGNUM_HAL_INTERRUPT_WATCHDOG 1
179 #define CYGNUM_HAL_INTERRUPT_SYSTEM_ERROR 2
180 #define CYGNUM_HAL_INTERRUPT_RESERVED_3 3
182 #define CYGNUM_HAL_INTERRUPT_RESERVED_4 4
183 #define CYGNUM_HAL_INTERRUPT_RESERVED_5 5
184 #define CYGNUM_HAL_INTERRUPT_RESERVED_6 6
185 #define CYGNUM_HAL_INTERRUPT_RESERVED_7 7
187 #define CYGNUM_HAL_INTERRUPT_TIMER_0 8
188 #define CYGNUM_HAL_INTERRUPT_RESERVED_9 9
189 #define CYGNUM_HAL_INTERRUPT_RESERVED_10 10
190 #define CYGNUM_HAL_INTERRUPT_RESERVED_11 11
192 #define CYGNUM_HAL_INTERRUPT_TIMER_1 12
193 #define CYGNUM_HAL_INTERRUPT_RESERVED_13 13
194 #define CYGNUM_HAL_INTERRUPT_RESERVED_14 14
195 #define CYGNUM_HAL_INTERRUPT_RESERVED_15 15
197 #define CYGNUM_HAL_INTERRUPT_TIMER_2 16
198 #define CYGNUM_HAL_INTERRUPT_RESERVED_17 17
199 #define CYGNUM_HAL_INTERRUPT_RESERVED_18 18
200 #define CYGNUM_HAL_INTERRUPT_RESERVED_19 19
202 #define CYGNUM_HAL_INTERRUPT_TIMER_3 20
203 #define CYGNUM_HAL_INTERRUPT_RESERVED_21 21
204 #define CYGNUM_HAL_INTERRUPT_RESERVED_22 22
205 #define CYGNUM_HAL_INTERRUPT_RESERVED_23 23
207 #define CYGNUM_HAL_INTERRUPT_TIMER_4 24
208 #define CYGNUM_HAL_INTERRUPT_RESERVED_25 25
209 #define CYGNUM_HAL_INTERRUPT_RESERVED_26 26
210 #define CYGNUM_HAL_INTERRUPT_RESERVED_27 27
212 #define CYGNUM_HAL_INTERRUPT_TIMER_5 28
213 #define CYGNUM_HAL_INTERRUPT_RESERVED_29 29
214 #define CYGNUM_HAL_INTERRUPT_RESERVED_30 30
215 #define CYGNUM_HAL_INTERRUPT_RESERVED_31 31
217 #define CYGNUM_HAL_INTERRUPT_TIMER_6 32
218 #define CYGNUM_HAL_INTERRUPT_RESERVED_33 33
219 #define CYGNUM_HAL_INTERRUPT_RESERVED_34 34
220 #define CYGNUM_HAL_INTERRUPT_RESERVED_35 35
222 #define CYGNUM_HAL_INTERRUPT_TIMER_6_COMPARE_A 36
223 #define CYGNUM_HAL_INTERRUPT_RESERVED_37 37
224 #define CYGNUM_HAL_INTERRUPT_RESERVED_38 38
225 #define CYGNUM_HAL_INTERRUPT_RESERVED_39 39
227 #define CYGNUM_HAL_INTERRUPT_TIMER_6_COMPARE_B 40
228 #define CYGNUM_HAL_INTERRUPT_RESERVED_41 41
229 #define CYGNUM_HAL_INTERRUPT_RESERVED_42 42
230 #define CYGNUM_HAL_INTERRUPT_RESERVED_43 43
232 #define CYGNUM_HAL_INTERRUPT_TIMER_7 44
233 #define CYGNUM_HAL_INTERRUPT_RESERVED_45 45
234 #define CYGNUM_HAL_INTERRUPT_RESERVED_46 46
235 #define CYGNUM_HAL_INTERRUPT_RESERVED_47 47
237 #define CYGNUM_HAL_INTERRUPT_TIMER_8 48
238 #define CYGNUM_HAL_INTERRUPT_RESERVED_49 49
239 #define CYGNUM_HAL_INTERRUPT_RESERVED_50 50
240 #define CYGNUM_HAL_INTERRUPT_RESERVED_51 51
242 #define CYGNUM_HAL_INTERRUPT_TIMER_9 52
243 #define CYGNUM_HAL_INTERRUPT_RESERVED_53 53
244 #define CYGNUM_HAL_INTERRUPT_RESERVED_54 54
245 #define CYGNUM_HAL_INTERRUPT_RESERVED_55 55
247 #define CYGNUM_HAL_INTERRUPT_TIMER_10 56
248 #define CYGNUM_HAL_INTERRUPT_RESERVED_57 57
249 #define CYGNUM_HAL_INTERRUPT_RESERVED_58 58
250 #define CYGNUM_HAL_INTERRUPT_RESERVED_59 59
252 #define CYGNUM_HAL_INTERRUPT_TIMER_11 60
253 #define CYGNUM_HAL_INTERRUPT_RESERVED_61 61
254 #define CYGNUM_HAL_INTERRUPT_RESERVED_62 62
255 #define CYGNUM_HAL_INTERRUPT_RESERVED_63 63
257 #define CYGNUM_HAL_INTERRUPT_DMA0 64
258 #define CYGNUM_HAL_INTERRUPT_RESERVED_65 65
259 #define CYGNUM_HAL_INTERRUPT_RESERVED_66 66
260 #define CYGNUM_HAL_INTERRUPT_RESERVED_67 67
262 #define CYGNUM_HAL_INTERRUPT_DMA1 68
263 #define CYGNUM_HAL_INTERRUPT_RESERVED_69 69
264 #define CYGNUM_HAL_INTERRUPT_RESERVED_70 70
265 #define CYGNUM_HAL_INTERRUPT_RESERVED_71 71
267 #define CYGNUM_HAL_INTERRUPT_DMA2 72
268 #define CYGNUM_HAL_INTERRUPT_RESERVED_73 73
269 #define CYGNUM_HAL_INTERRUPT_RESERVED_74 74
270 #define CYGNUM_HAL_INTERRUPT_RESERVED_75 75
272 #define CYGNUM_HAL_INTERRUPT_DMA3 76
273 #define CYGNUM_HAL_INTERRUPT_RESERVED_77 77
274 #define CYGNUM_HAL_INTERRUPT_RESERVED_78 78
275 #define CYGNUM_HAL_INTERRUPT_RESERVED_79 79
277 #define CYGNUM_HAL_INTERRUPT_SERIAL_0_RX 80
278 #define CYGNUM_HAL_INTERRUPT_RESERVED_81 81
279 #define CYGNUM_HAL_INTERRUPT_RESERVED_82 82
280 #define CYGNUM_HAL_INTERRUPT_RESERVED_83 83
282 #define CYGNUM_HAL_INTERRUPT_SERIAL_0_TX 84
283 #define CYGNUM_HAL_INTERRUPT_RESERVED_85 85
284 #define CYGNUM_HAL_INTERRUPT_RESERVED_86 86
285 #define CYGNUM_HAL_INTERRUPT_RESERVED_87 87
287 #define CYGNUM_HAL_INTERRUPT_SERIAL_1_RX 88
288 #define CYGNUM_HAL_INTERRUPT_RESERVED_89 89
289 #define CYGNUM_HAL_INTERRUPT_RESERVED_90 90
290 #define CYGNUM_HAL_INTERRUPT_RESERVED_91 91
292 #define CYGNUM_HAL_INTERRUPT_SERIAL_1_TX 92
293 #define CYGNUM_HAL_INTERRUPT_RESERVED_93 93
294 #define CYGNUM_HAL_INTERRUPT_RESERVED_94 94
295 #define CYGNUM_HAL_INTERRUPT_RESERVED_95 95
297 #define CYGNUM_HAL_INTERRUPT_SERIAL_2_RX 96
298 #define CYGNUM_HAL_INTERRUPT_RESERVED_97 97
299 #define CYGNUM_HAL_INTERRUPT_RESERVED_98 98
300 #define CYGNUM_HAL_INTERRUPT_RESERVED_99 99
302 #define CYGNUM_HAL_INTERRUPT_SERIAL_2_TX 100
303 #define CYGNUM_HAL_INTERRUPT_RESERVED_101 101
304 #define CYGNUM_HAL_INTERRUPT_RESERVED_102 102
305 #define CYGNUM_HAL_INTERRUPT_RESERVED_103 103
307 #define CYGNUM_HAL_INTERRUPT_RESERVED_104 104
308 #define CYGNUM_HAL_INTERRUPT_RESERVED_105 105
309 #define CYGNUM_HAL_INTERRUPT_RESERVED_106 106
310 #define CYGNUM_HAL_INTERRUPT_RESERVED_107 107
312 #define CYGNUM_HAL_INTERRUPT_TD 108
313 #define CYGNUM_HAL_INTERRUPT_RESERVED_109 109
314 #define CYGNUM_HAL_INTERRUPT_RESERVED_110 110
315 #define CYGNUM_HAL_INTERRUPT_RESERVED_111 111
317 #define CYGNUM_HAL_INTERRUPT_AV 112
318 #define CYGNUM_HAL_INTERRUPT_RESERVED_113 113
319 #define CYGNUM_HAL_INTERRUPT_RESERVED_114 114
320 #define CYGNUM_HAL_INTERRUPT_RESERVED_115 115
322 #define CYGNUM_HAL_INTERRUPT_TD_DMA 116
323 #define CYGNUM_HAL_INTERRUPT_RESERVED_117 117
324 #define CYGNUM_HAL_INTERRUPT_RESERVED_118 118
325 #define CYGNUM_HAL_INTERRUPT_RESERVED_119 119
327 #define CYGNUM_HAL_INTERRUPT_IC_IF_0 120
328 #define CYGNUM_HAL_INTERRUPT_RESERVED_121 121
329 #define CYGNUM_HAL_INTERRUPT_RESERVED_122 122
330 #define CYGNUM_HAL_INTERRUPT_RESERVED_123 123
332 #define CYGNUM_HAL_INTERRUPT_IC_IF_1 124
333 #define CYGNUM_HAL_INTERRUPT_RESERVED_125 125
334 #define CYGNUM_HAL_INTERRUPT_RESERVED_126 126
335 #define CYGNUM_HAL_INTERRUPT_RESERVED_127 127
337 #define CYGNUM_HAL_INTERRUPT_I2C_0 128
338 #define CYGNUM_HAL_INTERRUPT_RESERVED_129 129
339 #define CYGNUM_HAL_INTERRUPT_RESERVED_130 130
340 #define CYGNUM_HAL_INTERRUPT_RESERVED_131 131
342 #define CYGNUM_HAL_INTERRUPT_I2C_1 132
343 #define CYGNUM_HAL_INTERRUPT_RESERVED_133 133
344 #define CYGNUM_HAL_INTERRUPT_RESERVED_134 134
345 #define CYGNUM_HAL_INTERRUPT_RESERVED_135 135
347 #define CYGNUM_HAL_INTERRUPT_KEY 136
348 #define CYGNUM_HAL_INTERRUPT_RESERVED_137 137
349 #define CYGNUM_HAL_INTERRUPT_RESERVED_138 138
350 #define CYGNUM_HAL_INTERRUPT_RESERVED_139 139
352 #define CYGNUM_HAL_INTERRUPT_IR_INPUT_0 140
353 #define CYGNUM_HAL_INTERRUPT_RESERVED_141 141
354 #define CYGNUM_HAL_INTERRUPT_RESERVED_142 142
355 #define CYGNUM_HAL_INTERRUPT_RESERVED_143 143
357 #define CYGNUM_HAL_INTERRUPT_IR_INPUT_1 144
358 #define CYGNUM_HAL_INTERRUPT_RESERVED_145 145
359 #define CYGNUM_HAL_INTERRUPT_RESERVED_146 146
360 #define CYGNUM_HAL_INTERRUPT_RESERVED_147 147
362 #define CYGNUM_HAL_INTERRUPT_IR_OUTPUT 148
363 #define CYGNUM_HAL_INTERRUPT_RESERVED_149 149
364 #define CYGNUM_HAL_INTERRUPT_RESERVED_150 150
365 #define CYGNUM_HAL_INTERRUPT_RESERVED_151 151
367 #define CYGNUM_HAL_INTERRUPT_ICAM_0 152
368 #define CYGNUM_HAL_INTERRUPT_RESERVED_153 153
369 #define CYGNUM_HAL_INTERRUPT_RESERVED_154 154
370 #define CYGNUM_HAL_INTERRUPT_RESERVED_155 155
372 #define CYGNUM_HAL_INTERRUPT_ICAM_1 156
373 #define CYGNUM_HAL_INTERRUPT_RESERVED_157 157
374 #define CYGNUM_HAL_INTERRUPT_RESERVED_158 158
375 #define CYGNUM_HAL_INTERRUPT_RESERVED_159 159
377 #define CYGNUM_HAL_INTERRUPT_AFE 160
378 #define CYGNUM_HAL_INTERRUPT_RESERVED_161 161
379 #define CYGNUM_HAL_INTERRUPT_RESERVED_162 162
380 #define CYGNUM_HAL_INTERRUPT_RESERVED_163 163
382 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_0 164
383 #define CYGNUM_HAL_INTERRUPT_RESERVED_165 165
384 #define CYGNUM_HAL_INTERRUPT_RESERVED_166 166
385 #define CYGNUM_HAL_INTERRUPT_RESERVED_167 167
387 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_1 168
388 #define CYGNUM_HAL_INTERRUPT_RESERVED_169 169
389 #define CYGNUM_HAL_INTERRUPT_RESERVED_170 170
390 #define CYGNUM_HAL_INTERRUPT_RESERVED_171 171
392 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_2 172
393 #define CYGNUM_HAL_INTERRUPT_RESERVED_173 173
394 #define CYGNUM_HAL_INTERRUPT_RESERVED_174 174
395 #define CYGNUM_HAL_INTERRUPT_RESERVED_175 175
397 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_3 176
398 #define CYGNUM_HAL_INTERRUPT_RESERVED_177 177
399 #define CYGNUM_HAL_INTERRUPT_RESERVED_178 178
400 #define CYGNUM_HAL_INTERRUPT_RESERVED_179 179
402 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_4 180
403 #define CYGNUM_HAL_INTERRUPT_RESERVED_181 181
404 #define CYGNUM_HAL_INTERRUPT_RESERVED_182 182
405 #define CYGNUM_HAL_INTERRUPT_RESERVED_183 183
407 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_5 184
408 #define CYGNUM_HAL_INTERRUPT_RESERVED_185 185
409 #define CYGNUM_HAL_INTERRUPT_RESERVED_186 186
410 #define CYGNUM_HAL_INTERRUPT_RESERVED_187 187
412 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_6 188
413 #define CYGNUM_HAL_INTERRUPT_RESERVED_189 189
414 #define CYGNUM_HAL_INTERRUPT_RESERVED_190 190
415 #define CYGNUM_HAL_INTERRUPT_RESERVED_191 191
417 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_7 192
418 #define CYGNUM_HAL_INTERRUPT_RESERVED_193 193
419 #define CYGNUM_HAL_INTERRUPT_RESERVED_194 194
420 #define CYGNUM_HAL_INTERRUPT_RESERVED_195 195
422 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_8 196
423 #define CYGNUM_HAL_INTERRUPT_RESERVED_197 197
424 #define CYGNUM_HAL_INTERRUPT_RESERVED_198 198
425 #define CYGNUM_HAL_INTERRUPT_RESERVED_199 199
427 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_9 200
428 #define CYGNUM_HAL_INTERRUPT_RESERVED_201 201
429 #define CYGNUM_HAL_INTERRUPT_RESERVED_202 202
430 #define CYGNUM_HAL_INTERRUPT_RESERVED_203 203
432 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_10 204
433 #define CYGNUM_HAL_INTERRUPT_RESERVED_205 205
434 #define CYGNUM_HAL_INTERRUPT_RESERVED_206 206
435 #define CYGNUM_HAL_INTERRUPT_RESERVED_207 207
437 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_11 208
438 #define CYGNUM_HAL_INTERRUPT_RESERVED_209 209
439 #define CYGNUM_HAL_INTERRUPT_RESERVED_210 210
440 #define CYGNUM_HAL_INTERRUPT_RESERVED_211 211
442 #define CYGNUM_HAL_INTERRUPT_EXTERNAL_12 212
443 #define CYGNUM_HAL_INTERRUPT_RESERVED_213 213
444 #define CYGNUM_HAL_INTERRUPT_RESERVED_214 214
445 #define CYGNUM_HAL_INTERRUPT_RESERVED_215 215
448 #define CYGNUM_HAL_ISR_MIN 0
449 #define CYGNUM_HAL_ISR_MAX 215
451 #define CYGNUM_HAL_ISR_COUNT (3+((CYGNUM_HAL_ISR_MAX+1)/4))
453 // The vector used by the Real time clock
455 #define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TIMER_5
457 //--------------------------------------------------------------------------
458 // Interrupt vector translation.
460 #if !defined(HAL_TRANSLATE_VECTOR) && !defined(CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN)
462 #define HAL_TRANSLATE_VECTOR(_vector_,_index_) \
463 _index_ = (((_vector_)<=CYGNUM_HAL_INTERRUPT_SYSTEM_ERROR) ? \
465 (((_vector_)>>2)+CYGNUM_HAL_INTERRUPT_RESERVED_3))
469 //--------------------------------------------------------------------------
470 // AM33 specific version of HAL_INTERRUPT_CONFIGURE
472 #define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ ) \
474 if( (_vector_) >= CYGNUM_HAL_INTERRUPT_EXTERNAL_0 ) \
476 cyg_uint32 _v_ = _vector_; \
477 cyg_uint16 _val_ = 0; \
480 /* adjust vector to bit offset in EXTMD */ \
481 _v_ -= CYGNUM_HAL_INTERRUPT_EXTERNAL_0; \
484 /* set bits according to requirements */ \
485 if( _up_ ) _val_ |= 1; \
486 if( !(_level_) ) _val_ |= 2; \
489 _reg_ = *(volatile cyg_uint32 *)&mn10300_interrupt_control[0x200>>1]; \
491 /* clear old value and set new */ \
492 _reg_ &= ~(3<<_v_); \
493 _reg_ |= _val_<<_v_; \
495 /* restore EXTMD */ \
496 *(volatile cyg_uint32 *)&mn10300_interrupt_control[0x200>>1] = _reg_; \
500 #define HAL_INTERRUPT_CONFIGURE_DEFINED
502 //--------------------------------------------------------------------------
503 // Timer control registers.
504 // On the AM33 we use timers 4 and 5
506 #define TIMER4_CR 0xd40030a0
507 #define TIMER4_BR 0xd4003090
508 #define TIMER4_MD 0xd4003080
510 #define TIMER5_CR 0xd40030a2
511 #define TIMER5_BR 0xd4003092
512 #define TIMER5_MD 0xd4003082
514 //--------------------------------------------------------------------------
516 extern cyg_uint32 __hal_period__;
518 #define HAL_CLOCK_INITIALIZE( _period_ ) \
520 volatile cyg_uint16 *timer4_br = (cyg_uint16 *)TIMER4_BR; \
521 volatile cyg_uint8 *timer4_md = (cyg_uint8 *)TIMER4_MD; \
522 volatile cyg_uint16 *timer5_br = (cyg_uint16 *)TIMER5_BR; \
523 volatile cyg_uint8 *timer5_md = (cyg_uint8 *)TIMER5_MD; \
525 /* Set timers 4 and 5 into cascade mode */ \
527 *timer5_br = (_period_)>>16; \
532 *timer4_br = (_period_)&0x0000FFFF; \
537 __hal_period__ = _period_; \
540 #define HAL_CLOCK_RESET( _vector_, _period_ )
542 #define HAL_CLOCK_READ( _pvalue_ ) \
544 volatile cyg_uint16 *timer4_cr = (cyg_uint16 *)TIMER4_CR; \
545 volatile cyg_uint16 *timer5_cr = (cyg_uint16 *)TIMER5_CR; \
550 /* Loop reading the two timers until we can read t5 twice */ \
551 /* with the same value. This avoids getting silly times if */ \
552 /* the timers carry between reading the two regs. */ \
556 } while( t5 != *timer5_cr ); \
558 *(_pvalue_) = __hal_period__ - ((t5<<16) + t4); \
561 externC void hal_delay_us(cyg_int32 usecs);
563 #define HAL_DELAY_US(n) hal_delay_us(n);
566 //--------------------------------------------------------------------------
567 #endif // ifndef CYGONCE_HAL_VAR_INTR_H