Changeset 389 for azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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 … … 66 51 67 52 /* 68 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©53 * トレースログマクロのデフォルト定義 69 54 */ 70 55 #ifndef LOG_ISR_ENTER … … 149 134 150 135 /* 151 * å²è¾¼ã¿çªå·ã®ç¯å²ã®å¤å®136 * 割込み番号の範囲の判定 152 137 */ 153 138 #ifndef VALID_INTNO_DISINT … … 172 157 173 158 /* 174 * å²è¾¼ã¿åªå 175 度ã®ç¯å²ã®å¤å® 159 * 割込み優先度の範囲の判定 176 160 */ 177 161 #ifndef VALID_INTPRI_CHGIPM … … 181 165 182 166 /* 183 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®æ°167 * 割込みサービスルーチンの数 184 168 */ 185 169 #define tnum_isr ((uint_t)(tmax_isrid - TMIN_ISRID + 1)) … … 187 171 188 172 /* 189 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯ãå190 * ãåºãããã®ãã¯ã173 * 割込みサービスルーチンIDから割込みサービスルーチン管理ブロックを取 174 * り出すためのマクロ 191 175 */ 192 176 #define INDEX_ISR(isrid) ((uint_t)((isrid) - TMIN_ISRID)) … … 194 178 195 179 /* 196 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ãã¥ã¼ã¸ã®ç»é²180 * 割込みサービスルーチンキューへの登録 197 181 */ 198 182 Inline void … … 214 198 215 199 /* 216 * 使ç¨ãã¦ããªãå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯ã®ãªã¹ã200 * 使用していない割込みサービスルーチン管理ブロックのリスト 217 201 */ 218 202 QUEUE free_isrcb; 219 203 220 204 /* 221 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³æ©è½ã®åæå205 * 割込みサービスルーチン機能の初期化 222 206 */ 223 207 void … … 250 234 251 235 /* 252 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å¼åºã236 * 割込みサービスルーチンの呼出し 253 237 */ 254 238 #ifdef TOPPERS_isrcal … … 268 252 269 253 if (p_queue->p_next != p_isr_queue) { 270 /* ISRã®å¼åºãåã®ç¶æ 271 ã«æ»ã */ 254 /* ISRの呼出し前の状態に戻す */ 272 255 if (sense_lock()) { 273 256 unlock_cpu(); … … 280 263 281 264 /* 282 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼ã®æ¤ç´¢265 * 割込みサービスルーチン呼出しキューの検索 283 266 */ 284 267 Inline QUEUE * … … 311 294 312 295 /* 313 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®çæ296 * 割込みサービスルーチンの生成 314 297 * 315 * pk_cisr->exinfã¯ï¼ã¨ã©ã¼ãã§ãã¯ãããï¼ä¸åº¦ããåç 316 §ããªãããï¼ãã¼ 317 * ã«ã«å¤æ°ã«ã³ãã¼ããå¿ 318 è¦ããªãï¼éä¸ã§æ¸ãæãã£ã¦ãæ¯éããªãï¼ï¼ 298 * pk_cisr->exinfは,エラーチェックをせず,一度しか参照しないため,ロー 299 * カル変数にコピーする必要がない(途中で書き換わっても支障がない). 319 300 */ 320 301 #ifdef TOPPERS_acre_isr … … 374 355 375 356 /* 376 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®åé¤357 * 割込みサービスルーチンの削除 377 358 */ 378 359 #ifdef TOPPERS_del_isr … … 414 395 415 396 /* 416 * å²è¾¼ã¿ç®¡çæ©è½ã®åæå397 * 割込み管理機能の初期化 417 398 */ 418 399 #ifdef TOPPERS_intini … … 440 421 441 422 /* 442 * å²è¾¼ã¿ã®ç¦æ¢ï¼»NGKI3555ï¼½423 * 割込みの禁止[NGKI3555] 443 424 */ 444 425 #ifdef TOPPERS_dis_int 445 #ifdef TOPPERS_SUPPORT_DIS_INT /* ï¼»NGKI3093ï¼½*/426 #ifdef TOPPERS_SUPPORT_DIS_INT /*[NGKI3093]*/ 446 427 447 428 ER … … 452 433 453 434 LOG_DIS_INT_ENTER(intno); 454 CHECK_PAR(VALID_INTNO_DISINT(intno)); /* ï¼»NGKI3083][NGKI3087ï¼½*/435 CHECK_PAR(VALID_INTNO_DISINT(intno)); /*[NGKI3083][NGKI3087]*/ 455 436 456 437 locked = sense_lock(); … … 459 440 } 460 441 if (check_intno_cfg(intno)) { 461 disable_int(intno); /* ï¼»NGKI3086ï¼½*/442 disable_int(intno); /*[NGKI3086]*/ 462 443 ercd = E_OK; 463 444 } 464 445 else { 465 ercd = E_OBJ; /* ï¼»NGKI3085ï¼½*/446 ercd = E_OBJ; /*[NGKI3085]*/ 466 447 } 467 448 if (!locked) { … … 478 459 479 460 /* 480 * å²è¾¼ã¿ã®è¨±å¯ï¼»NGKI3556ï¼½461 * 割込みの許可[NGKI3556] 481 462 */ 482 463 #ifdef TOPPERS_ena_int 483 #ifdef TOPPERS_SUPPORT_ENA_INT /* ï¼»NGKI3106ï¼½*/464 #ifdef TOPPERS_SUPPORT_ENA_INT /*[NGKI3106]*/ 484 465 485 466 ER … … 490 471 491 472 LOG_ENA_INT_ENTER(intno); 492 CHECK_PAR(VALID_INTNO_DISINT(intno)); /* ï¼»NGKI3096][NGKI3100ï¼½*/473 CHECK_PAR(VALID_INTNO_DISINT(intno)); /*[NGKI3096][NGKI3100]*/ 493 474 494 475 locked = sense_lock(); … … 497 478 } 498 479 if (check_intno_cfg(intno)) { 499 enable_int(intno); /* ï¼»NGKI3099ï¼½*/480 enable_int(intno); /*[NGKI3099]*/ 500 481 ercd = E_OK; 501 482 } 502 483 else { 503 ercd = E_OBJ; /* ï¼»NGKI3098ï¼½*/484 ercd = E_OBJ; /*[NGKI3098]*/ 504 485 } 505 486 if (!locked) { … … 516 497 517 498 /* 518 * å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ï¼»NGKI3920ï¼½499 * 割込み要求のクリア[NGKI3920] 519 500 */ 520 501 #ifdef TOPPERS_clr_int 521 #ifdef TOPPERS_SUPPORT_CLR_INT /* ï¼»NGKI3927ï¼½*/502 #ifdef TOPPERS_SUPPORT_CLR_INT /*[NGKI3927]*/ 522 503 523 504 ER … … 528 509 529 510 LOG_CLR_INT_ENTER(intno); 530 CHECK_PAR(VALID_INTNO_CLRINT(intno)); /* ï¼»NGKI3921][NGKI3930ï¼½*/511 CHECK_PAR(VALID_INTNO_CLRINT(intno)); /*[NGKI3921][NGKI3930]*/ 531 512 532 513 locked = sense_lock(); … … 535 516 } 536 517 if (check_intno_cfg(intno) && check_intno_clear(intno)) { 537 clear_int(intno); /* ï¼»NGKI3924ï¼½*/518 clear_int(intno); /*[NGKI3924]*/ 538 519 ercd = E_OK; 539 520 } 540 521 else { 541 ercd = E_OBJ; /* ï¼»NGKI3923][NGKI3929ï¼½*/522 ercd = E_OBJ; /*[NGKI3923][NGKI3929]*/ 542 523 } 543 524 if (!locked) { … … 554 535 555 536 /* 556 * å²è¾¼ã¿ã®è¦æ±ï¼»NGKI3932ï¼½537 * 割込みの要求[NGKI3932] 557 538 */ 558 539 #ifdef TOPPERS_ras_int 559 #ifdef TOPPERS_SUPPORT_RAS_INT /* ï¼»NGKI3939ï¼½*/540 #ifdef TOPPERS_SUPPORT_RAS_INT /*[NGKI3939]*/ 560 541 561 542 ER … … 566 547 567 548 LOG_RAS_INT_ENTER(intno); 568 CHECK_PAR(VALID_INTNO_RASINT(intno)); /* ï¼»NGKI3933][NGKI3942ï¼½*/549 CHECK_PAR(VALID_INTNO_RASINT(intno)); /*[NGKI3933][NGKI3942]*/ 569 550 570 551 locked = sense_lock(); … … 573 554 } 574 555 if (check_intno_cfg(intno) && check_intno_raise(intno)) { 575 raise_int(intno); /* ï¼»NGKI3936ï¼½*/556 raise_int(intno); /*[NGKI3936]*/ 576 557 ercd = E_OK; 577 558 } 578 559 else { 579 ercd = E_OBJ; /* ï¼»NGKI3935][NGKI3941ï¼½*/560 ercd = E_OBJ; /*[NGKI3935][NGKI3941]*/ 580 561 } 581 562 if (!locked) { … … 592 573 593 574 /* 594 * å²è¾¼ã¿è¦æ±ã®ãã§ãã¯ï¼»NGKI3944ï¼½575 * 割込み要求のチェック[NGKI3944] 595 576 */ 596 577 #ifdef TOPPERS_prb_int 597 #ifdef TOPPERS_SUPPORT_PRB_INT /* ï¼»NGKI3951ï¼½*/578 #ifdef TOPPERS_SUPPORT_PRB_INT /*[NGKI3951]*/ 598 579 599 580 ER_BOOL … … 604 585 605 586 LOG_PRB_INT_ENTER(intno); 606 CHECK_PAR(VALID_INTNO_PRBINT(intno)); /* ï¼»NGKI3945][NGKI3952ï¼½*/587 CHECK_PAR(VALID_INTNO_PRBINT(intno)); /*[NGKI3945][NGKI3952]*/ 607 588 608 589 locked = sense_lock(); … … 611 592 } 612 593 if (check_intno_cfg(intno)) { 613 ercd = (ER_BOOL) probe_int(intno); /* ï¼»NGKI3948ï¼½*/614 } 615 else { 616 ercd = E_OBJ; /* ï¼»NGKI3947ï¼½*/594 ercd = (ER_BOOL) probe_int(intno); /*[NGKI3948]*/ 595 } 596 else { 597 ercd = E_OBJ; /*[NGKI3947]*/ 617 598 } 618 599 if (!locked) { … … 629 610 630 611 /* 631 * å²è¾¼ã¿åªå 632 度ãã¹ã¯ã®å¤æ´ï¼»NGKI3107ï¼½ 612 * 割込み優先度マスクの変更[NGKI3107] 633 613 */ 634 614 #ifdef TOPPERS_chg_ipm … … 640 620 641 621 LOG_CHG_IPM_ENTER(intpri); 642 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3108][NGKI3109ï¼½*/643 CHECK_PAR(VALID_INTPRI_CHGIPM(intpri)); /* ï¼»NGKI3113][NGKI3114ï¼½*/622 CHECK_TSKCTX_UNL(); /*[NGKI3108][NGKI3109]*/ 623 CHECK_PAR(VALID_INTPRI_CHGIPM(intpri)); /*[NGKI3113][NGKI3114]*/ 644 624 645 625 lock_cpu(); 646 t_set_ipm(intpri); /* ï¼»NGKI3111ï¼½*/626 t_set_ipm(intpri); /*[NGKI3111]*/ 647 627 if (intpri == TIPM_ENAALL && enadsp) { 648 628 dspflg = true; … … 674 654 675 655 /* 676 * å²è¾¼ã¿åªå 677 度ãã¹ã¯ã®åç 678 §ï¼»NGKI3115ï¼½ 656 * 割込み優先度マスクの参照[NGKI3115] 679 657 */ 680 658 #ifdef TOPPERS_get_ipm … … 686 664 687 665 LOG_GET_IPM_ENTER(p_intpri); 688 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3116][NGKI3117ï¼½*/666 CHECK_TSKCTX_UNL(); /*[NGKI3116][NGKI3117]*/ 689 667 690 668 lock_cpu(); 691 *p_intpri = t_get_ipm(); /* ï¼»NGKI3120ï¼½*/669 *p_intpri = t_get_ipm(); /*[NGKI3120]*/ 692 670 ercd = E_OK; 693 671 unlock_cpu();
Note:
See TracChangeset
for help on using the changeset viewer.