20.21 可変ベクタ情報(interrupt_vector[])
ここでは,RX MCUの可変ベクタに設定する割り込みハンドラを定義します。

未定義の割り込みが発生した場合は,システム・ダウンとなります。

なお,cfg600pxはここで定義した割り込みに関する割り込み制御レジスタや,割り込み要因等の初期設定のコードは生成しません。初期設定は,アプリケーションで実装いただく必要があります。

備考 ベクタ番号1〜8はRI600PXが使用するため,定義しないでください。また,MCU仕様で予約となっているベクタには定義しないでください。

形式

< >内は,ユーザが記述する部分を示します。

 interrupt_vector[ <1. ベクタ番号> ] {
     entry_adderess = <2. 割り込みハンドラの開始アドレス(entry_adderess)>;
     os_int         = <3. カーネル管理割り込みの指定(os_int)>;
     pragma_switch  = <4. pragmaディレクティブに渡すスイッチ(pragma_switch)>;
 };


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