=====================================================================
                         RXプロセッサ依存部
                                  Last Modified: '10/12/25
=====================================================================

○概要

RX依存部はルネサスエレクトロニクス製RXファミリをターゲットとしている．
RXにはいくつか(600シリーズ, 200シリーズ)のバリエーションが存在する.
そのため，バリエーション毎に異なる部分はバリエーション毎のファイルに
分けることにより対応する．


○コンパイラ

カーネルはルネサスエレクトロニクス製RX ToolChainを用いてコンパイルする．
動作確認したバージョンはターゲット依存部のドキュメントに記載する．


○カーネルの使用リソース

カーネルは以下のリソースを使用する．

  ・コンペアマッチタイマ
     コンペアマッチタイマの1ユニットを使用する．カーネル内部のティックの生成に用いる．
     使用するユニットはターゲット毎に異なる．

  ・シリアル
     システムのポートを1ポート使用する．使用するポートはターゲット毎に異なる．


○割り込みハンドラ番号と割込み番号

割込みハンドラ番号(inhno)と割込み番号(intno)は，同一であり, 可変ベクタテーブルのベクタ
番号に対応する．
※有効なベクタ番号は「rx610.h」にて定義


○CPU例外ハンドラ番号

RXでは例外事象をCPU例外として扱う．

例外事象には例外番号が振られていないため，固定ベクタテーブルの小さい順
に例外番号を割り振る.

CPU例外ハンドラ番号は例外番号と一致する．
※FFFFFF80h番地を0とし、予約領域にも番号を割り振る.
※有効な例外番号は「rx610.h」にて定義.


○カーネル管理内/外の割込み

ある割込み優先度以上の割込み優先度をカーネル管理外の割込みとして用いる
ことが可能である．カーネル管理内の割込みの最小値は TMIN_INTPRI で設定
されている．TMIN_INTPRI はデフォルトでは，「-7」となっており，ターゲッ
ト依存部で上書きが可能である．ターゲット依存部にてTMIN_INTPRIに「-5」を
設定した場合，割込み優先度が「-1」から「-5」の割込みをカーネル管理内割
込みとし，「-6」から「-7」の割込みをカーネル管理外割込みとする．


○CFG_INTに指定可能な割込み優先度

CFG_INTに指定可能な割込み優先度としては，「-1」から 「-7」 までの値を
設定可能である．
カーネル管理外割込みに対しても，CFG_INTで要求ラインの属性を設定するこ
とができる．
DEF_INHで属性に管理内割込みを設定するか管理外割込みを設定するかによって
CFG_INTに設定可能な割込み優先度の有効範囲が異なる．ターゲット依存部にて
TMIN_INTPRIに「-5」を設定した場合，カーネル管理内割込みには割込み優先度
「-1」から「-5」までの値を設定可能であり，カーネル管理外割込みには割込み
優先度「-6」から「-7」までの値を設定可能である．


TMIN_INTPRIの定義場所＞
・C言語用の定義
    デフォルトの定義    ：prc_kernel.h
    ターゲット依存の定義：target_config.h（現状では未定義）


○割込み属性

IRQ割込みに関しては, 以下の属性を設定可能である．
    −TA_POSEDGE
    −TA_NEGEDGE
    −TA_BOTHEDGE
    −TA_LOWLEVEL


○制限事項
・カーネルのコンフィギュレーション
  コンフィギュレーションのパス3（ビルド後の構成チェック）は行っていない．


○注意事項
・RXプロセッサ依存部は以下のWindows開発環境，文字コードをSJIS，
  改行コードをCR+LFに設定して使用することを前提とする．

・現在, 構造体オフセットのアライメントの最適化を実施していない.
  #pragma pack命令等により, 最適化を実施する場合, makeoffsetプロジェクトを
  再度ビルドすること.

・カーネル管理外割込みハンドラはコンパイラ拡張命令"#pragma interrupt"により
  定義すること.

・タスクスタックサイズの最小値は84byteである.
  割込み入口処理：48byte使用
  CPU例外入口処理：84byte使用


=====================================================================
               プロセッサ依存部開発者向けの情報
=====================================================================

○サポートプロセッサの追加

