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_ccrx/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) の条件か,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プロジェクトを免責すること.
    4734 *
    48  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    49 ãŠ
    50  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    51  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    52  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     35 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     36 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     37 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     38 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    5339 *
    5440 */
    5541
    5642/*
    57  *              プロセッサ依存モジュール(RX630用)
    58  *
    59  *  このインクルードファイルは,target_config.h(または,そこからインク
    60  *  ルードされるファイル)のみからインクルードされる.他のファイルから
    61  *  直接インクルードしてはならない.
     43 *              プロセッサ依存モジュール(RX630用)
     44 *
     45 *  このインクルードファイルは,target_config.h(または,そこからインク
     46 *  ルードされるファイル)のみからインクルードされる.他のファイルから
     47 *  直接インクルードしてはならない.
    6248 */
    6349
     
    6854
    6955/*
    70  *  プロセッサの特殊命令のインライン関数定義
     56 *  プロセッサの特殊命令のインライン関数定義
    7157 */
    7258#include "prc_insn.h"
     
    7460
    7561/*
    76  * ターゲット依存の割込み属性の定義
     62 * ターゲット依存の割込み属性の定義
    7763 */
    7864#define TARGET_INTATR  (TA_POSEDGE | TA_NEGEDGE | TA_BOTHEDGE | TA_LOWLEVEL)
     
    8066
    8167/*
    82  * スタックサイズのチェック方法指定
     68 * スタックサイズのチェック方法指定
    8369 */
    8470#define CHECK_STKSZ_ALIGN 4
     
    8672
    8773/*
    88  * タスクスタックサイズの最小値
    89  *
    90  * タスク起動時に4byte,
    91  * 割込みå
    92 ¥å£å‡¦ç†ã«ã¦48byte, CPU例外å
    93 ¥å£å‡¦ç†ã«ã¦84byte,
    94  * であるため, 最小値は88byteとする.
     74 * タスクスタックサイズの最小値
     75 *
     76 * タスク起動時に4byte,
     77 * 割込み入口処理にて48byte, CPU例外入口処理にて84byte,
     78 * であるため, 最小値は88byteとする.
    9579 */
    9680#define TARGET_MIN_STKSZ  88
     
    9882
    9983/*
    100  *  非タスクコンテキスト用のスタック初期値
     84 *  非タスクコンテキスト用のスタック初期値
    10185 */
    10286
     
    10589
    10690/*
    107  *  タスクコンテキストブロックの定義
     91 *  タスクコンテキストブロックの定義
    10892 */
    10993typedef struct task_context_block {
    110         void    *sp;            /* スタックポインタ */
    111         FP              pc;                     /* プログラムカウンタ */
     94        void    *sp;            /* スタックポインタ */
     95        FP              pc;                     /* プログラムカウンタ */
    11296} TSKCTXB;
    11397
    11498
    11599/*
    116  *  割込み発生回数を保存する変数
     100 *  割込み発生回数を保存する変数
    117101 */
    118102extern uint16_t intnest;
     
    120104
    121105/*
    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に設定することを推奨する).
    135115 */
    136116#ifndef TIPM_LOCK
     
    138118#define TIPM_LOCK       TMIN_INTPRI
    139119#else /* USE_SERIALDEBUG */
    140 /* CubeSuite+ で RXシリアルデバッガを使用する場合は通信用CSI割込みをカーネル管理外とする */
     120/* CubeSuite+ で RXシリアルデバッガを使用する場合は通信用CSI割込みをカーネル管理外とする */
    141121#define TIPM_LOCK       (TMIN_INTPRI + 1)
    142122#endif /* USE_SERIALDEBUG */
     
    145125
    146126/*
    147  *  TOPPERS標準割込み処理モデルの実現
    148  */
    149 /*
    150  *  コンテキストの参ç
    151 §
    152  *
    153  *  RXでは,割込みの戻りå
    154 ˆãŒã‚¿ã‚¹ã‚¯ã‹ã©ã†ã‹ã‚’判断するために intnest
    155  *  を使用している.これを用いてコンテキストを判断する.
     127 *  TOPPERS標準割込み処理モデルの実現
     128 */
     129/*
     130 *  コンテキストの参照
     131 *
     132 *  RXでは,割込みの戻り先がタスクかどうかを判断するために intnest
     133 *  を使用している.これを用いてコンテキストを判断する.
    156134 */
    157135Inline bool_t
    158136sense_context( void )
    159137{
    160         /*  ネストカウンタ0より大なら非タスクコンテキスト  */
     138        /*  ネストカウンタ0より大なら非タスクコンテキスト  */
    161139        return ( intnest > 0U );
    162140}
     
    164142
    165143/*
    166  *  CPUロックフラグ実現のための変数
    167  *
    168  *  これらの変数は,CPUロック状æ
    169 ‹ã®æ™‚のみ書き換えてよいものとする.
     144 *  CPUロックフラグ実現のための変数
     145 *
     146 *  これらの変数は,CPUロック状態の時のみ書き換えてよいものとする.
    170147 */
    171148#if TIPM_LOCK != -15
    172 extern bool_t   lock_flag;              /* CPUロックフラグの値を保持する変数 */
    173 extern uint32_t saved_ipl;              /* 割込み優å
    174 ˆåº¦ãƒ¬ãƒ™ãƒ«ã‚’保存する変数 */
     149extern bool_t   lock_flag;              /* CPUロックフラグの値を保持する変数 */
     150extern uint32_t saved_ipl;              /* 割込み優先度レベルを保存する変数 */
    175151#endif  /* TIPM_LOCK != -15     */
    176152
     
    179155
    180156/*
    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
    203171 */
    204172#define IPL_LOCK                ( IPM_TO_IPL( TIPM_LOCK ) )
    205173
    206174/*
    207  *  TIPM_ENAALL(割込み優å
    208 ˆåº¦ãƒžã‚¹ã‚¯å
    209 ¨è§£é™¤ï¼‰ã®IPL
     175 *  TIPM_ENAALL(割込み優先度マスク全解除)のIPL
    210176 */
    211177#define IPL_ENAALL              ( IPM_TO_IPL( TIPM_ENAALL ) )
     
    215181
    216182/*
    217  *  割込み要因毎のレベル & 属性定義テーブル
    218  *  (テンプレートファイルによる出力)
     183 *  割込み要因毎のレベル & 属性定義テーブル
     184 *  (テンプレートファイルによる出力)
    219185 */
    220186typedef struct cfg_int_info {
     
    227193
    228194/*
    229  *  割込み番号の範囲の判定
    230  *
    231  *  割込み番号が有効な値か厳密にチェックするため,
    232  *  コンフィギュレータ出力テーブルを参ç
    233 §ã™ã‚‹.
     195 *  割込み番号の範囲の判定
     196 *
     197 *  割込み番号が有効な値か厳密にチェックするため,
     198 *  コンフィギュレータ出力テーブルを参照する.
    234199 */
    235200#define VALID_INTNO( intno )    \
     
    238203#define VALID_INTNO_CFGINT( intno )     VALID_INTNO( intno )
    239204
    240 /* cre_intで有効な割込み番号の指定  */
     205/* cre_intで有効な割込み番号の指定  */
    241206#define VALID_INTNO_CREINT          VALID_INTNO_CFGINT((intno))
    242207
    243 /* cre_isrで有効な割込み番号の指定  */
     208/* cre_isrで有効な割込み番号の指定  */
    244209#define VALID_INTNO_CREISR(intno)       VALID_INTNO_CFGINT((intno))
    245210
    246211
    247212/*
    248  *  割込み制御レジスタ関連の定義
     213 *  割込み制御レジスタ関連の定義
    249214 */
    250215#define IRQ_POSEDGE                     ( 0x08U )
     
    255220
    256221/*
    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 *  ないものと想定している.
    276235 */
    277236Inline void
     
    284243
    285244        /*
    286          *  current_ipl()の返り値を直接saved_iplに保存せず,一時変数ipl
    287          *  を用いているのは,current_ipl()を呼んだ直後に割込みが発生し,
    288          *  起動された割込み処理でsaved_iplが変更される可能性があるためで
    289          *  ある.
     245         *  current_ipl()の返り値を直接saved_iplに保存せず,一時変数ipl
     246         *  を用いているのは,current_ipl()を呼んだ直後に割込みが発生し,
     247         *  起動された割込み処理でsaved_iplが変更される可能性があるためで
     248         *  ある.
    290249         */
    291250        ipl = current_ipl();
     
    304263
    305264/*
    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 *  のと想定している.
    317272 */
    318273Inline void
     
    332287
    333288/*
    334  *  CPUロック状æ
    335 ‹ã®å‚ç
    336 §
     289 *  CPUロック状態の参照
    337290 */
    338291Inline bool_t
     
    351304
    352305/*
    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の高い方に設定する.
    363312 */
    364313Inline void
     
    384333
    385334/*
    386  * (モデル上の)割込み優å
    387 ˆåº¦ãƒžã‚¹ã‚¯ã®å‚ç
    388 §
    389  *
    390  *  CPUロックフラグがクリアされている時はハードウェアの割込み優å
    391 ˆåº¦ãƒž
    392  *  スクを,セットされている時はsaved_iipmを参ç
    393 §ã™ã‚‹ï¼Ž
     335 * (モデル上の)割込み優先度マスクの参照
     336 *
     337 *  CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ
     338 *  スクを,セットされている時はsaved_iipmを参照する.
    394339 */
    395340Inline PRI
     
    415360
    416361/*
    417  *  割込み要求禁止フラグのセット
    418  *
    419  *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
    420  *  フラグをセットしようとした場合には,FALSEを返す.
     362 *  割込み要求禁止フラグのセット
     363 *
     364 *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
     365 *  フラグをセットしようとした場合には,FALSEを返す.
    421366 */
    422367Inline bool_t
     
    424369{
    425370        /*
    426          *  レベル定義が0である場合はCFG_INTされていない
     371         *  レベル定義が0である場合はCFG_INTされていない
    427372         */
    428373        if( cfg_int_table[intno].intpri == 0 ){
     
    440385
    441386/*
    442  *  割込み要求禁止フラグのクリア
    443  *
    444  *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
    445  *  フラグをクリアしようとした場合には,FALSEを返す.
     387 *  割込み要求禁止フラグのクリア
     388 *
     389 *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
     390 *  フラグをクリアしようとした場合には,FALSEを返す.
    446391 */
    447392Inline bool_t
     
    449394{
    450395        /*
    451          *  レベル定義が0である場合はCFG_INTされていない
     396         *  レベル定義が0である場合はCFG_INTされていない
    452397         */
    453398        if( cfg_int_table[intno].intpri == 0 ){
     
    465410
    466411/*
    467  *  割込み要求のクリア
     412 *  割込み要求のクリア
    468413 */
    469414Inline void
     
    478423
    479424/*
    480  *  割込み要求のチェック
     425 *  割込み要求のチェック
    481426 */
    482427Inline bool_t
     
    484429{
    485430        /*
    486          *  割込み要求レジスタは0 or 1でしかないため,
    487          *  そのままの値を返す.
     431         *  割込み要求レジスタは0 or 1でしかないため,
     432         *  そのままの値を返す.
    488433         */
    489434        return ( *IR_REG(intno) );
     
    495440
    496441/*
    497  *  割込み要求ラインの属性の設定
     442 *  割込み要求ラインの属性の設定
    498443 */
    499444extern void     x_config_int( INTNO intno, ATR intatr, PRI intpri );
     
    501446
    502447/*
    503  *  割込みハンドラのå
    504 ¥å£ã§å¿
    505 è¦ãªIRC操作
     448 *  割込みハンドラの入口で必要なIRC操作
    506449 *
    507450 */
     
    509452i_begin_int( INTNO intno )
    510453{
    511         /* 特に行うべき処理はない */
    512 }
    513 
    514 
    515 /*
    516  *  割込みハンドラの出口でå¿
    517 è¦ãªIRC操作
     454        /* 特に行うべき処理はない */
     455}
     456
     457
     458/*
     459 *  割込みハンドラの出口で必要なIRC操作
    518460 *
    519461 */
     
    521463i_end_int( INTNO intno )
    522464{
    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 *  ければならない.
    540476 */
    541477extern void     dispatch( void );
    542478
    543479/*
    544  *  ディスパッチャの動作開始(prc_support.a30)
    545  *
    546  *  start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込
    547  *  みを禁止した状æ
    548 ‹ï¼ˆå
    549 ¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯çŠ¶æ
    550 ‹ã¨åŒç­‰ã®çŠ¶æ
    551 ‹ï¼‰ã§å‘¼ã³å‡ºã•ãªã‘れば
    552  *  ならない.
     480 *  ディスパッチャの動作開始(prc_support.a30)
     481 *
     482 *  start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込
     483 *  みを禁止した状態(全割込みロック状態と同等の状態)で呼び出さなければ
     484 *  ならない.
    553485 */
    554486extern void     start_dispatch( void ) NoReturn;
    555487
    556488/*
    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 *  度マスク全解除状態で呼び出さなければならない.
    567494 */
    568495#define _kernel_exit_and_dispatch();    \
     
    573500
    574501/*
    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 *  す.
    580507 */
    581508extern void call_exit_kernel( void ) NoReturn;
    582509
    583510/*
    584  *  タスクコンテキストの初期化
    585  *
    586  *  タスクが休止状æ
    587 ‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ
    588 ‹ã«ç§»è¡Œã™ã‚‹æ™‚に呼ばれる.この時点
    589  *  でスタック領域を使ってはならない.
    590  *
    591  *  activate_contextを,インライン関数ではなくマクロ定義としているのは,
    592  *  この時点ではTCBが定義されていないためである.
     511 *  タスクコンテキストの初期化
     512 *
     513 *  タスクが休止状態から実行できる状態に移行する時に呼ばれる.この時点
     514 *  でスタック領域を使ってはならない.
     515 *
     516 *  activate_contextを,インライン関数ではなくマクロ定義としているのは,
     517 *  この時点ではTCBが定義されていないためである.
    593518 */
    594519extern void     start_r( void );
     
    598523        {                                                                                                                                                                       \
    599524                                                                                                                                                                                \
    600                 /*  スタックポインタ初期値の設定  */                                                                                      \
     525                /*  スタックポインタ初期値の設定  */                                                                                  \
    601526                ( p_tcb )->tskctxb.sp = ( void * )((( uint32_t ) ( p_tcb )->p_tinib->stk ) +    \
    602527                                                                ( p_tcb )->p_tinib->stksz );                                                    \
    603                 /* 起動番地の設定 */                                                                                                                     \
     528                /* 起動番地の設定 */                                                                                                                   \
    604529                ( p_tcb )->tskctxb.pc = ( FP ) start_r;                                                                                 \
    605530        }                                                                                                                                                                       \
     
    608533
    609534/*
    610  *  calltexは使用しない
     535 *  calltexは使用しない
    611536 */
    612537#define OMIT_CALLTEX
     
    614539
    615540/*
    616  *  割込みハンドラの設定
    617  *
    618  *  RX630はROMに割込みベクタをé
    619 ç½®ã™ã‚‹ãŸã‚ï¼Œæœ¬é–¢æ•°ã¯ç©ºé–¢æ•°ã§å®Ÿè£
    620 ã™ã‚‹ï¼Ž
     541 *  割込みハンドラの設定
     542 *
     543 *  RX630はROMに割込みベクタを配置するため,本関数は空関数で実装する.
    621544 */
    622545Inline void
     
    627550
    628551/*
    629  *  CPU例外ハンドラの設定
    630  *
    631  *  RX630はROMに例外ベクタをé
    632 ç½®ã™ã‚‹ãŸã‚ï¼Œæœ¬é–¢æ•°ã¯ç©ºé–¢æ•°ã§å®Ÿè£
    633 ã™ã‚‹ï¼Ž
     552 *  CPU例外ハンドラの設定
     553 *
     554 *  RX630はROMに例外ベクタを配置するため,本関数は空関数で実装する.
    634555 */
    635556Inline void
     
    640561
    641562/*
    642  *  割込み/例外ハンドラのå
    643 ¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
    644  *
    645  *  テンプレートファイルにより生成するため空マクロとする.
     563 *  割込み/例外ハンドラの入口処理の生成マクロ
     564 *
     565 *  テンプレートファイルにより生成するため空マクロとする.
    646566 */
    647567#define HDR_ENTRY(hdr, intexc_num , tobejmp)
    648568
    649569/*
    650  *  割込みハンドラのå
    651 ¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
     570 *  割込みハンドラの入口処理の生成マクロ
    652571 */
    653572#define _INT_ENTRY(inhno, inthdr)                               _kernel_##inthdr##_##inhno##_entry
     
    660579
    661580/*
    662  *  CPU例外ハンドラのå
    663 ¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
     581 *  CPU例外ハンドラの入口処理の生成マクロ
    664582 */
    665583#define _EXC_ENTRY(excno , exchdr)                                      _kernel_##exchdr##_##excno##_entry
     
    672590
    673591/*
    674  *  CPU例外の発生した時のコンテキストの参ç
    675 §
    676  *
    677  *  CPU例外の発生した時のコンテキストが,タスクコンテキストの時にFALSE,
    678  *  そうでない時にtrueを返す.
     592 *  CPU例外の発生した時のコンテキストの参照
     593 *
     594 *  CPU例外の発生した時のコンテキストが,タスクコンテキストの時にFALSE,
     595 *  そうでない時にtrueを返す.
    679596 */
    680597Inline bool_t
     
    682599{
    683600        /*
    684          *  ネストカウンタが1より大なら非タスクコンテキスト
     601         *  ネストカウンタが1より大なら非タスクコンテキスト
    685602         */
    686603        return( intnest > 1U );
     
    689606
    690607/*
    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
    694610 */
    695611#define EXC_GET_PSW_OFFSET      (4+8+4+60+4)
    696612
    697613/*
    698  *  CPU例外の発生した時のIPLの参ç
    699 §
     614 *  CPU例外の発生した時のIPLの参照
    700615 */
    701616Inline uint32_t
     
    715630
    716631/*
    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を返す).
    733639 * 
    734  *  カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1
     640 *  カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1
    735641 *                         (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
    742645 * 
    743646 * 
     
    752655
    753656/*
    754  *  プロセッサ依存の初期化
     657 *  プロセッサ依存の初期化
    755658 */
    756659extern void     prc_initialize( void );
    757660
    758661/*
    759  *  プロセッサ依存の終了時処理
     662 *  プロセッサ依存の終了時処理
    760663 */
    761664extern void     prc_terminate( void );
     
    764667#ifndef OMIT_DEFAULT_INT_HANDLER
    765668/*
    766  *  未登録の割込みが発生した場合に呼び出される
     669 *  未登録の割込みが発生した場合に呼び出される
    767670 */
    768671void default_int_handler( void );
     
    771674#ifndef OMIT_DEFAULT_EXC_HANDLER
    772675/*
    773  *  未登録の例外が発生した場合に呼び出される
     676 *  未登録の例外が発生した場合に呼び出される
    774677 */
    775678void default_exc_handler( void );
Note: See TracChangeset for help on using the changeset viewer.