Everything
20.21 可変ベクタ情報(interrupt_vector[])
ここでは,RX MCUの可変ベクタに設定する割り込みハンドラを定義します。
未定義の割り込みが発生した場合は,システム・ダウンとなります。
なお,cfg600pxはここで定義した割り込みに関する割り込み制御レジスタや,割り込み要因等の初期設定のコードは生成しません。初期設定は,アプリケーションで実装いただく必要があります。
備考 ベクタ番号1~8はRI600PXが使用するため,定義しないでください。また,MCU仕様で予約となっているベクタには定義しないでください。
形式
< >内は,ユーザが記述する部分を示します。
1 ) ベクタ番号
- 説明
ベクタ番号を定義します。
- 定義形式
数値
- 定義範囲
0~255
- 省略時の扱い
省略不可
2 ) 割り込みハンドラの開始アドレス(entry_adderess
- 説明
割り込みハンドラの実行開始関数を定義します。
- 定義形式
関数名
- 定義範囲

- 省略時の扱い
省略不可
3 ) カーネル管理割り込みの指定(os_int
- 説明
この割り込みがカーネル管理割り込みかどうかを定義します。
カーネル割り込みマスクレベル(system_IPL)以下の割り込み優先レベルの割り込みはカーネル管理割り込み,それ以外の割り込みはカーネル管理外割り込みとして定義する必要があります。
なお,カーネル割り込みマスクレベル(system_IPL)が15の場合は,すべての可変ベクタ割り込みはカーネル管理割り込みとする必要があります。
- 定義形式
シンボル
- 定義範囲
以下のいずれか。
YES: カーネル管理割り込み
NO: カーネル管理外割り込み
- 省略時の扱い
省略不可
4 ) pragmaディレクティブに渡すスイッチ(pragma_switch
- 説明
cfg600pxは,entry_addressで指定された関数を割り込み関数として扱う#pragma interruptディレクティブを,システム情報ヘッダ・ファイルkernel_id.hに出力します。このpragmaディレクティブに渡すスイッチを指定します。
- 定義形式
シンボル
- 定義範囲
以下を指定できます。複数指定する場合は,カンマで区切ってください。なお,“ACC”と“NOACC”を同時に指定することはできません。
E: 多重割り込みを許可する“enable”スイッチを渡します
F: 高速割り込みを指定する“fint”スイッチを渡します。なお,高速割り込みは必ずカーネル管理外割り込み(os_int=NO)としなければなりません。
S: 割り込みハンドラで使用するレジスタ数を制限する“save”スイッチを渡します。
ACC: 割り込みハンドラでACCレジスタを保証する“acc”スイッチを渡します。
NOACC: 割り込みハンドラでACCレジスタを保証しない“no_acc”スイッチを渡します。
- 省略時の扱い
何もスイッチを渡しません。
備考1 ACCレジスタの保証については,以下を参照してください。
表20-9  ACCレジスタの保証
pragma_switchの設定
コンパイラの“-save_acc”オプション
なし
あり
“ACC”,“NOACC”ともに無し
“acc”,“no_acc”いずれのスイッチも渡されません。ACCは保証されません。
メaccモ,メno_accモいずれのスイッチも渡されません。ACCは保証されます。
“ACC”あり
“acc”スイッチが渡されます。ACCは保証されます。
“NOACC”あり
“no_acc”スイッチが渡されます。ACCは保証されません。

備考2 基本クロック用タイマ・チャネルの選択(timer)に“CMT0”,“CMT1”,“CMT2”,または“CMT3”のいずれかを指定した場合は,暗黙的に以下の指定でinterrupt_vector[]が定義がなされたものと扱います。
- ベクタ番号
- “CMT0”:28
- “CMT1”:29
- “CMT2”:30
- “CMT3”;31
- entry_address:RI600PX内の基本クロック割り込み処理ルーチンの開始アドレス
- os_int:YES
- pragma_switch:E,ACC