=====================================================================
                         SH12Aプロセッサ依存部（asp-1.3.1対応）
                                  Last Modified: '08/05/20 
=====================================================================

○概要

SH12A依存部は，SH1/2/2Aをターゲットとしている．SH1/2/2Aにはいくつかの
バリエーションが存在し，バリエーションによっては，割込み関連のレジスタ
や扱える例外や割込みの数が異なる．そのため，バリエーション毎に異なる部
分はバリエーション毎のファイルに分けることにより対応する．


○コンパイラ

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


○CPU例外ハンドラ番号

CPU例外ハンドラ番号としては，ベクタ番号を用いる．割込みのうち，NMI，ユ
ーザーブレーク，H-UDIはCPU例外として扱う．


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

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

  ・タイマ
     CMT0を使用する．カーネル内部のティックの生成に用いる．

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

○未登録の例外

未登録の例外が発生した場合は，prc_config.c で定義されている．
default_exc_handler() が呼び出される．default_exc_handler() は，発生し
た例外の番号をコンソールに出力した後，target_exit() を呼び出す．


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

割込みハンドラ番号(inhno)と割込み番号(intno)は，ベクタ番号を用いる．


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

ある割込み優先度以上の割込み優先度をカーネル管理外の割込みとして用いる
ことが可能である．カーネル管理内の割込みの最小値は TMIN_INTPRI で設定
されている．TMIN_INTPRI はディフォルトでは，-15 となっており，ターゲッ
ト依存部で上書きが可能である．


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

CFG_INTに指定可能な割込み優先度としては，-1 から TMIN_INTPRI までの値
を設定可能である．

TMIN_INTPRIの定義場所：
・C言語用の定義：
　　デフォルトの定義：prc_kernel.h
　　ターゲット依存の定義：target_config.h（現状では未定義）
・アセンブラ言語用
　　デフォルトの定義：prc_support.inc
　　ターゲット依存の定義：user_config_asm.inc　


○割込み属性

IRQ割込みに関しては，TA_POSEDGEとTA_NEGEDGEの属性を設定可能である．


○未登録の割込み

未登録の割込みが発生した場合は，prc_config.c で定義されている
default_int_handler() が呼び出される．default_int_handler() は，発生し
た割込みの割込み番号をコンソールに出力した後，target_exit() を呼び出す．


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

　　・FPUの扱い
　　　　本カーネルではSH2-AのFPUはサポートしていない．

　　・コントロールレジスタの扱い
　　　　本カーネルではグローバルベースレジスタGBR、ジャンプテーブル
　　　　ベースレジスタTBRはサポートしていない．

　　・IRQ割込み端子の初期化
　　　　本来はCFG_INTで指定されたIRQ入力端子の初期化をカーネル側ですべ
　　　　きだが、SH2-Aでは、IRQ番号から接続先の端子が一意に決まらない
　　　　（複数の端子から選択できる）ため、IRQ入力端子の初期化はサポート
　　　　していない。（端子番号に依存しない割込みコントローラの初期化は
　　　　行っている。）


=====================================================================
               アプリケーション開発者向けの情報
=====================================================================

○アプリケーション名の変更

ここでは、インクルードパスの設定など通常のHEWの操作説明は省略し、コン
フィギュレーションファイルをxxxx.cfgに変更する場合の操作手順を説明する。

(1) プロジェクト1_cfg_pass1をアクティブにする。
(2) プロジェクト1_cfg_pass1からsample1.cfgを削除する。
(3) プロジェクト1_cfg_pass1にxxxx.cfgを登録する。
(4) プロジェクト3_applicationをアクティブにする。
(5) 必要に応じて、ソースファイルを登録する。
(6) 再ビルドする。


=====================================================================
               ターゲット依存部開発者向けの情報
=====================================================================

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

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


○CPU例外の取り扱い

サポートするCPU例外ハンドラ数はターゲットプロセッサ毎に異なるので，
ターゲットプロセッサ毎の定義ファイルに定義する．

例外コードはスパースな値であるため，カーネル内部ではシフトした内部表現
を用いる．

●CPUロックフラグ

SH12Aはステータスレジスタ(SR)内に割込み優先度マスク(IPM)を持っている．
一方、CPUロックフラグ相当の機能を持たない．そのため，擬似的にCPUロック
フラグを実現する．

●割り込み要求ライン

SH12Aの割込みは，内部周辺モジュール割込みとIRQ割込みに分類でき，それぞ
れ扱いが異なる．IRQ割込みは，割込み属性の設定をサポートする．

各割込みの割込み優先度は割込み優先レベル設定レジスタ(IPRXX)によって設
定する．内部周辺モジュールの場合，周辺モジュール毎に設定可能である．例
えばSCIFは，ERI2, RXI2, BRI2, TXI2という4つの割込み要求ラインをサポー
トするが，全ての割込み要求ラインに対して同一の優先度しか設定できない．
そのため，各割込み要求ライン毎にどの割込み優先レベル設定レジスタのどの
フィールドに対応しているかの情報（IPR_INFO型）のテーブルを用意する
（ipr_info_tbl）．また，割込み番号は連続していため，サポートしていない
番号には，addressエントリに0を設定する．

