Changeset 167 for UsbWattMeter/trunk/asp_dcre/arch/rx630_ccrx/prc_config.h
- Timestamp:
- Mar 8, 2016, 8:37:45 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
UsbWattMeter/trunk/asp_dcre/arch/rx630_ccrx/prc_config.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 11 11 * Copyright (C) 2013 by Mitsuhiro Matsuura 12 12 * 13 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 15 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æÑºLÌ³ÛØKèªC»ÌÜÜÌ`Å\[ 18 * XR[hÉÜÜêĢ鱯D 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 20 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gip 22 * Ò}j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æÑºL 24 * Ì³ÛØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 26 * pūȢ`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 27 * ÆD 28 * (a) Äzzɺ¤hL 29 gipÒ}j 30 AÈÇjÉCãLÌ 31 * ì \¦C±Ìpð¨æÑºLÌ³ÛØKèðfÚ·é±ÆD 32 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 33 * ñ·é±ÆD 34 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 35 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 36 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 37 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 38 * ÆÓ·é±ÆD 13 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 15 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 18 * スコード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 22 * の無保証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 25 * と. 26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 27 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 29 * 報告すること. 30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 32 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 33 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 34 * 免責すること. 39 35 * 40 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨41 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI42 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF43 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»44 * ÌÓCðíÈ¢D36 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 37 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 38 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 39 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 40 * の責任を負わない. 45 41 * 46 42 * @(#) $Id$ … … 48 44 49 45 /* 50 * vZbT˶W 51 [iRX630pj 52 * 53 * ±ÌCN[ht@CÍCtarget_config.hiܽÍC»±©çCN 54 * [h³êét@CjÌÝ©çCN[h³êéD¼Ìt@C©ç 55 * ¼ÚCN[hµÄÍÈçÈ¢D 46 * プロセッサ依存モジュール(RX630用) 47 * 48 * このインクルードファイルは,target_config.h(または,そこからインク 49 * ルードされるファイル)のみからインクルードされる.他のファイルから 50 * 直接インクルードしてはならない. 56 51 */ 57 52 … … 62 57 63 58 /* 64 * vZbTÌÁê½ßÌCCÖè`59 * プロセッサの特殊命令のインライン関数定義 65 60 */ 66 61 #include "prc_insn.h" … … 69 64 70 65 /* 71 * ñ^XNReLXgpÌX^bNúl66 * 非タスクコンテキスト用のスタック初期値 72 67 */ 73 68 … … 76 71 77 72 /* 78 * ^XNReLXgubNÌè`73 * タスクコンテキストブロックの定義 79 74 */ 80 75 typedef struct task_context_block { 81 void *sp; /* X^bN|C^*/82 FP pc; /* vOJE^*/76 void *sp; /* スタックポインタ */ 77 FP pc; /* プログラムカウンタ */ 83 78 } TSKCTXB; 84 79 85 80 86 81 /* 87 * ݶñðÛ¶·éÏ82 * 割込み発生回数を保存する変数 88 83 */ 89 84 extern uint16_t intnest; … … 91 86 92 87 /* 93 * CPU bNóÔÅÌÝDæx}XN94 * 95 * TIPM_LOCK ÍCCPUbNóÔÅÌÝDæx}XNC·Èí¿CJ[l96 * ÇOÌàÌð·×ÄÌÝvð}XN·élÉè`·éD97 * 98 * TMIN_INTPRI ÏX·é±ÆÅÇOÝÌL³ðè·éD99 * á¦ÎTMIN_INTPRIð-14ÉÝè·éÆCx15ÌݪJ[lÇOÆ100 * ÈéDTMIN_INTPRIð-15ÉÝè·éÆCNMIÈOÉJ[lÇOÌÝð101 * ݯȢ±ÆÉÈéi±ÌêÉÍ-15ÉÝè·é±Æð§·éjD88 * CPUロック状態での割込み優先度マスク 89 * 90 * TIPM_LOCKは,CPUロック状態での割込み優先度マスク,すなわち,カーネ 91 * ル管理外のものを除くすべての割込み要求をマスクする値に定義する. 92 * 93 * TMIN_INTPRI変更することで管理外割込みの有無を決定する. 94 * 例えばTMIN_INTPRIを-14に設定すると,レベル15の割込みがカーネル管理外と 95 * なる.TMIN_INTPRIを-15に設定すると,NMI以外にカーネル管理外の割込みを 96 * 設けないことになる(この場合には-15に設定することを推奨する). 102 97 */ 103 98 #ifndef TIPM_LOCK … … 107 102 108 103 /* 109 * TOPPERS WÝfÌÀ»110 */ 111 /* 112 * ReLXgÌQÆ113 * 114 * RX ÅÍCÝÌßèæª^XN©Ç¤©ð»f·é½ßÉintnest115 * ðgpµÄ¢éD±êðp¢ÄReLXgð»f·éD104 * TOPPERS標準割込み処理モデルの実現 105 */ 106 /* 107 * コンテキストの参照 108 * 109 * RXでは,割込みの戻り先がタスクかどうかを判断するために intnest 110 * を使用している.これを用いてコンテキストを判断する. 116 111 */ 117 112 Inline bool_t 118 113 sense_context( void ) 119 114 { 120 /* lXgJE^0æèåÈçñ^XNReLXg*/115 /* ネストカウンタ0より大なら非タスクコンテキスト */ 121 116 return ( intnest > 0U ); 122 117 } … … 124 119 125 120 /* 126 * CPU bNtOÀ»Ì½ßÌÏ127 * 128 * ±êçÌÏÍCCPUbNóÔÌÌÝ«·¦Äæ¢àÌÆ·éD121 * CPUロックフラグ実現のための変数 122 * 123 * これらの変数は,CPUロック状態の時のみ書き換えてよいものとする. 129 124 */ 130 125 #if TIPM_LOCK != -15 131 extern bool_t lock_flag; /* CPU bNtOÌlðÛ·éÏ*/132 extern uint32_t saved_ipl; /* ÝDæxxðÛ¶·éÏ*/126 extern bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */ 127 extern uint32_t saved_ipl; /* 割込み優先度レベルを保存する変数 */ 133 128 #endif /* TIPM_LOCK != -15 */ 134 129 … … 137 132 138 133 /* 139 * ÝDæx}XNÌO\»Æà\»ÌÏ·140 * 141 * RX630 ÅÍCvZbTXe[^X[hWX^iPSWj̺©ç142 * 24 `27rbgÚÌ4rbgÉÝDæxxiIPLjªu©êÄ¢éD143 * J[lÇOÝðÀ·éêÉIPLðgpµ½§äðs¤D144 * J[lÍÝDæx}XNi-1©çA±µ½ÌljÅdzêÄ145 * ¢é½ßIPLÆÌÏ·ªKvÆÈéD146 */ 147 #define IPL_TO_IPM( ipl ) (-(( PRI )(( ipl ) >> 24U ))) /* IPL ðIPMÉ*/148 #define IPM_TO_IPL( ipm ) ((( uint32_t )(-( ipm ))) << 24U ) /* IPM ðIPLÉ*/149 150 151 /* 152 * CPU bNóÔÅÌÝDæx}XNÌIPL134 * 割込み優先度マスクの外部表現と内部表現の変換 135 * 136 * RX630では,プロセッサステータスワードレジスタ(PSW)の下から 137 * 24〜27ビット目の4ビットに割込み優先度レベル(IPL)が置かれている. 138 * カーネル管理外割込みを実装する場合にIPLを使用した制御を行う. 139 * カーネルは割込み優先度マスク(-1から連続した負の値)で管理されて 140 * いるためIPLとの変換が必要となる. 141 */ 142 #define IPL_TO_IPM( ipl ) (-(( PRI )(( ipl ) >> 24U ))) /* IPLをIPMに */ 143 #define IPM_TO_IPL( ipm ) ((( uint32_t )(-( ipm ))) << 24U ) /* IPMをIPLに */ 144 145 146 /* 147 * CPUロック状態での割込み優先度マスクのIPL 153 148 */ 154 149 #define IPL_LOCK ( IPM_TO_IPL( TIPM_LOCK ) ) 155 150 156 151 /* 157 * TIPM_ENAALL iÝDæx}XNSðjÌIPL152 * TIPM_ENAALL(割込み優先度マスク全解除)のIPL 158 153 */ 159 154 #define IPL_ENAALL ( IPM_TO_IPL( TIPM_ENAALL ) ) … … 163 158 164 159 /* 165 * ÝvöÌx & ®«è`e[u166 * ( ev[gt@CÉæéoÍ)160 * 割込み要因毎のレベル & 属性定義テーブル 161 * (テンプレートファイルによる出力) 167 162 */ 168 163 typedef struct cfg_int_info { … … 175 170 176 171 /* 177 * ÝÔÌÍÍÌ»è 178 * 179 * ÝÔªLøÈl©µ§É`FbN·é½ß, 180 * RtBM 181 [^oÍe[uðQÆ·é. 172 * 割込み番号の範囲の判定 173 * 174 * 割込み番号が有効な値か厳密にチェックするため, 175 * コンフィギュレータ出力テーブルを参照する. 182 176 */ 183 177 #define VALID_INTNO( intno ) \ … … 186 180 #define VALID_INTNO_CFGINT( intno ) VALID_INTNO( intno ) 187 181 188 /* cre_int ÅLøÈÝÔÌwè*/182 /* cre_intで有効な割込み番号の指定 */ 189 183 #define VALID_INTNO_CREINT VALID_INTNO_CFGINT((intno)) 190 184 191 /* cre_isr ÅLøÈÝÔÌwè*/185 /* cre_isrで有効な割込み番号の指定 */ 192 186 #define VALID_INTNO_CREISR(intno) VALID_INTNO_CFGINT((intno)) 193 187 194 188 195 189 /* 196 * ݧäWX^ÖAÌè`190 * 割込み制御レジスタ関連の定義 197 191 */ 198 192 #define IRQ_POSEDGE ( 0x08U ) … … 203 197 204 198 /* 205 * CPU bNóÔÖÌÚs206 * 207 * IPM in[hEFAÌÝDæx}XNjðCsaved_iipmÉÛ¶µCJ[208 * lÇOÌàÌð·×ÄÌÝvð}XN·éliTIPM_LOCKj209 * ÉÝè·éDܽClock_flagðTRUEÉ·éD210 * 211 * IPM ªCÅ©çTIPM_LOCKƯ¶©»êæè¢êÉÍC»êð212 * saved_iipm ÉÛ¶·éÌÝÅCTIPM_LOCKÉÍÝèµÈ¢D±êÍCf213 * ãÌÝDæx}XNªCTIPM_LOCKƯ¶©»êæè¢xÉÝè214 * ³êÄ¢éóÔÉ ½éD215 * 216 * ±ÌÖÍCCPUbNóÔilock_flagªTRUEÌóÔjÅÄÎê鱯Í217 * È¢àÌÆzèµÄ¢éD199 * CPUロック状態への移行 200 * 201 * IPM(ハードウェアの割込み優先度マスク)を,saved_iipmに保存し,カー 202 * ネル管理外のものを除くすべての割込み要求をマスクする値(TIPM_LOCK) 203 * に設定する.また,lock_flagをTRUEにする. 204 * 205 * IPMが,最初からTIPM_LOCKと同じかそれより高い場合には,それを 206 * saved_iipmに保存するのみで,TIPM_LOCKには設定しない.これは,モデル 207 * 上の割込み優先度マスクが,TIPM_LOCKと同じかそれより高いレベルに設定 208 * されている状態にあたる. 209 * 210 * この関数は,CPUロック状態(lock_flagがTRUEの状態)で呼ばれることは 211 * ないものと想定している. 218 212 */ 219 213 Inline void … … 226 220 227 221 /* 228 * current_ipl() ÌÔèlð¼Úsaved_iplÉÛ¶¹¸CêÏipl229 * ðp¢Ä¢éÌÍCcurrent_ipl()ðÄñ¾¼ãÉݪ¶µC230 * N®³ê½ÝÅsaved_iplªÏX³êéÂ\«ª é½ßÅ231 * éD222 * current_ipl()の返り値を直接saved_iplに保存せず,一時変数ipl 223 * を用いているのは,current_ipl()を呼んだ直後に割込みが発生し, 224 * 起動された割込み処理でsaved_iplが変更される可能性があるためで 225 * ある. 232 226 */ 233 227 ipl = current_ipl(); … … 246 240 247 241 /* 248 * CPU bNóÔÌð249 * 250 * lock_flag ðFALSEɵCIPMin[hEFAÌÝDæx}XNjðC251 * saved_iipm ÉÛ¶µ½lÉß·D252 * 253 * ±ÌÖÍCCPUbNóÔilock_flagªtrueÌóÔjÅÌÝÄÎêéà254 * ÌÆzèµÄ¢éD242 * CPUロック状態の解除 243 * 244 * lock_flagをFALSEにし,IPM(ハードウェアの割込み優先度マスク)を, 245 * saved_iipmに保存した値に戻す. 246 * 247 * この関数は,CPUロック状態(lock_flagがtrueの状態)でのみ呼ばれるも 248 * のと想定している. 255 249 */ 256 250 Inline void … … 270 264 271 265 /* 272 * CPU bNóÔÌQÆ266 * CPUロック状態の参照 273 267 */ 274 268 Inline bool_t … … 287 281 288 282 /* 289 * ifãÌjÝDæx}XNÌÝè290 * 291 * CPU bNtOªNA³êÄ¢éÍCn[hEFAÌÝDæx}292 * XNðÝè·éDCPUbNtOªZbg³êÄ¢éÍCsaved_iipm293 * ðÝèµC³çÉCn[hEFAÌÝDæx}XNðCÝèµæ¤Æ294 * µ½ifãÌjÝDæx}XNÆTIPM_LOCKÌ¢ûÉÝè·éD283 * (モデル上の)割込み優先度マスクの設定 284 * 285 * CPUロックフラグがクリアされている時は,ハードウェアの割込み優先度マ 286 * スクを設定する.CPUロックフラグがセットされている時は,saved_iipm 287 * を設定し,さらに,ハードウェアの割込み優先度マスクを,設定しようと 288 * した(モデル上の)割込み優先度マスクとTIPM_LOCKの高い方に設定する. 295 289 */ 296 290 Inline void … … 316 310 317 311 /* 318 * ifãÌjÝDæx}XNÌQÆ319 * 320 * CPU bNtOªNA³êÄ¢éÍn[hEFAÌÝDæx}321 * XNðCZbg³êÄ¢éÍsaved_iipmðQÆ·éD312 * (モデル上の)割込み優先度マスクの参照 313 * 314 * CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ 315 * スクを,セットされている時はsaved_iipmを参照する. 322 316 */ 323 317 Inline PRI … … 343 337 344 338 /* 345 * ÝvÖ~tOÌZbg346 * 347 * Ý®«ªÝè³êĢȢÝvCÉεÄÝvÖ~348 * tOðZbgµæ¤Æµ½êÉÍCFALSEðÔ·D339 * 割込み要求禁止フラグのセット 340 * 341 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 342 * フラグをセットしようとした場合には,FALSEを返す. 349 343 */ 350 344 Inline bool_t … … 352 346 { 353 347 /* 354 * xè`ª0Å éêÍCFG_INT³êĢȢ348 * レベル定義が0である場合はCFG_INTされていない 355 349 */ 356 350 if( cfg_int_table[intno].intpri == 0 ){ … … 368 362 369 363 /* 370 * ÝvÖ~tOÌNA371 * 372 * Ý®«ªÝè³êĢȢÝvCÉεÄÝvÖ~373 * tOðNAµæ¤Æµ½êÉÍCFALSEðÔ·D364 * 割込み要求禁止フラグのクリア 365 * 366 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 367 * フラグをクリアしようとした場合には,FALSEを返す. 374 368 */ 375 369 Inline bool_t … … 377 371 { 378 372 /* 379 * xè`ª0Å éêÍCFG_INT³êĢȢ373 * レベル定義が0である場合はCFG_INTされていない 380 374 */ 381 375 if( cfg_int_table[intno].intpri == 0 ){ … … 393 387 394 388 /* 395 * ÝvÌNA389 * 割込み要求のクリア 396 390 */ 397 391 Inline void … … 406 400 407 401 /* 408 * ÝvÌ`FbN402 * 割込み要求のチェック 409 403 */ 410 404 Inline bool_t … … 412 406 { 413 407 /* 414 * ÝvWX^Í0 or 1ŵ©È¢½ß,415 * »ÌÜÜÌlðÔ·.408 * 割込み要求レジスタは0 or 1でしかないため, 409 * そのままの値を返す. 416 410 */ 417 411 return ( *IR_REG(intno) ); … … 423 417 424 418 /* 425 * ÝvCÌ®«ÌÝè419 * 割込み要求ラインの属性の設定 426 420 */ 427 421 extern void x_config_int( INTNO intno, ATR intatr, PRI intpri ); … … 429 423 430 424 /* 431 * ÝnhÌüûÅKvÈIRCì425 * 割込みハンドラの入口で必要なIRC操作 432 426 * 433 427 */ … … 438 432 439 433 /* 440 * xoÌÝÉεÄÍÝXe[^X441 * tOðNA·é.434 * レベル検出の割込みに対しては割込みステータス 435 * フラグをクリアする. 442 436 */ 443 437 if( ( cfg_int_table[intno].intatr & TA_LOWLEVEL ) > 0 ){ 444 438 if( *IR_REG(intno) > 0U ){ 445 439 /* 446 * OÝÌê, IRQ[qªHighÉßÁÄ¢é447 * ±ÆðmF·é|ªLÚ³êÄ¢éª, Ȫ·é.440 * 外部割込みの場合, IRQ端子がHighに戻っている 441 * ことを確認する旨が記載されているが, 省略する. 448 442 */ 449 443 // *ir_reg_addr[intno] = 0U; 450 444 451 445 /* 452 * n[hEFA}j 453 AÉ0ÉÈÁ½±Æð 454 * mF·é|ªLÚ é½ß, WX^lðÇÝo·. 446 * ハードウェアマニュアルに0になったことを 447 * 確認する旨が記載あるため, レジスタ値を読み出す. 455 448 */ 456 449 // reg = *ir_reg_addr[intno]; … … 461 454 462 455 /* 463 * ÝnhÌoûÅKvÈIRCì456 * 割込みハンドラの出口で必要なIRC操作 464 457 * 465 458 */ … … 467 460 i_end_int( INTNO intno ) 468 461 { 469 /* ÁÉs¤×«ÍÈ¢*/470 } 471 472 473 /* 474 * ÅDæÊ^XNÖÌfBXpb`iprc_support.a30j475 * 476 * dispatch ÍC^XNReLXg©çÄÑo³ê½T[rXR[©477 * çÄÑo·×«àÌÅC^XNReLXgECPUbNóÔEfBXpb478 * `ÂóÔEifãÌjÝDæx}XNSðóÔÅÄÑo³È479 * ¯êÎÈçÈ¢D462 /* 特に行うべき処理はない */ 463 } 464 465 466 /* 467 * 最高優先順位タスクへのディスパッチ(prc_support.a30) 468 * 469 * dispatchは,タスクコンテキストから呼び出されたサービスコール処理か 470 * ら呼び出すべきもので,タスクコンテキスト・CPUロック状態・ディスパッ 471 * チ許可状態・(モデル上の)割込み優先度マスク全解除状態で呼び出さな 472 * ければならない. 480 473 */ 481 474 extern void dispatch( void ); 482 475 483 476 /* 484 * fBXpb`Ì®ìJniprc_support.a30j485 * 486 * start_dispatch ÍCJ[lN®ÉÄÑo·×«àÌÅC·×ÄÌ487 * ÝðÖ~µ½óÔiSÝbNóÔÆ¯ÌóÔjÅÄÑo³È¯êÎ488 * ÈçÈ¢D477 * ディスパッチャの動作開始(prc_support.a30) 478 * 479 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込 480 * みを禁止した状態(全割込みロック状態と同等の状態)で呼び出さなければ 481 * ならない. 489 482 */ 490 483 extern void start_dispatch( void ) NoReturn; 491 484 492 485 /* 493 * »ÝÌReLXgðÌÄÄfBXpb`iprc_support.a30j494 * 495 * exit_and_dispatch ÍCext_tsk©çÄÑo·×«àÌÅC^XNReL496 * XgECPUbNóÔEfBXpb`ÂóÔEifãÌjÝDæ497 * x}XNSðóÔÅÄÑo³È¯êÎÈçÈ¢D486 * 現在のコンテキストを捨ててディスパッチ(prc_support.a30) 487 * 488 * exit_and_dispatchは,ext_tskから呼び出すべきもので,タスクコンテキ 489 * スト・CPUロック状態・ディスパッチ許可状態・(モデル上の)割込み優先 490 * 度マスク全解除状態で呼び出さなければならない. 498 491 */ 499 492 #define _kernel_exit_and_dispatch(); \ … … 504 497 505 498 /* 506 * J[lÌI¹ÌÄoµiprc_support.a30j507 * 508 * call_exit_kernel ÍCJ[lÌI¹ÉÄÑo·×«àÌÅCñ^XN509 * ReLXgÉØè·¦ÄCJ[lÌI¹iexit_kerneljðÄÑo510 * ·D499 * カーネルの終了処理の呼出し(prc_support.a30) 500 * 501 * call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク 502 * コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出 503 * す. 511 504 */ 512 505 extern void call_exit_kernel( void ) NoReturn; 513 506 514 507 /* 515 * ^XNReLXgÌú»516 * 517 * ^XNªx~óÔ©çÀsÅ«éóÔÉÚs·éÉÄÎêéD±Ì_518 * ÅX^bNÌæðgÁÄÍÈçÈ¢D519 * 520 * activate_context ðCCCÖÅÍÈ}Nè`ƵĢéÌÍC521 * ±Ì_ÅÍTCBªè`³êĢȢ½ßÅ éD508 * タスクコンテキストの初期化 509 * 510 * タスクが休止状態から実行できる状態に移行する時に呼ばれる.この時点 511 * でスタック領域を使ってはならない. 512 * 513 * activate_contextを,インライン関数ではなくマクロ定義としているのは, 514 * この時点ではTCBが定義されていないためである. 522 515 */ 523 516 extern void start_r( void ); … … 527 520 { \ 528 521 \ 529 /* X^bN|C^úlÌÝè*/ \522 /* スタックポインタ初期値の設定 */ \ 530 523 ( p_tcb )->tskctxb.sp = ( void * )((( uint32_t ) ( p_tcb )->p_tinib->stk ) + \ 531 524 ( p_tcb )->p_tinib->stksz ); \ 532 /* N®ÔnÌÝè*/ \525 /* 起動番地の設定 */ \ 533 526 ( p_tcb )->tskctxb.pc = ( FP ) start_r; \ 534 527 } \ … … 537 530 538 531 /* 539 * calltex ÍgpµÈ¢532 * calltexは使用しない 540 533 */ 541 534 #define OMIT_CALLTEX … … 543 536 544 537 /* 545 * ÝnhÌÝè546 * 547 * RX630 ÍROMÉÝxN^ðzu·é½ßC{ÖÍóÖÅÀ·éD538 * 割込みハンドラの設定 539 * 540 * RX630はROMに割込みベクタを配置するため,本関数は空関数で実装する. 548 541 */ 549 542 Inline void … … 554 547 555 548 /* 556 * CPU áOnhÌÝè557 * 558 * RX630 ÍROMÉáOxN^ðzu·é½ßC{ÖÍóÖÅÀ·éD549 * CPU例外ハンドラの設定 550 * 551 * RX630はROMに例外ベクタを配置するため,本関数は空関数で実装する. 559 552 */ 560 553 Inline void … … 565 558 566 559 /* 567 * Ý/áOnhÌüû̶¬}N568 * 569 * ev[gt@CÉæè¶¬·é½ßó}NÆ·éD560 * 割込み/例外ハンドラの入口処理の生成マクロ 561 * 562 * テンプレートファイルにより生成するため空マクロとする. 570 563 */ 571 564 #define HDR_ENTRY(hdr, intexc_num , tobejmp) 572 565 573 566 /* 574 * ÝnhÌüû̶¬}N567 * 割込みハンドラの入口処理の生成マクロ 575 568 */ 576 569 #define _INT_ENTRY(inhno, inthdr) _kernel_##inthdr##_##inhno##_entry … … 583 576 584 577 /* 585 * CPU áOnhÌüû̶¬}N578 * CPU例外ハンドラの入口処理の生成マクロ 586 579 */ 587 580 #define _EXC_ENTRY(excno , exchdr) _kernel_##exchdr##_##excno##_entry … … 594 587 595 588 /* 596 * CPU áO̶µ½ÌReLXgÌQÆ597 * 598 * CPU áO̶µ½ÌReLXgªC^XNReLXgÌÉFALSEC599 * »¤ÅÈ¢ÉtrueðÔ·D589 * CPU例外の発生した時のコンテキストの参照 590 * 591 * CPU例外の発生した時のコンテキストが,タスクコンテキストの時にFALSE, 592 * そうでない時にtrueを返す. 600 593 */ 601 594 Inline bool_t … … 603 596 { 604 597 /* 605 * lXgJE^ª1æèåÈçñ^XNReLXg598 * ネストカウンタが1より大なら非タスクコンテキスト 606 599 */ 607 600 return( intnest > 1U ); … … 610 603 611 604 /* 612 * CPU áOîñ p_excinf ©ç PSW Ìlðæ¾·é½ßÌItZbgl613 * EXCNO + ACC + FPSW + R1 `R15 + PC605 * CPU例外情報 p_excinf から PSW の値を取得するためのオフセット値 606 * EXCNO + ACC + FPSW + R1〜R15 + PC 614 607 */ 615 608 #define EXC_GET_PSW_OFFSET (4+8+4+60+4) 616 609 617 610 /* 618 * CPU áO̶µ½ÌIPLÌQÆ611 * CPU例外の発生した時のIPLの参照 619 612 */ 620 613 Inline uint32_t … … 634 627 635 628 /* 636 * CPU áO̶µ½ÌReLXgÆÝÌ}XNóÔÌQÆ637 * 638 * CPU áO̶µ½ÌVXeóÔªCJ[lÀsÅÈC^XNR639 * eLXgÅ èCSÝbNóÔÅÈCCPUbNóÔÅÈCi640 * fãÌjÝDæx}XNSðóÔÅ éÉtrueC»¤ÅÈ¢641 * ÉFALSEðÔ·iCPUáOªJ[lÇOÌÝŶµ½ê642 * ÉàFALSEðÔ·jD629 * CPU例外の発生した時のコンテキストと割込みのマスク状態の参照 630 * 631 * CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコ 632 * ンテキストであり,全割込みロック状態でなく,CPUロック状態でなく,(モ 633 * デル上の)割込み優先度マスク全解除状態である時にtrue,そうでない時 634 * にFALSEを返す(CPU例外がカーネル管理外の割込み処理中で発生した場合 635 * にもFALSEを返す). 643 636 * 644 * J[lÀsÅÈ¢¨ (TIPM_LOCK== -15) ItO== 1637 * カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1 645 638 * (else) IPL < IPL_LOCK 646 * ^XNReLXgÅ é¨intnest == 0647 * SÝbNÅÈ¢¨ ItO== 1648 * ÝDæx}XNªSð¨IPL == 0639 * タスクコンテキストである→intnest == 0 640 * 全割込みロックでない→ Iフラグ == 1 641 * 割込み優先度マスクが全解除→IPL == 0 649 642 * 650 643 * … … 659 652 660 653 /* 661 * CPU áO̶µ½ÌReLXgÆÝ^CPUbNóÔÌQÆ662 * 663 * CPU áO̶µ½ÌVXeóÔªCJ[lÀsÅÈC^XNR664 * eLXgÅ èCSÝbNóÔÅÈCCPUbNóÔÅÈ¢É665 * true C»¤ÅÈ¢ÉfalseðÔ·iCPUáOªJ[lÇOÌÝ666 * Ŷµ½êÉàfalseðÔ·jD654 * CPU例外の発生した時のコンテキストと割込み/CPUロック状態の参照 655 * 656 * CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコ 657 * ンテキストであり,全割込みロック状態でなく,CPUロック状態でない時に 658 * true,そうでない時にfalseを返す(CPU例外がカーネル管理外の割込み処 659 * 理中で発生した場合にもfalseを返す). 667 660 * 668 * J[lÀsÅÈ¢¨ (TIPM_LOCK== -15) ItO== 1661 * カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1 669 662 * (else) IPL < TIPM_LOCK 670 * ^XNReLXgÅ é¨intnest < 1671 * SÝbNÅÈ¢¨ ItO== 1672 * CPU bNóÔÅÈ¢¨(TIPM_LOCK== -15) ItO== 1663 * タスクコンテキストである→intnest < 1 664 * 全割込みロックでない→ Iフラグ == 1 665 * CPUロック状態でない→(TIPM_LOCK== -15) Iフラグ == 1 673 666 * (else) IPL < TIPM_LOCK 674 667 */ … … 688 681 689 682 /* 690 * vZbT˶Ìú»683 * プロセッサ依存の初期化 691 684 */ 692 685 extern void prc_initialize( void ); 693 686 694 687 /* 695 * vZbT˶ÌI¹688 * プロセッサ依存の終了時処理 696 689 */ 697 690 extern void prc_terminate( void ); … … 700 693 #ifndef OMIT_DEFAULT_INT_HANDLER 701 694 /* 702 * ¢o^Ìݪ¶µ½êÉÄÑo³êé695 * 未登録の割込みが発生した場合に呼び出される 703 696 */ 704 697 void default_int_handler( void ); … … 707 700 #ifndef OMIT_DEFAULT_EXC_HANDLER 708 701 /* 709 * ¢o^ÌáOª¶µ½êÉÄÑo³êé702 * 未登録の例外が発生した場合に呼び出される 710 703 */ 711 704 void default_exc_handler( void ); -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.