Changeset 429 for EcnlProtoTool/trunk/asp3_dcre/kernel/interrupt.c
- Timestamp:
- Jul 3, 2020, 7:19:17 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/kernel/interrupt.c
r321 r429 6 6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 7 7 * Toyohashi Univ. of Technology, JAPAN 8 * Copyright (C) 2005-201 6by Embedded and Real-Time Systems Laboratory8 * Copyright (C) 2005-2019 by Embedded and Real-Time Systems Laboratory 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * … … 93 93 #endif /* LOG_ENA_INT_LEAVE */ 94 94 95 #ifndef LOG_CLR_INT_ENTER 96 #define LOG_CLR_INT_ENTER(intno) 97 #endif /* LOG_CLR_INT_ENTER */ 98 99 #ifndef LOG_CLR_INT_LEAVE 100 #define LOG_CLR_INT_LEAVE(ercd) 101 #endif /* LOG_CLR_INT_LEAVE */ 102 103 #ifndef LOG_RAS_INT_ENTER 104 #define LOG_RAS_INT_ENTER(intno) 105 #endif /* LOG_RAS_INT_ENTER */ 106 107 #ifndef LOG_RAS_INT_LEAVE 108 #define LOG_RAS_INT_LEAVE(ercd) 109 #endif /* LOG_RAS_INT_LEAVE */ 110 111 #ifndef LOG_PRB_INT_ENTER 112 #define LOG_PRB_INT_ENTER(intno) 113 #endif /* LOG_PRB_INT_ENTER */ 114 115 #ifndef LOG_PRB_INT_LEAVE 116 #define LOG_PRB_INT_LEAVE(ercd) 117 #endif /* LOG_PRB_INT_LEAVE */ 118 95 119 #ifndef LOG_CHG_IPM_ENTER 96 120 #define LOG_CHG_IPM_ENTER(intpri) … … 108 132 #define LOG_GET_IPM_LEAVE(ercd, p_intpri) 109 133 #endif /* LOG_GET_IPM_LEAVE */ 134 135 /* 136 * 割込み番号の範囲の判定 137 */ 138 #ifndef VALID_INTNO_DISINT 139 #define VALID_INTNO_DISINT(intno) VALID_INTNO(intno) 140 #endif /* VALID_INTNO_DISINT */ 141 142 #ifndef VALID_INTNO_CLRINT 143 #define VALID_INTNO_CLRINT(intno) VALID_INTNO(intno) 144 #endif /* VALID_INTNO_CLRINT */ 145 146 #ifndef VALID_INTNO_RASINT 147 #define VALID_INTNO_RASINT(intno) VALID_INTNO(intno) 148 #endif /* VALID_INTNO_RASINT */ 149 150 #ifndef VALID_INTNO_PRBINT 151 #define VALID_INTNO_PRBINT(intno) VALID_INTNO(intno) 152 #endif /* VALID_INTNO_PRBINT */ 153 154 #ifndef VALID_INTNO_CREISR 155 #define VALID_INTNO_CREISR(intno) VALID_INTNO(intno) 156 #endif /* VALID_INTNO_CREISR */ 157 158 /* 159 * 割込み優先度の範囲の判定 160 */ 161 #ifndef VALID_INTPRI_CHGIPM 162 #define VALID_INTPRI_CHGIPM(intpri) \ 163 (TMIN_INTPRI <= (intpri) && (intpri) <= TIPM_ENAALL) 164 #endif /* VALID_INTPRI_CHGIPM */ 110 165 111 166 /* … … 266 321 isrpri = pk_cisr->isrpri; 267 322 268 CHECK_ RSATR(isratr, TARGET_ISRATR);323 CHECK_VALIDATR(isratr, TARGET_ISRATR); 269 324 CHECK_PAR(VALID_INTNO_CREISR(intno)); 270 325 CHECK_PAR(FUNC_ALIGN(isr)); … … 384 439 lock_cpu(); 385 440 } 386 if (disable_int(intno)) { /*[NGKI3086]*/ 441 if (check_intno_cfg(intno)) { 442 disable_int(intno); /*[NGKI3086]*/ 387 443 ercd = E_OK; 388 444 } … … 421 477 lock_cpu(); 422 478 } 423 if (enable_int(intno)) { /*[NGKI3099]*/ 479 if (check_intno_cfg(intno)) { 480 enable_int(intno); /*[NGKI3099]*/ 424 481 ercd = E_OK; 425 482 } … … 438 495 #endif /* TOPPERS_SUPPORT_ENA_INT */ 439 496 #endif /* TOPPERS_ena_int */ 497 498 /* 499 * 割込み要求のクリア[NGKI3920] 500 */ 501 #ifdef TOPPERS_clr_int 502 #ifdef TOPPERS_SUPPORT_CLR_INT /*[NGKI3927]*/ 503 504 ER 505 clr_int(INTNO intno) 506 { 507 bool_t locked; 508 ER ercd; 509 510 LOG_CLR_INT_ENTER(intno); 511 CHECK_PAR(VALID_INTNO_CLRINT(intno)); /*[NGKI3921][NGKI3930]*/ 512 513 locked = sense_lock(); 514 if (!locked) { 515 lock_cpu(); 516 } 517 if (check_intno_cfg(intno) && check_intno_clear(intno)) { 518 clear_int(intno); /*[NGKI3924]*/ 519 ercd = E_OK; 520 } 521 else { 522 ercd = E_OBJ; /*[NGKI3923][NGKI3929]*/ 523 } 524 if (!locked) { 525 unlock_cpu(); 526 } 527 528 error_exit: 529 LOG_CLR_INT_LEAVE(ercd); 530 return(ercd); 531 } 532 533 #endif /* TOPPERS_SUPPORT_CLR_INT */ 534 #endif /* TOPPERS_clr_int */ 535 536 /* 537 * 割込みの要求[NGKI3932] 538 */ 539 #ifdef TOPPERS_ras_int 540 #ifdef TOPPERS_SUPPORT_RAS_INT /*[NGKI3939]*/ 541 542 ER 543 ras_int(INTNO intno) 544 { 545 bool_t locked; 546 ER ercd; 547 548 LOG_RAS_INT_ENTER(intno); 549 CHECK_PAR(VALID_INTNO_RASINT(intno)); /*[NGKI3933][NGKI3942]*/ 550 551 locked = sense_lock(); 552 if (!locked) { 553 lock_cpu(); 554 } 555 if (check_intno_cfg(intno) && check_intno_raise(intno)) { 556 raise_int(intno); /*[NGKI3936]*/ 557 ercd = E_OK; 558 } 559 else { 560 ercd = E_OBJ; /*[NGKI3935][NGKI3941]*/ 561 } 562 if (!locked) { 563 unlock_cpu(); 564 } 565 566 error_exit: 567 LOG_RAS_INT_LEAVE(ercd); 568 return(ercd); 569 } 570 571 #endif /* TOPPERS_SUPPORT_RAS_INT */ 572 #endif /* TOPPERS_ras_int */ 573 574 /* 575 * 割込み要求のチェック[NGKI3944] 576 */ 577 #ifdef TOPPERS_prb_int 578 #ifdef TOPPERS_SUPPORT_PRB_INT /*[NGKI3951]*/ 579 580 ER_BOOL 581 prb_int(INTNO intno) 582 { 583 bool_t locked; 584 ER_BOOL ercd; 585 586 LOG_PRB_INT_ENTER(intno); 587 CHECK_PAR(VALID_INTNO_PRBINT(intno)); /*[NGKI3945][NGKI3952]*/ 588 589 locked = sense_lock(); 590 if (!locked) { 591 lock_cpu(); 592 } 593 if (check_intno_cfg(intno)) { 594 ercd = (ER_BOOL) probe_int(intno); /*[NGKI3948]*/ 595 } 596 else { 597 ercd = E_OBJ; /*[NGKI3947]*/ 598 } 599 if (!locked) { 600 unlock_cpu(); 601 } 602 603 error_exit: 604 LOG_PRB_INT_LEAVE(ercd); 605 return(ercd); 606 } 607 608 #endif /* TOPPERS_SUPPORT_PRB_INT */ 609 #endif /* TOPPERS_prb_int */ 440 610 441 611 /* … … 456 626 t_set_ipm(intpri); /*[NGKI3111]*/ 457 627 if (intpri == TIPM_ENAALL && enadsp) { 458 dspflg = true; 459 p_schedtsk = search_schedtsk(); 628 set_dspflg(); 460 629 if (p_runtsk->raster && p_runtsk->enater) { 461 630 task_terminate(p_runtsk);
Note:
See TracChangeset
for help on using the changeset viewer.