20.22 固定ベクタ/例外ベクタ情報(interrupt_fvector[])
ここでは,RXv1アーキテクチャの固定ベクタ・テーブル(0xFFFFFF80~0xFFFFFFFF番地)/RXv2アーキテクチャの例外ベクタ・テーブルを定義します。
MCUによっては,固定ベクタ・テーブル/例外ベクタ・テーブルには,割り込みハンドラのアドレスだけでなく,エンディアン選択レジスタなども含まれています。
固定ベクタ/例外ベクタの割り込み要因は,すべてカーネル管理外割り込みの扱いとなります。
RI600PXでは,ベクタ・アドレスに対して
表20-10のようにベクタ番号を割り当てています。本定義を行わないベクタの扱いも
表20-10に示します。
なお,固定ベクタ・テーブル/例外ベクタ・テーブルの内容はMCU毎に異なります。詳細は,使用するMCUのハードウエア・マニュアルを参照してください。
また,cfg600pxはここで定義した割り込みに関する割り込み制御レジスタや,割り込み要因等の初期設定のコードは生成しません。初期設定は,アプリケーションで実装いただく必要があります。
表20-10 固定ベクタ・テーブル/例外ベクタ・テーブル
|
|
|
|
|
|
|
コンパイラのendianオプションに応じて,以下が設定されます。
- “-endian=little”の場合 0xFFFFFFFF
- “-endian=big”の場合 0xFFFFFFF8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
オンチップ・デバッガIDコード・プロテクト(フラッシュ・メモリ)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
表20-10に記載のベクタ・アドレスは,RXv1アーキテクチャの固定ベクタ・テーブルのアドレスです。RXv2アーキテクチャの例外ベクタ・テーブルのアドレスは,EXTBレジスタによって決まります。EXTBレジスタの初期値は,RXv1アーキテクチャの固定ベクタ・テーブルのアドレスと同じです。 2.6.4節の「 FIX_INTERRUPT_VECTORセクション」も参照してください。
2
ベクタ21(アクセス例外)にハンドラを定義しないでください。定義すると,アクセス例外ハンドラが起動されなくなります。
|
2 ) 割り込みハンドラの開始アドレス(
entry_adderess)
- 説明
割り込みハンドラの実行開始関数,または固定ベクタ/例外ベクタへの設定値を定義します。
3 ) pragmaディレクティブに渡すスイッチ(
pragma_switch)
- 説明
cfg600pxは,
entry_addressで指定された関数を,割り込み関数としてkernel_id.hに#pragma interruptディレクティブを出力します。このpragmaディレクティブに渡すスイッチを指定します。
なお,
entry_addressに数値を指定した場合,およびベクタ番号31(リセット)については,#pragma interruptディレクティブは出力されません。
- 定義範囲
以下を指定できます。複数指定する場合は,カンマで区切ってください。なお,“ACC”と“NOACC”を同時に指定することはできません。
S: 割り込みハンドラで使用するレジスタ数を制限する“save”スイッチを渡します。
ACC: 割り込みハンドラでACCレジスタを保証する“acc”スイッチを渡します。
NOACC: 割り込みハンドラでACCレジスタを保証しない“no_acc”スイッチを渡します。
- 備考
ACCレジスタの扱いについては,
表20-9を参照してください。