第16章 システム初期化処理
- 基本クロック用タイマの初期化
cfg600が出力する“ri_cmt.h”で実装されている“void _RI_init_cmt(void)”を呼び出してください。
「8.9 基本クロック用タイマの初期化」も参照してください。
cfg600が出力する“ri_cmt.h”で実装されている“void _RI_init_cmt(void)”を呼び出してください。
「8.9 基本クロック用タイマの初期化」も参照してください。
- ブート処理の基本型
ブート処理関数は“void PowerON_Reset_PC (void)”としてください。これ以外の関数名とする場合は,システム・コンフィギュレーション・ファイルでinterrupt_fvector[31]にその関数名を定義する必要があります。
ブート処理関数の例については,「16.2.4 ブート処理ファイルの例」を参照してください。
ブート処理関数は“void PowerON_Reset_PC (void)”としてください。これ以外の関数名とする場合は,システム・コンフィギュレーション・ファイルでinterrupt_fvector[31]にその関数名を定義する必要があります。
ブート処理関数の例については,「16.2.4 ブート処理ファイルの例」を参照してください。
- スタックの切り替え
以下のように#pragma entryディレクティブを記述してください。これにより,ブート処理関数の先頭でスタック・ポインタ(ISP)をシステム・スタックに設定するコードが生成されます。
以下のように#pragma entryディレクティブを記述してください。これにより,ブート処理関数の先頭でスタック・ポインタ(ISP)をシステム・スタックに設定するコードが生成されます。
- PSWレジスタ
カーネル初期化部(vsta_knl, ivsta_knl)を呼び出すまでは,全割り込みを禁止した状態とスーパバイザ・モードを維持してください。CPUリセット直後はこの状態(PSW.I = 0,PSW.PM=0)となっているので,通常はPSWレジスタを変更しないでください。
カーネル初期化部(vsta_knl, ivsta_knl)を呼び出すまでは,全割り込みを禁止した状態とスーパバイザ・モードを維持してください。CPUリセット直後はこの状態(PSW.I = 0,PSW.PM=0)となっているので,通常はPSWレジスタを変更しないでください。
- EXTBレジスタ(RXv2アーキテクチャ)
必要に応じ,EXTBレジスタをFIX_INTERRUPT_VECTORセクションの先頭アドレスに初期化してください。2.6.4節の「FIX_INTERRUPT_VECTORセクション」も参照してください。
必要に応じ,EXTBレジスタをFIX_INTERRUPT_VECTORセクションの先頭アドレスに初期化してください。2.6.4節の「FIX_INTERRUPT_VECTORセクション」も参照してください。
- サービス・コールの発行
ブート処理が開始された時点では“カーネル初期化部(vsta_knl, ivsta_knl)の実行”が行われていません。したがって,ブート処理では,vsta_knl,ivsta_knlを除くサービス・コールの発行が禁止されています。
ブート処理が開始された時点では“カーネル初期化部(vsta_knl, ivsta_knl)の実行”が行われていません。したがって,ブート処理では,vsta_knl,ivsta_knlを除くサービス・コールの発行が禁止されています。
カーネル初期化部は,vsta_knl,ivsta_knlの呼び出しによって実行されます。vsta_knl,ivsta_knlは,通常はブート処理関数(PowerON_Reset_PC( ))から呼び出します。
ブート処理関数(PowerON_Reset_PC( ))から呼び出されるセクション初期化関数“_INITSCT( )”は,コンパイラによって提供されます。_INITSCT( )は,セクション情報ファイル(ユーザ・オウン・コーディング部)によって生成されたテーブルにしたがって,未初期化データ・セクションの0クリア,および初期化データ・セクションの初期化を行います。
初期化対象のセクションは、セクション情報ファイルのセクション初期化用テーブル(DTBL,BTBL)へ記述する必要があります。_INITSCT()が使用するセクションの先頭アドレスおよび最終アドレスを、セクションアドレス演算子を用いて設定します。セクション初期化用テーブルのセクション名は、未初期化データ領域をC$BSEC、初期化データ領域をC$DSECで宣言します。
また,DTBLに記述した初期化データ・セクションは,リンカ・オプション“-rom”を用いてROMからRAMにマップする必要があります。詳細は「2.6.5 初期化データ・セクション」を参照してください。
MCUによっては,固定ベクタ・テーブル(RXv1アーキテクチャ)/例外ベクタ・テーブル(RXv2アーキテクチャ)内の0xFFFFFF80~0xFFFFFFBF番地に,エンディアン選択レジスタやオンチップ・デバッガIDコード・プロテクトなどが割り当てられています。これらを設定するには,システム・コンフィギュレーション・ファイルに“interrupt_fvector[]”を記述してください。詳細は,「19.19 固定ベクタ/例外ベクタ情報(interrupt_fvector[])」を参照してください。