00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00063
00064
00065
00066
00067
00068
00069 #include <pkgconf/hal.h>
00070
00071 #include <cyg/infra/cyg_type.h>
00072 #include <cyg/infra/cyg_trac.h>
00073 #include <cyg/infra/cyg_ass.h>
00074 #include <cyg/hal/var_arch.h>
00075 #include <cyg/hal/var_intr.h>
00076 #include <cyg/hal/hal_intr.h>
00077 #include <cyg/hal/hal_io.h>
00078
00079
00080
00081
00084
00085 void hal_variant_init(void)
00086 {
00087
00088 }
00089
00090
00091
00092
00093
00094
00095
00096
00097
00104 typedef struct {
00105 cyg_uint8 prio_reg_no : 5;
00106 cyg_uint8 prio_bit_group : 3;
00107 } int_prio_conf_t;
00108
00109
00110
00111
00112
00113 #define PRIO_14_TO_12 3
00114 #define PRIO_10_TO_08 2
00115 #define PRIO_06_TO_04 1
00116 #define PRIO_02_TO_00 0
00117
00118
00119
00126 static const cyg_uint32 hal_prio_reg_tbl[] =
00127 {
00128 CYGARC_IPRA,
00129 CYGARC_IPRB,
00130 CYGARC_IPRC,
00131 CYGARC_IPRD,
00132 CYGARC_IPRE,
00133 CYGARC_IPRF,
00134 CYGARC_IPRG,
00135 CYGARC_IPRH,
00136 CYGARC_IPRI,
00137 CYGARC_IPRJ,
00138 CYGARC_IPRK,
00139 0
00140 };
00141
00142
00143
00144
00145
00146 #define PRIO_CONF_TBL_ENTRY(_prio_reg_no_, _bit_group_) {(_prio_reg_no_), (_bit_group_)}
00147 #define IPR(_no_) ((_no_) - 'A')
00148 #define IPR_NONE 11 // last entry in hal_prio_reg_tbl
00149
00150
00151
00156 static const int_prio_conf_t hal_int_prio_conf_tbl[CYGNUM_HAL_ISR_COUNT] =
00157 {
00158 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00159 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00160 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00161 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00162 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00163 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00164 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00165 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00166 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00167 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00168 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00169 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00170 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00171 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00172 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00173 PRIO_CONF_TBL_ENTRY(IPR_NONE, 0),
00174 PRIO_CONF_TBL_ENTRY(IPR('A'), PRIO_14_TO_12),
00175 PRIO_CONF_TBL_ENTRY(IPR('A'), PRIO_10_TO_08),
00176 PRIO_CONF_TBL_ENTRY(IPR('A'), PRIO_06_TO_04),
00177 PRIO_CONF_TBL_ENTRY(IPR('A'), PRIO_02_TO_00),
00178 PRIO_CONF_TBL_ENTRY(IPR('B'), PRIO_14_TO_12),
00179 PRIO_CONF_TBL_ENTRY(IPR('B'), PRIO_10_TO_08),
00180 PRIO_CONF_TBL_ENTRY(IPR('B'), PRIO_06_TO_04),
00181 PRIO_CONF_TBL_ENTRY(IPR('B'), PRIO_02_TO_00),
00182 PRIO_CONF_TBL_ENTRY(IPR('C'), PRIO_14_TO_12),
00183 PRIO_CONF_TBL_ENTRY(IPR('C'), PRIO_10_TO_08),
00184 PRIO_CONF_TBL_ENTRY(IPR('C'), PRIO_06_TO_04),
00185 PRIO_CONF_TBL_ENTRY(IPR('C'), PRIO_02_TO_00),
00186 PRIO_CONF_TBL_ENTRY(IPR('D'), PRIO_14_TO_12),
00187 PRIO_CONF_TBL_ENTRY(IPR('D'), PRIO_10_TO_08),
00188 PRIO_CONF_TBL_ENTRY(IPR('D'), PRIO_06_TO_04),
00189 PRIO_CONF_TBL_ENTRY(IPR('D'), PRIO_02_TO_00),
00190
00191
00192
00193
00194 PRIO_CONF_TBL_ENTRY(IPR('E'), PRIO_14_TO_12),
00195 PRIO_CONF_TBL_ENTRY(IPR('E'), PRIO_10_TO_08),
00196 PRIO_CONF_TBL_ENTRY(IPR('E'), PRIO_06_TO_04),
00197 PRIO_CONF_TBL_ENTRY(IPR('E'), PRIO_02_TO_00),
00198 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_14_TO_12),
00199 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_14_TO_12),
00200 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_10_TO_08),
00201 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_10_TO_08),
00202
00203
00204
00205
00206 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_06_TO_04),
00207 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_06_TO_04),
00208 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_06_TO_04),
00209 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_06_TO_04),
00210 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_06_TO_04),
00211 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_06_TO_04),
00212 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_06_TO_04),
00213 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_06_TO_04),
00214
00215
00216
00217
00218 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_02_TO_00),
00219 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_02_TO_00),
00220 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_02_TO_00),
00221 PRIO_CONF_TBL_ENTRY(IPR('F'), PRIO_02_TO_00),
00222
00223
00224
00225
00226 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_14_TO_12),
00227 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_14_TO_12),
00228 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_14_TO_12),
00229 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_14_TO_12),
00230
00231
00232
00233
00234 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_10_TO_08),
00235 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_10_TO_08),
00236 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_10_TO_08),
00237 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_10_TO_08),
00238 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_10_TO_08),
00239 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_10_TO_08),
00240 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_10_TO_08),
00241 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_10_TO_08),
00242
00243
00244
00245
00246 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_06_TO_04),
00247 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_06_TO_04),
00248 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_06_TO_04),
00249 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_06_TO_04),
00250
00251
00252
00253
00254 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_02_TO_00),
00255 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_02_TO_00),
00256 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_02_TO_00),
00257 PRIO_CONF_TBL_ENTRY(IPR('G'), PRIO_02_TO_00),
00258
00259
00260
00261
00262 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_14_TO_12),
00263 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_14_TO_12),
00264 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_14_TO_12),
00265 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_14_TO_12),
00266
00267
00268
00269
00270 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_10_TO_08),
00271 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_10_TO_08),
00272 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_10_TO_08),
00273 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_10_TO_08),
00274
00275
00276
00277
00278 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_06_TO_04),
00279 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_06_TO_04),
00280 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_06_TO_04),
00281 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_06_TO_04),
00282
00283
00284
00285
00286 PRIO_CONF_TBL_ENTRY(IPR('H'), PRIO_02_TO_00),
00287 PRIO_CONF_TBL_ENTRY(IPR('I'), PRIO_14_TO_12),
00288 PRIO_CONF_TBL_ENTRY(IPR('I'), PRIO_10_TO_08),
00289 PRIO_CONF_TBL_ENTRY(IPR('I'), PRIO_06_TO_04),
00290
00291
00292
00293
00294 PRIO_CONF_TBL_ENTRY(IPR('I'), PRIO_02_TO_00),
00295 PRIO_CONF_TBL_ENTRY(IPR('I'), PRIO_02_TO_00),
00296 PRIO_CONF_TBL_ENTRY(IPR('I'), PRIO_02_TO_00),
00297 PRIO_CONF_TBL_ENTRY(IPR('I'), PRIO_02_TO_00),
00298
00299
00300
00301
00302 PRIO_CONF_TBL_ENTRY(IPR('J'), PRIO_14_TO_12),
00303 PRIO_CONF_TBL_ENTRY(IPR('J'), PRIO_14_TO_12),
00304 PRIO_CONF_TBL_ENTRY(IPR('J'), PRIO_14_TO_12),
00305 PRIO_CONF_TBL_ENTRY(IPR('J'), PRIO_14_TO_12),
00306
00307
00308
00309
00310 PRIO_CONF_TBL_ENTRY(IPR('J'), PRIO_10_TO_08),
00311 PRIO_CONF_TBL_ENTRY(IPR('J'), PRIO_10_TO_08),
00312 PRIO_CONF_TBL_ENTRY(IPR('J'), PRIO_10_TO_08),
00313 PRIO_CONF_TBL_ENTRY(IPR('J'), PRIO_10_TO_08),
00314 };
00315
00316
00322 cyg_uint8 hal_int_prio_tbl[CYGNUM_HAL_ISR_COUNT] =
00323 {
00324 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
00325 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
00326 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
00327 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
00328 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
00329 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
00330 7, 7, 7, 7
00331 };
00332
00333
00334
00335
00336
00337
00338
00339
00343 typedef struct
00344 {
00345 cyg_uint32 mask : 8;
00346 cyg_uint32 address : 24;
00347 } int_ackn_t;
00348
00349
00350
00351
00352
00353 #define ACKN_TBL_ENTRY(_int_status_reg_, _mask_) {(_mask_), (_int_status_reg_)}
00354 #define CLR_BIT(_no_) ((cyg_uint8)(~(1 << (_no_))))
00355
00361 const int_ackn_t hal_int_ackn_tbl[CYGNUM_HAL_ISR_COUNT] =
00362 {
00363 ACKN_TBL_ENTRY(0, 0),
00364 ACKN_TBL_ENTRY(0, 0),
00365 ACKN_TBL_ENTRY(0, 0),
00366 ACKN_TBL_ENTRY(0, 0),
00367 ACKN_TBL_ENTRY(0, 0),
00368 ACKN_TBL_ENTRY(0, 0),
00369 ACKN_TBL_ENTRY(0, 0),
00370 ACKN_TBL_ENTRY(0, 0),
00371 ACKN_TBL_ENTRY(0, 0),
00372 ACKN_TBL_ENTRY(0, 0),
00373 ACKN_TBL_ENTRY(0, 0),
00374 ACKN_TBL_ENTRY(0, 0),
00375 ACKN_TBL_ENTRY(0, 0),
00376 ACKN_TBL_ENTRY(0, 0),
00377 ACKN_TBL_ENTRY(0, 0),
00378 ACKN_TBL_ENTRY(0, 0),
00379 ACKN_TBL_ENTRY(CYGARC_ISRL, CLR_BIT(0)),
00380 ACKN_TBL_ENTRY(CYGARC_ISRL, CLR_BIT(1)),
00381 ACKN_TBL_ENTRY(CYGARC_ISRL, CLR_BIT(2)),
00382 ACKN_TBL_ENTRY(CYGARC_ISRL, CLR_BIT(3)),
00383 ACKN_TBL_ENTRY(CYGARC_ISRL, CLR_BIT(4)),
00384 ACKN_TBL_ENTRY(CYGARC_ISRL, CLR_BIT(5)),
00385 ACKN_TBL_ENTRY(CYGARC_ISRL, CLR_BIT(6)),
00386 ACKN_TBL_ENTRY(CYGARC_ISRL, CLR_BIT(7)),
00387 ACKN_TBL_ENTRY(CYGARC_ISRH, CLR_BIT(0)),
00388 ACKN_TBL_ENTRY(CYGARC_ISRH, CLR_BIT(1)),
00389 ACKN_TBL_ENTRY(CYGARC_ISRH, CLR_BIT(2)),
00390 ACKN_TBL_ENTRY(CYGARC_ISRH, CLR_BIT(3)),
00391 ACKN_TBL_ENTRY(CYGARC_ISRH, CLR_BIT(4)),
00392 ACKN_TBL_ENTRY(CYGARC_ISRH, CLR_BIT(5)),
00393 ACKN_TBL_ENTRY(CYGARC_ISRH, CLR_BIT(6)),
00394 ACKN_TBL_ENTRY(CYGARC_ISRH, CLR_BIT(7)),
00395
00396
00397
00398
00399 ACKN_TBL_ENTRY(0, 0),
00400 ACKN_TBL_ENTRY(CYGARC_TCSRR, CLR_BIT(7)),
00401 ACKN_TBL_ENTRY(0, 0),
00402 ACKN_TBL_ENTRY(CYGARC_REFCRH,CLR_BIT(7)),
00403 ACKN_TBL_ENTRY(0, 0),
00404 ACKN_TBL_ENTRY(0, 0),
00405 ACKN_TBL_ENTRY(CYGARC_ADCSR, CLR_BIT(7)),
00406 ACKN_TBL_ENTRY(0, 0),
00407
00408
00409
00410
00411 ACKN_TBL_ENTRY(CYGARC_TSR0, CLR_BIT(0)),
00412 ACKN_TBL_ENTRY(CYGARC_TSR0, CLR_BIT(1)),
00413 ACKN_TBL_ENTRY(CYGARC_TSR0, CLR_BIT(2)),
00414 ACKN_TBL_ENTRY(CYGARC_TSR0, CLR_BIT(3)),
00415 ACKN_TBL_ENTRY(CYGARC_TSR0, CLR_BIT(4)),
00416 ACKN_TBL_ENTRY(0, 0),
00417 ACKN_TBL_ENTRY(0, 0),
00418 ACKN_TBL_ENTRY(0, 0),
00419
00420
00421
00422
00423 ACKN_TBL_ENTRY(CYGARC_TSR1, CLR_BIT(0)),
00424 ACKN_TBL_ENTRY(CYGARC_TSR1, CLR_BIT(1)),
00425 ACKN_TBL_ENTRY(CYGARC_TSR1, CLR_BIT(4)),
00426 ACKN_TBL_ENTRY(CYGARC_TSR1, CLR_BIT(5)),
00427
00428
00429
00430
00431 ACKN_TBL_ENTRY(CYGARC_TSR2, CLR_BIT(0)),
00432 ACKN_TBL_ENTRY(CYGARC_TSR2, CLR_BIT(1)),
00433 ACKN_TBL_ENTRY(CYGARC_TSR2, CLR_BIT(4)),
00434 ACKN_TBL_ENTRY(CYGARC_TSR2, CLR_BIT(5)),
00435
00436
00437
00438
00439 ACKN_TBL_ENTRY(CYGARC_TSR3, CLR_BIT(0)),
00440 ACKN_TBL_ENTRY(CYGARC_TSR3, CLR_BIT(1)),
00441 ACKN_TBL_ENTRY(CYGARC_TSR3, CLR_BIT(2)),
00442 ACKN_TBL_ENTRY(CYGARC_TSR3, CLR_BIT(3)),
00443 ACKN_TBL_ENTRY(CYGARC_TSR3, CLR_BIT(4)),
00444 ACKN_TBL_ENTRY(0, 0),
00445 ACKN_TBL_ENTRY(0, 0),
00446 ACKN_TBL_ENTRY(0, 0),
00447
00448
00449
00450
00451 ACKN_TBL_ENTRY(CYGARC_TSR4, CLR_BIT(0)),
00452 ACKN_TBL_ENTRY(CYGARC_TSR4, CLR_BIT(1)),
00453 ACKN_TBL_ENTRY(CYGARC_TSR4, CLR_BIT(4)),
00454 ACKN_TBL_ENTRY(CYGARC_TSR4, CLR_BIT(5)),
00455
00456
00457
00458
00459 ACKN_TBL_ENTRY(CYGARC_TSR5, CLR_BIT(0)),
00460 ACKN_TBL_ENTRY(CYGARC_TSR5, CLR_BIT(1)),
00461 ACKN_TBL_ENTRY(CYGARC_TSR5, CLR_BIT(4)),
00462 ACKN_TBL_ENTRY(CYGARC_TSR5, CLR_BIT(5)),
00463
00464
00465
00466
00467 ACKN_TBL_ENTRY(CYGARC_8TCSR0,CLR_BIT(6)),
00468 ACKN_TBL_ENTRY(CYGARC_8TCSR0,CLR_BIT(7)),
00469 ACKN_TBL_ENTRY(CYGARC_8TCSR0,CLR_BIT(5)),
00470 ACKN_TBL_ENTRY(0, 0),
00471
00472
00473
00474
00475 ACKN_TBL_ENTRY(CYGARC_8TCSR1,CLR_BIT(6)),
00476 ACKN_TBL_ENTRY(CYGARC_8TCSR1,CLR_BIT(7)),
00477 ACKN_TBL_ENTRY(CYGARC_8TCSR1,CLR_BIT(5)),
00478 ACKN_TBL_ENTRY(0, 0),
00479
00480
00481
00482
00483 ACKN_TBL_ENTRY(CYGARC_DMABCRL, CLR_BIT(4)),
00484 ACKN_TBL_ENTRY(CYGARC_DMABCRL, CLR_BIT(5)),
00485 ACKN_TBL_ENTRY(CYGARC_DMABCRL, CLR_BIT(6)),
00486 ACKN_TBL_ENTRY(CYGARC_DMABCRL, CLR_BIT(7)),
00487
00488
00489
00490
00491 ACKN_TBL_ENTRY(CYGARC_EDMDR0L, CLR_BIT(6)),
00492 ACKN_TBL_ENTRY(CYGARC_EDMDR1L, CLR_BIT(6)),
00493 ACKN_TBL_ENTRY(CYGARC_EDMDR2L, CLR_BIT(6)),
00494 ACKN_TBL_ENTRY(CYGARC_EDMDR3L, CLR_BIT(6)),
00495
00496
00497
00498
00499 ACKN_TBL_ENTRY(CYGARC_SSR0, CLR_BIT(3) & CLR_BIT(4) & CLR_BIT(5)),
00500 ACKN_TBL_ENTRY(CYGARC_SSR0, CLR_BIT(6)),
00501 ACKN_TBL_ENTRY(CYGARC_SSR0, CLR_BIT(7)),
00502 ACKN_TBL_ENTRY(CYGARC_SSR0, CLR_BIT(2)),
00503
00504
00505
00506
00507 ACKN_TBL_ENTRY(CYGARC_SSR1, CLR_BIT(3) & CLR_BIT(4) & CLR_BIT(5)),
00508 ACKN_TBL_ENTRY(CYGARC_SSR1, CLR_BIT(6)),
00509 ACKN_TBL_ENTRY(CYGARC_SSR1, CLR_BIT(7)),
00510 ACKN_TBL_ENTRY(CYGARC_SSR1, CLR_BIT(2)),
00511
00512
00513
00514
00515 ACKN_TBL_ENTRY(CYGARC_SSR2, CLR_BIT(3) & CLR_BIT(4) & CLR_BIT(5)),
00516 ACKN_TBL_ENTRY(CYGARC_SSR2, CLR_BIT(6)),
00517 ACKN_TBL_ENTRY(CYGARC_SSR2, CLR_BIT(7)),
00518 ACKN_TBL_ENTRY(CYGARC_SSR2, CLR_BIT(2))
00519 };
00520
00521
00522
00523
00524
00525
00526
00527
00531 typedef struct
00532 {
00533 cyg_uint32 mask : 8;
00534 cyg_uint32 address : 24;
00535 } int_mask_t;
00536
00537
00538
00539
00540 #define MASK_TBL_ENTRY(_int_en_reg_, _mask_) {(_mask_), (_int_en_reg_)}
00541 #define BIT(_no_) ((_no_))
00542
00543
00544
00545
00546
00547 #define NO_MASK_REG 1
00548
00549
00555 const int_mask_t hal_int_mask_tbl[CYGNUM_HAL_ISR_COUNT] =
00556 {
00557 MASK_TBL_ENTRY(0, 0),
00558 MASK_TBL_ENTRY(0, 0),
00559 MASK_TBL_ENTRY(0, 0),
00560 MASK_TBL_ENTRY(0, 0),
00561 MASK_TBL_ENTRY(0, 0),
00562 MASK_TBL_ENTRY(0, 0),
00563 MASK_TBL_ENTRY(0, 0),
00564 MASK_TBL_ENTRY(NO_MASK_REG, 0),
00565 MASK_TBL_ENTRY(0, 0),
00566 MASK_TBL_ENTRY(0, 0),
00567 MASK_TBL_ENTRY(0, 0),
00568 MASK_TBL_ENTRY(0, 0),
00569 MASK_TBL_ENTRY(0, 0),
00570 MASK_TBL_ENTRY(0, 0),
00571 MASK_TBL_ENTRY(0, 0),
00572 MASK_TBL_ENTRY(0, 0),
00573 MASK_TBL_ENTRY(CYGARC_IERL, BIT(0)),
00574 MASK_TBL_ENTRY(CYGARC_IERL, BIT(1)),
00575 MASK_TBL_ENTRY(CYGARC_IERL, BIT(2)),
00576 MASK_TBL_ENTRY(CYGARC_IERL, BIT(3)),
00577 MASK_TBL_ENTRY(CYGARC_IERL, BIT(4)),
00578 MASK_TBL_ENTRY(CYGARC_IERL, BIT(5)),
00579 MASK_TBL_ENTRY(CYGARC_IERL, BIT(0)),
00580 MASK_TBL_ENTRY(CYGARC_IERL, BIT(0)),
00581 MASK_TBL_ENTRY(CYGARC_IERH, BIT(0)),
00582 MASK_TBL_ENTRY(CYGARC_IERH, BIT(1)),
00583 MASK_TBL_ENTRY(CYGARC_IERH, BIT(2)),
00584 MASK_TBL_ENTRY(CYGARC_IERH, BIT(3)),
00585 MASK_TBL_ENTRY(CYGARC_IERH, BIT(4)),
00586 MASK_TBL_ENTRY(CYGARC_IERH, BIT(5)),
00587 MASK_TBL_ENTRY(CYGARC_IERH, BIT(6)),
00588 MASK_TBL_ENTRY(CYGARC_IERH, BIT(7)),
00589
00590
00591
00592
00593 MASK_TBL_ENTRY(NO_MASK_REG, 0),
00594 MASK_TBL_ENTRY(CYGARC_TCSRW, BIT(5)),
00595 MASK_TBL_ENTRY(0, 0),
00596 MASK_TBL_ENTRY(CYGARC_REFCRH,BIT(6)),
00597 MASK_TBL_ENTRY(0, 0),
00598 MASK_TBL_ENTRY(0, 0),
00599 MASK_TBL_ENTRY(CYGARC_ADCSR, BIT(6)),
00600 MASK_TBL_ENTRY(0, 0),
00601
00602
00603
00604
00605 MASK_TBL_ENTRY(CYGARC_TIER0, BIT(0)),
00606 MASK_TBL_ENTRY(CYGARC_TIER0, BIT(1)),
00607 MASK_TBL_ENTRY(CYGARC_TIER0, BIT(2)),
00608 MASK_TBL_ENTRY(CYGARC_TIER0, BIT(3)),
00609 MASK_TBL_ENTRY(CYGARC_TIER0, BIT(4)),
00610 MASK_TBL_ENTRY(0, 0),
00611 MASK_TBL_ENTRY(0, 0),
00612 MASK_TBL_ENTRY(0, 0),
00613
00614
00615
00616
00617 MASK_TBL_ENTRY(CYGARC_TIER1, BIT(0)),
00618 MASK_TBL_ENTRY(CYGARC_TIER1, BIT(1)),
00619 MASK_TBL_ENTRY(CYGARC_TIER1, BIT(4)),
00620 MASK_TBL_ENTRY(CYGARC_TIER1, BIT(5)),
00621
00622
00623
00624
00625 MASK_TBL_ENTRY(CYGARC_TIER2, BIT(0)),
00626 MASK_TBL_ENTRY(CYGARC_TIER2, BIT(1)),
00627 MASK_TBL_ENTRY(CYGARC_TIER2, BIT(4)),
00628 MASK_TBL_ENTRY(CYGARC_TIER2, BIT(5)),
00629
00630
00631
00632
00633 MASK_TBL_ENTRY(CYGARC_TIER3, BIT(0)),
00634 MASK_TBL_ENTRY(CYGARC_TIER3, BIT(1)),
00635 MASK_TBL_ENTRY(CYGARC_TIER3, BIT(2)),
00636 MASK_TBL_ENTRY(CYGARC_TIER3, BIT(3)),
00637 MASK_TBL_ENTRY(CYGARC_TIER3, BIT(4)),
00638 MASK_TBL_ENTRY(0, 0),
00639 MASK_TBL_ENTRY(0, 0),
00640 MASK_TBL_ENTRY(0, 0),
00641
00642
00643
00644
00645 MASK_TBL_ENTRY(CYGARC_TIER4, BIT(0)),
00646 MASK_TBL_ENTRY(CYGARC_TIER4, BIT(1)),
00647 MASK_TBL_ENTRY(CYGARC_TIER4, BIT(4)),
00648 MASK_TBL_ENTRY(CYGARC_TIER4, BIT(5)),
00649
00650
00651
00652
00653 MASK_TBL_ENTRY(CYGARC_TIER5, BIT(0)),
00654 MASK_TBL_ENTRY(CYGARC_TIER5, BIT(1)),
00655 MASK_TBL_ENTRY(CYGARC_TIER5, BIT(4)),
00656 MASK_TBL_ENTRY(CYGARC_TIER5, BIT(5)),
00657
00658
00659
00660
00661 MASK_TBL_ENTRY(CYGARC_8TCR0, BIT(6)),
00662 MASK_TBL_ENTRY(CYGARC_8TCR0, BIT(7)),
00663 MASK_TBL_ENTRY(CYGARC_8TCR0, BIT(5)),
00664 MASK_TBL_ENTRY(0, 0),
00665
00666
00667
00668
00669 MASK_TBL_ENTRY(CYGARC_8TCR1, BIT(6)),
00670 MASK_TBL_ENTRY(CYGARC_8TCR1, BIT(7)),
00671 MASK_TBL_ENTRY(CYGARC_8TCR1, BIT(5)),
00672 MASK_TBL_ENTRY(0, 0),
00673
00674
00675
00676
00677 MASK_TBL_ENTRY(CYGARC_DMABCRL, BIT(0)),
00678 MASK_TBL_ENTRY(CYGARC_DMABCRL, BIT(1)),
00679 MASK_TBL_ENTRY(CYGARC_DMABCRL, BIT(2)),
00680 MASK_TBL_ENTRY(CYGARC_DMABCRL, BIT(3)),
00681
00682
00683
00684
00685 MASK_TBL_ENTRY(CYGARC_EDMDR0L, BIT(7)),
00686 MASK_TBL_ENTRY(CYGARC_EDMDR1L, BIT(7)),
00687 MASK_TBL_ENTRY(CYGARC_EDMDR2L, BIT(7)),
00688 MASK_TBL_ENTRY(CYGARC_EDMDR3L, BIT(7)),
00689
00690
00691
00692
00693 MASK_TBL_ENTRY(CYGARC_SCR0, BIT(6)),
00694 MASK_TBL_ENTRY(CYGARC_SCR0, BIT(6)),
00695 MASK_TBL_ENTRY(CYGARC_SCR0, BIT(7)),
00696 MASK_TBL_ENTRY(CYGARC_SCR0, BIT(2)),
00697
00698
00699
00700
00701 MASK_TBL_ENTRY(CYGARC_SCR1, BIT(6)),
00702 MASK_TBL_ENTRY(CYGARC_SCR1, BIT(6)),
00703 MASK_TBL_ENTRY(CYGARC_SCR1, BIT(7)),
00704 MASK_TBL_ENTRY(CYGARC_SCR1, BIT(2)),
00705
00706
00707
00708
00709 MASK_TBL_ENTRY(CYGARC_SCR2, BIT(6)),
00710 MASK_TBL_ENTRY(CYGARC_SCR2, BIT(6)),
00711 MASK_TBL_ENTRY(CYGARC_SCR2, BIT(7)),
00712 MASK_TBL_ENTRY(CYGARC_SCR2, BIT(2))
00713 };
00714
00715
00716
00717
00723
00724 void hal_interrupt_set_level(int vector, int level)
00725 {
00726 cyg_uint32 prio_reg;
00727 cyg_uint16 prio_data;
00728 cyg_uint16 mask;
00729 int_prio_conf_t *pint_regs;
00730 static const cyg_uint16 prio_grp_mask_tbl[4] =
00731 {
00732 0x0007, 0x0070, 0x0700, 0x7000
00733 };
00734
00735
00736 if (CYGNUM_HAL_INTERRUPT_NMI == vector)
00737 {
00738 return;
00739 }
00740
00741
00742
00743
00744
00745
00746 CYG_ASSERT(CYGNUM_HAL_INT_PRIO_LOWEST <= level
00747 && CYGNUM_HAL_INT_PRIO_HIGHEST >= level, "invalid interrupt priority level" );
00748
00749 pint_regs = (int_prio_conf_t *)&hal_int_prio_conf_tbl[vector];
00750 prio_reg = hal_prio_reg_tbl[pint_regs->prio_reg_no];
00751
00752
00753
00754
00755 CYG_ASSERT(prio_reg != 0, "This interrupt doesn't support priority settings");
00756
00757
00758
00759
00760 HAL_READ_UINT16(prio_reg, prio_data);
00761 mask = prio_grp_mask_tbl[pint_regs->prio_bit_group];
00762 prio_data &= ~mask;
00763 prio_data |= (level << (pint_regs->prio_bit_group << 2));
00764 HAL_WRITE_UINT16(prio_reg, prio_data);
00765
00766
00767
00768
00769
00770 hal_int_prio_tbl[vector] = level;
00771 }
00772
00773
00774
00775
00789
00790 void hal_interrupt_configure(int vector, int level, int up)
00791 {
00792 #define INT_REQ_LEVEL_LOW 0x00
00793 #define INT_REQ_EDGE_FALLING 0x01
00794 #define INT_REQ_EDGE_RISING 0x10
00795 #define INT_REQ_EDGE_BOTH 0x11
00796 cyg_uint16 reg_data;
00797 cyg_uint16 mask;
00798 cyg_uint32 iscr;
00799 cyg_uint8 index;
00800 cyg_uint8 int_req_conf;
00801
00802
00803
00804
00805
00806 HAL_TRANSLATE_VECTOR(vector, index);
00807 CYG_ASSERT(!(up && level), "Cannot trigger on high level!");
00808 CYG_ASSERT((CYGNUM_HAL_INTERRUPT_EXTERNAL_0 <= vector
00809 && CYGNUM_HAL_INTERRUPT_EXTERNAL_15 >= vector)
00810 || CYGNUM_HAL_INTERRUPT_NMI, "only external interrupts and NMI are configurable" );
00811 CYG_ASSERT(!(level && (vector == CYGNUM_HAL_INTERRUPT_NMI)), "NMI cannot trigger on level - only rising or falling edge");
00812
00813
00814
00815
00816 if (CYGNUM_HAL_INTERRUPT_NMI == vector)
00817 {
00818 HAL_READ_UINT8(CYGARC_INTCR, reg_data);
00819 if (up)
00820 {
00821 reg_data |= CYGARC_INTCR_NMIEG_RIS;
00822 }
00823 else
00824 {
00825 reg_data &= ~CYGARC_INTCR_NMIEG_RIS;
00826 }
00827 HAL_WRITE_UINT8(CYGARC_INTCR, reg_data);
00828
00829 return;
00830 }
00831
00832
00833
00834 int_req_conf = INT_REQ_EDGE_FALLING;
00835 if (level)
00836 {
00837 int_req_conf = INT_REQ_LEVEL_LOW;
00838 }
00839 if (up)
00840 {
00841 int_req_conf = INT_REQ_EDGE_RISING;
00842 }
00843
00844
00845
00846 iscr = (vector <= CYGNUM_HAL_INTERRUPT_EXTERNAL_7) ? CYGARC_ISCRL : CYGARC_ISCRH;
00847 mask = 3 << ((vector - CYGNUM_HAL_INTERRUPT_EXTERNAL_0) & 7) * 2;
00848
00849
00850
00851
00852 HAL_READ_UINT16(iscr, reg_data);
00853 reg_data &= ~mask;
00854 reg_data |= int_req_conf << (((vector - CYGNUM_HAL_INTERRUPT_EXTERNAL_0) & 7) << 1);
00855 HAL_WRITE_UINT16(iscr, reg_data);
00856 }
00857
00858
00859
00860
00876
00877 void hal_interrupt_attach(int vector, CYG_ADDRESS isr, CYG_ADDRWORD data, CYG_ADDRESS object)
00878 {
00879 cyg_uint32 index;
00880
00881
00882 HAL_TRANSLATE_VECTOR(vector, index);
00883
00884
00885
00886
00887
00888
00889 #if !defined(CYGBLD_HAL_H8S_WATCHDOG_INTERRUPT_CODE)
00890 CYG_ASSERT(CYGNUM_HAL_INTERRUPT_WOVI != vector, "Watchdog timer overflow interrupt code not supported" );
00891 #endif
00892
00893 CYG_ASSERT(hal_int_mask_tbl[index].address != 0, "H8S interrupt vector not supported");
00894
00895
00896
00897 if (hal_interrupt_handlers[index] == (CYG_ADDRESS)HAL_DEFAULT_ISR)
00898 {
00899 hal_interrupt_handlers[index] = (CYG_ADDRESS)isr;
00900 hal_interrupt_data[index] = (CYG_ADDRWORD)data;
00901 hal_interrupt_objects[index] = (CYG_ADDRESS)object;
00902 }
00903 }
00904
00905
00906
00907
00912
00913 #ifndef CYGPKG_HAL_H8S_WDRESET_DEFINED
00914 void h8s_reset_watchdog(void)
00915 {
00916 cyg_uint8 tmp;
00917
00918
00919
00920
00921
00922 HAL_READ_UINT8(CYGARC_TCSRR, tmp);
00923 tmp &= ~CYGARC_TCSR_OVF;
00924 tmp |= CYGARC_TCSR_WT;
00925
00926
00927
00928 HAL_WRITE_UINT16(CYGARC_TCSRW, tmp | CYGARC_TCSR_MAGIC);
00929
00930
00931
00932 HAL_WRITE_UINT8(CYGARC_RSTCSRR, tmp);
00933 tmp |= CYGARC_RSTCSR_RSTE;
00934 HAL_WRITE_UINT16(CYGARC_RSTCSRW, tmp | CYGARC_RSTCSR_DATA_MAGIC);
00935
00936
00937
00938 HAL_WRITE_UINT16(CYGARC_TCNTW, 0x80 | CYGARC_TCNT_MAGIC);
00939
00940
00941
00942
00943 HAL_READ_UINT8(CYGARC_TCSRR, tmp);
00944 tmp |= CYGARC_TCSR_TME;
00945 HAL_WRITE_UINT16(CYGARC_TCSRW, tmp | CYGARC_TCSR_MAGIC);
00946
00947
00948
00949 while (1)
00950 {
00951
00952 }
00953 }
00954 #endif
00955
00956