Changeset 318 for asp3_gr_sakura/trunk/kernel/interrupt.c
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/kernel/interrupt.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 * スコード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 * の無保証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 * と. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 * 報告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * å²è¾¼ã¿ç®¡çæ©è½44 * 割込み管理機能 60 45 */ 61 46 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_ISR_ENTER … … 150 135 151 136 /* 152 * å²è¾¼ã¿çªå·ã®ç¯å²ã®å¤å®137 * 割込み番号の範囲の判定 153 138 */ 154 139 #ifndef VALID_INTNO_DISINT … … 173 158 174 159 /* 175 * å²è¾¼ã¿åªå 176 度ã®ç¯å²ã®å¤å® 160 * 割込み優先度の範囲の判定 177 161 */ 178 162 #ifndef VALID_INTPRI_CHGIPM … … 182 166 183 167 /* 184 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®æ°168 * 割込みサービスルーチンの数 185 169 */ 186 170 #define tnum_isr ((uint_t)(tmax_isrid - TMIN_ISRID + 1)) … … 188 172 189 173 /* 190 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯ãå191 * ãåºãããã®ãã¯ã174 * 割込みサービスルーチンIDから割込みサービスルーチン管理ブロックを取 175 * り出すためのマクロ 192 176 */ 193 177 #define INDEX_ISR(isrid) ((uint_t)((isrid) - TMIN_ISRID)) … … 195 179 196 180 /* 197 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ãã¥ã¼ã¸ã®ç»é²181 * 割込みサービスルーチンキューへの登録 198 182 */ 199 183 Inline void … … 215 199 216 200 /* 217 * 使ç¨ãã¦ããªãå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯ã®ãªã¹ã201 * 使用していない割込みサービスルーチン管理ブロックのリスト 218 202 */ 219 203 QUEUE free_isrcb; 220 204 221 205 /* 222 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³æ©è½ã®åæå206 * 割込みサービスルーチン機能の初期化 223 207 */ 224 208 void … … 251 235 252 236 /* 253 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å¼åºã237 * 割込みサービスルーチンの呼出し 254 238 */ 255 239 #ifdef TOPPERS_isrcal … … 269 253 270 254 if (p_queue->p_next != p_isr_queue) { 271 /* ISRã®å¼åºãåã®ç¶æ 272 ã«æ»ã */ 255 /* ISRの呼出し前の状態に戻す */ 273 256 if (sense_lock()) { 274 257 unlock_cpu(); … … 281 264 282 265 /* 283 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼ã®æ¤ç´¢266 * 割込みサービスルーチン呼出しキューの検索 284 267 */ 285 268 Inline QUEUE * … … 312 295 313 296 /* 314 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®çæ297 * 割込みサービスルーチンの生成 315 298 * 316 * pk_cisr->exinfã¯ï¼ã¨ã©ã¼ãã§ãã¯ãããï¼ä¸åº¦ããåç 317 §ããªãããï¼ãã¼ 318 * ã«ã«å¤æ°ã«ã³ãã¼ããå¿ 319 è¦ããªãï¼éä¸ã§æ¸ãæãã£ã¦ãæ¯éããªãï¼ï¼ 299 * pk_cisr->exinfは,エラーチェックをせず,一度しか参照しないため,ロー 300 * カル変数にコピーする必要がない(途中で書き換わっても支障がない). 320 301 */ 321 302 #ifdef TOPPERS_acre_isr … … 375 356 376 357 /* 377 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®åé¤358 * 割込みサービスルーチンの削除 378 359 */ 379 360 #ifdef TOPPERS_del_isr … … 415 396 416 397 /* 417 * å²è¾¼ã¿ç®¡çæ©è½ã®åæå398 * 割込み管理機能の初期化 418 399 */ 419 400 #ifdef TOPPERS_intini … … 441 422 442 423 /* 443 * å²è¾¼ã¿ã®ç¦æ¢ï¼»NGKI3555ï¼½424 * 割込みの禁止[NGKI3555] 444 425 */ 445 426 #ifdef TOPPERS_dis_int 446 #ifdef TOPPERS_SUPPORT_DIS_INT /* ï¼»NGKI3093ï¼½*/427 #ifdef TOPPERS_SUPPORT_DIS_INT /*[NGKI3093]*/ 447 428 448 429 ER … … 453 434 454 435 LOG_DIS_INT_ENTER(intno); 455 CHECK_PAR(VALID_INTNO_DISINT(intno)); /* ï¼»NGKI3083][NGKI3087ï¼½*/436 CHECK_PAR(VALID_INTNO_DISINT(intno)); /*[NGKI3083][NGKI3087]*/ 456 437 457 438 locked = sense_lock(); … … 460 441 } 461 442 if (check_intno_cfg(intno)) { 462 disable_int(intno); /* ï¼»NGKI3086ï¼½*/443 disable_int(intno); /*[NGKI3086]*/ 463 444 ercd = E_OK; 464 445 } 465 446 else { 466 ercd = E_OBJ; /* ï¼»NGKI3085ï¼½*/447 ercd = E_OBJ; /*[NGKI3085]*/ 467 448 } 468 449 if (!locked) { … … 479 460 480 461 /* 481 * å²è¾¼ã¿ã®è¨±å¯ï¼»NGKI3556ï¼½462 * 割込みの許可[NGKI3556] 482 463 */ 483 464 #ifdef TOPPERS_ena_int 484 #ifdef TOPPERS_SUPPORT_ENA_INT /* ï¼»NGKI3106ï¼½*/465 #ifdef TOPPERS_SUPPORT_ENA_INT /*[NGKI3106]*/ 485 466 486 467 ER … … 491 472 492 473 LOG_ENA_INT_ENTER(intno); 493 CHECK_PAR(VALID_INTNO_DISINT(intno)); /* ï¼»NGKI3096][NGKI3100ï¼½*/474 CHECK_PAR(VALID_INTNO_DISINT(intno)); /*[NGKI3096][NGKI3100]*/ 494 475 495 476 locked = sense_lock(); … … 498 479 } 499 480 if (check_intno_cfg(intno)) { 500 enable_int(intno); /* ï¼»NGKI3099ï¼½*/481 enable_int(intno); /*[NGKI3099]*/ 501 482 ercd = E_OK; 502 483 } 503 484 else { 504 ercd = E_OBJ; /* ï¼»NGKI3098ï¼½*/485 ercd = E_OBJ; /*[NGKI3098]*/ 505 486 } 506 487 if (!locked) { … … 517 498 518 499 /* 519 * å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ï¼»NGKI3920ï¼½500 * 割込み要求のクリア[NGKI3920] 520 501 */ 521 502 #ifdef TOPPERS_clr_int 522 #ifdef TOPPERS_SUPPORT_CLR_INT /* ï¼»NGKI3927ï¼½*/503 #ifdef TOPPERS_SUPPORT_CLR_INT /*[NGKI3927]*/ 523 504 524 505 ER … … 529 510 530 511 LOG_CLR_INT_ENTER(intno); 531 CHECK_PAR(VALID_INTNO_CLRINT(intno)); /* ï¼»NGKI3921][NGKI3930ï¼½*/512 CHECK_PAR(VALID_INTNO_CLRINT(intno)); /*[NGKI3921][NGKI3930]*/ 532 513 533 514 locked = sense_lock(); … … 536 517 } 537 518 if (check_intno_cfg(intno) && check_intno_clear(intno)) { 538 clear_int(intno); /* ï¼»NGKI3924ï¼½*/519 clear_int(intno); /*[NGKI3924]*/ 539 520 ercd = E_OK; 540 521 } 541 522 else { 542 ercd = E_OBJ; /* ï¼»NGKI3923][NGKI3929ï¼½*/523 ercd = E_OBJ; /*[NGKI3923][NGKI3929]*/ 543 524 } 544 525 if (!locked) { … … 555 536 556 537 /* 557 * å²è¾¼ã¿ã®è¦æ±ï¼»NGKI3932ï¼½538 * 割込みの要求[NGKI3932] 558 539 */ 559 540 #ifdef TOPPERS_ras_int 560 #ifdef TOPPERS_SUPPORT_RAS_INT /* ï¼»NGKI3939ï¼½*/541 #ifdef TOPPERS_SUPPORT_RAS_INT /*[NGKI3939]*/ 561 542 562 543 ER … … 567 548 568 549 LOG_RAS_INT_ENTER(intno); 569 CHECK_PAR(VALID_INTNO_RASINT(intno)); /* ï¼»NGKI3933][NGKI3942ï¼½*/550 CHECK_PAR(VALID_INTNO_RASINT(intno)); /*[NGKI3933][NGKI3942]*/ 570 551 571 552 locked = sense_lock(); … … 574 555 } 575 556 if (check_intno_cfg(intno) && check_intno_raise(intno)) { 576 raise_int(intno); /* ï¼»NGKI3936ï¼½*/557 raise_int(intno); /*[NGKI3936]*/ 577 558 ercd = E_OK; 578 559 } 579 560 else { 580 ercd = E_OBJ; /* ï¼»NGKI3935][NGKI3941ï¼½*/561 ercd = E_OBJ; /*[NGKI3935][NGKI3941]*/ 581 562 } 582 563 if (!locked) { … … 593 574 594 575 /* 595 * å²è¾¼ã¿è¦æ±ã®ãã§ãã¯ï¼»NGKI3944ï¼½576 * 割込み要求のチェック[NGKI3944] 596 577 */ 597 578 #ifdef TOPPERS_prb_int 598 #ifdef TOPPERS_SUPPORT_PRB_INT /* ï¼»NGKI3951ï¼½*/579 #ifdef TOPPERS_SUPPORT_PRB_INT /*[NGKI3951]*/ 599 580 600 581 ER_BOOL … … 605 586 606 587 LOG_PRB_INT_ENTER(intno); 607 CHECK_PAR(VALID_INTNO_PRBINT(intno)); /* ï¼»NGKI3945][NGKI3952ï¼½*/588 CHECK_PAR(VALID_INTNO_PRBINT(intno)); /*[NGKI3945][NGKI3952]*/ 608 589 609 590 locked = sense_lock(); … … 612 593 } 613 594 if (check_intno_cfg(intno)) { 614 ercd = (ER_BOOL) probe_int(intno); /* ï¼»NGKI3948ï¼½*/615 } 616 else { 617 ercd = E_OBJ; /* ï¼»NGKI3947ï¼½*/595 ercd = (ER_BOOL) probe_int(intno); /*[NGKI3948]*/ 596 } 597 else { 598 ercd = E_OBJ; /*[NGKI3947]*/ 618 599 } 619 600 if (!locked) { … … 630 611 631 612 /* 632 * å²è¾¼ã¿åªå 633 度ãã¹ã¯ã®å¤æ´ï¼»NGKI3107ï¼½ 613 * 割込み優先度マスクの変更[NGKI3107] 634 614 */ 635 615 #ifdef TOPPERS_chg_ipm … … 641 621 642 622 LOG_CHG_IPM_ENTER(intpri); 643 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3108][NGKI3109ï¼½*/644 CHECK_PAR(VALID_INTPRI_CHGIPM(intpri)); /* ï¼»NGKI3113][NGKI3114ï¼½*/623 CHECK_TSKCTX_UNL(); /*[NGKI3108][NGKI3109]*/ 624 CHECK_PAR(VALID_INTPRI_CHGIPM(intpri)); /*[NGKI3113][NGKI3114]*/ 645 625 646 626 lock_cpu(); 647 t_set_ipm(intpri); /* ï¼»NGKI3111ï¼½*/627 t_set_ipm(intpri); /*[NGKI3111]*/ 648 628 if (intpri == TIPM_ENAALL && enadsp) { 649 629 dspflg = true; … … 681 661 682 662 /* 683 * å²è¾¼ã¿åªå 684 度ãã¹ã¯ã®åç 685 §ï¼»NGKI3115ï¼½ 663 * 割込み優先度マスクの参照[NGKI3115] 686 664 */ 687 665 #ifdef TOPPERS_get_ipm … … 693 671 694 672 LOG_GET_IPM_ENTER(p_intpri); 695 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3116][NGKI3117ï¼½*/673 CHECK_TSKCTX_UNL(); /*[NGKI3116][NGKI3117]*/ 696 674 697 675 lock_cpu(); 698 *p_intpri = t_get_ipm(); /* ï¼»NGKI3120ï¼½*/676 *p_intpri = t_get_ipm(); /*[NGKI3120]*/ 699 677 ercd = E_OK; 700 678 unlock_cpu();
Note:
See TracChangeset
for help on using the changeset viewer.