サポートするプロセッサを追加する場合には，サポートするプロセッサの型番
（rxXX）でテンプレートファイル(rxXX.tf)， カーネル実装のターゲット
依存の定義(rxXX_config.h)，ハードウェア資源のヘッダーファイル（rxXX.h）
を作成する必要がある．
その他のファイルが必要な場合は，プロセッサの型番を先頭に付けてファイルを
作成し，ターゲット依存部からインクルードすればよい．


○ターゲットプロセッサ毎の定義内容

●ハードウェア資源のヘッダーファイル(rxXX.h)

MCU依存定義ファイルには，以下のマクロや関数やSFRアドレスを定義する．
（下記以外の情報を定義してもよい．）

・CPU例外番号
  INT_PRIVILEGED_INSTRUNCTION
  INT_UNDEF_INSTRUNCTION
  INT_FLOATINGPOINT_INSTRUCTION
  INT_NMI
  INT_RESET

・割込み番号
  INT_BUSERR
  INT_FCU_FCUERR
      :
      :
      :
  INT_RIIC1_TXI1
  INT_RIIC1_TEI1

・カーネルが操作するレジスタ
  割込み要求レジスタ（IR）
  割込み要求先設定レジスタ（ISEL）
  割込み要求許可レジスタ（IER）
  割込み要求プライオリティレジスタ（IPR）
  IRQコントロールレジスタ（IRQ）

・コンペアマッチタイマ
  CMT_CMSTRx_ADDR
  CMTx_CMCR_ADDR
  CMTx_CMCNT_ADDR
  CMTx_CMCOR_ADDR

  xはコンペアマッチタイマのチャンネルID

・シリアルポートの数
  TNUM_SIOP

・シリアルコミュニケーションインタフェース
  SCIx_SMR_ADDR
  SCIx_BRR_ADDR
  SCIx_SCR_ADDR
  SCIx_TDR_ADDR
  SCIx_SSR_ADDR
  SCIx_RDR_ADDR
  SCIx_SCMR_ADDR
  SCIx_SEMR_ADDR

  xはシリアルコミュニケーションインタフェースのチャンネルID

・その他
  モジュールストップコントロールレジスタ
    SYSTEM_MSTPCRA_ADDR
    SYSTEM_MSTPCRB_ADDR
    SYSTEM_MSTPCRC_ADDR


●プロセッサ依存モジュールファイル(rxXX_config.c / rxXX_config.h)

プロセッサ依存モジュールファイルには，以下の割込み制御用マクロや
関数やデータを定義する．
ターゲット依存部では，使用するターゲットプロセッサのヘッダファイル
をインクルードする．

・割込み要因プライオリティレジスタアドレス

  volatile uint8_t * const ipr_reg_addr[ INHNO_MAX ]

・割込み要求許可レジスタアドレステーブル

  const IER_INFO ier_reg_addr[ INHNO_MAX ]

・割込み要求レジスタアドレステーブル

  volatile uint8_t * const ir_reg_addr[ INHNO_MAX ]

・IRQコントロールレジスタアドレステーブル

  volatile uint8_t * const irqcr_reg_addr[ IRQ_MAX ]


●CFG用テンプレートファイル

CFG用のテンプレートファイルには以下の変数をを定義する．ターゲット依存
部のCFG用テンプレートファイルでは，prc.tf をインクルードする前に，使用
するターゲットプロセッサのCFG用テンプレートファイルをインクルードする
こと．

・有効な割込み番号，割込みハンドラ番号，CPU例外ハンドラ番号

$INTNO_VALID
$INHNO_VALID
$EXCNO_VALID

・割込み番号数，割込みハンドラ番号数，CPU例外ハンドラ番号数
  ・0からカウントし，予約領域等もその間をカウントする

$INTNO_RANGE 
$INHNO_RANGE 
$EXCNO_RANGE 


○変更履歴
2010/9/21  ・新規作成                                  ヴィッツ
2010/9/29  ・割込み番号, 例外番号の説明を修正          ヴィッツ
2010/12/25 ・カーネル管理内/外の割込みの説明追記       ヴィッツ
           ・CFG_INTに指定可能な割込み優先度の説明修正 ヴィッツ
