Changeset 95 for ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_config.h
- Timestamp:
- Jun 2, 2015, 3:39:53 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_config.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 11 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 12 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 13 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 14 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 15 * XR[hÉÜÜêÄ¢é±ÆD 16 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 17 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 18 gip 19 * Ò}j 20 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 21 * ̳ÛØKèðfÚ·é±ÆD 22 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 23 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 24 * ÆD 25 * (a) Äzzɺ¤hL 26 gipÒ}j 27 AÈÇjÉCãLÌ 28 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 29 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 30 * ñ·é±ÆD 31 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 32 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 33 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 34 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 35 * ÆÓ·é±ÆD 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 36 32 * 37 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨38 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI39 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF40 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»41 * ÌÓCðíÈ¢D33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 42 38 * 43 39 * @(#) $Id: prc_config.h 1304 2008-08-27 07:28:36Z ertl-honda $ … … 45 41 46 42 /* 47 * vZbT˶W 48 [iARM-Mpj 49 * 50 * ±ÌCN[ht@CÍCtarget_config.hiܽÍC»±©çCN 51 * [h³êét@CjÌÝ©çCN[h³êéD¼Ìt@C©ç 52 * ¼ÚCN[hµÄÍÈçÈ¢D 43 * プロセッサ依存モジュール(ARM-M用) 44 * 45 * このインクルードファイルは,target_config.h(または,そこからインク 46 * ルードされるファイル)のみからインクルードされる.他のファイルから 47 * 直接インクルードしてはならない. 53 48 */ 54 49 … … 59 54 60 55 /* 61 * vZbTÌÁê½ßÌCCÖè`56 * プロセッサの特殊命令のインライン関数定義 62 57 */ 63 58 #include "prc_insn.h" 64 59 65 60 /* 66 * ñ^XNReLXgpÌX^bNúl61 * 非タスクコンテキスト用のスタック初期値 67 62 */ 68 63 #define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz))) … … 73 68 74 69 /* 75 * ÝlXg70 * 割込みネスト数 76 71 */ 77 72 extern uint8_t intnest; 78 73 79 74 /* 80 * ReLXgÌQÆ75 * コンテキストの参照 81 76 * 82 77 */ … … 99 94 100 95 /* 101 * TOPPERS WÝfÌÀ»102 * 103 * ÝDæx}XNƵÄÍCBASEPRIðp¢éDSÝðÖ~·é104 * @\ƵÄCFAULTMASKâPRIMASKª éªCJ[lÇOÌÝð105 * T|[g·é½ßC±êçÍCPUbN̽ßÉp¢È¢D106 * »Ì½ßCBASEPRIðp¢Ä[IÉCPUbNtOðÀ»·éD107 * 108 * ܸCCPUbNóÔðÇ·½ßÌÏ(lock_flag)ðpÓ·éD109 * 110 * CPU bNtOªNA³êÄ¢éÔÍCBASEPRIðfãÌÝ111 * Dæx}XNÌlÉÝè·éD±ÌÔÍCfãÌÝDæx}X112 * NÍCBASEPRIðp¢éD96 * TOPPERS標準割込み処理モデルの実現 97 * 98 * 割込み優先度マスクとしては,BASEPRIを用いる.全割込みを禁止する 99 * 機能として,FAULTMASKやPRIMASKがあるが,カーネル管理外の割込みを 100 * サポートするため,これらはCPUロックのために用いない. 101 * そのため,BASEPRIを用いて擬似的にCPUロックフラグを実現する. 102 * 103 * まず,CPUロック状態を管理すための変数(lock_flag)を用意する. 104 * 105 * CPUロックフラグがクリアされている間は,BASEPRIをモデル上の割込み 106 * 優先度マスクの値に設定する.この間は,モデル上の割込み優先度マス 107 * クは,BASEPRIを用いる. 113 108 * 114 * »êÉεÄCPUbNtOªZbg³ê¢éÔÍCBASEPRIðCJ[l115 * ÇOÌàÌð·×ÄÌÝvð}XN·él(TIPM_LOCK)ÆC116 * fãÌÝDæx}XNÆÌ¢ûÉÝè·éD±ÌÔÌfã117 * ÌÝDæx}XNÍC»Ì½ßÌÏ(saved_iipm, à\»ÅÛ)118 * ðpÓµÄÛ·éD119 */ 120 121 /* 122 * ÝDæx}XNÌO\»Æà\»ÌÏ·123 * 124 * AZu¾êÌ\[Xt@C©çCN[h·éê̽ßÉC125 * CAST ðgp126 * ÝDæxÌrbg(TBITW_IPRI)ª 8 ÌêÍCàDæx255127 * ÍCODæx -1 ÉηéD128 */ 129 #define EXT_IPM(iipm) (CAST(PRI,((iipm >> (8 - TBITW_IPRI)) - (1 << TBITW_IPRI)))) /* à\»ðO\»É*/130 #define INT_IPM(ipm) (((1 << TBITW_IPRI) - CAST(uint8_t, -(ipm))) << (8 - TBITW_IPRI)) /* O\»ðà\»É*/131 132 /* 133 * CPU bNóÔÅÌÝDæx}XN109 * それに対してCPUロックフラグがセットされいる間は,BASEPRIを,カーネ 110 * ル管理外のものを除くすべての割込み要求をマスクする値(TIPM_LOCK)と, 111 * モデル上の割込み優先度マスクとの高い方に設定する.この間のモデル上 112 * の割込み優先度マスクは,そのための変数(saved_iipm, 内部表現で保持) 113 * を用意して保持する. 114 */ 115 116 /* 117 * 割込み優先度マスクの外部表現と内部表現の変換 118 * 119 * アセンブリ言語のソースファイルからインクルードする場合のために, 120 * CASTを使用 121 * 割込み優先度のビット幅(TBITW_IPRI)が 8 の場合は,内部優先度 255 122 * は,外部優先度 -1 に対応する. 123 */ 124 #define EXT_IPM(iipm) (CAST(PRI,((iipm >> (8 - TBITW_IPRI)) - (1 << TBITW_IPRI)))) /* 内部表現を外部表現に */ 125 #define INT_IPM(ipm) (((1 << TBITW_IPRI) - CAST(uint8_t, -(ipm))) << (8 - TBITW_IPRI)) /* 外部表現を内部表現に */ 126 127 /* 128 * CPUロック状態での割込み優先度マスク 134 129 */ 135 130 #define TIPM_LOCK TMIN_INTPRI 136 131 137 132 /* 138 * CPU bNóÔÅÌÝDæx}XNÌà\»139 * 140 * TIPM_LOCK ÍCCPUbNóÔÅÌBASEPRIÌlDJ[lÇOÌàÌð141 * ·×ÄÌÝð}XN·élÉè`·éD133 * CPUロック状態での割込み優先度マスクの内部表現 134 * 135 * TIPM_LOCKは,CPUロック状態でのBASEPRIの値.カーネル管理外のものを 136 * 除くすべての割込みをマスクする値に定義する. 142 137 */ 143 138 #define IIPM_LOCK INT_IPM(TIPM_LOCK) 144 139 145 140 /* 146 * TIPM_ENAALL iÝDæx}XNSðjÌà\»147 * 148 * BASEPRI É '0' ðÝè·é±ÆÅCSÝð·éD141 * TIPM_ENAALL(割込み優先度マスク全解除)の内部表現 142 * 143 * BASEPRIに '0' を設定することで,全割込みを許可する. 149 144 */ 150 145 #define IIPM_ENAALL (0) … … 154 149 155 150 /* 156 * CPU bNtOÀ»Ì½ßÌÏ151 * CPUロックフラグ実現のための変数 157 152 * 158 * ±êçÌÏÍCCPUbNóÔÌÌÝ«·¦Äàæ¢Æ·éD159 * CCÖÅCANZX̪ϻµÈ¢æ¤Cvolatile ðwèD160 */ 161 extern volatile bool_t lock_flag; /* CPU bNtOÌlðÛ·éÏ*/162 extern volatile uint32_t saved_iipm; /* ÝDæxð}XN·éÏ*/163 164 /* 165 * CPU bNóÔÖÌÚs166 * 167 * BASEPRI in[hEFAÌÝDæx}XNjðCsaved_iipmÉÛ¶µC168 * J[lÇOÌàÌð·×ÄÌÝð}XN·éliTIPM_LOCKj169 * ÉÝè·éDܽClock_flagðtrueÉ·éD170 * 171 * BASEPRI ªCÅ©çTIPM_LOCKƯ¶©»êæè¢êÉÍC»êð172 * saved_iipm ÉÛ¶·éÌÝÅCTIPM_LOCKÉÍÝèµÈ¢D±êÍCf173 * ãÌÝDæx}XNªCTIPM_LOCKƯ¶©»êæè¢xÉÝè174 * ³êÄ¢éóÔÉ ½éD175 * 176 * ±ÌÖÍCCPUbNóÔilock_flagªtrueÌóÔjÅÄÎêé±ÆÍ177 * È¢àÌÆzèµÄ¢éD153 * これらの変数は,CPUロック状態の時のみ書き換えてもよいとする. 154 * インライン関数中で,アクセスの順序が変化しないよう,volatile を指定. 155 */ 156 extern volatile bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */ 157 extern volatile uint32_t saved_iipm; /* 割込み優先度をマスクする変数 */ 158 159 /* 160 * CPUロック状態への移行 161 * 162 * BASEPRI(ハードウェアの割込み優先度マスク)を,saved_iipmに保存し, 163 * カーネル管理外のものを除くすべての割込みをマスクする値(TIPM_LOCK) 164 * に設定する.また,lock_flagをtrueにする. 165 * 166 * BASEPRIが,最初からTIPM_LOCKと同じかそれより高い場合には,それを 167 * saved_iipmに保存するのみで,TIPM_LOCKには設定しない.これは,モデル 168 * 上の割込み優先度マスクが,TIPM_LOCKと同じかそれより高いレベルに設定 169 * されている状態にあたる. 170 * 171 * この関数は,CPUロック状態(lock_flagがtrueの状態)で呼ばれることは 172 * ないものと想定している. 178 173 */ 179 174 Inline void … … 183 178 184 179 /* 185 * current_iipm() ÌÔèlð¼Úsaved_iipmÉÛ¶¹¸CêÏiipm186 * ðp¢Ä¢éÌÍCcurrent_iipm()ðÄñ¾¼ãÉݪ¶µC187 * N®³ê½ÝÅsaved_iipmªÏX³êéÂ\«ª é½ßÅ188 * éD180 * current_iipm()の返り値を直接saved_iipmに保存せず,一時変数iipm 181 * を用いているのは,current_iipm()を呼んだ直後に割込みが発生し, 182 * 起動された割込み処理でsaved_iipmが変更される可能性があるためで 183 * ある. 189 184 */ 190 185 iipm = get_basepri(); … … 192 187 saved_iipm = iipm; 193 188 lock_flag = true; 194 /* NeBJZNVÌOãŪ«·íéÂ\«ª é*/189 /* クリティカルセクションの前後でメモリが書き換わる可能性がある */ 195 190 Asm("":::"memory"); 196 191 } … … 200 195 201 196 /* 202 * CPU bNóÔÌð203 * 204 * lock_flag ðfalseɵCIPMin[hEFAÌÝDæx}XNjðC205 * saved_iipm ÉÛ¶µ½lÉß·D206 * 207 * ±ÌÖÍCCPUbNóÔilock_flagªtrueÌóÔjÅÌÝÄÎêéà208 * ÌÆzèµÄ¢éD197 * CPUロック状態の解除 198 * 199 * lock_flagをfalseにし,IPM(ハードウェアの割込み優先度マスク)を, 200 * saved_iipmに保存した値に戻す. 201 * 202 * この関数は,CPUロック状態(lock_flagがtrueの状態)でのみ呼ばれるも 203 * のと想定している. 209 204 */ 210 205 Inline void 211 206 x_unlock_cpu(void) 212 207 { 213 /* NeBJZNVÌOãŪ«·íéÂ\«ª é*/208 /* クリティカルセクションの前後でメモリが書き換わる可能性がある */ 214 209 Asm("":::"memory"); 215 210 lock_flag = false; … … 221 216 222 217 /* 223 * CPU bNóÔÌQÆ218 * CPUロック状態の参照 224 219 */ 225 220 Inline bool_t … … 234 229 235 230 /* 236 * ifãÌjÝDæx}XNÌÝè237 * 238 * CPU bNtOªNA³êÄ¢éÍCn[hEFAÌÝDæx}239 * XNðÝè·éDCPUbNtOªZbg³êÄ¢éÍCsaved_iipm240 * ðÝèµC³çÉCn[hEFAÌÝDæx}XNðCÝèµæ¤Æ241 * µ½ifãÌjÝDæx}XNÆTIPM_LOCKÌ¢ûÉÝè·éD231 * (モデル上の)割込み優先度マスクの設定 232 * 233 * CPUロックフラグがクリアされている時は,ハードウェアの割込み優先度マ 234 * スクを設定する.CPUロックフラグがセットされている時は,saved_iipm 235 * を設定し,さらに,ハードウェアの割込み優先度マスクを,設定しようと 236 * した(モデル上の)割込み優先度マスクとTIPM_LOCKの高い方に設定する. 242 237 */ 243 238 Inline void … … 263 258 264 259 /* 265 * ifãÌjÝDæx}XNÌQÆ266 * 267 * CPU bNtOªNA³êÄ¢éÍn[hEFAÌÝDæx}268 * XNðCZbg³êÄ¢éÍsaved_iipmðQÆ·éD260 * (モデル上の)割込み優先度マスクの参照 261 * 262 * CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ 263 * スクを,セットされている時はsaved_iipmを参照する. 269 264 */ 270 265 Inline PRI … … 292 287 293 288 /* 294 * SVC nhiprc_support.Sj289 * SVCハンドラ(prc_support.S) 295 290 */ 296 291 extern void svc_handler(void); 297 292 298 293 /* 299 * X^[gAbv[`istart.Sj294 * スタートアップルーチン(start.S) 300 295 */ 301 296 extern void _start(void); 302 297 303 298 /* 304 * fBXpb`Ì®ìJniprc_support.Sj305 * 306 * start_dispatch ÍCJ[lN®ÉÄÑo·×«àÌÅC·×ÄÌ307 * ÝðÖ~µ½óÔiÝbNóÔƯÌóÔjÅÄÑo³È¯êÎ308 * ÈçÈ¢D299 * ディスパッチャの動作開始(prc_support.S) 300 * 301 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込 302 * みを禁止した状態(割込みロック状態と同等の状態)で呼び出さなければ 303 * ならない. 309 304 */ 310 305 extern void start_dispatch(void) NoReturn; … … 312 307 313 308 /* 314 * J[lÌI¹ÌÄoµiprc_support.Sj315 * 316 * call_exit_kernel ÍCJ[lÌI¹ÉÄÑo·×«àÌÅCñ^XN317 * ReLXgÉØè·¦ÄCJ[lÌI¹iexit_kerneljðÄÑo318 * ·D309 * カーネルの終了処理の呼出し(prc_support.S) 310 * 311 * call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク 312 * コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出 313 * す. 319 314 */ 320 315 extern void call_exit_kernel(void) NoReturn; 321 316 322 317 /* 323 * ACh[vÌÀ324 * 325 * PÉCPUbNóÔÆCPUbNðóÔðÄÑo·ÀÆ·éD326 * X[v[hÉüêéêÍ{ðwfi½ßðp¢Ä«·¦êÎÇ¢D318 * アイドルループの実装 319 * 320 * 単にCPUロック状態とCPUロック解除状態を呼び出す実装とする. 321 * スリープモードに入れる場合は本処理をwfi命令を用いて書き換えれば良い. 327 322 */ 328 323 Inline void … … 330 325 { 331 326 lock_flag = false; 332 /* CPU AbN => CPUbN*/327 /* CPUアンロック => CPUロック */ 333 328 Asm("\tmsr BASEPRI , %0" : : "r"(0) : "memory"); 334 329 Asm("\tmsr BASEPRI , %0" : : "r"(IIPM_LOCK) : "memory"); … … 337 332 338 333 /* 339 * ÝÔEÝnhÔ340 * 341 * ÝnhÔ(inhno)ÆÝÔ(intno)ÍCèݶÉ342 * EPSR ÉÝè³êéáOÔÆ·éD343 */ 344 345 /* 346 * ÝÔÌÍÍÌ»è334 * 割込み番号・割込みハンドラ番号 335 * 336 * 割込みハンドラ番号(inhno)と割込み番号(intno)は,割り込み発生時に 337 * EPSRに設定される例外番号とする. 338 */ 339 340 /* 341 * 割込み番号の範囲の判定 347 342 */ 348 343 #define VALID_INTNO(intno) ((TMIN_INTNO <= (intno)) && ((intno) <= TMAX_INTNO)) … … 351 346 352 347 /* 353 * ÝnhÌÝè354 * 355 * xNgÔinhnoÌÝnhÌN®Ônint_entryÉÝè·éDÝ356 * nhe[u348 * 割込みハンドラの設定 349 * 350 * ベクトル番号inhnoの割込みハンドラの起動番地int_entryに設定する.割込み 351 * ハンドラテーブル 357 352 */ 358 353 Inline void 359 354 x_define_inh(INHNO inhno, FP int_entry) 360 355 { 361 /* ÁÉs¤ÍÈ¢*/362 } 363 364 /* 365 * ÝnhÌoüû̶¬}N356 /* 特に行う処理はない */ 357 } 358 359 /* 360 * 割込みハンドラの出入口処理の生成マクロ 366 361 * 367 362 */ … … 370 365 371 366 /* 372 * ÝvÖ~tO373 */ 374 375 /* 376 * Ý®«ªÝè³êÄ¢é©ð»Ê·é½ßÌÏikernel_cfg.cj367 * 割込み要求禁止フラグ 368 */ 369 370 /* 371 * 割込み属性が設定されているかを判別するための変数(kernel_cfg.c) 377 372 */ 378 373 extern const uint32_t bitpat_cfgint[]; 379 374 380 375 /* 381 * ÝvÖ~tOÌZbg382 * 383 * Ý®«ªÝè³êĢȢÝvCÉεÄÝvÖ~384 * tOðNAµæ¤Æµ½êÉÍCfalseðÔ·D376 * 割込み要求禁止フラグのセット 377 * 378 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 379 * フラグをクリアしようとした場合には,falseを返す. 385 380 */ 386 381 Inline bool_t … … 390 385 391 386 /* 392 * Ý®«ªÝè³êĢȢê387 * 割込み属性が設定されていない場合 393 388 */ 394 389 if ((bitpat_cfgint[intno >> 5] & (1 << (intno & 0x1f))) == 0x00) { … … 412 407 413 408 /* 414 * ÝvÖ~tOÌð415 * 416 * Ý®«ªÝè³êĢȢÝvCÉεÄÝvÖ~417 * tOðNAµæ¤Æµ½êÉÍCfalseðÔ·D409 * 割込み要求禁止フラグの解除 410 * 411 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 412 * フラグをクリアしようとした場合には,falseを返す. 418 413 */ 419 414 Inline bool_t … … 423 418 424 419 /* 425 * Ý®«ªÝè³êĢȢê420 * 割込み属性が設定されていない場合 426 421 */ 427 422 if ((bitpat_cfgint[intno >> 5] & (1 << (intno & 0x1f))) == 0x00) { … … 458 453 459 454 /* 460 * ÝvCÌ®«ÌÝè455 * 割込み要求ラインの属性の設定 461 456 */ 462 457 extern void x_config_int(INTNO intno, ATR intatr, PRI intpri); 463 458 464 459 /* 465 * ÝnhüûÅKvÈIRCì460 * 割込みハンドラ入口で必要なIRC操作 466 461 */ 467 462 Inline void 468 463 i_begin_int(INTNO intno) 469 464 { 470 /* ÁÉs¤ÍÈ¢*/471 } 472 473 /* 474 * ÝnhÌoûÅKvÈIRCì465 /* 特に行う処理はない */ 466 } 467 468 /* 469 * 割込みハンドラの出口で必要なIRC操作 475 470 */ 476 471 Inline void 477 472 i_end_int(INTNO intno) 478 473 { 479 /* ÁÉs¤ÍÈ¢*/480 } 481 482 /* 483 * CPU áOnhÖW474 /* 特に行う処理はない */ 475 } 476 477 /* 478 * CPU例外ハンドラ関係 484 479 */ 485 480 486 481 /* 487 * CPU áOnhÔ482 * CPU例外ハンドラ番号 488 483 */ 489 484 #define VALID_EXCNO_DEFEXC(excno) (TMIN_EXCNO <= (excno) && (excno) <= TMAX_EXCNO) 490 485 491 486 /* 492 * CPU áOnhÌÂ487 * CPU例外ハンドラの許可 493 488 */ 494 489 extern void enable_exc(EXCNO excno); 495 490 496 491 /* 497 * CPU áOnhÌÖ~492 * CPU例外ハンドラの禁止 498 493 */ 499 494 extern void disable_exc(EXCNO excno); 500 495 501 496 /* 502 * CPU áOnhÌÝè497 * CPU例外ハンドラの設定 503 498 */ 504 499 Inline void … … 506 501 { 507 502 /* 508 * êÌáOÍÂðs¤Kvª é503 * 一部の例外は許可を行う必要がある 509 504 */ 510 505 enable_exc(excno); … … 512 507 513 508 /* 514 * CPU áOnhÌüû̶¬}N509 * CPU例外ハンドラの入口処理の生成マクロ 515 510 */ 516 511 #define EXC_ENTRY(excno, exchdr) exchdr … … 519 514 520 515 /* 521 * CPU áOGgiprc_support.Sj516 * CPU例外エントリ(prc_support.S) 522 517 */ 523 518 extern void exc_entry(void); 524 519 525 520 /* 526 * ÝGgiprc_support.Sj521 * 割込みエントリ(prc_support.S) 527 522 */ 528 523 extern void int_entry(void); 529 524 530 525 /* 531 * vZbT˶Ìú»526 * プロセッサ依存の初期化 532 527 */ 533 528 extern void prc_initialize(void); 534 529 535 530 /* 536 * vZbT˶ÌI¹531 * プロセッサ依存の終了時処理 537 532 */ 538 533 extern void prc_terminate(void) NoReturn; 539 534 540 535 /* 541 * atexit ÌÆfXgN^ÌÀs536 * atexitの処理とデストラクタの実行 542 537 */ 543 538 Inline void … … 548 543 549 544 /* 550 * software_term_hook ÖÌ|C^ðCêUvolatilewèÌ éfpÉã551 * üµÄ©çg¤ÌÍC0ÆÌärªÅK»Åí³êÈ¢æ¤É·é½552 * ßÅ éD545 * software_term_hookへのポインタを,一旦volatile指定のあるfpに代 546 * 入してから使うのは,0との比較が最適化で削除されないようにするた 547 * めである. 553 548 */ 554 549 if (fp != 0) { … … 558 553 559 554 /* 560 * o^³êĢȢáOª¶·éÆÄÑo³êé555 * 登録されていない例外が発生すると呼び出される 561 556 */ 562 557 extern void default_exc_handler(void *p_excinf); 563 558 564 559 /* 565 * ¢o^Ìݪ¶µ½êÉÄÑo³êé560 * 未登録の割込みが発生した場合に呼び出される 566 561 */ 567 562 extern void default_int_handler(void *p_excinf); -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.