20.22 固定ベクタ/例外ベクタ情報(interrupt_fvector[])
ここでは,RXv1アーキテクチャの固定ベクタ・テーブル(0xFFFFFF80〜0xFFFFFFFF番地)/RXv2アーキテクチャの例外ベクタ・テーブルを定義します。

MCUによっては,固定ベクタ・テーブル/例外ベクタ・テーブルには,割り込みハンドラのアドレスだけでなく,エンディアン選択レジスタなども含まれています。

固定ベクタ/例外ベクタの割り込み要因は,すべてカーネル管理外割り込みの扱いとなります。

RI600PXでは,ベクタ・アドレスに対して表20−10のようにベクタ番号を割り当てています。本定義を行わないベクタの扱いも表20−10に示します。

なお,固定ベクタ・テーブル/例外ベクタ・テーブルの内容はMCU毎に異なります。詳細は,使用するMCUのハードウエア・マニュアルを参照してください。

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

表20−10  固定ベクタ・テーブル/例外ベクタ・テーブル

ベクタ・アドレス 1

ベクタ番号

要因の例(MCU毎に異なります)

定義省略時の扱い

0xFFFFFF80

0

エンディアン選択レジスタ

コンパイラのendianオプションに応じて,以下が設定されます。

- “-endian=little”の場合
0xFFFFFFFF


- “-endian=big”の場合
0xFFFFFFF8


0xFFFFFF84

1

(予約領域)

0xFFFFFFFF

0xFFFFFF88

2

オプション機能選択レジスタ1

0xFFFFFF8C

3

オプション機能選択レジスタ0

0xFFFFFF90

4

(予約領域)

0xFFFFFF94

5

(予約領域)

0xFFFFFF98

6

(予約領域)

0xFFFFFF9C

7

ROMコード・プロテクト(フラッシュ・メモリ)

0xFFFFFFA0

8

オンチップ・デバッガIDコード・プロテクト(フラッシュ・メモリ)

0xFFFFFFA4

9

0xFFFFFFA8

10

0xFFFFFFAC

11

0xFFFFFFB0

12

(予約領域)

0xFFFFFFB4

13

(予約領域)

0xFFFFFFB8

14

(予約領域)

0xFFFFFFBC

15

(予約領域)

0xFFFFFFC0

16

(予約領域)

システム・ダウン

0xFFFFFFC4

17

(予約領域)

0xFFFFFFC8

18

(予約領域)

0xFFFFFFCC

19

(予約領域)

0xFFFFFFD0

20

特権命令例外

0xFFFFFFD4

21

アクセス例外

アクセス例外ハンドラ2

0xFFFFFFD8

22

(予約領域)

システム・ダウン

0xFFFFFFDC

23

未定義命令例外

0xFFFFFFE0

24

(予約領域)

0xFFFFFFE4

25

浮動小数点例外

0xFFFFFFE8

26

(予約領域)

0xFFFFFFEC

27

(予約領域)

0xFFFFFFF0

28

(予約領域)

0xFFFFFFF4

29

(予約領域)

0xFFFFFFF8

30

ノンマスカブル割り込み

0xFFFFFFFC

31

リセット

PowerON_Reset_PC()

1
表20−10に記載のベクタ・アドレスは,RXv1アーキテクチャの固定ベクタ・テーブルのアドレスです。RXv2アーキテクチャの例外ベクタ・テーブルのアドレスは,EXTBレジスタによって決まります。EXTBレジスタの初期値は,RXv1アーキテクチャの固定ベクタ・テーブルのアドレスと同じです。2.6.4節の「FIX_INTERRUPT_VECTORセクション」も参照してください。



2
ベクタ21(アクセス例外)にハンドラを定義しないでください。定義すると,アクセス例外ハンドラが起動されなくなります。





形式

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

 interrupt_fvector[ <1. ベクタ番号> ] {
     entry_adderess = <2. 割り込みハンドラの開始アドレス(entry_adderess)>;
     pragma_switch  = <3. pragmaディレクティブに渡すスイッチ(pragma_switch)>;
 };


1 ) ベクタ番号

- 説明
ベクタ番号を定義します。


- 定義形式
数値


- 定義範囲
0〜31


- 省略時の扱い
省略不可


2 ) 割り込みハンドラの開始アドレス(entry_adderess

- 説明
割り込みハンドラの実行開始関数,または固定ベクタ/例外ベクタへの設定値を定義します。


- 定義形式
関数名または数値


- 定義範囲
数値の場合は0〜0xFFFFFFFF


- 省略時の扱い
省略不可


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を参照してください。