Changeset 315 for rubycfg_asp/trunk/asp_dcre/arch/rx630_gcc/prc_config.h
- Timestamp:
- Jul 23, 2017, 2:29:40 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_asp/trunk/asp_dcre/arch/rx630_gcc/prc_config.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r313 r315 11 11 * Copyright (C) 2013 by Mitsuhiro Matsuura 12 12 * 13 * ä¸è¨èä½æ¨©è 14 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 15 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 16 * å¤ã»åé 17 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 18 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 19 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 20 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 21 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 22 * ç¨ã§ããå½¢ã§åé 23 å¸ããå ´åã«ã¯ï¼åé 24 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 25 * è 26 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 27 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 28 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 29 * ç¨ã§ããªãå½¢ã§åé 30 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 31 * ã¨ï¼ 32 * (a) åé 33 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 34 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 35 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 36 * (b) åé 37 å¸ã®å½¢æ 38 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 39 * å ±åãããã¨ï¼ 40 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 41 * 害ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ããå 43 責ãããã¨ï¼ 44 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 45 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 46 ããã³TOPPERSããã¸ã§ã¯ãã 47 * å 48 責ãããã¨ï¼ 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 * 免責すること. 49 35 * 50 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 51 ã 52 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 53 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 54 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 55 * ã®è²¬ä»»ãè² ããªãï¼ 36 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 37 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 38 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 39 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 40 * の責任を負わない. 56 41 * 57 42 * @(#) $Id$ … … 59 44 60 45 /* 61 * ããã»ããµä¾åã¢ã¸ã¥ã¼ã«ï¼RX630ç¨ï¼62 * 63 * ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_config.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯64 * ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã65 * ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼46 * プロセッサ依存モジュール(RX630用) 47 * 48 * このインクルードファイルは,target_config.h(または,そこからインク 49 * ルードされるファイル)のみからインクルードされる.他のファイルから 50 * 直接インクルードしてはならない. 66 51 */ 67 52 … … 70 55 71 56 /* 72 * ããã»ããµã®ç¹æ®å½ä»¤ã®ã¤ã³ã©ã¤ã³é¢æ°å®ç¾©57 * プロセッサの特殊命令のインライン関数定義 73 58 */ 74 59 #include "prc_insn.h" … … 78 63 79 64 /* 80 * éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯åæå¤65 * 非タスクコンテキスト用のスタック初期値 81 66 */ 82 67 … … 84 69 85 70 /* 86 * ã¿ã¹ã¯ã³ã³ããã¹ããããã¯ã®å®ç¾©71 * タスクコンテキストブロックの定義 87 72 */ 88 73 typedef struct task_context_block { 89 void *sp; /* ã¹ã¿ãã¯ãã¤ã³ã¿*/90 FP pc; /* ããã°ã©ã ã«ã¦ã³ã¿*/74 void *sp; /* スタックポインタ */ 75 FP pc; /* プログラムカウンタ */ 91 76 } TSKCTXB; 92 77 93 78 94 79 /* 95 * å²è¾¼ã¿çºçåæ°ãä¿åããå¤æ°80 * 割込み発生回数を保存する変数 96 81 */ 97 82 extern uint16_t intnest; … … 100 85 101 86 /* 102 * CPUããã¯ç¶æ 103 ã§ã®å²è¾¼ã¿åªå 104 度ãã¹ã¯ 105 * 106 * TIPM_LOCKã¯ï¼CPUããã¯ç¶æ 107 ã§ã®å²è¾¼ã¿åªå 108 度ãã¹ã¯ï¼ããªãã¡ï¼ã«ã¼ã 109 * ã«ç®¡çå¤ã®ãã®ãé¤ããã¹ã¦ã®å²è¾¼ã¿è¦æ±ããã¹ã¯ããå¤ã«å®ç¾©ããï¼ 110 * 111 * TMIN_INTPRIå¤æ´ãããã¨ã§ç®¡çå¤å²è¾¼ã¿ã®æç¡ã決å®ããï¼ 112 * ä¾ãã°TMIN_INTPRIã-14ã«è¨å®ããã¨ï¼ã¬ãã«15ã®å²è¾¼ã¿ãã«ã¼ãã«ç®¡çå¤ã¨ 113 * ãªãï¼TMIN_INTPRIã-15ã«è¨å®ããã¨ï¼NMI以å¤ã«ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã 114 * è¨ããªããã¨ã«ãªãï¼ãã®å ´åã«ã¯-15ã«è¨å®ãããã¨ãæ¨å¥¨ããï¼ï¼ 87 * CPUロック状態での割込み優先度マスク 88 * 89 * TIPM_LOCKは,CPUロック状態での割込み優先度マスク,すなわち,カーネ 90 * ル管理外のものを除くすべての割込み要求をマスクする値に定義する. 91 * 92 * TMIN_INTPRI変更することで管理外割込みの有無を決定する. 93 * 例えばTMIN_INTPRIを-14に設定すると,レベル15の割込みがカーネル管理外と 94 * なる.TMIN_INTPRIを-15に設定すると,NMI以外にカーネル管理外の割込みを 95 * 設けないことになる(この場合には-15に設定することを推奨する). 115 96 */ 116 97 #ifndef TIPM_LOCK … … 121 102 122 103 /* 123 * TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã®å®ç¾ 124 */ 125 /* 126 * ã³ã³ããã¹ãã®åç 127 § 128 * 129 * RXã§ã¯ï¼å²è¾¼ã¿ã®æ»ãå 130 ãã¿ã¹ã¯ãã©ãããå¤æããããã« intnest 131 * ã使ç¨ãã¦ããï¼ãããç¨ãã¦ã³ã³ããã¹ããå¤æããï¼ 104 * TOPPERS標準割込み処理モデルの実現 105 */ 106 /* 107 * コンテキストの参照 108 * 109 * RXでは,割込みの戻り先がタスクかどうかを判断するために intnest 110 * を使用している.これを用いてコンテキストを判断する. 132 111 */ 133 112 Inline bool_t 134 113 sense_context( void ) 135 114 { 136 /* ãã¹ãã«ã¦ã³ã¿0ãã大ãªãéã¿ã¹ã¯ã³ã³ããã¹ã*/115 /* ネストカウンタ0より大なら非タスクコンテキスト */ 137 116 return ( intnest > 0U ); 138 117 } … … 140 119 141 120 /* 142 * CPUããã¯ãã©ã°å®ç¾ã®ããã®å¤æ° 143 * 144 * ãããã®å¤æ°ã¯ï¼CPUããã¯ç¶æ 145 ã®æã®ã¿æ¸ãæãã¦ãããã®ã¨ããï¼ 121 * CPUロックフラグ実現のための変数 122 * 123 * これらの変数は,CPUロック状態の時のみ書き換えてよいものとする. 146 124 */ 147 125 #if TIPM_LOCK != -15 148 extern bool_t lock_flag; /* CPUããã¯ãã©ã°ã®å¤ãä¿æããå¤æ° */ 149 extern uint32_t saved_ipl; /* å²è¾¼ã¿åªå 150 度ã¬ãã«ãä¿åããå¤æ° */ 126 extern bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */ 127 extern uint32_t saved_ipl; /* 割込み優先度レベルを保存する変数 */ 151 128 #endif /* TIPM_LOCK != -15 */ 152 129 … … 155 132 156 133 /* 157 * å²è¾¼ã¿åªå 158 度ãã¹ã¯ã®å¤é¨è¡¨ç¾ã¨å 159 é¨è¡¨ç¾ã®å¤æ 160 * 161 * RX630ã§ã¯ï¼ããã»ããµã¹ãã¼ã¿ã¹ã¯ã¼ãã¬ã¸ã¹ã¿ï¼PSWï¼ã®ä¸ãã 162 * 24ï½27ãããç®ã®4ãããã«å²è¾¼ã¿åªå 163 度ã¬ãã«ï¼IPLï¼ãç½®ããã¦ããï¼ 164 * ã«ã¼ãã«ç®¡çå¤å²è¾¼ã¿ãå®è£ 165 ããå ´åã«IPLã使ç¨ããå¶å¾¡ãè¡ãï¼ 166 * ã«ã¼ãã«ã¯å²è¾¼ã¿åªå 167 度ãã¹ã¯ï¼-1ããé£ç¶ããè² ã®å¤ï¼ã§ç®¡çãã㦠168 * ããããIPLã¨ã®å¤æãå¿ 169 è¦ã¨ãªãï¼ 170 */ 171 #define IPL_TO_IPM( ipl ) (-(( PRI )(( ipl ) >> 24U ))) /* IPLãIPMã« */ 172 #define IPM_TO_IPL( ipm ) ((( uint32_t )(-( ipm ))) << 24U ) /* IPMãIPLã« */ 173 174 175 /* 176 * CPUããã¯ç¶æ 177 ã§ã®å²è¾¼ã¿åªå 178 度ãã¹ã¯ã®IPL 134 * 割込み優先度マスクの外部表現と内部表現の変換 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 179 148 */ 180 149 #define IPL_LOCK ( IPM_TO_IPL( TIPM_LOCK ) ) 181 150 182 151 /* 183 * TIPM_ENAALLï¼å²è¾¼ã¿åªå 184 度ãã¹ã¯å 185 ¨è§£é¤ï¼ã®IPL 152 * TIPM_ENAALL(割込み優先度マスク全解除)のIPL 186 153 */ 187 154 #define IPL_ENAALL ( IPM_TO_IPL( TIPM_ENAALL ) ) … … 191 158 192 159 /* 193 * å²è¾¼ã¿è¦å æ¯ã®ã¬ãã« & å±æ§å®ç¾©ãã¼ãã«194 * ( ãã³ãã¬ã¼ããã¡ã¤ã«ã«ããåºå)160 * 割込み要因毎のレベル & 属性定義テーブル 161 * (テンプレートファイルによる出力) 195 162 */ 196 163 typedef struct cfg_int_info { … … 203 170 204 171 /* 205 * å²è¾¼ã¿çªå·ã®ç¯å²ã®å¤å® 206 * 207 * å²è¾¼ã¿çªå·ãæå¹ãªå¤ãå³å¯ã«ãã§ãã¯ãããã, 208 * ã³ã³ãã£ã®ã¥ã¬ã¼ã¿åºåãã¼ãã«ãåç 209 §ãã. 172 * 割込み番号の範囲の判定 173 * 174 * 割込み番号が有効な値か厳密にチェックするため, 175 * コンフィギュレータ出力テーブルを参照する. 210 176 */ 211 177 #define VALID_INTNO( intno ) \ … … 214 180 #define VALID_INTNO_CFGINT( intno ) VALID_INTNO( intno ) 215 181 216 /* cre_int ã§æå¹ãªå²è¾¼ã¿çªå·ã®æå®*/182 /* cre_intで有効な割込み番号の指定 */ 217 183 #define VALID_INTNO_CREINT VALID_INTNO_CFGINT((intno)) 218 184 219 /* cre_isr ã§æå¹ãªå²è¾¼ã¿çªå·ã®æå®*/185 /* cre_isrで有効な割込み番号の指定 */ 220 186 #define VALID_INTNO_CREISR(intno) VALID_INTNO_CFGINT((intno)) 221 187 222 188 223 189 /* 224 * å²è¾¼ã¿å¶å¾¡ã¬ã¸ã¹ã¿é¢é£ã®å®ç¾©190 * 割込み制御レジスタ関連の定義 225 191 */ 226 192 #define IRQ_POSEDGE ( 0x08U ) … … 231 197 232 198 /* 233 * CPUããã¯ç¶æ 234 ã¸ã®ç§»è¡ 235 * 236 * IPMï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 237 度ãã¹ã¯ï¼ãï¼saved_iipmã«ä¿åãï¼ã«ã¼ 238 * ãã«ç®¡çå¤ã®ãã®ãé¤ããã¹ã¦ã®å²è¾¼ã¿è¦æ±ããã¹ã¯ããå¤ï¼TIPM_LOCKï¼ 239 * ã«è¨å®ããï¼ã¾ãï¼lock_flagãTRUEã«ããï¼ 240 * 241 * IPMãï¼æåããTIPM_LOCKã¨åããããããé«ãå ´åã«ã¯ï¼ããã 242 * saved_iipmã«ä¿åããã®ã¿ã§ï¼TIPM_LOCKã«ã¯è¨å®ããªãï¼ããã¯ï¼ã¢ãã« 243 * ä¸ã®å²è¾¼ã¿åªå 244 度ãã¹ã¯ãï¼TIPM_LOCKã¨åããããããé«ãã¬ãã«ã«è¨å® 245 * ããã¦ããç¶æ 246 ã«ãããï¼ 247 * 248 * ãã®é¢æ°ã¯ï¼CPUããã¯ç¶æ 249 ï¼lock_flagãTRUEã®ç¶æ 250 ï¼ã§å¼ã°ãããã¨ã¯ 251 * ãªããã®ã¨æ³å®ãã¦ããï¼ 199 * 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 * ないものと想定している. 252 212 */ 253 213 Inline void … … 260 220 261 221 /* 262 * current_ipl() ã®è¿ãå¤ãç´æ¥saved_iplã«ä¿åããï¼ä¸æå¤æ°ipl263 * ãç¨ãã¦ããã®ã¯ï¼current_ipl()ãå¼ãã ç´å¾ã«å²è¾¼ã¿ãçºçãï¼264 * èµ·åãããå²è¾¼ã¿å¦çã§saved_iplãå¤æ´ãããå¯è½æ§ãããããã§265 * ããï¼222 * current_ipl()の返り値を直接saved_iplに保存せず,一時変数ipl 223 * を用いているのは,current_ipl()を呼んだ直後に割込みが発生し, 224 * 起動された割込み処理でsaved_iplが変更される可能性があるためで 225 * ある. 266 226 */ 267 227 ipl = current_ipl(); … … 280 240 281 241 /* 282 * CPUããã¯ç¶æ 283 ã®è§£é¤ 284 * 285 * lock_flagãFALSEã«ãï¼IPMï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 286 度ãã¹ã¯ï¼ãï¼ 287 * saved_iipmã«ä¿åããå¤ã«æ»ãï¼ 288 * 289 * ãã®é¢æ°ã¯ï¼CPUããã¯ç¶æ 290 ï¼lock_flagãtrueã®ç¶æ 291 ï¼ã§ã®ã¿å¼ã°ããã 292 * ã®ã¨æ³å®ãã¦ããï¼ 242 * CPUロック状態の解除 243 * 244 * lock_flagをFALSEにし,IPM(ハードウェアの割込み優先度マスク)を, 245 * saved_iipmに保存した値に戻す. 246 * 247 * この関数は,CPUロック状態(lock_flagがtrueの状態)でのみ呼ばれるも 248 * のと想定している. 293 249 */ 294 250 Inline void … … 308 264 309 265 /* 310 * CPUããã¯ç¶æ 311 ã®åç 312 § 266 * CPUロック状態の参照 313 267 */ 314 268 Inline bool_t … … 327 281 328 282 /* 329 * ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 330 度ãã¹ã¯ã®è¨å® 331 * 332 * CPUããã¯ãã©ã°ãã¯ãªã¢ããã¦ããæã¯ï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 333 度ã 334 * ã¹ã¯ãè¨å®ããï¼CPUããã¯ãã©ã°ãã»ããããã¦ããæã¯ï¼saved_iipm 335 * ãè¨å®ãï¼ããã«ï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 336 度ãã¹ã¯ãï¼è¨å®ããã㨠337 * ããï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 338 度ãã¹ã¯ã¨TIPM_LOCKã®é«ãæ¹ã«è¨å®ããï¼ 283 * (モデル上の)割込み優先度マスクの設定 284 * 285 * CPUロックフラグがクリアされている時は,ハードウェアの割込み優先度マ 286 * スクを設定する.CPUロックフラグがセットされている時は,saved_iipm 287 * を設定し,さらに,ハードウェアの割込み優先度マスクを,設定しようと 288 * した(モデル上の)割込み優先度マスクとTIPM_LOCKの高い方に設定する. 339 289 */ 340 290 Inline void … … 360 310 361 311 /* 362 * ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 363 度ãã¹ã¯ã®åç 364 § 365 * 366 * CPUããã¯ãã©ã°ãã¯ãªã¢ããã¦ããæã¯ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 367 度ã 368 * ã¹ã¯ãï¼ã»ããããã¦ããæã¯saved_iipmãåç 369 §ããï¼ 312 * (モデル上の)割込み優先度マスクの参照 313 * 314 * CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ 315 * スクを,セットされている時はsaved_iipmを参照する. 370 316 */ 371 317 Inline PRI … … 391 337 392 338 /* 393 * å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ã»ãã394 * 395 * å²è¾¼ã¿å±æ§ãè¨å®ããã¦ããªãå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦å²è¾¼ã¿è¦æ±ç¦æ¢396 * ãã©ã°ãã»ãããããã¨ããå ´åã«ã¯ï¼FALSEãè¿ãï¼339 * 割込み要求禁止フラグのセット 340 * 341 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 342 * フラグをセットしようとした場合には,FALSEを返す. 397 343 */ 398 344 Inline bool_t … … 400 346 { 401 347 /* 402 * ã¬ãã«å®ç¾©ã0ã§ããå ´åã¯CFG_INTããã¦ããªã348 * レベル定義が0である場合はCFG_INTされていない 403 349 */ 404 350 if( cfg_int_table[intno].intpri == 0 ){ … … 416 362 417 363 /* 418 * å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ã¯ãªã¢419 * 420 * å²è¾¼ã¿å±æ§ãè¨å®ããã¦ããªãå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦å²è¾¼ã¿è¦æ±ç¦æ¢421 * ãã©ã°ãã¯ãªã¢ãããã¨ããå ´åã«ã¯ï¼FALSEãè¿ãï¼364 * 割込み要求禁止フラグのクリア 365 * 366 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 367 * フラグをクリアしようとした場合には,FALSEを返す. 422 368 */ 423 369 Inline bool_t … … 425 371 { 426 372 /* 427 * ã¬ãã«å®ç¾©ã0ã§ããå ´åã¯CFG_INTããã¦ããªã373 * レベル定義が0である場合はCFG_INTされていない 428 374 */ 429 375 if( cfg_int_table[intno].intpri == 0 ){ … … 441 387 442 388 /* 443 * å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢389 * 割込み要求のクリア 444 390 */ 445 391 Inline void … … 454 400 455 401 /* 456 * å²è¾¼ã¿è¦æ±ã®ãã§ãã¯402 * 割込み要求のチェック 457 403 */ 458 404 Inline bool_t … … 460 406 { 461 407 /* 462 * å²è¾¼ã¿è¦æ±ã¬ã¸ã¹ã¿ã¯0 or 1ã§ãããªããã,463 * ãã®ã¾ã¾ã®å¤ãè¿ã.408 * 割込み要求レジスタは0 or 1でしかないため, 409 * そのままの値を返す. 464 410 */ 465 411 return ( *IR_REG(intno) ); … … 471 417 472 418 /* 473 * å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å®419 * 割込み要求ラインの属性の設定 474 420 */ 475 421 extern void x_config_int( INTNO intno, ATR intatr, PRI intpri ); … … 477 423 478 424 /* 479 * å²è¾¼ã¿ãã³ãã©ã®å 480 ¥å£ã§å¿ 481 è¦ãªIRCæä½ 425 * 割込みハンドラの入口で必要なIRC操作 482 426 * 483 427 */ … … 488 432 489 433 /* 490 * ã¬ãã«æ¤åºã®å²è¾¼ã¿ã«å¯¾ãã¦ã¯å²è¾¼ã¿ã¹ãã¼ã¿ã¹491 * ãã©ã°ãã¯ãªã¢ãã.434 * レベル検出の割込みに対しては割込みステータス 435 * フラグをクリアする. 492 436 */ 493 437 if( ( cfg_int_table[intno].intatr & TA_LOWLEVEL ) > 0 ){ 494 438 if( *IR_REG(intno) > 0U ){ 495 439 /* 496 * å¤é¨å²è¾¼ã¿ã®å ´å, IRQ端åãHighã«æ»ã£ã¦ãã497 * ãã¨ã確èªããæ¨ãè¨è¼ããã¦ããã, çç¥ãã.440 * 外部割込みの場合, IRQ端子がHighに戻っている 441 * ことを確認する旨が記載されているが, 省略する. 498 442 */ 499 443 // *ir_reg_addr[intno] = 0U; 500 444 501 445 /* 502 * ãã¼ãã¦ã§ã¢ããã¥ã¢ã«ã«0ã«ãªã£ããã¨ã503 * 確èªããæ¨ãè¨è¼ãããã, ã¬ã¸ã¹ã¿å¤ãèªã¿åºã.446 * ハードウェアマニュアルに0になったことを 447 * 確認する旨が記載あるため, レジスタ値を読み出す. 504 448 */ 505 449 // reg = *ir_reg_addr[intno]; … … 510 454 511 455 /* 512 * å²è¾¼ã¿ãã³ãã©ã®åºå£ã§å¿ 513 è¦ãªIRCæä½ 456 * 割込みハンドラの出口で必要なIRC操作 514 457 * 515 458 */ … … 517 460 i_end_int( INTNO intno ) 518 461 { 519 /* ç¹ã«è¡ãã¹ãå¦çã¯ãªã */ 520 } 521 522 523 /* 524 * æé«åªå 525 é ä½ã¿ã¹ã¯ã¸ã®ãã£ã¹ãããï¼prc_support.a30ï¼ 526 * 527 * dispatchã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãããå¼ã³åºããããµã¼ãã¹ã³ã¼ã«å¦çã 528 * ãå¼ã³åºãã¹ããã®ã§ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã»CPUããã¯ç¶æ 529 ã»ãã£ã¹ãã 530 * ã許å¯ç¶æ 531 ã»ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 532 度ãã¹ã¯å 533 ¨è§£é¤ç¶æ 534 ã§å¼ã³åºã㪠535 * ããã°ãªããªãï¼ 462 /* 特に行うべき処理はない */ 463 } 464 465 466 /* 467 * 最高優先順位タスクへのディスパッチ(prc_support.a30) 468 * 469 * dispatchは,タスクコンテキストから呼び出されたサービスコール処理か 470 * ら呼び出すべきもので,タスクコンテキスト・CPUロック状態・ディスパッ 471 * チ許可状態・(モデル上の)割込み優先度マスク全解除状態で呼び出さな 472 * ければならない. 536 473 */ 537 474 extern void dispatch( void ); 538 475 539 476 /* 540 * ãã£ã¹ãããã£ã®åä½éå§ï¼prc_support.a30ï¼ 541 * 542 * start_dispatchã¯ï¼ã«ã¼ãã«èµ·åæã«å¼ã³åºãã¹ããã®ã§ï¼ãã¹ã¦ã®å²è¾¼ 543 * ã¿ãç¦æ¢ããç¶æ 544 ï¼å 545 ¨å²è¾¼ã¿ããã¯ç¶æ 546 ã¨åçã®ç¶æ 547 ï¼ã§å¼ã³åºããªããã° 548 * ãªããªãï¼ 477 * ディスパッチャの動作開始(prc_support.a30) 478 * 479 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込 480 * みを禁止した状態(全割込みロック状態と同等の状態)で呼び出さなければ 481 * ならない. 549 482 */ 550 483 extern void start_dispatch( void ) NoReturn; 551 484 552 485 /* 553 * ç¾å¨ã®ã³ã³ããã¹ããæ¨ã¦ã¦ãã£ã¹ãããï¼prc_support.a30ï¼ 554 * 555 * exit_and_dispatchã¯ï¼ext_tskããå¼ã³åºãã¹ããã®ã§ï¼ã¿ã¹ã¯ã³ã³ãã 556 * ã¹ãã»CPUããã¯ç¶æ 557 ã»ãã£ã¹ããã許å¯ç¶æ 558 ã»ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 559 560 * 度ãã¹ã¯å 561 ¨è§£é¤ç¶æ 562 ã§å¼ã³åºããªããã°ãªããªãï¼ 486 * 現在のコンテキストを捨ててディスパッチ(prc_support.a30) 487 * 488 * exit_and_dispatchは,ext_tskから呼び出すべきもので,タスクコンテキ 489 * スト・CPUロック状態・ディスパッチ許可状態・(モデル上の)割込み優先 490 * 度マスク全解除状態で呼び出さなければならない. 563 491 */ 564 492 #define _kernel_exit_and_dispatch(); \ … … 569 497 570 498 /* 571 * ã«ã¼ãã«ã®çµäºå¦çã®å¼åºãï¼prc_support.a30ï¼572 * 573 * call_exit_kernel ã¯ï¼ã«ã¼ãã«ã®çµäºæã«å¼ã³åºãã¹ããã®ã§ï¼éã¿ã¹ã¯574 * ã³ã³ããã¹ãã«åãæãã¦ï¼ã«ã¼ãã«ã®çµäºå¦çï¼exit_kernelï¼ãå¼ã³åº575 * ãï¼499 * カーネルの終了処理の呼出し(prc_support.a30) 500 * 501 * call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク 502 * コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出 503 * す. 576 504 */ 577 505 extern void call_exit_kernel( void ) NoReturn; 578 506 579 507 /* 580 * ã¿ã¹ã¯ã³ã³ããã¹ãã®åæå 581 * 582 * ã¿ã¹ã¯ãä¼æ¢ç¶æ 583 ããå®è¡ã§ããç¶æ 584 ã«ç§»è¡ããæã«å¼ã°ããï¼ãã®æç¹ 585 * ã§ã¹ã¿ãã¯é åã使ã£ã¦ã¯ãªããªãï¼ 586 * 587 * activate_contextãï¼ã¤ã³ã©ã¤ã³é¢æ°ã§ã¯ãªããã¯ãå®ç¾©ã¨ãã¦ããã®ã¯ï¼ 588 * ãã®æç¹ã§ã¯TCBãå®ç¾©ããã¦ããªãããã§ããï¼ 508 * タスクコンテキストの初期化 509 * 510 * タスクが休止状態から実行できる状態に移行する時に呼ばれる.この時点 511 * でスタック領域を使ってはならない. 512 * 513 * activate_contextを,インライン関数ではなくマクロ定義としているのは, 514 * この時点ではTCBが定義されていないためである. 589 515 */ 590 516 extern void start_r( void ); … … 594 520 { \ 595 521 \ 596 /* ã¹ã¿ãã¯ãã¤ã³ã¿åæå¤ã®è¨å®*/ \522 /* スタックポインタ初期値の設定 */ \ 597 523 ( p_tcb )->tskctxb.sp = ( void * )((( uint32_t ) ( p_tcb )->p_tinib->stk ) + \ 598 524 ( p_tcb )->p_tinib->stksz ); \ 599 /* èµ·åçªå°ã®è¨å®*/ \525 /* 起動番地の設定 */ \ 600 526 ( p_tcb )->tskctxb.pc = ( FP ) start_r; \ 601 527 } \ … … 604 530 605 531 /* 606 * calltex ã¯ä½¿ç¨ããªã532 * calltexは使用しない 607 533 */ 608 534 #define OMIT_CALLTEX … … 610 536 611 537 /* 612 * å²è¾¼ã¿ãã³ãã©ã®è¨å® 613 * 614 * RX630ã¯ROMã«å²è¾¼ã¿ãã¯ã¿ãé 615 ç½®ããããï¼æ¬é¢æ°ã¯ç©ºé¢æ°ã§å®è£ 616 ããï¼ 538 * 割込みハンドラの設定 539 * 540 * RX630はROMに割込みベクタを配置するため,本関数は空関数で実装する. 617 541 */ 618 542 Inline void … … 623 547 624 548 /* 625 * CPUä¾å¤ãã³ãã©ã®è¨å® 626 * 627 * RX630ã¯ROMã«ä¾å¤ãã¯ã¿ãé 628 ç½®ããããï¼æ¬é¢æ°ã¯ç©ºé¢æ°ã§å®è£ 629 ããï¼ 549 * CPU例外ハンドラの設定 550 * 551 * RX630はROMに例外ベクタを配置するため,本関数は空関数で実装する. 630 552 */ 631 553 Inline void … … 636 558 637 559 /* 638 * å²è¾¼ã¿/ä¾å¤ãã³ãã©ã®å 639 ¥å£å¦çã®çæãã¯ã 640 * 641 * ãã³ãã¬ã¼ããã¡ã¤ã«ã«ããçæãããã空ãã¯ãã¨ããï¼ 560 * 割込み/例外ハンドラの入口処理の生成マクロ 561 * 562 * テンプレートファイルにより生成するため空マクロとする. 642 563 */ 643 564 #define HDR_ENTRY(hdr, intexc_num , tobejmp) 644 565 645 566 /* 646 * å²è¾¼ã¿ãã³ãã©ã®å 647 ¥å£å¦çã®çæãã¯ã 567 * 割込みハンドラの入口処理の生成マクロ 648 568 */ 649 569 #define _INT_ENTRY(inhno, inthdr) _kernel_##inthdr##_##inhno##_entry … … 656 576 657 577 /* 658 * CPUä¾å¤ãã³ãã©ã®å 659 ¥å£å¦çã®çæãã¯ã 578 * CPU例外ハンドラの入口処理の生成マクロ 660 579 */ 661 580 #define _EXC_ENTRY(excno , exchdr) _kernel_##exchdr##_##excno##_entry … … 668 587 669 588 /* 670 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ãã®åç 671 § 672 * 673 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ããï¼ã¿ã¹ã¯ã³ã³ããã¹ãã®æã«FALSEï¼ 674 * ããã§ãªãæã«trueãè¿ãï¼ 589 * CPU例外の発生した時のコンテキストの参照 590 * 591 * CPU例外の発生した時のコンテキストが,タスクコンテキストの時にFALSE, 592 * そうでない時にtrueを返す. 675 593 */ 676 594 Inline bool_t … … 678 596 { 679 597 /* 680 * ãã¹ãã«ã¦ã³ã¿ã1ãã大ãªãéã¿ã¹ã¯ã³ã³ããã¹ã598 * ネストカウンタが1より大なら非タスクコンテキスト 681 599 */ 682 600 return( intnest > 1U ); … … 686 604 687 605 /* 688 * CPUä¾å¤æ 689 å ± p_excinf ãã PSW ã®å¤ãåå¾ããããã®ãªãã»ããå¤ 690 * EXCNO + ACC + FPSW + R1ï½R15 + PC 606 * CPU例外情報 p_excinf から PSW の値を取得するためのオフセット値 607 * EXCNO + ACC + FPSW + R1~R15 + PC 691 608 */ 692 609 #define EXC_GET_PSW_OFFSET (4+8+4+60+4) … … 695 612 696 613 /* 697 * CPUä¾å¤ã®çºçããæã®IPLã®åç 698 § 614 * CPU例外の発生した時のIPLの参照 699 615 */ 700 616 Inline uint32_t … … 714 630 715 631 /* 716 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ãã¨å²è¾¼ã¿ã®ãã¹ã¯ç¶æ 717 ã®åç 718 § 719 * 720 * CPUä¾å¤ã®çºçããæã®ã·ã¹ãã ç¶æ 721 ãï¼ã«ã¼ãã«å®è¡ä¸ã§ãªãï¼ã¿ã¹ã¯ã³ 722 * ã³ããã¹ãã§ããï¼å 723 ¨å²è¾¼ã¿ããã¯ç¶æ 724 ã§ãªãï¼CPUããã¯ç¶æ 725 ã§ãªãï¼ï¼ã¢ 726 * ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 727 度ãã¹ã¯å 728 ¨è§£é¤ç¶æ 729 ã§ããæã«trueï¼ããã§ãªãæ 730 * ã«FALSEãè¿ãï¼CPUä¾å¤ãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿å¦çä¸ã§çºçããå ´å 731 * ã«ãFALSEãè¿ãï¼ï¼ 632 * CPU例外の発生した時のコンテキストと割込みのマスク状態の参照 633 * 634 * CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコ 635 * ンテキストであり,全割込みロック状態でなく,CPUロック状態でなく,(モ 636 * デル上の)割込み優先度マスク全解除状態である時にtrue,そうでない時 637 * にFALSEを返す(CPU例外がカーネル管理外の割込み処理中で発生した場合 638 * にもFALSEを返す). 732 639 * 733 * ã«ã¼ãã«å®è¡ä¸ã§ãªãâ (TIPM_LOCK== -15) Iãã©ã°== 1640 * カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1 734 641 * (else) IPL < IPL_LOCK 735 * ã¿ã¹ã¯ã³ã³ããã¹ãã§ããâintnest == 0 736 * å 737 ¨å²è¾¼ã¿ããã¯ã§ãªãâ Iãã©ã° == 1 738 * å²è¾¼ã¿åªå 739 度ãã¹ã¯ãå 740 ¨è§£é¤âIPL == 0 642 * タスクコンテキストである→intnest == 0 643 * 全割込みロックでない→ Iフラグ == 1 644 * 割込み優先度マスクが全解除→IPL == 0 741 645 * 742 646 * … … 751 655 752 656 /* 753 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ãã¨å²è¾¼ã¿ï¼CPUããã¯ç¶æ 754 ã®åç 755 § 756 * 757 * CPUä¾å¤ã®çºçããæã®ã·ã¹ãã ç¶æ 758 ãï¼ã«ã¼ãã«å®è¡ä¸ã§ãªãï¼ã¿ã¹ã¯ã³ 759 * ã³ããã¹ãã§ããï¼å 760 ¨å²è¾¼ã¿ããã¯ç¶æ 761 ã§ãªãï¼CPUããã¯ç¶æ 762 ã§ãªãæã« 763 * trueï¼ããã§ãªãæã«falseãè¿ãï¼CPUä¾å¤ãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿å¦ 764 * çä¸ã§çºçããå ´åã«ãfalseãè¿ãï¼ï¼ 657 * CPU例外の発生した時のコンテキストと割込み/CPUロック状態の参照 658 * 659 * CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコ 660 * ンテキストであり,全割込みロック状態でなく,CPUロック状態でない時に 661 * true,そうでない時にfalseを返す(CPU例外がカーネル管理外の割込み処 662 * 理中で発生した場合にもfalseを返す). 765 663 * 766 * ã«ã¼ãã«å®è¡ä¸ã§ãªãâ (TIPM_LOCK== -15) Iãã©ã°== 1664 * カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1 767 665 * (else) IPL < TIPM_LOCK 768 * ã¿ã¹ã¯ã³ã³ããã¹ãã§ããâintnest < 1 769 * å 770 ¨å²è¾¼ã¿ããã¯ã§ãªãâ Iãã©ã° == 1 771 * CPUããã¯ç¶æ 772 ã§ãªãâ(TIPM_LOCK== -15) Iãã©ã° == 1 666 * タスクコンテキストである→intnest < 1 667 * 全割込みロックでない→ Iフラグ == 1 668 * CPUロック状態でない→(TIPM_LOCK== -15) Iフラグ == 1 773 669 * (else) IPL < TIPM_LOCK 774 670 */ … … 788 684 789 685 /* 790 * ããã»ããµä¾åã®åæå686 * プロセッサ依存の初期化 791 687 */ 792 688 extern void prc_initialize( void ); 793 689 794 690 /* 795 * ããã»ããµä¾åã®çµäºæå¦ç691 * プロセッサ依存の終了時処理 796 692 */ 797 693 extern void prc_terminate( void ); … … 800 696 #ifndef OMIT_DEFAULT_INT_HANDLER 801 697 /* 802 * æªç»é²ã®å²è¾¼ã¿ãçºçããå ´åã«å¼ã³åºããã698 * 未登録の割込みが発生した場合に呼び出される 803 699 */ 804 700 void default_int_handler( void ); … … 807 703 #ifndef OMIT_DEFAULT_EXC_HANDLER 808 704 /* 809 * æªç»é²ã®ä¾å¤ãçºçããå ´åã«å¼ã³åºããã705 * 未登録の例外が発生した場合に呼び出される 810 706 */ 811 707 void default_exc_handler( void ); -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.