Changeset 107 for uKadecot/trunk/ssp/arch/rx630_ccrx/prc_config.h
- Timestamp:
- Jun 10, 2015, 8:40:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/ssp/arch/rx630_ccrx/prc_config.h
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r101 r107 10 10 * Copyright (C) 2013 by Mitsuhiro Matsuura 11 11 * 12 * ãLì ÒÍCÈºÌ (1)`(4) Ìð©CFree Software Foundation 13 * ÉæÁÄö\³êÄ¢é GNU General Public License Ì Version 2 ÉL 14 * q³êÄ¢éðð½·êÉÀèC{\tgEFAi{\tgEFA 15 * ðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏEÄzziȺC 16 * pÆÄÔj·é±Æð³Åø·éD 17 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 18 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 19 * XR[hÉÜÜêÄ¢é±ÆD 20 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 21 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 22 gip 23 * Ò}j 24 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 25 * ̳ÛØKèðfÚ·é±ÆD 26 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 27 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 28 * ÆD 29 * (a) Äzzɺ¤hL 30 gipÒ}j 31 AÈÇjÉCãLÌ 32 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 33 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 34 * ñ·é±ÆD 35 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 36 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 12 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 13 * によって公表されている GNU General Public License の Version 2 に記 14 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 15 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 16 * 利用と呼ぶ)することを無償で許諾する. 17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 19 * スコード中に含まれていること. 20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 21 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 22 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 23 * の無保証規定を掲載すること. 24 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 25 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 26 * と. 27 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 28 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 29 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 30 * 報告すること. 31 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 32 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄC»ÌKpÂ\«à40 * ÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌpÉæè¼41 * ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 36 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 37 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 38 * 43 39 */ 44 40 45 41 /* 46 * vZbT˶W 47 [iRX630pj 48 * 49 * ±ÌCN[ht@CÍCtarget_config.hiܽÍC»±©çCN 50 * [h³êét@CjÌÝ©çCN[h³êéD¼Ìt@C©ç 51 * ¼ÚCN[hµÄÍÈçÈ¢D 42 * プロセッサ依存モジュール(RX630用) 43 * 44 * このインクルードファイルは,target_config.h(または,そこからインク 45 * ルードされるファイル)のみからインクルードされる.他のファイルから 46 * 直接インクルードしてはならない. 52 47 */ 53 48 … … 58 53 59 54 /* 60 * vZbTÌÁê½ßÌCCÖè`55 * プロセッサの特殊命令のインライン関数定義 61 56 */ 62 57 #include "prc_insn.h" … … 64 59 65 60 /* 66 * ñ^XNReLXgpÌX^bNúl61 * 非タスクコンテキスト用のスタック初期値 67 62 */ 68 63 … … 71 66 72 67 /* 73 * ^XNReLXgubNÌè`68 * タスクコンテキストブロックの定義 74 69 */ 75 70 typedef struct task_context_block { 76 void *sp; /* X^bN|C^*/77 FP pc; /* vOJE^*/71 void *sp; /* スタックポインタ */ 72 FP pc; /* プログラムカウンタ */ 78 73 } TSKCTXB; 79 74 80 75 81 76 /* 82 * ݶñðÛ¶·éÏ77 * 割込み発生回数を保存する変数 83 78 */ 84 79 extern uint16_t intnest; … … 86 81 87 82 /* 88 * CPU bNóÔÅÌÝDæx}XN89 * 90 * TIPM_LOCK ÍCCPUbNóÔÅÌÝDæx}XNC·Èí¿CJ[l91 * ÇOÌàÌð·×ÄÌÝvð}XN·élÉè`·éD92 * 93 * TMIN_INTPRI ÏX·é±ÆÅÇOÝÌL³ðè·éD94 * á¦ÎTMIN_INTPRIð-14ÉÝè·éÆCx15ÌݪJ[lÇOÆ95 * ÈéDTMIN_INTPRIð-15ÉÝè·éÆCNMIÈOÉJ[lÇOÌÝð96 * ݯȢ±ÆÉÈéi±ÌêÉÍ-15ÉÝè·é±Æð§·éjD83 * CPUロック状態での割込み優先度マスク 84 * 85 * TIPM_LOCKは,CPUロック状態での割込み優先度マスク,すなわち,カーネ 86 * ル管理外のものを除くすべての割込み要求をマスクする値に定義する. 87 * 88 * TMIN_INTPRI変更することで管理外割込みの有無を決定する. 89 * 例えばTMIN_INTPRIを-14に設定すると,レベル15の割込みがカーネル管理外と 90 * なる.TMIN_INTPRIを-15に設定すると,NMI以外にカーネル管理外の割込みを 91 * 設けないことになる(この場合には-15に設定することを推奨する). 97 92 */ 98 93 #ifndef TIPM_LOCK … … 102 97 103 98 /* 104 * TOPPERS WÝfÌÀ»105 */ 106 /* 107 * ReLXgÌQÆ108 * 109 * RX ÅÍCÝÌßèæª^XN©Ç¤©ð»f·é½ßÉintnest110 * ðgpµÄ¢éD±êðp¢ÄReLXgð»f·éD99 * TOPPERS標準割込み処理モデルの実現 100 */ 101 /* 102 * コンテキストの参照 103 * 104 * RXでは,割込みの戻り先がタスクかどうかを判断するために intnest 105 * を使用している.これを用いてコンテキストを判断する. 111 106 */ 112 107 Inline bool_t 113 108 sense_context( void ) 114 109 { 115 /* lXgJE^0æèåÈçñ^XNReLXg*/110 /* ネストカウンタ0より大なら非タスクコンテキスト */ 116 111 return ( intnest > 0U ); 117 112 } … … 119 114 120 115 /* 121 * CPU bNtOÀ»Ì½ßÌÏ122 * 123 * ±êçÌÏÍCCPUbNóÔÌÌÝ«·¦Äæ¢àÌÆ·éD116 * CPUロックフラグ実現のための変数 117 * 118 * これらの変数は,CPUロック状態の時のみ書き換えてよいものとする. 124 119 */ 125 120 #if TIPM_LOCK != -15 126 extern bool_t lock_flag; /* CPU bNtOÌlðÛ·éÏ*/127 extern uint32_t saved_ipl; /* ÝDæxxðÛ¶·éÏ*/121 extern bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */ 122 extern uint32_t saved_ipl; /* 割込み優先度レベルを保存する変数 */ 128 123 #endif /* TIPM_LOCK != -15 */ 129 124 … … 132 127 133 128 /* 134 * ÝDæx}XNÌO\»Æà\»ÌÏ·135 * 136 * RX630 ÅÍCvZbTXe[^X[hWX^iPSWj̺©ç137 * 24 `27rbgÚÌ4rbgÉÝDæxxiIPLjªu©êÄ¢éD138 * J[lÇOÝðÀ·éêÉIPLðgpµ½§äðs¤D139 * J[lÍÝDæx}XNi-1©çA±µ½ÌljÅdzêÄ140 * ¢é½ßIPLÆÌÏ·ªKvÆÈéD141 */ 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 bNóÔÅÌÝDæx}XNÌIPL129 * 割込み優先度マスクの外部表現と内部表現の変換 130 * 131 * RX630では,プロセッサステータスワードレジスタ(PSW)の下から 132 * 24〜27ビット目の4ビットに割込み優先度レベル(IPL)が置かれている. 133 * カーネル管理外割込みを実装する場合にIPLを使用した制御を行う. 134 * カーネルは割込み優先度マスク(-1から連続した負の値)で管理されて 135 * いるためIPLとの変換が必要となる. 136 */ 137 #define IPL_TO_IPM( ipl ) (-(( PRI )(( ipl ) >> 24U ))) /* IPLをIPMに */ 138 #define IPM_TO_IPL( ipm ) ((( uint32_t )(-( ipm ))) << 24U ) /* IPMをIPLに */ 139 140 141 /* 142 * CPUロック状態での割込み優先度マスクのIPL 148 143 */ 149 144 #define IPL_LOCK ( IPM_TO_IPL( TIPM_LOCK ) ) 150 145 151 146 /* 152 * TIPM_ENAALL iÝDæx}XNSðjÌIPL147 * TIPM_ENAALL(割込み優先度マスク全解除)のIPL 153 148 */ 154 149 #define IPL_ENAALL ( IPM_TO_IPL( TIPM_ENAALL ) ) … … 158 153 159 154 /* 160 * ÝvöÌx & ®«è`e[u161 * ( ev[gt@CÉæéoÍ)155 * 割込み要因毎のレベル & 属性定義テーブル 156 * (テンプレートファイルによる出力) 162 157 */ 163 158 typedef struct cfg_int_info { … … 170 165 171 166 /* 172 * ÝÔÌÍÍÌ»è 173 * 174 * ÝÔªLøÈl©µ§É`FbN·é½ß, 175 * RtBM 176 [^oÍe[uðQÆ·é. 167 * 割込み番号の範囲の判定 168 * 169 * 割込み番号が有効な値か厳密にチェックするため, 170 * コンフィギュレータ出力テーブルを参照する. 177 171 */ 178 172 #define VALID_INTNO( intno ) \ … … 181 175 #define VALID_INTNO_CFGINT( intno ) VALID_INTNO( intno ) 182 176 183 /* cre_int ÅLøÈÝÔÌwè*/177 /* cre_intで有効な割込み番号の指定 */ 184 178 #define VALID_INTNO_CREINT VALID_INTNO_CFGINT((intno)) 185 179 186 /* cre_isr ÅLøÈÝÔÌwè*/180 /* cre_isrで有効な割込み番号の指定 */ 187 181 #define VALID_INTNO_CREISR(intno) VALID_INTNO_CFGINT((intno)) 188 182 189 183 190 184 /* 191 * ݧäWX^ÖAÌè`185 * 割込み制御レジスタ関連の定義 192 186 */ 193 187 #define IRQ_POSEDGE ( 0x08U ) … … 198 192 199 193 /* 200 * CPU bNóÔÖÌÚs201 * 202 * IPM in[hEFAÌÝDæx}XNjðCsaved_iipmÉÛ¶µCJ[203 * lÇOÌàÌð·×ÄÌÝvð}XN·éliTIPM_LOCKj204 * ÉÝè·éDܽClock_flagðTRUEÉ·éD205 * 206 * IPM ªCÅ©çTIPM_LOCKƯ¶©»êæè¢êÉÍC»êð207 * saved_iipm ÉÛ¶·éÌÝÅCTIPM_LOCKÉÍÝèµÈ¢D±êÍCf208 * ãÌÝDæx}XNªCTIPM_LOCKƯ¶©»êæè¢xÉÝè209 * ³êÄ¢éóÔÉ ½éD210 * 211 * ±ÌÖÍCCPUbNóÔilock_flagªTRUEÌóÔjÅÄÎêé±ÆÍ212 * È¢àÌÆzèµÄ¢éD194 * CPUロック状態への移行 195 * 196 * IPM(ハードウェアの割込み優先度マスク)を,saved_iipmに保存し,カー 197 * ネル管理外のものを除くすべての割込み要求をマスクする値(TIPM_LOCK) 198 * に設定する.また,lock_flagをTRUEにする. 199 * 200 * IPMが,最初からTIPM_LOCKと同じかそれより高い場合には,それを 201 * saved_iipmに保存するのみで,TIPM_LOCKには設定しない.これは,モデル 202 * 上の割込み優先度マスクが,TIPM_LOCKと同じかそれより高いレベルに設定 203 * されている状態にあたる. 204 * 205 * この関数は,CPUロック状態(lock_flagがTRUEの状態)で呼ばれることは 206 * ないものと想定している. 213 207 */ 214 208 Inline void … … 221 215 222 216 /* 223 * current_ipl() ÌÔèlð¼Úsaved_iplÉÛ¶¹¸CêÏipl224 * ðp¢Ä¢éÌÍCcurrent_ipl()ðÄñ¾¼ãÉݪ¶µC225 * N®³ê½ÝÅsaved_iplªÏX³êéÂ\«ª é½ßÅ226 * éD217 * current_ipl()の返り値を直接saved_iplに保存せず,一時変数ipl 218 * を用いているのは,current_ipl()を呼んだ直後に割込みが発生し, 219 * 起動された割込み処理でsaved_iplが変更される可能性があるためで 220 * ある. 227 221 */ 228 222 ipl = current_ipl(); … … 241 235 242 236 /* 243 * CPU bNóÔÌð244 * 245 * lock_flag ðFALSEɵCIPMin[hEFAÌÝDæx}XNjðC246 * saved_iipm ÉÛ¶µ½lÉß·D247 * 248 * ±ÌÖÍCCPUbNóÔilock_flagªtrueÌóÔjÅÌÝÄÎêéà249 * ÌÆzèµÄ¢éD237 * CPUロック状態の解除 238 * 239 * lock_flagをFALSEにし,IPM(ハードウェアの割込み優先度マスク)を, 240 * saved_iipmに保存した値に戻す. 241 * 242 * この関数は,CPUロック状態(lock_flagがtrueの状態)でのみ呼ばれるも 243 * のと想定している. 250 244 */ 251 245 Inline void … … 265 259 266 260 /* 267 * CPU bNóÔÌQÆ261 * CPUロック状態の参照 268 262 */ 269 263 Inline bool_t … … 282 276 283 277 /* 284 * ifãÌjÝDæx}XNÌÝè285 * 286 * CPU bNtOªNA³êÄ¢éÍCn[hEFAÌÝDæx}287 * XNðÝè·éDCPUbNtOªZbg³êÄ¢éÍCsaved_iipm288 * ðÝèµC³çÉCn[hEFAÌÝDæx}XNðCÝèµæ¤Æ289 * µ½ifãÌjÝDæx}XNÆTIPM_LOCKÌ¢ûÉÝè·éD278 * (モデル上の)割込み優先度マスクの設定 279 * 280 * CPUロックフラグがクリアされている時は,ハードウェアの割込み優先度マ 281 * スクを設定する.CPUロックフラグがセットされている時は,saved_iipm 282 * を設定し,さらに,ハードウェアの割込み優先度マスクを,設定しようと 283 * した(モデル上の)割込み優先度マスクとTIPM_LOCKの高い方に設定する. 290 284 */ 291 285 Inline void … … 311 305 312 306 /* 313 * ifãÌjÝDæx}XNÌQÆ314 * 315 * CPU bNtOªNA³êÄ¢éÍn[hEFAÌÝDæx}316 * XNðCZbg³êÄ¢éÍsaved_iipmðQÆ·éD307 * (モデル上の)割込み優先度マスクの参照 308 * 309 * CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ 310 * スクを,セットされている時はsaved_iipmを参照する. 317 311 */ 318 312 Inline PRI … … 338 332 339 333 /* 340 * ÝvÖ~tOÌZbg341 * 342 * Ý®«ªÝè³êĢȢÝvCÉεÄÝvÖ~343 * tOðZbgµæ¤Æµ½êÉÍCFALSEðÔ·D334 * 割込み要求禁止フラグのセット 335 * 336 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 337 * フラグをセットしようとした場合には,FALSEを返す. 344 338 */ 345 339 Inline bool_t … … 347 341 { 348 342 /* 349 * xè`ª0Å éêÍCFG_INT³êĢȢ343 * レベル定義が0である場合はCFG_INTされていない 350 344 */ 351 345 if( cfg_int_table[intno].intpri == 0 ){ … … 363 357 364 358 /* 365 * ÝvÖ~tOÌNA366 * 367 * Ý®«ªÝè³êĢȢÝvCÉεÄÝvÖ~368 * tOðNAµæ¤Æµ½êÉÍCFALSEðÔ·D359 * 割込み要求禁止フラグのクリア 360 * 361 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 362 * フラグをクリアしようとした場合には,FALSEを返す. 369 363 */ 370 364 Inline bool_t … … 372 366 { 373 367 /* 374 * xè`ª0Å éêÍCFG_INT³êĢȢ368 * レベル定義が0である場合はCFG_INTされていない 375 369 */ 376 370 if( cfg_int_table[intno].intpri == 0 ){ … … 388 382 389 383 /* 390 * ÝvÌNA384 * 割込み要求のクリア 391 385 */ 392 386 Inline void … … 401 395 402 396 /* 403 * ÝvÌ`FbN397 * 割込み要求のチェック 404 398 */ 405 399 Inline bool_t … … 407 401 { 408 402 /* 409 * ÝvWX^Í0 or 1ŵ©È¢½ß,410 * »ÌÜÜÌlðÔ·.403 * 割込み要求レジスタは0 or 1でしかないため, 404 * そのままの値を返す. 411 405 */ 412 406 return ( *IR_REG(intno) ); … … 418 412 419 413 /* 420 * ÝvCÌ®«ÌÝè414 * 割込み要求ラインの属性の設定 421 415 */ 422 416 extern void x_config_int( INTNO intno, ATR intatr, PRI intpri ); … … 424 418 425 419 /* 426 * ÝnhÌüûÅKvÈIRCì420 * 割込みハンドラの入口で必要なIRC操作 427 421 * 428 422 */ … … 433 427 434 428 /* 435 * xoÌÝÉεÄÍÝXe[^X436 * tOðNA·é.429 * レベル検出の割込みに対しては割込みステータス 430 * フラグをクリアする. 437 431 */ 438 432 if( ( cfg_int_table[intno].intatr & TA_LOWLEVEL ) > 0 ){ 439 433 if( *IR_REG(intno) > 0U ){ 440 434 /* 441 * OÝÌê, IRQ[qªHighÉßÁÄ¢é442 * ±ÆðmF·é|ªLÚ³êÄ¢éª, Ȫ·é.435 * 外部割込みの場合, IRQ端子がHighに戻っている 436 * ことを確認する旨が記載されているが, 省略する. 443 437 */ 444 438 // *ir_reg_addr[intno] = 0U; 445 439 446 440 /* 447 * n[hEFA}j 448 AÉ0ÉÈÁ½±Æð 449 * mF·é|ªLÚ é½ß, WX^lðÇÝo·. 441 * ハードウェアマニュアルに0になったことを 442 * 確認する旨が記載あるため, レジスタ値を読み出す. 450 443 */ 451 444 // reg = *ir_reg_addr[intno]; … … 456 449 457 450 /* 458 * ÝnhÌoûÅKvÈIRCì451 * 割込みハンドラの出口で必要なIRC操作 459 452 * 460 453 */ … … 462 455 i_end_int( INTNO intno ) 463 456 { 464 /* ÁÉs¤×«ÍÈ¢*/465 } 466 467 468 /* 469 * ÅDæÊ^XNÖÌfBXpb`iprc_support.a30j470 * 471 * dispatch ÍC^XNReLXg©çÄÑo³ê½T[rXR[©472 * çÄÑo·×«àÌÅC^XNReLXgECPUbNóÔEfBXpb473 * `ÂóÔEifãÌjÝDæx}XNSðóÔÅÄÑo³È474 * ¯êÎÈçÈ¢D457 /* 特に行うべき処理はない */ 458 } 459 460 461 /* 462 * 最高優先順位タスクへのディスパッチ(prc_support.a30) 463 * 464 * dispatchは,タスクコンテキストから呼び出されたサービスコール処理か 465 * ら呼び出すべきもので,タスクコンテキスト・CPUロック状態・ディスパッ 466 * チ許可状態・(モデル上の)割込み優先度マスク全解除状態で呼び出さな 467 * ければならない. 475 468 */ 476 469 extern void dispatch( void ); 477 470 478 471 /* 479 * fBXpb`Ì®ìJniprc_support.a30j480 * 481 * start_dispatch ÍCJ[lN®ÉÄÑo·×«àÌÅC·×ÄÌ482 * ÝðÖ~µ½óÔiSÝbNóÔƯÌóÔjÅÄÑo³È¯êÎ483 * ÈçÈ¢D472 * ディスパッチャの動作開始(prc_support.a30) 473 * 474 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込 475 * みを禁止した状態(全割込みロック状態と同等の状態)で呼び出さなければ 476 * ならない. 484 477 */ 485 478 extern void start_dispatch( void ) NoReturn; 486 479 487 480 /* 488 * »ÝÌReLXgðÌÄÄfBXpb`iprc_support.a30j489 * 490 * exit_and_dispatch ÍCext_tsk©çÄÑo·×«àÌÅC^XNReL491 * XgECPUbNóÔEfBXpb`ÂóÔEifãÌjÝDæ492 * x}XNSðóÔÅÄÑo³È¯êÎÈçÈ¢D481 * 現在のコンテキストを捨ててディスパッチ(prc_support.a30) 482 * 483 * exit_and_dispatchは,ext_tskから呼び出すべきもので,タスクコンテキ 484 * スト・CPUロック状態・ディスパッチ許可状態・(モデル上の)割込み優先 485 * 度マスク全解除状態で呼び出さなければならない. 493 486 */ 494 487 #define _kernel_exit_and_dispatch(); \ … … 499 492 500 493 /* 501 * J[lÌI¹ÌÄoµiprc_support.a30j502 * 503 * call_exit_kernel ÍCJ[lÌI¹ÉÄÑo·×«àÌÅCñ^XN504 * ReLXgÉØè·¦ÄCJ[lÌI¹iexit_kerneljðÄÑo505 * ·D494 * カーネルの終了処理の呼出し(prc_support.a30) 495 * 496 * call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク 497 * コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出 498 * す. 506 499 */ 507 500 extern void call_exit_kernel( void ) NoReturn; 508 501 509 502 /* 510 * ^XNReLXgÌú»511 * 512 * ^XNªx~óÔ©çÀsÅ«éóÔÉÚs·éÉÄÎêéD±Ì_513 * ÅX^bNÌæðgÁÄÍÈçÈ¢D514 * 515 * activate_context ðCCCÖÅÍÈ}Nè`ƵĢéÌÍC516 * ±Ì_ÅÍTCBªè`³êĢȢ½ßÅ éD503 * タスクコンテキストの初期化 504 * 505 * タスクが休止状態から実行できる状態に移行する時に呼ばれる.この時点 506 * でスタック領域を使ってはならない. 507 * 508 * activate_contextを,インライン関数ではなくマクロ定義としているのは, 509 * この時点ではTCBが定義されていないためである. 517 510 */ 518 511 extern void start_r( void ); … … 522 515 { \ 523 516 \ 524 /* X^bN|C^úlÌÝè*/ \517 /* スタックポインタ初期値の設定 */ \ 525 518 ( p_tcb )->tskctxb.sp = ( void * )((( uint32_t ) ( p_tcb )->p_tinib->stk ) + \ 526 519 ( p_tcb )->p_tinib->stksz ); \ 527 /* N®ÔnÌÝè*/ \520 /* 起動番地の設定 */ \ 528 521 ( p_tcb )->tskctxb.pc = ( FP ) start_r; \ 529 522 } \ … … 532 525 533 526 /* 534 * calltex ÍgpµÈ¢527 * calltexは使用しない 535 528 */ 536 529 #define OMIT_CALLTEX … … 538 531 539 532 /* 540 * ÝnhÌÝè541 * 542 * RX630 ÍROMÉÝxN^ðzu·é½ßC{ÖÍóÖÅÀ·éD533 * 割込みハンドラの設定 534 * 535 * RX630はROMに割込みベクタを配置するため,本関数は空関数で実装する. 543 536 */ 544 537 Inline void … … 549 542 550 543 /* 551 * CPU áOnhÌÝè552 * 553 * RX630 ÍROMÉáOxN^ðzu·é½ßC{ÖÍóÖÅÀ·éD544 * CPU例外ハンドラの設定 545 * 546 * RX630はROMに例外ベクタを配置するため,本関数は空関数で実装する. 554 547 */ 555 548 Inline void … … 560 553 561 554 /* 562 * Ý/áOnhÌüû̶¬}N563 * 564 * ev[gt@CÉæ趬·é½ßó}NÆ·éD555 * 割込み/例外ハンドラの入口処理の生成マクロ 556 * 557 * テンプレートファイルにより生成するため空マクロとする. 565 558 */ 566 559 #define HDR_ENTRY(hdr, intexc_num , tobejmp) 567 560 568 561 /* 569 * ÝnhÌüû̶¬}N562 * 割込みハンドラの入口処理の生成マクロ 570 563 */ 571 564 #define _INT_ENTRY(inhno, inthdr) _kernel_##inthdr##_##inhno##_entry … … 578 571 579 572 /* 580 * CPU áOnhÌüû̶¬}N573 * CPU例外ハンドラの入口処理の生成マクロ 581 574 */ 582 575 #define _EXC_ENTRY(excno , exchdr) _kernel_##exchdr##_##excno##_entry … … 589 582 590 583 /* 591 * CPU áO̶µ½ÌReLXgÌQÆ592 * 593 * CPU áO̶µ½ÌReLXgªC^XNReLXgÌÉFALSEC594 * »¤ÅÈ¢ÉtrueðÔ·D584 * CPU例外の発生した時のコンテキストの参照 585 * 586 * CPU例外の発生した時のコンテキストが,タスクコンテキストの時にFALSE, 587 * そうでない時にtrueを返す. 595 588 */ 596 589 Inline bool_t … … 598 591 { 599 592 /* 600 * lXgJE^ª1æèåÈçñ^XNReLXg593 * ネストカウンタが1より大なら非タスクコンテキスト 601 594 */ 602 595 return( intnest > 1U ); … … 605 598 606 599 /* 607 * CPU áOîñ p_excinf ©ç PSW Ìlðæ¾·é½ßÌItZbgl608 * EXCNO + ACC + FPSW + R1 `R15 + PC600 * CPU例外情報 p_excinf から PSW の値を取得するためのオフセット値 601 * EXCNO + ACC + FPSW + R1〜R15 + PC 609 602 */ 610 603 #define EXC_GET_PSW_OFFSET (4+8+4+60+4) 611 604 612 605 /* 613 * CPU áO̶µ½ÌIPLÌQÆ606 * CPU例外の発生した時のIPLの参照 614 607 */ 615 608 Inline uint32_t … … 629 622 630 623 /* 631 * CPU áO̶µ½ÌReLXgÆÝÌ}XNóÔÌQÆ632 * 633 * CPU áO̶µ½ÌVXeóÔªCJ[lÀsÅÈC^XNR634 * eLXgÅ èCSÝbNóÔÅÈCCPUbNóÔÅÈCi635 * fãÌjÝDæx}XNSðóÔÅ éÉtrueC»¤ÅÈ¢636 * ÉFALSEðÔ·iCPUáOªJ[lÇOÌÝŶµ½ê637 * ÉàFALSEðÔ·jD624 * CPU例外の発生した時のコンテキストと割込みのマスク状態の参照 625 * 626 * CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコ 627 * ンテキストであり,全割込みロック状態でなく,CPUロック状態でなく,(モ 628 * デル上の)割込み優先度マスク全解除状態である時にtrue,そうでない時 629 * にFALSEを返す(CPU例外がカーネル管理外の割込み処理中で発生した場合 630 * にもFALSEを返す). 638 631 * 639 * J[lÀsÅÈ¢¨ (TIPM_LOCK== -15) ItO== 1632 * カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1 640 633 * (else) IPL < IPL_LOCK 641 * ^XNReLXgÅ é¨intnest == 0642 * SÝbNÅÈ¢¨ ItO== 1643 * ÝDæx}XNªSð¨IPL == 0634 * タスクコンテキストである→intnest == 0 635 * 全割込みロックでない→ Iフラグ == 1 636 * 割込み優先度マスクが全解除→IPL == 0 644 637 * 645 638 * … … 654 647 655 648 /* 656 * CPU áO̶µ½ÌReLXgÆÝ^CPUbNóÔÌQÆ657 * 658 * CPU áO̶µ½ÌVXeóÔªCJ[lÀsÅÈC^XNR659 * eLXgÅ èCSÝbNóÔÅÈCCPUbNóÔÅÈ¢É660 * true C»¤ÅÈ¢ÉfalseðÔ·iCPUáOªJ[lÇOÌÝ661 * Ŷµ½êÉàfalseðÔ·jD649 * CPU例外の発生した時のコンテキストと割込み/CPUロック状態の参照 650 * 651 * CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコ 652 * ンテキストであり,全割込みロック状態でなく,CPUロック状態でない時に 653 * true,そうでない時にfalseを返す(CPU例外がカーネル管理外の割込み処 654 * 理中で発生した場合にもfalseを返す). 662 655 * 663 * J[lÀsÅÈ¢¨ (TIPM_LOCK== -15) ItO== 1656 * カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1 664 657 * (else) IPL < TIPM_LOCK 665 * ^XNReLXgÅ é¨intnest < 1666 * SÝbNÅÈ¢¨ ItO== 1667 * CPU bNóÔÅÈ¢¨(TIPM_LOCK== -15) ItO== 1658 * タスクコンテキストである→intnest < 1 659 * 全割込みロックでない→ Iフラグ == 1 660 * CPUロック状態でない→(TIPM_LOCK== -15) Iフラグ == 1 668 661 * (else) IPL < TIPM_LOCK 669 662 */ … … 689 682 690 683 /* 691 * vZbT˶Ìú»684 * プロセッサ依存の初期化 692 685 */ 693 686 extern void prc_initialize( void ); 694 687 695 688 /* 696 * vZbT˶ÌI¹689 * プロセッサ依存の終了時処理 697 690 */ 698 691 extern void prc_terminate( void ); … … 701 694 #ifndef OMIT_DEFAULT_INT_HANDLER 702 695 /* 703 * ¢o^Ìݪ¶µ½êÉÄÑo³êé696 * 未登録の割込みが発生した場合に呼び出される 704 697 */ 705 698 void default_int_handler( void ); … … 708 701 #ifndef OMIT_DEFAULT_EXC_HANDLER 709 702 /* 710 * ¢o^ÌáOª¶µ½êÉÄÑo³êé703 * 未登録の例外が発生した場合に呼び出される 711 704 */ 712 705 void default_exc_handler( void ); -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.