Ignore:
Timestamp:
Jul 23, 2017, 2:29:40 PM (7 years ago)
Author:
coas-nagasima
Message:

SVNプロパティを設定

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 to text/x-chdr; charset=UTF-8
    r313 r315  
    1111 *  Copyright (C) 2013      by Mitsuhiro Matsuura
    1212 *
    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 *      免責すること.
    4935 *
    50  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    51 ãŠ
    52  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    53  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    54  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    55  *  の責任を負わない.
     36 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     37 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     38 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     39 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     40 *  の責任を負わない.
    5641 *
    5742 *  @(#) $Id$
     
    5944
    6045/*
    61  *              プロセッサ依存モジュール(RX630用)
    62  *
    63  *  このインクルードファイルは,target_config.h(または,そこからインク
    64  *  ルードされるファイル)のみからインクルードされる.他のファイルから
    65  *  直接インクルードしてはならない.
     46 *              プロセッサ依存モジュール(RX630用)
     47 *
     48 *  このインクルードファイルは,target_config.h(または,そこからインク
     49 *  ルードされるファイル)のみからインクルードされる.他のファイルから
     50 *  直接インクルードしてはならない.
    6651 */
    6752
     
    7055
    7156/*
    72  *  プロセッサの特殊命令のインライン関数定義
     57 *  プロセッサの特殊命令のインライン関数定義
    7358 */
    7459#include "prc_insn.h"
     
    7863
    7964/*
    80  *  非タスクコンテキスト用のスタック初期値
     65 *  非タスクコンテキスト用のスタック初期値
    8166 */
    8267
     
    8469
    8570/*
    86  *  タスクコンテキストブロックの定義
     71 *  タスクコンテキストブロックの定義
    8772 */
    8873typedef struct task_context_block {
    89         void    *sp;            /* スタックポインタ */
    90         FP              pc;                     /* プログラムカウンタ */
     74        void    *sp;            /* スタックポインタ */
     75        FP              pc;                     /* プログラムカウンタ */
    9176} TSKCTXB;
    9277
    9378
    9479/*
    95  *  割込み発生回数を保存する変数
     80 *  割込み発生回数を保存する変数
    9681 */
    9782extern uint16_t intnest;
     
    10085
    10186/*
    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に設定することを推奨する).
    11596 */
    11697#ifndef TIPM_LOCK
     
    121102
    122103/*
    123  *  TOPPERS標準割込み処理モデルの実現
    124  */
    125 /*
    126  *  コンテキストの参ç
    127 §
    128  *
    129  *  RXでは,割込みの戻りå
    130 ˆãŒã‚¿ã‚¹ã‚¯ã‹ã©ã†ã‹ã‚’判断するために intnest
    131  *  を使用している.これを用いてコンテキストを判断する.
     104 *  TOPPERS標準割込み処理モデルの実現
     105 */
     106/*
     107 *  コンテキストの参照
     108 *
     109 *  RXでは,割込みの戻り先がタスクかどうかを判断するために intnest
     110 *  を使用している.これを用いてコンテキストを判断する.
    132111 */
    133112Inline bool_t
    134113sense_context( void )
    135114{
    136         /*  ネストカウンタ0より大なら非タスクコンテキスト  */
     115        /*  ネストカウンタ0より大なら非タスクコンテキスト  */
    137116        return ( intnest > 0U );
    138117}
     
    140119
    141120/*
    142  *  CPUロックフラグ実現のための変数
    143  *
    144  *  これらの変数は,CPUロック状æ
    145 ‹ã®æ™‚のみ書き換えてよいものとする.
     121 *  CPUロックフラグ実現のための変数
     122 *
     123 *  これらの変数は,CPUロック状態の時のみ書き換えてよいものとする.
    146124 */
    147125#if TIPM_LOCK != -15
    148 extern bool_t   lock_flag;              /* CPUロックフラグの値を保持する変数 */
    149 extern uint32_t saved_ipl;              /* 割込み優å
    150 ˆåº¦ãƒ¬ãƒ™ãƒ«ã‚’保存する変数 */
     126extern bool_t   lock_flag;              /* CPUロックフラグの値を保持する変数 */
     127extern uint32_t saved_ipl;              /* 割込み優先度レベルを保存する変数 */
    151128#endif  /* TIPM_LOCK != -15     */
    152129
     
    155132
    156133/*
    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
    179148 */
    180149#define IPL_LOCK                ( IPM_TO_IPL( TIPM_LOCK ) )
    181150
    182151/*
    183  *  TIPM_ENAALL(割込み優å
    184 ˆåº¦ãƒžã‚¹ã‚¯å
    185 ¨è§£é™¤ï¼‰ã®IPL
     152 *  TIPM_ENAALL(割込み優先度マスク全解除)のIPL
    186153 */
    187154#define IPL_ENAALL              ( IPM_TO_IPL( TIPM_ENAALL ) )
     
    191158
    192159/*
    193  *  割込み要因毎のレベル & 属性定義テーブル
    194  *  (テンプレートファイルによる出力)
     160 *  割込み要因毎のレベル & 属性定義テーブル
     161 *  (テンプレートファイルによる出力)
    195162 */
    196163typedef struct cfg_int_info {
     
    203170
    204171/*
    205  *  割込み番号の範囲の判定
    206  *
    207  *  割込み番号が有効な値か厳密にチェックするため,
    208  *  コンフィギュレータ出力テーブルを参ç
    209 §ã™ã‚‹.
     172 *  割込み番号の範囲の判定
     173 *
     174 *  割込み番号が有効な値か厳密にチェックするため,
     175 *  コンフィギュレータ出力テーブルを参照する.
    210176 */
    211177#define VALID_INTNO( intno )    \
     
    214180#define VALID_INTNO_CFGINT( intno )     VALID_INTNO( intno )
    215181
    216 /* cre_intで有効な割込み番号の指定  */
     182/* cre_intで有効な割込み番号の指定  */
    217183#define VALID_INTNO_CREINT          VALID_INTNO_CFGINT((intno))
    218184
    219 /* cre_isrで有効な割込み番号の指定  */
     185/* cre_isrで有効な割込み番号の指定  */
    220186#define VALID_INTNO_CREISR(intno)       VALID_INTNO_CFGINT((intno))
    221187
    222188
    223189/*
    224  *  割込み制御レジスタ関連の定義
     190 *  割込み制御レジスタ関連の定義
    225191 */
    226192#define IRQ_POSEDGE                     ( 0x08U )
     
    231197
    232198/*
    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 *  ないものと想定している.
    252212 */
    253213Inline void
     
    260220
    261221        /*
    262          *  current_ipl()の返り値を直接saved_iplに保存せず,一時変数ipl
    263          *  を用いているのは,current_ipl()を呼んだ直後に割込みが発生し,
    264          *  起動された割込み処理でsaved_iplが変更される可能性があるためで
    265          *  ある.
     222         *  current_ipl()の返り値を直接saved_iplに保存せず,一時変数ipl
     223         *  を用いているのは,current_ipl()を呼んだ直後に割込みが発生し,
     224         *  起動された割込み処理でsaved_iplが変更される可能性があるためで
     225         *  ある.
    266226         */
    267227        ipl = current_ipl();
     
    280240
    281241/*
    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 *  のと想定している.
    293249 */
    294250Inline void
     
    308264
    309265/*
    310  *  CPUロック状æ
    311 ‹ã®å‚ç
    312 §
     266 *  CPUロック状態の参照
    313267 */
    314268Inline bool_t
     
    327281
    328282/*
    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の高い方に設定する.
    339289 */
    340290Inline void
     
    360310
    361311/*
    362  * (モデル上の)割込み優å
    363 ˆåº¦ãƒžã‚¹ã‚¯ã®å‚ç
    364 §
    365  *
    366  *  CPUロックフラグがクリアされている時はハードウェアの割込み優å
    367 ˆåº¦ãƒž
    368  *  スクを,セットされている時はsaved_iipmを参ç
    369 §ã™ã‚‹ï¼Ž
     312 * (モデル上の)割込み優先度マスクの参照
     313 *
     314 *  CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ
     315 *  スクを,セットされている時はsaved_iipmを参照する.
    370316 */
    371317Inline PRI
     
    391337
    392338/*
    393  *  割込み要求禁止フラグのセット
    394  *
    395  *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
    396  *  フラグをセットしようとした場合には,FALSEを返す.
     339 *  割込み要求禁止フラグのセット
     340 *
     341 *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
     342 *  フラグをセットしようとした場合には,FALSEを返す.
    397343 */
    398344Inline bool_t
     
    400346{
    401347        /*
    402          *  レベル定義が0である場合はCFG_INTされていない
     348         *  レベル定義が0である場合はCFG_INTされていない
    403349         */
    404350        if( cfg_int_table[intno].intpri == 0 ){
     
    416362
    417363/*
    418  *  割込み要求禁止フラグのクリア
    419  *
    420  *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
    421  *  フラグをクリアしようとした場合には,FALSEを返す.
     364 *  割込み要求禁止フラグのクリア
     365 *
     366 *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
     367 *  フラグをクリアしようとした場合には,FALSEを返す.
    422368 */
    423369Inline bool_t
     
    425371{
    426372        /*
    427          *  レベル定義が0である場合はCFG_INTされていない
     373         *  レベル定義が0である場合はCFG_INTされていない
    428374         */
    429375        if( cfg_int_table[intno].intpri == 0 ){
     
    441387
    442388/*
    443  *  割込み要求のクリア
     389 *  割込み要求のクリア
    444390 */
    445391Inline void
     
    454400
    455401/*
    456  *  割込み要求のチェック
     402 *  割込み要求のチェック
    457403 */
    458404Inline bool_t
     
    460406{
    461407        /*
    462          *  割込み要求レジスタは0 or 1でしかないため,
    463          *  そのままの値を返す.
     408         *  割込み要求レジスタは0 or 1でしかないため,
     409         *  そのままの値を返す.
    464410         */
    465411        return ( *IR_REG(intno) );
     
    471417
    472418/*
    473  *  割込み要求ラインの属性の設定
     419 *  割込み要求ラインの属性の設定
    474420 */
    475421extern void     x_config_int( INTNO intno, ATR intatr, PRI intpri );
     
    477423
    478424/*
    479  *  割込みハンドラのå
    480 ¥å£ã§å¿
    481 è¦ãªIRC操作
     425 *  割込みハンドラの入口で必要なIRC操作
    482426 *
    483427 */
     
    488432
    489433        /*
    490          *  レベル検出の割込みに対しては割込みステータス
    491          *  フラグをクリアする.
     434         *  レベル検出の割込みに対しては割込みステータス
     435         *  フラグをクリアする.
    492436         */
    493437        if( ( cfg_int_table[intno].intatr & TA_LOWLEVEL ) > 0 ){
    494438                if( *IR_REG(intno) > 0U ){
    495439                        /*
    496                          *  外部割込みの場合, IRQ端子がHighに戻っている
    497                          *  ことを確認する旨が記載されているが, 省略する.
     440                         *  外部割込みの場合, IRQ端子がHighに戻っている
     441                         *  ことを確認する旨が記載されているが, 省略する.
    498442                         */
    499443                //      *ir_reg_addr[intno] = 0U;
    500444
    501445                        /*
    502                          *  ハードウェアマニュアルに0になったことを
    503                          *  確認する旨が記載あるため, レジスタ値を読み出す.
     446                         *  ハードウェアマニュアルに0になったことを
     447                         *  確認する旨が記載あるため, レジスタ値を読み出す.
    504448                         */
    505449                //      reg = *ir_reg_addr[intno];
     
    510454
    511455/*
    512  *  割込みハンドラの出口でå¿
    513 è¦ãªIRC操作
     456 *  割込みハンドラの出口で必要なIRC操作
    514457 *
    515458 */
     
    517460i_end_int( INTNO intno )
    518461{
    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 *  ければならない.
    536473 */
    537474extern void     dispatch( void );
    538475
    539476/*
    540  *  ディスパッチャの動作開始(prc_support.a30)
    541  *
    542  *  start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込
    543  *  みを禁止した状æ
    544 ‹ï¼ˆå
    545 ¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯çŠ¶æ
    546 ‹ã¨åŒç­‰ã®çŠ¶æ
    547 ‹ï¼‰ã§å‘¼ã³å‡ºã•ãªã‘れば
    548  *  ならない.
     477 *  ディスパッチャの動作開始(prc_support.a30)
     478 *
     479 *  start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込
     480 *  みを禁止した状態(全割込みロック状態と同等の状態)で呼び出さなければ
     481 *  ならない.
    549482 */
    550483extern void     start_dispatch( void ) NoReturn;
    551484
    552485/*
    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 *  度マスク全解除状態で呼び出さなければならない.
    563491 */
    564492#define _kernel_exit_and_dispatch();    \
     
    569497
    570498/*
    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 *  す.
    576504 */
    577505extern void call_exit_kernel( void ) NoReturn;
    578506
    579507/*
    580  *  タスクコンテキストの初期化
    581  *
    582  *  タスクが休止状æ
    583 ‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ
    584 ‹ã«ç§»è¡Œã™ã‚‹æ™‚に呼ばれる.この時点
    585  *  でスタック領域を使ってはならない.
    586  *
    587  *  activate_contextを,インライン関数ではなくマクロ定義としているのは,
    588  *  この時点ではTCBが定義されていないためである.
     508 *  タスクコンテキストの初期化
     509 *
     510 *  タスクが休止状態から実行できる状態に移行する時に呼ばれる.この時点
     511 *  でスタック領域を使ってはならない.
     512 *
     513 *  activate_contextを,インライン関数ではなくマクロ定義としているのは,
     514 *  この時点ではTCBが定義されていないためである.
    589515 */
    590516extern void     start_r( void );
     
    594520        {                                                                                                                                                                       \
    595521                                                                                                                                                                                \
    596                 /*  スタックポインタ初期値の設定  */                                                                                      \
     522                /*  スタックポインタ初期値の設定  */                                                                                  \
    597523                ( p_tcb )->tskctxb.sp = ( void * )((( uint32_t ) ( p_tcb )->p_tinib->stk ) +    \
    598524                                                                ( p_tcb )->p_tinib->stksz );                                                    \
    599                 /* 起動番地の設定 */                                                                                                                     \
     525                /* 起動番地の設定 */                                                                                                                   \
    600526                ( p_tcb )->tskctxb.pc = ( FP ) start_r;                                                                                 \
    601527        }                                                                                                                                                                       \
     
    604530
    605531/*
    606  *  calltexは使用しない
     532 *  calltexは使用しない
    607533 */
    608534#define OMIT_CALLTEX
     
    610536
    611537/*
    612  *  割込みハンドラの設定
    613  *
    614  *  RX630はROMに割込みベクタをé
    615 ç½®ã™ã‚‹ãŸã‚ï¼Œæœ¬é–¢æ•°ã¯ç©ºé–¢æ•°ã§å®Ÿè£
    616 ã™ã‚‹ï¼Ž
     538 *  割込みハンドラの設定
     539 *
     540 *  RX630はROMに割込みベクタを配置するため,本関数は空関数で実装する.
    617541 */
    618542Inline void
     
    623547
    624548/*
    625  *  CPU例外ハンドラの設定
    626  *
    627  *  RX630はROMに例外ベクタをé
    628 ç½®ã™ã‚‹ãŸã‚ï¼Œæœ¬é–¢æ•°ã¯ç©ºé–¢æ•°ã§å®Ÿè£
    629 ã™ã‚‹ï¼Ž
     549 *  CPU例外ハンドラの設定
     550 *
     551 *  RX630はROMに例外ベクタを配置するため,本関数は空関数で実装する.
    630552 */
    631553Inline void
     
    636558
    637559/*
    638  *  割込み/例外ハンドラのå
    639 ¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
    640  *
    641  *  テンプレートファイルにより生成するため空マクロとする.
     560 *  割込み/例外ハンドラの入口処理の生成マクロ
     561 *
     562 *  テンプレートファイルにより生成するため空マクロとする.
    642563 */
    643564#define HDR_ENTRY(hdr, intexc_num , tobejmp)
    644565
    645566/*
    646  *  割込みハンドラのå
    647 ¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
     567 *  割込みハンドラの入口処理の生成マクロ
    648568 */
    649569#define _INT_ENTRY(inhno, inthdr)                               _kernel_##inthdr##_##inhno##_entry
     
    656576
    657577/*
    658  *  CPU例外ハンドラのå
    659 ¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
     578 *  CPU例外ハンドラの入口処理の生成マクロ
    660579 */
    661580#define _EXC_ENTRY(excno , exchdr)                                      _kernel_##exchdr##_##excno##_entry
     
    668587
    669588/*
    670  *  CPU例外の発生した時のコンテキストの参ç
    671 §
    672  *
    673  *  CPU例外の発生した時のコンテキストが,タスクコンテキストの時にFALSE,
    674  *  そうでない時にtrueを返す.
     589 *  CPU例外の発生した時のコンテキストの参照
     590 *
     591 *  CPU例外の発生した時のコンテキストが,タスクコンテキストの時にFALSE,
     592 *  そうでない時にtrueを返す.
    675593 */
    676594Inline bool_t
     
    678596{
    679597        /*
    680          *  ネストカウンタが1より大なら非タスクコンテキスト
     598         *  ネストカウンタが1より大なら非タスクコンテキスト
    681599         */
    682600        return( intnest > 1U );
     
    686604
    687605/*
    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
    691608 */
    692609#define EXC_GET_PSW_OFFSET      (4+8+4+60+4)
     
    695612
    696613/*
    697  *  CPU例外の発生した時のIPLの参ç
    698 §
     614 *  CPU例外の発生した時のIPLの参照
    699615 */
    700616Inline uint32_t
     
    714630
    715631/*
    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を返す).
    732639 * 
    733  *  カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1
     640 *  カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1
    734641 *                         (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
    741645 * 
    742646 * 
     
    751655
    752656/*
    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を返す).
    765663 * 
    766  *  カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1
     664 *  カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1
    767665 *                         (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
    773669 *                         (else)           IPL < TIPM_LOCK
    774670 */
     
    788684
    789685/*
    790  *  プロセッサ依存の初期化
     686 *  プロセッサ依存の初期化
    791687 */
    792688extern void     prc_initialize( void );
    793689
    794690/*
    795  *  プロセッサ依存の終了時処理
     691 *  プロセッサ依存の終了時処理
    796692 */
    797693extern void     prc_terminate( void );
     
    800696#ifndef OMIT_DEFAULT_INT_HANDLER
    801697/*
    802  *  未登録の割込みが発生した場合に呼び出される
     698 *  未登録の割込みが発生した場合に呼び出される
    803699 */
    804700void default_int_handler( void );
     
    807703#ifndef OMIT_DEFAULT_EXC_HANDLER
    808704/*
    809  *  未登録の例外が発生した場合に呼び出される
     705 *  未登録の例外が発生した場合に呼び出される
    810706 */
    811707void default_exc_handler( void );
Note: See TracChangeset for help on using the changeset viewer.