Changeset 315 for rubycfg_asp/trunk/asp_dcre/arch/rx630_ccrx/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_ccrx/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) ã®æ¡ä»¶ãï¼Free Software Foundation 15 * ã«ãã£ã¦å 16 ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨ 17 * è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢ 18 * ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé 19 å¸ï¼ä»¥ä¸ï¼ 20 * å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 21 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 22 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 23 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 24 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼åé 27 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 28 * è 29 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 30 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 31 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 32 * ç¨ã§ããªãå½¢ã§åé 33 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 34 * ã¨ï¼ 35 * (a) åé 36 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 37 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 38 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 39 * (b) åé 40 å¸ã®å½¢æ 41 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 42 * å ±åãããã¨ï¼ 43 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 44 * 害ãããï¼ä¸è¨èä½æ¨©è 45 ããã³TOPPERSããã¸ã§ã¯ããå 46 責ãããã¨ï¼ 13 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation 14 * によって公表されている GNU General Public License の Version 2 に記 15 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 16 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 17 * 利用と呼ぶ)することを無償で許諾する. 18 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 19 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 20 * スコード中に含まれていること. 21 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 22 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 23 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 24 * の無保証規定を掲載すること. 25 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 26 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 27 * と. 28 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 29 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 30 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 31 * 報告すること. 32 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 33 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 47 34 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 51 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 52 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 35 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 36 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 37 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 38 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 53 39 * 54 40 */ 55 41 56 42 /* 57 * ããã»ããµä¾åã¢ã¸ã¥ã¼ã«ï¼RX630ç¨ï¼58 * 59 * ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_config.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯60 * ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã61 * ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼43 * プロセッサ依存モジュール(RX630用) 44 * 45 * このインクルードファイルは,target_config.h(または,そこからインク 46 * ルードされるファイル)のみからインクルードされる.他のファイルから 47 * 直接インクルードしてはならない. 62 48 */ 63 49 … … 68 54 69 55 /* 70 * ããã»ããµã®ç¹æ®å½ä»¤ã®ã¤ã³ã©ã¤ã³é¢æ°å®ç¾©56 * プロセッサの特殊命令のインライン関数定義 71 57 */ 72 58 #include "prc_insn.h" … … 74 60 75 61 /* 76 * ã¿ã¼ã²ããä¾åã®å²è¾¼ã¿å±æ§ã®å®ç¾©62 * ターゲット依存の割込み属性の定義 77 63 */ 78 64 #define TARGET_INTATR (TA_POSEDGE | TA_NEGEDGE | TA_BOTHEDGE | TA_LOWLEVEL) … … 80 66 81 67 /* 82 * ã¹ã¿ãã¯ãµã¤ãºã®ãã§ãã¯æ¹æ³æå®68 * スタックサイズのチェック方法指定 83 69 */ 84 70 #define CHECK_STKSZ_ALIGN 4 … … 86 72 87 73 /* 88 * ã¿ã¹ã¯ã¹ã¿ãã¯ãµã¤ãºã®æå°å¤ 89 * 90 * ã¿ã¹ã¯èµ·åæã«4byte, 91 * å²è¾¼ã¿å 92 ¥å£å¦çã«ã¦48byte, CPUä¾å¤å 93 ¥å£å¦çã«ã¦84byte, 94 * ã§ãããã, æå°å¤ã¯88byteã¨ãã. 74 * タスクスタックサイズの最小値 75 * 76 * タスク起動時に4byte, 77 * 割込み入口処理にて48byte, CPU例外入口処理にて84byte, 78 * であるため, 最小値は88byteとする. 95 79 */ 96 80 #define TARGET_MIN_STKSZ 88 … … 98 82 99 83 /* 100 * éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯åæå¤84 * 非タスクコンテキスト用のスタック初期値 101 85 */ 102 86 … … 105 89 106 90 /* 107 * ã¿ã¹ã¯ã³ã³ããã¹ããããã¯ã®å®ç¾©91 * タスクコンテキストブロックの定義 108 92 */ 109 93 typedef struct task_context_block { 110 void *sp; /* ã¹ã¿ãã¯ãã¤ã³ã¿*/111 FP pc; /* ããã°ã©ã ã«ã¦ã³ã¿*/94 void *sp; /* スタックポインタ */ 95 FP pc; /* プログラムカウンタ */ 112 96 } TSKCTXB; 113 97 114 98 115 99 /* 116 * å²è¾¼ã¿çºçåæ°ãä¿åããå¤æ°100 * 割込み発生回数を保存する変数 117 101 */ 118 102 extern uint16_t intnest; … … 120 104 121 105 /* 122 * CPUããã¯ç¶æ 123 ã§ã®å²è¾¼ã¿åªå 124 度ãã¹ã¯ 125 * 126 * TIPM_LOCKã¯ï¼CPUããã¯ç¶æ 127 ã§ã®å²è¾¼ã¿åªå 128 度ãã¹ã¯ï¼ããªãã¡ï¼ã«ã¼ã 129 * ã«ç®¡çå¤ã®ãã®ãé¤ããã¹ã¦ã®å²è¾¼ã¿è¦æ±ããã¹ã¯ããå¤ã«å®ç¾©ããï¼ 130 * 131 * TMIN_INTPRIå¤æ´ãããã¨ã§ç®¡çå¤å²è¾¼ã¿ã®æç¡ã決å®ããï¼ 132 * ä¾ãã°TMIN_INTPRIã-14ã«è¨å®ããã¨ï¼ã¬ãã«15ã®å²è¾¼ã¿ãã«ã¼ãã«ç®¡çå¤ã¨ 133 * ãªãï¼TMIN_INTPRIã-15ã«è¨å®ããã¨ï¼NMI以å¤ã«ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã 134 * è¨ããªããã¨ã«ãªãï¼ãã®å ´åã«ã¯-15ã«è¨å®ãããã¨ãæ¨å¥¨ããï¼ï¼ 106 * CPUロック状態での割込み優先度マスク 107 * 108 * TIPM_LOCKは,CPUロック状態での割込み優先度マスク,すなわち,カーネ 109 * ル管理外のものを除くすべての割込み要求をマスクする値に定義する. 110 * 111 * TMIN_INTPRI変更することで管理外割込みの有無を決定する. 112 * 例えばTMIN_INTPRIを-14に設定すると,レベル15の割込みがカーネル管理外と 113 * なる.TMIN_INTPRIを-15に設定すると,NMI以外にカーネル管理外の割込みを 114 * 設けないことになる(この場合には-15に設定することを推奨する). 135 115 */ 136 116 #ifndef TIPM_LOCK … … 138 118 #define TIPM_LOCK TMIN_INTPRI 139 119 #else /* USE_SERIALDEBUG */ 140 /* CubeSuite+ 㧠RXã·ãªã¢ã«ãããã¬ã使ç¨ããå ´åã¯éä¿¡ç¨CSIå²è¾¼ã¿ãã«ã¼ãã«ç®¡çå¤ã¨ãã*/120 /* CubeSuite+ で RXシリアルデバッガを使用する場合は通信用CSI割込みをカーネル管理外とする */ 141 121 #define TIPM_LOCK (TMIN_INTPRI + 1) 142 122 #endif /* USE_SERIALDEBUG */ … … 145 125 146 126 /* 147 * TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã®å®ç¾ 148 */ 149 /* 150 * ã³ã³ããã¹ãã®åç 151 § 152 * 153 * RXã§ã¯ï¼å²è¾¼ã¿ã®æ»ãå 154 ãã¿ã¹ã¯ãã©ãããå¤æããããã« intnest 155 * ã使ç¨ãã¦ããï¼ãããç¨ãã¦ã³ã³ããã¹ããå¤æããï¼ 127 * TOPPERS標準割込み処理モデルの実現 128 */ 129 /* 130 * コンテキストの参照 131 * 132 * RXでは,割込みの戻り先がタスクかどうかを判断するために intnest 133 * を使用している.これを用いてコンテキストを判断する. 156 134 */ 157 135 Inline bool_t 158 136 sense_context( void ) 159 137 { 160 /* ãã¹ãã«ã¦ã³ã¿0ãã大ãªãéã¿ã¹ã¯ã³ã³ããã¹ã*/138 /* ネストカウンタ0より大なら非タスクコンテキスト */ 161 139 return ( intnest > 0U ); 162 140 } … … 164 142 165 143 /* 166 * CPUããã¯ãã©ã°å®ç¾ã®ããã®å¤æ° 167 * 168 * ãããã®å¤æ°ã¯ï¼CPUããã¯ç¶æ 169 ã®æã®ã¿æ¸ãæãã¦ãããã®ã¨ããï¼ 144 * CPUロックフラグ実現のための変数 145 * 146 * これらの変数は,CPUロック状態の時のみ書き換えてよいものとする. 170 147 */ 171 148 #if TIPM_LOCK != -15 172 extern bool_t lock_flag; /* CPUããã¯ãã©ã°ã®å¤ãä¿æããå¤æ° */ 173 extern uint32_t saved_ipl; /* å²è¾¼ã¿åªå 174 度ã¬ãã«ãä¿åããå¤æ° */ 149 extern bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */ 150 extern uint32_t saved_ipl; /* 割込み優先度レベルを保存する変数 */ 175 151 #endif /* TIPM_LOCK != -15 */ 176 152 … … 179 155 180 156 /* 181 * å²è¾¼ã¿åªå 182 度ãã¹ã¯ã®å¤é¨è¡¨ç¾ã¨å 183 é¨è¡¨ç¾ã®å¤æ 184 * 185 * RX630ã§ã¯ï¼ããã»ããµã¹ãã¼ã¿ã¹ã¯ã¼ãã¬ã¸ã¹ã¿ï¼PSWï¼ã®ä¸ãã 186 * 24ï½27ãããç®ã®4ãããã«å²è¾¼ã¿åªå 187 度ã¬ãã«ï¼IPLï¼ãç½®ããã¦ããï¼ 188 * ã«ã¼ãã«ç®¡çå¤å²è¾¼ã¿ãå®è£ 189 ããå ´åã«IPLã使ç¨ããå¶å¾¡ãè¡ãï¼ 190 * ã«ã¼ãã«ã¯å²è¾¼ã¿åªå 191 度ãã¹ã¯ï¼-1ããé£ç¶ããè² ã®å¤ï¼ã§ç®¡çãã㦠192 * ããããIPLã¨ã®å¤æãå¿ 193 è¦ã¨ãªãï¼ 194 */ 195 #define IPL_TO_IPM( ipl ) (-(( PRI )(( ipl ) >> 24U ))) /* IPLãIPMã« */ 196 #define IPM_TO_IPL( ipm ) ((( uint32_t )(-( ipm ))) << 24U ) /* IPMãIPLã« */ 197 198 199 /* 200 * CPUããã¯ç¶æ 201 ã§ã®å²è¾¼ã¿åªå 202 度ãã¹ã¯ã®IPL 157 * 割込み優先度マスクの外部表現と内部表現の変換 158 * 159 * RX630では,プロセッサステータスワードレジスタ(PSW)の下から 160 * 24~27ビット目の4ビットに割込み優先度レベル(IPL)が置かれている. 161 * カーネル管理外割込みを実装する場合にIPLを使用した制御を行う. 162 * カーネルは割込み優先度マスク(-1から連続した負の値)で管理されて 163 * いるためIPLとの変換が必要となる. 164 */ 165 #define IPL_TO_IPM( ipl ) (-(( PRI )(( ipl ) >> 24U ))) /* IPLをIPMに */ 166 #define IPM_TO_IPL( ipm ) ((( uint32_t )(-( ipm ))) << 24U ) /* IPMをIPLに */ 167 168 169 /* 170 * CPUロック状態での割込み優先度マスクのIPL 203 171 */ 204 172 #define IPL_LOCK ( IPM_TO_IPL( TIPM_LOCK ) ) 205 173 206 174 /* 207 * TIPM_ENAALLï¼å²è¾¼ã¿åªå 208 度ãã¹ã¯å 209 ¨è§£é¤ï¼ã®IPL 175 * TIPM_ENAALL(割込み優先度マスク全解除)のIPL 210 176 */ 211 177 #define IPL_ENAALL ( IPM_TO_IPL( TIPM_ENAALL ) ) … … 215 181 216 182 /* 217 * å²è¾¼ã¿è¦å æ¯ã®ã¬ãã« & å±æ§å®ç¾©ãã¼ãã«218 * ( ãã³ãã¬ã¼ããã¡ã¤ã«ã«ããåºå)183 * 割込み要因毎のレベル & 属性定義テーブル 184 * (テンプレートファイルによる出力) 219 185 */ 220 186 typedef struct cfg_int_info { … … 227 193 228 194 /* 229 * å²è¾¼ã¿çªå·ã®ç¯å²ã®å¤å® 230 * 231 * å²è¾¼ã¿çªå·ãæå¹ãªå¤ãå³å¯ã«ãã§ãã¯ãããã, 232 * ã³ã³ãã£ã®ã¥ã¬ã¼ã¿åºåãã¼ãã«ãåç 233 §ãã. 195 * 割込み番号の範囲の判定 196 * 197 * 割込み番号が有効な値か厳密にチェックするため, 198 * コンフィギュレータ出力テーブルを参照する. 234 199 */ 235 200 #define VALID_INTNO( intno ) \ … … 238 203 #define VALID_INTNO_CFGINT( intno ) VALID_INTNO( intno ) 239 204 240 /* cre_int ã§æå¹ãªå²è¾¼ã¿çªå·ã®æå®*/205 /* cre_intで有効な割込み番号の指定 */ 241 206 #define VALID_INTNO_CREINT VALID_INTNO_CFGINT((intno)) 242 207 243 /* cre_isr ã§æå¹ãªå²è¾¼ã¿çªå·ã®æå®*/208 /* cre_isrで有効な割込み番号の指定 */ 244 209 #define VALID_INTNO_CREISR(intno) VALID_INTNO_CFGINT((intno)) 245 210 246 211 247 212 /* 248 * å²è¾¼ã¿å¶å¾¡ã¬ã¸ã¹ã¿é¢é£ã®å®ç¾©213 * 割込み制御レジスタ関連の定義 249 214 */ 250 215 #define IRQ_POSEDGE ( 0x08U ) … … 255 220 256 221 /* 257 * CPUããã¯ç¶æ 258 ã¸ã®ç§»è¡ 259 * 260 * IPMï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 261 度ãã¹ã¯ï¼ãï¼saved_iipmã«ä¿åãï¼ã«ã¼ 262 * ãã«ç®¡çå¤ã®ãã®ãé¤ããã¹ã¦ã®å²è¾¼ã¿è¦æ±ããã¹ã¯ããå¤ï¼TIPM_LOCKï¼ 263 * ã«è¨å®ããï¼ã¾ãï¼lock_flagãTRUEã«ããï¼ 264 * 265 * IPMãï¼æåããTIPM_LOCKã¨åããããããé«ãå ´åã«ã¯ï¼ããã 266 * saved_iipmã«ä¿åããã®ã¿ã§ï¼TIPM_LOCKã«ã¯è¨å®ããªãï¼ããã¯ï¼ã¢ãã« 267 * ä¸ã®å²è¾¼ã¿åªå 268 度ãã¹ã¯ãï¼TIPM_LOCKã¨åããããããé«ãã¬ãã«ã«è¨å® 269 * ããã¦ããç¶æ 270 ã«ãããï¼ 271 * 272 * ãã®é¢æ°ã¯ï¼CPUããã¯ç¶æ 273 ï¼lock_flagãTRUEã®ç¶æ 274 ï¼ã§å¼ã°ãããã¨ã¯ 275 * ãªããã®ã¨æ³å®ãã¦ããï¼ 222 * CPUロック状態への移行 223 * 224 * IPM(ハードウェアの割込み優先度マスク)を,saved_iipmに保存し,カー 225 * ネル管理外のものを除くすべての割込み要求をマスクする値(TIPM_LOCK) 226 * に設定する.また,lock_flagをTRUEにする. 227 * 228 * IPMが,最初からTIPM_LOCKと同じかそれより高い場合には,それを 229 * saved_iipmに保存するのみで,TIPM_LOCKには設定しない.これは,モデル 230 * 上の割込み優先度マスクが,TIPM_LOCKと同じかそれより高いレベルに設定 231 * されている状態にあたる. 232 * 233 * この関数は,CPUロック状態(lock_flagがTRUEの状態)で呼ばれることは 234 * ないものと想定している. 276 235 */ 277 236 Inline void … … 284 243 285 244 /* 286 * current_ipl() ã®è¿ãå¤ãç´æ¥saved_iplã«ä¿åããï¼ä¸æå¤æ°ipl287 * ãç¨ãã¦ããã®ã¯ï¼current_ipl()ãå¼ãã ç´å¾ã«å²è¾¼ã¿ãçºçãï¼288 * èµ·åãããå²è¾¼ã¿å¦çã§saved_iplãå¤æ´ãããå¯è½æ§ãããããã§289 * ããï¼245 * current_ipl()の返り値を直接saved_iplに保存せず,一時変数ipl 246 * を用いているのは,current_ipl()を呼んだ直後に割込みが発生し, 247 * 起動された割込み処理でsaved_iplが変更される可能性があるためで 248 * ある. 290 249 */ 291 250 ipl = current_ipl(); … … 304 263 305 264 /* 306 * CPUããã¯ç¶æ 307 ã®è§£é¤ 308 * 309 * lock_flagãFALSEã«ãï¼IPMï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 310 度ãã¹ã¯ï¼ãï¼ 311 * saved_iipmã«ä¿åããå¤ã«æ»ãï¼ 312 * 313 * ãã®é¢æ°ã¯ï¼CPUããã¯ç¶æ 314 ï¼lock_flagãtrueã®ç¶æ 315 ï¼ã§ã®ã¿å¼ã°ããã 316 * ã®ã¨æ³å®ãã¦ããï¼ 265 * CPUロック状態の解除 266 * 267 * lock_flagをFALSEにし,IPM(ハードウェアの割込み優先度マスク)を, 268 * saved_iipmに保存した値に戻す. 269 * 270 * この関数は,CPUロック状態(lock_flagがtrueの状態)でのみ呼ばれるも 271 * のと想定している. 317 272 */ 318 273 Inline void … … 332 287 333 288 /* 334 * CPUããã¯ç¶æ 335 ã®åç 336 § 289 * CPUロック状態の参照 337 290 */ 338 291 Inline bool_t … … 351 304 352 305 /* 353 * ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 354 度ãã¹ã¯ã®è¨å® 355 * 356 * CPUããã¯ãã©ã°ãã¯ãªã¢ããã¦ããæã¯ï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 357 度ã 358 * ã¹ã¯ãè¨å®ããï¼CPUããã¯ãã©ã°ãã»ããããã¦ããæã¯ï¼saved_iipm 359 * ãè¨å®ãï¼ããã«ï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 360 度ãã¹ã¯ãï¼è¨å®ããã㨠361 * ããï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 362 度ãã¹ã¯ã¨TIPM_LOCKã®é«ãæ¹ã«è¨å®ããï¼ 306 * (モデル上の)割込み優先度マスクの設定 307 * 308 * CPUロックフラグがクリアされている時は,ハードウェアの割込み優先度マ 309 * スクを設定する.CPUロックフラグがセットされている時は,saved_iipm 310 * を設定し,さらに,ハードウェアの割込み優先度マスクを,設定しようと 311 * した(モデル上の)割込み優先度マスクとTIPM_LOCKの高い方に設定する. 363 312 */ 364 313 Inline void … … 384 333 385 334 /* 386 * ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 387 度ãã¹ã¯ã®åç 388 § 389 * 390 * CPUããã¯ãã©ã°ãã¯ãªã¢ããã¦ããæã¯ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå 391 度ã 392 * ã¹ã¯ãï¼ã»ããããã¦ããæã¯saved_iipmãåç 393 §ããï¼ 335 * (モデル上の)割込み優先度マスクの参照 336 * 337 * CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ 338 * スクを,セットされている時はsaved_iipmを参照する. 394 339 */ 395 340 Inline PRI … … 415 360 416 361 /* 417 * å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ã»ãã418 * 419 * å²è¾¼ã¿å±æ§ãè¨å®ããã¦ããªãå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦å²è¾¼ã¿è¦æ±ç¦æ¢420 * ãã©ã°ãã»ãããããã¨ããå ´åã«ã¯ï¼FALSEãè¿ãï¼362 * 割込み要求禁止フラグのセット 363 * 364 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 365 * フラグをセットしようとした場合には,FALSEを返す. 421 366 */ 422 367 Inline bool_t … … 424 369 { 425 370 /* 426 * ã¬ãã«å®ç¾©ã0ã§ããå ´åã¯CFG_INTããã¦ããªã371 * レベル定義が0である場合はCFG_INTされていない 427 372 */ 428 373 if( cfg_int_table[intno].intpri == 0 ){ … … 440 385 441 386 /* 442 * å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ã¯ãªã¢443 * 444 * å²è¾¼ã¿å±æ§ãè¨å®ããã¦ããªãå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦å²è¾¼ã¿è¦æ±ç¦æ¢445 * ãã©ã°ãã¯ãªã¢ãããã¨ããå ´åã«ã¯ï¼FALSEãè¿ãï¼387 * 割込み要求禁止フラグのクリア 388 * 389 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 390 * フラグをクリアしようとした場合には,FALSEを返す. 446 391 */ 447 392 Inline bool_t … … 449 394 { 450 395 /* 451 * ã¬ãã«å®ç¾©ã0ã§ããå ´åã¯CFG_INTããã¦ããªã396 * レベル定義が0である場合はCFG_INTされていない 452 397 */ 453 398 if( cfg_int_table[intno].intpri == 0 ){ … … 465 410 466 411 /* 467 * å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢412 * 割込み要求のクリア 468 413 */ 469 414 Inline void … … 478 423 479 424 /* 480 * å²è¾¼ã¿è¦æ±ã®ãã§ãã¯425 * 割込み要求のチェック 481 426 */ 482 427 Inline bool_t … … 484 429 { 485 430 /* 486 * å²è¾¼ã¿è¦æ±ã¬ã¸ã¹ã¿ã¯0 or 1ã§ãããªããã,487 * ãã®ã¾ã¾ã®å¤ãè¿ã.431 * 割込み要求レジスタは0 or 1でしかないため, 432 * そのままの値を返す. 488 433 */ 489 434 return ( *IR_REG(intno) ); … … 495 440 496 441 /* 497 * å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨å®442 * 割込み要求ラインの属性の設定 498 443 */ 499 444 extern void x_config_int( INTNO intno, ATR intatr, PRI intpri ); … … 501 446 502 447 /* 503 * å²è¾¼ã¿ãã³ãã©ã®å 504 ¥å£ã§å¿ 505 è¦ãªIRCæä½ 448 * 割込みハンドラの入口で必要なIRC操作 506 449 * 507 450 */ … … 509 452 i_begin_int( INTNO intno ) 510 453 { 511 /* ç¹ã«è¡ãã¹ãå¦çã¯ãªã */ 512 } 513 514 515 /* 516 * å²è¾¼ã¿ãã³ãã©ã®åºå£ã§å¿ 517 è¦ãªIRCæä½ 454 /* 特に行うべき処理はない */ 455 } 456 457 458 /* 459 * 割込みハンドラの出口で必要なIRC操作 518 460 * 519 461 */ … … 521 463 i_end_int( INTNO intno ) 522 464 { 523 /* ç¹ã«è¡ãã¹ãå¦çã¯ãªã */ 524 } 525 526 527 /* 528 * æé«åªå 529 é ä½ã¿ã¹ã¯ã¸ã®ãã£ã¹ãããï¼prc_support.a30ï¼ 530 * 531 * dispatchã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãããå¼ã³åºããããµã¼ãã¹ã³ã¼ã«å¦çã 532 * ãå¼ã³åºãã¹ããã®ã§ï¼ã¿ã¹ã¯ã³ã³ããã¹ãã»CPUããã¯ç¶æ 533 ã»ãã£ã¹ãã 534 * ã許å¯ç¶æ 535 ã»ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 536 度ãã¹ã¯å 537 ¨è§£é¤ç¶æ 538 ã§å¼ã³åºã㪠539 * ããã°ãªããªãï¼ 465 /* 特に行うべき処理はない */ 466 } 467 468 469 /* 470 * 最高優先順位タスクへのディスパッチ(prc_support.a30) 471 * 472 * dispatchは,タスクコンテキストから呼び出されたサービスコール処理か 473 * ら呼び出すべきもので,タスクコンテキスト・CPUロック状態・ディスパッ 474 * チ許可状態・(モデル上の)割込み優先度マスク全解除状態で呼び出さな 475 * ければならない. 540 476 */ 541 477 extern void dispatch( void ); 542 478 543 479 /* 544 * ãã£ã¹ãããã£ã®åä½éå§ï¼prc_support.a30ï¼ 545 * 546 * start_dispatchã¯ï¼ã«ã¼ãã«èµ·åæã«å¼ã³åºãã¹ããã®ã§ï¼ãã¹ã¦ã®å²è¾¼ 547 * ã¿ãç¦æ¢ããç¶æ 548 ï¼å 549 ¨å²è¾¼ã¿ããã¯ç¶æ 550 ã¨åçã®ç¶æ 551 ï¼ã§å¼ã³åºããªããã° 552 * ãªããªãï¼ 480 * ディスパッチャの動作開始(prc_support.a30) 481 * 482 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込 483 * みを禁止した状態(全割込みロック状態と同等の状態)で呼び出さなければ 484 * ならない. 553 485 */ 554 486 extern void start_dispatch( void ) NoReturn; 555 487 556 488 /* 557 * ç¾å¨ã®ã³ã³ããã¹ããæ¨ã¦ã¦ãã£ã¹ãããï¼prc_support.a30ï¼ 558 * 559 * exit_and_dispatchã¯ï¼ext_tskããå¼ã³åºãã¹ããã®ã§ï¼ã¿ã¹ã¯ã³ã³ãã 560 * ã¹ãã»CPUããã¯ç¶æ 561 ã»ãã£ã¹ããã許å¯ç¶æ 562 ã»ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 563 564 * 度ãã¹ã¯å 565 ¨è§£é¤ç¶æ 566 ã§å¼ã³åºããªããã°ãªããªãï¼ 489 * 現在のコンテキストを捨ててディスパッチ(prc_support.a30) 490 * 491 * exit_and_dispatchは,ext_tskから呼び出すべきもので,タスクコンテキ 492 * スト・CPUロック状態・ディスパッチ許可状態・(モデル上の)割込み優先 493 * 度マスク全解除状態で呼び出さなければならない. 567 494 */ 568 495 #define _kernel_exit_and_dispatch(); \ … … 573 500 574 501 /* 575 * ã«ã¼ãã«ã®çµäºå¦çã®å¼åºãï¼prc_support.a30ï¼576 * 577 * call_exit_kernel ã¯ï¼ã«ã¼ãã«ã®çµäºæã«å¼ã³åºãã¹ããã®ã§ï¼éã¿ã¹ã¯578 * ã³ã³ããã¹ãã«åãæãã¦ï¼ã«ã¼ãã«ã®çµäºå¦çï¼exit_kernelï¼ãå¼ã³åº579 * ãï¼502 * カーネルの終了処理の呼出し(prc_support.a30) 503 * 504 * call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク 505 * コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出 506 * す. 580 507 */ 581 508 extern void call_exit_kernel( void ) NoReturn; 582 509 583 510 /* 584 * ã¿ã¹ã¯ã³ã³ããã¹ãã®åæå 585 * 586 * ã¿ã¹ã¯ãä¼æ¢ç¶æ 587 ããå®è¡ã§ããç¶æ 588 ã«ç§»è¡ããæã«å¼ã°ããï¼ãã®æç¹ 589 * ã§ã¹ã¿ãã¯é åã使ã£ã¦ã¯ãªããªãï¼ 590 * 591 * activate_contextãï¼ã¤ã³ã©ã¤ã³é¢æ°ã§ã¯ãªããã¯ãå®ç¾©ã¨ãã¦ããã®ã¯ï¼ 592 * ãã®æç¹ã§ã¯TCBãå®ç¾©ããã¦ããªãããã§ããï¼ 511 * タスクコンテキストの初期化 512 * 513 * タスクが休止状態から実行できる状態に移行する時に呼ばれる.この時点 514 * でスタック領域を使ってはならない. 515 * 516 * activate_contextを,インライン関数ではなくマクロ定義としているのは, 517 * この時点ではTCBが定義されていないためである. 593 518 */ 594 519 extern void start_r( void ); … … 598 523 { \ 599 524 \ 600 /* ã¹ã¿ãã¯ãã¤ã³ã¿åæå¤ã®è¨å®*/ \525 /* スタックポインタ初期値の設定 */ \ 601 526 ( p_tcb )->tskctxb.sp = ( void * )((( uint32_t ) ( p_tcb )->p_tinib->stk ) + \ 602 527 ( p_tcb )->p_tinib->stksz ); \ 603 /* èµ·åçªå°ã®è¨å®*/ \528 /* 起動番地の設定 */ \ 604 529 ( p_tcb )->tskctxb.pc = ( FP ) start_r; \ 605 530 } \ … … 608 533 609 534 /* 610 * calltex ã¯ä½¿ç¨ããªã535 * calltexは使用しない 611 536 */ 612 537 #define OMIT_CALLTEX … … 614 539 615 540 /* 616 * å²è¾¼ã¿ãã³ãã©ã®è¨å® 617 * 618 * RX630ã¯ROMã«å²è¾¼ã¿ãã¯ã¿ãé 619 ç½®ããããï¼æ¬é¢æ°ã¯ç©ºé¢æ°ã§å®è£ 620 ããï¼ 541 * 割込みハンドラの設定 542 * 543 * RX630はROMに割込みベクタを配置するため,本関数は空関数で実装する. 621 544 */ 622 545 Inline void … … 627 550 628 551 /* 629 * CPUä¾å¤ãã³ãã©ã®è¨å® 630 * 631 * RX630ã¯ROMã«ä¾å¤ãã¯ã¿ãé 632 ç½®ããããï¼æ¬é¢æ°ã¯ç©ºé¢æ°ã§å®è£ 633 ããï¼ 552 * CPU例外ハンドラの設定 553 * 554 * RX630はROMに例外ベクタを配置するため,本関数は空関数で実装する. 634 555 */ 635 556 Inline void … … 640 561 641 562 /* 642 * å²è¾¼ã¿/ä¾å¤ãã³ãã©ã®å 643 ¥å£å¦çã®çæãã¯ã 644 * 645 * ãã³ãã¬ã¼ããã¡ã¤ã«ã«ããçæãããã空ãã¯ãã¨ããï¼ 563 * 割込み/例外ハンドラの入口処理の生成マクロ 564 * 565 * テンプレートファイルにより生成するため空マクロとする. 646 566 */ 647 567 #define HDR_ENTRY(hdr, intexc_num , tobejmp) 648 568 649 569 /* 650 * å²è¾¼ã¿ãã³ãã©ã®å 651 ¥å£å¦çã®çæãã¯ã 570 * 割込みハンドラの入口処理の生成マクロ 652 571 */ 653 572 #define _INT_ENTRY(inhno, inthdr) _kernel_##inthdr##_##inhno##_entry … … 660 579 661 580 /* 662 * CPUä¾å¤ãã³ãã©ã®å 663 ¥å£å¦çã®çæãã¯ã 581 * CPU例外ハンドラの入口処理の生成マクロ 664 582 */ 665 583 #define _EXC_ENTRY(excno , exchdr) _kernel_##exchdr##_##excno##_entry … … 672 590 673 591 /* 674 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ãã®åç 675 § 676 * 677 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ããï¼ã¿ã¹ã¯ã³ã³ããã¹ãã®æã«FALSEï¼ 678 * ããã§ãªãæã«trueãè¿ãï¼ 592 * CPU例外の発生した時のコンテキストの参照 593 * 594 * CPU例外の発生した時のコンテキストが,タスクコンテキストの時にFALSE, 595 * そうでない時にtrueを返す. 679 596 */ 680 597 Inline bool_t … … 682 599 { 683 600 /* 684 * ãã¹ãã«ã¦ã³ã¿ã1ãã大ãªãéã¿ã¹ã¯ã³ã³ããã¹ã601 * ネストカウンタが1より大なら非タスクコンテキスト 685 602 */ 686 603 return( intnest > 1U ); … … 689 606 690 607 /* 691 * CPUä¾å¤æ 692 å ± p_excinf ãã PSW ã®å¤ãåå¾ããããã®ãªãã»ããå¤ 693 * EXCNO + ACC + FPSW + R1ï½R15 + PC 608 * CPU例外情報 p_excinf から PSW の値を取得するためのオフセット値 609 * EXCNO + ACC + FPSW + R1~R15 + PC 694 610 */ 695 611 #define EXC_GET_PSW_OFFSET (4+8+4+60+4) 696 612 697 613 /* 698 * CPUä¾å¤ã®çºçããæã®IPLã®åç 699 § 614 * CPU例外の発生した時のIPLの参照 700 615 */ 701 616 Inline uint32_t … … 715 630 716 631 /* 717 * CPUä¾å¤ã®çºçããæã®ã³ã³ããã¹ãã¨å²è¾¼ã¿ã®ãã¹ã¯ç¶æ 718 ã®åç 719 § 720 * 721 * CPUä¾å¤ã®çºçããæã®ã·ã¹ãã ç¶æ 722 ãï¼ã«ã¼ãã«å®è¡ä¸ã§ãªãï¼ã¿ã¹ã¯ã³ 723 * ã³ããã¹ãã§ããï¼å 724 ¨å²è¾¼ã¿ããã¯ç¶æ 725 ã§ãªãï¼CPUããã¯ç¶æ 726 ã§ãªãï¼ï¼ã¢ 727 * ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 728 度ãã¹ã¯å 729 ¨è§£é¤ç¶æ 730 ã§ããæã«trueï¼ããã§ãªãæ 731 * ã«FALSEãè¿ãï¼CPUä¾å¤ãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿å¦çä¸ã§çºçããå ´å 732 * ã«ãFALSEãè¿ãï¼ï¼ 632 * CPU例外の発生した時のコンテキストと割込みのマスク状態の参照 633 * 634 * CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコ 635 * ンテキストであり,全割込みロック状態でなく,CPUロック状態でなく,(モ 636 * デル上の)割込み優先度マスク全解除状態である時にtrue,そうでない時 637 * にFALSEを返す(CPU例外がカーネル管理外の割込み処理中で発生した場合 638 * にもFALSEを返す). 733 639 * 734 * ã«ã¼ãã«å®è¡ä¸ã§ãªãâ (TIPM_LOCK== -15) Iãã©ã°== 1640 * カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1 735 641 * (else) IPL < IPL_LOCK 736 * ã¿ã¹ã¯ã³ã³ããã¹ãã§ããâintnest == 0 737 * å 738 ¨å²è¾¼ã¿ããã¯ã§ãªãâ Iãã©ã° == 1 739 * å²è¾¼ã¿åªå 740 度ãã¹ã¯ãå 741 ¨è§£é¤âIPL == 0 642 * タスクコンテキストである→intnest == 0 643 * 全割込みロックでない→ Iフラグ == 1 644 * 割込み優先度マスクが全解除→IPL == 0 742 645 * 743 646 * … … 752 655 753 656 /* 754 * ããã»ããµä¾åã®åæå657 * プロセッサ依存の初期化 755 658 */ 756 659 extern void prc_initialize( void ); 757 660 758 661 /* 759 * ããã»ããµä¾åã®çµäºæå¦ç662 * プロセッサ依存の終了時処理 760 663 */ 761 664 extern void prc_terminate( void ); … … 764 667 #ifndef OMIT_DEFAULT_INT_HANDLER 765 668 /* 766 * æªç»é²ã®å²è¾¼ã¿ãçºçããå ´åã«å¼ã³åºããã669 * 未登録の割込みが発生した場合に呼び出される 767 670 */ 768 671 void default_int_handler( void ); … … 771 674 #ifndef OMIT_DEFAULT_EXC_HANDLER 772 675 /* 773 * æªç»é²ã®ä¾å¤ãçºçããå ´åã«å¼ã³åºããã676 * 未登録の例外が発生した場合に呼び出される 774 677 */ 775 678 void default_exc_handler( void ); -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.