typdef struct {
	/* 割込み優先順設定レジスタのアドレス */
	uint32_t address; 
	/* オフセット */
	uint32_t offset;
}IPR_INFO;

IPR_INFO ipr_info_tbl[] = {
	....
};

●割込み要求禁止フラグ

SH12AのIRCは割込み要求禁止フラグを持たない．割込みを禁止する場合は，割
込み優先順設定レジスタ(IPRXX)を0に設定する必要がある．割込み優先順設定
レジスタを0にすることで割込み要求禁止フラグを実現するとその間，割込み
優先度を記憶しておく領域が必要となる．コンフィギュレータでこのテーブル
を用意する．なお，このテーブルは割込みの入り口で割込み要因に応じてSRに
設定する必要があるため，内部表現とする．


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

●カーネルヘッダーファイル(xxx_config.h)

カーネルヘッダーファイルには，以下のマクロや関数を定義する．ターゲット
依存部では，使用するターゲットプロセッサのヘッダーファイルを，
prc_config.h をインクルードする前にインクルードする．


・割込みハンドラ番号に関する定義

  TMIN_INHNO : 割込みハンドラ番号の最小値
  TMAX_INHNO : 割込みハンドラ番号の最大値
  TNUM_INH   : 割込みハンドラ数(スパースな場合はその間もカウントする)

・割込み番号に関する定義

  TMIN_INTNO : 割込み番号の最小値
  TMAX_INTNO : 割込み番号の最大値
  TNUM_INT   : 割込み数(スパースな場合はその間もカウントする)

・割込みハンドラ番号の内部・外部表現相互変換

  EXT_INHNO(iintno) : 内部表現を外部表現に
  INT_INHNO(intno)  : 外部表現を内部表現に

・割込み番号の内部・外部表現相互変換

  EXT_INTNO(iintno) : 内部表現を外部表現に
  INT_INTNO(intno)  : 外部表現を内部表現に

・CPU例外ハンドラ番号に関する定義

  TMIN_EXCNO : 割込みハンドラ番号の最小値
  TMAX_EXCNO : 割込みハンドラ番号の最大値
  TNUM_EXC   : 割込みハンドラ数(スパースな場合はその間もカウントする)

・CPU例外ハンドラ番号の内部・外部表現相互変換

  EXT_EXCNO(iexcno) : 内部表現を外部表現に
  INT_EXCNO(excno)  : 外部表現を内部表現に

・割込み要求ライン毎の優先レベル設定レジスタの設定情報

  IPR_INFO_TBL_DATA

・IRCの初期化用関数()

  Inline void init_irc(void)

・IRCの割込み優先度レジスタの設定関数

  Inline void set_irc_ipr(uint32_t address, uint32_t offset, uint32_t val)

・割込みの属性設定

  Inline void x_config_intatr(INTNO intno, ATR intatr)

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

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

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

$INTNO_VALID
$INHNO_VALID
$EXCNO_VALID

・割込み番号数，割込みハンドラ番号数，CPU例外ハンドラ番号数
  ・0からカウントし，スパースな場合はその間もカウントする

$INTNO_RANGE 
$INHNO_RANGE 
$EXCNO_RANGE 


○プロセッサの種類

使用するプロセッサの種類を
　・HEWのワークスペース（プロジェクト）の-cpuオプション
　・C言語用マクロ定義：shx_config.h（sh2a_config.hなど）
　・アセンブラ言語用マクロ定義：sh7xxx_asm.inc
で定義する．
定義可能な内容は，SH1/SH2/SH2E/SH2A のいずれかである．


○変更履歴

'08/05/20 
　・prc_initialize, prc_terminateのシンボルリネームを
　　アーキテクチャ依存部で行うよう変更
　・「浮動小数点型に関する定義」を追加
　　　　・arch/shc/tool_stddef.h
　　　　・target/apsh2a_hew/target_stddef.h
　　　　　　#define TOPPERS_STDFLOAT_TYPE1を追加
　・prc_support.src
　　　コメント修正

'08/05/13 Release1.3.1
　・プロジェクト2_cfg_pass2の生成ファイル2_cfg_pass2.mot、2_cfg_pass2.mapが
　　　・2_cfg_pass2\Debug\1stディレクトリ　または
　　　・2_cfg_pass2\Release\1stディレクトリ
　　に配置される場合に対応
　・2_cfg_pass2フェーズの依存ファイルのパス名に1stを追加
　・prc_support.src
　　　・ログトレース機能の呼び出し箇所を.AIFDEF〜.AENDIで囲む。
　　　・シンボルリネームをasp-1.3.1用に修正

'08/05/12 Release1.3.0
　・ディレクトリ名の変更
　　　asp/arch/sh12a_renesas → sh12a_hew
　　　asp/arch/sh_renesas → shc
　・asp/pdic/sh/sh_scif_renesas.hをasp/arch/shc/sh_scif_shc.hにリネーム
　　　sh_scif.cからはtarget_syssvc.h経由でsh_scif_shc.hをインクルードする。
　　　（sh_scif.cから処理系依存性を分離するため）


'08/02/29 Release1.1.2　最初のリリース（早期リリース）

