=====================================================================
                         M16Cプロセッサ依存部
                                  Last Modified: '09/12/01
=====================================================================

○概要

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

○コンパイラ

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

○CPU例外ハンドラ番号

M16Cにはノンマスカブル割込みをCPU例外として扱う。
ノンマスカブル割込みにはソフトウェア割込み番号が振られていないため，
割込みベクタ番地の小さい順にCPU例外ハンドラ番号を割り振る。

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

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

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

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

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

割込みハンドラ番号(inhno)と割込み番号(intno)は，ソフトウェア割込み番号を用いる．


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

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


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

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

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

○割込み属性

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

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

○注意事項
　・M16Cプロセッサ依存部は以下のWindows開発環境，文字コードをSJIS，
　　改行コードをCR+LFに設定して使用することを前提とする．
　　TOPPERSのSubversionサーバ内では文字コードをEUC，改行コードをLFとして
　　管理するため、使用の際に注意が必要である．


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

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

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

(1) プロジェクトcfgをアクティブにする。
(2) ビルドメニューのcfg、cfg2をそれぞれ選択し、オプションに指定されてい
    るcfgファイルをxxxx.cfgに変更する。
(3) ビルドする。


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

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

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


○CPU例外の取り扱い

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

M16Cでは例外がないが、ノンマスカブル割込みを例外扱いとする。

●割込み要求禁止フラグ

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

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

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

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


・割込みの属性設定

  void x_config_int(INTNO intno, ATR intatr, PRI intpri)

・割込みの属性設定(プロセッサごとの設定)

  void m16c_config_int(INTNO intno)


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

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

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

$INTNO_VALID
$INHNO_VALID
$EXCNO_VALID

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

$INTNO_RANGE 
$INHNO_RANGE 
$EXCNO_RANGE 

○変更履歴
2008/5/12  ・新規作成                     ヴィッツ
2008/5/22  ・カーネル非依存部1.3.1に対応  ヴィッツ
2008/6/6   ・M16C/29サポート追加          ヴィッツ、名古屋大学
           ・INHNO_MAXをMCU依存部に定義
             (ターゲット依存部からの移動)
           ・余分なincludeの削除
2008/8/25  ・PLL初期化の修正
           ・ディスパッチャで退避する
             レジスタを修正
           ・割込みレジスタ定義の修正
           ・データ初期化処理の修正
2008/11/26 ・RSK-M16C-62Pターゲットの     ヴィッツ
             名称変更
2009/01/30 ・prc.tfの余分な変数を削除     ヴィッツ
           ・activate_context、start_rの
             修正
2009/05/27 ・ASP1.4.0への対応として       ヴィッツ
             call_atexitを削除
2009/12/01 ・ret_intでdisdspを参照して    ヴィッツ
             いた箇所をdspflgを参照する
             ように修正
