## 第5章　制御機能

ここでは、割り込みコントローラやシステムクロックについてを説明します。

### 5-1　割り込み機能

「割り込み」は、実行中のプログラムを一時中断して、緊急を要する他のプログラムを優先して実行する機能です。ビジュアルメモリには、13種類の割り込み要求を発生する回路が用意されています。一覧は、次のとおりです。

一部の割り込み処理については、アプリケーションからの任意に設定できないものがあります。

####

5-1-1　割り込みの種類

▽ 割り込み一覧(表13)

優先 順位 | 割り込みの種類 | 内/外 | ベクター アドレス | 割り込み要求 | 要因フラグ | 許可フラグ | レジスタ アドレス | 優先順位 設定
1 | 外部割り込みINT0 | 外 | 0003H | P70/INT0端子の イベント検出 | I01CR1 | I01CR0 | 15DH | 最高/低
2 | 外部割り込みINT1 | 外 | 000BH | P71/INT1端子の イベント検出 | I01CR5 | I01CR4 | 15DH
3 | 外部割り込みINT2 | 外 | 0013H | P72/INT2端子の イベント検出 | I23CR1 | I23CR0 | 15EH | 高/低
タイマー/カウンタ TOL(下位8ビット) | 内 | タイマー/カウンタ TOL 下位8ビットの オーバーフロー | T0CNT1 | T0CNT0 | 110H
4 | 外部割り込みINT3 | 外 | 001BH | P73/INT3端子の イベント検出 | I23CR5 | I23CR4 | 15EH | 高/低
ベースタイマー | 内 | ベースタイマーの オーバーフロー | BTCR1 | BTCR0 | 17FH
BTCR3 | BTCR2
5 | タイマー/カウンタ TOH(下位8ビット) | 内 | 0023H | タイマー/カウンタ TOH 下位8ビットの オーバーフロー | T0CNT3 | T0CNT2 | 110H | 高/低
6 | タイマーT1 | 内 | 002BH | タイマー T1Lの オーバーフロー | T1CNT1 | T1CNT0 | 118H | 高/低
タイマー T1Hの オーバーフロー | T1CNT3 | T1CNT2
7 | SI00 | 内 | 0033H | SI00の終了を検出 | SC0N01 | SC0N00 | 130H | 高/低
8 | SI01 | 内 | 003BH | SI01の終了を検出 | SC0N11 | SC0N10 | 134H | 高/低
9 | ビジュアルメモリ 割り込み | 内 | 0043H | ビジュアルメモリ 通信の受信終了検出 | RFB | RFBENA | 160H/161H | 高/低
10 | ポート3割り込み （P32INT=1） | 外 | 004BH | ポート3の "L"レベル検出 | P31INT | P30INT | 14EH | 高/低

- 優先順位は、複数の割り込み要求が同時に発生している場合に優先される順位を示します。
  ただし、割り込み優先制御レジスタ（IP）で指定された場合には、優先順位は入れ換わります。

####

5-1-2　割り込み機能の動作

表13の各割り込み要求源から割り込みが発生すると、それに対応する割り込み要求フラグをセットされます。

割り込み要求源に対応する割り込み要求許可フラグがセットされていれば、割り込み制御回路に割り込み要求を知らせます。

割り込み制御回路は、優先順位の設定にしたがって割り込みを受け付けます。

割り込みには「最高レベル」「高レベル」「低レベル」があり「高レベル」「低レベル」の割り込みを許可するには、個別の割り込み許可フラグとは別に、マスター割り込み許可フラグ（IE7）をセットする必要があります。IE7は「高レベル」「低レベル」の割り込みを制御します。また、INT0，INT1が割り込み優先制御フラグ（IE1，0）によって「最高レベル」に設定されている場合には、マスター割り込み許可フラグに関係なく割り込み処理が実行されます。

優先順位3から9の割り込み要因については、割り込み優先制御レジスタ（IP）で割り込み優先（「高レベル」と「低レベル」）を指定できます。

割り込みが発生すると、割り込み制御回路は実行途中にある命令を完了した後に、プログラムカウンタ（PC）の内容を自動的にスタック（RAM内）に格納し、割り込み処理ルーチンを実行します。このとき、スタック（RAM）は2バイト消費され、スタックポインタ（SP）は＋2されます。割り込み処理ルーチンから復帰した後、SPは−2されます。

割り込み処理ルーチンの最後でRETI命令を実行することで、もとのプログラムの実行を開始します。

なお、多重ネスティングは、最大3です。

RETI命令および次に示す特殊機能レジスタへの書き込み命令（MOV，STなど）の実行中および、フラッシュメモリへの書き込み中には、割り込み要求フラグの受け付け処理は行なわれません。

IE，IP，PCON，EXT

▽ 割り込み処理が行なわれないサイクル(図80)

割り込み機能を使用する場合には、次に示す特殊機能レジスタを操作する必要があります。

IE，IP，SP注，割り込みを受け付ける機能ブロックの特殊機能レジスタ

ハードウェアリセット時にシステムプログラムが設定を行ないます。アプリケーションからSPを直接操作することはありません。

####

5-1-3　回路構成

▽ 割り込み機能1ブロック図(図81)

####

5-1-4　関連レジスタ

#### マスター割り込み許可制御レジスタ（IE）

詳細は「4.7　外部割り込み機能」「マスター割り込み許可制御レジスタ（IE）」を参照してください。

シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0
IE | 108H | R/W | IE7 | − | − | − | − | − | IE1 | IE0
リセット時 | 0 | H | H | H | H | H | 0 | 0

ビット名 | 機能
IE7(ビット7) | マスター割り込み許可制御(高レベル、低レベル)
0：割り込み要求をすべて禁止 1：割り込み要求をすべて許可
IE1(ビット1) IE0(ビット0) | INT0,1割り込み優先制御
IE1 | IE0 | INT1優先レベル | INT0優先レベル
0 1 × | 0 0 1 | 最高レベル 低レベル 低レベル | 最高レベル 最高レベル 低レベル

#### 割り込み優先順位制御レジスタ（IP）

シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0
IP | 109H | R/W | IP7 | IP6 | IP5 | IP4 | IP3 | IP2 | IP1 | IP0
リセット時 | 0 | − | 0 | 0 | 0 | 0 | 0 | 0

ビット名 | 機能
IP7 (ビット7) | ポート3割り込み優先レベル設定
0：低レベル 1：高レベル
IP5(ビット5) | SI01の割り込み優先順位設定
0：低レベル 1：高レベル
IP4(ビット4) | SI00の割り込み優先レベル設定
0：低レベル 1：高レベル
IP3(ビット3) | T1の優先レベル設定
0：低レベル 1：高レベル
IP2(ビット2) | T0Hの優先レベル設定
0：低レベル 1：高レベル
IP1(ビット1) | INT3とベースタイマーの割り込み優先レベル設定
0：低レベル 1：高レベル
IP0(ビット0) | INT2とT0Lの割り込み優先レベル設定
0：低レベル 1：高レベル

##### ■IP7（ビット7）：ポート3割り込みの優先レベル設定

ポート3割り込みの優先レベル、高（1）/低（0）を選択します。

‘1’をセットすると、優先レベルは「高レベル」になり、低レベルのINT0、INT1の割り込み（IE0＝1）より優先されます。

‘0’にリセットすると、優先レベルは「低レベル」になります。

##### ■IP5（ビット5）：SIO1の割り込み優先レベル設定

SIO1による割り込みの優先レベル、高（1）/低（0）を選択します。

‘1’をセットすると、優先レベルは「高レベル」になり、低レベルのINT0、INT1の割り込み（IE0＝1）より優先されます。

‘0’にリセットすると、優先レベルは「低レベル」になります。

##### ■IP4（ビット4）：SIO0の割り込み優先レベル設定

SIO0による割り込みの優先レベル、高（1）/低（0）を選択します。

‘1’をセットすると、優先レベルは「高レベル」になり、低レベルのINT0、INT1の割り込み（IE0＝1）より優先されます。

‘0’にリセットすると、優先レベルは「低レベル」になります。

##### ■IP3（ビット3）：T1の割り込み優先レベル設定

T1による割り込みの優先レベル、高（1）/低（0）を選択します。

‘1’をセットすると、優先レベルは「高レベル」になり、低レベルのINT0、INT1の割り込み（IE0＝1）より優先されます。

‘0’にリセットすると、優先レベルは「低レベル」になります。

##### ■IP2（ビット2）：T0Hの割り込み優先レベル設定

T0Hによる割り込みの優先レベル、高（1）/低（0）を選択します。

‘1’をセットすると、優先レベルは「高レベル」になり、低レベルのINT0、INT1の割り込み（IE0＝1）より優先されます。

‘0’にリセットすると、優先レベルは「低レベル」になります。

##### ■IP1（ビット1）：INT3/ベースタイマーの割り込み優先レベル設定

INT3/ベースタイマーによる割り込みレベル、高（1）/低（0）を選択します。

‘1’をセットすると、優先レベルは「高レベル」になり、低レベルのINT0、INT1の割り込み（IE0＝1）より優先されます。

‘0’にリセットすると、優先レベルは「低レベル」になります。

##### ■IP0（ビット0）：INT2/T0Lの割り込み優先レベル設定

INT2/T0Lによる割り込みレベル、高（1）/低（0）を選択します。

‘1’をセットすると、優先レベルは「高レベル」になり、低レベルのINT0、INT1の割り込み（IE0＝1）より優先されます。

‘0’にリセットすると、優先レベルは「低レベル」になります。

####

5-1-5　割り込み優先順位

割り込みレベルの優先順位は、次のようになっています。

「最高レベル」＞「高レベル」＞「低レベル」

同じ優先順位レベル内において、同時に発生した複数の割り込み要因の優先順位は、表13に示した順に受け付けられます。また、多重割り込み制御回路によって、多重割り込みが制御され「低レベル」→「高レベル」→「最高レベル」の割り込みルーチンへのネスティングが可能です。

##### ■「最高レベル」

外部割り込みINT0，INT1は、「最高レベル」に設定できます。このレベルの割り込みは、マスク割り込み許可フラグ（IE7）によって制御されません。

##### ■「高レベル」

INT0，INT1以外の割り込み要因のうち、割り込み優先制御レジスタ（IP）がセットされているビットに対応する要因です。このレベルの割り込みは、マスク割り込み許可フラグ（IE7）によって制御されます。

##### ■「低レベル」

INT0，INT1のうちIE0，1で「低レベル」に設定されている要因と、INT0，INT1以外の割り込み要因のうち、割り込み制御レジスタ（IP）がリセットされているビットに対応する要因です。このレベルの割り込みは、マスター割り込み許可フラグ（IE7）によって制御されます。

▽ 割り込み優先順位(図82)

たとえば、SIO1終了の割り込み順位をINT0割り込みより優先させる場合、IE0を‘1’にしてIP5を‘1’にします（IE0＝1、IP＝00100000B）。

▽ SIO1の割り込みを優先(図83)

また、SIO1終了の割り込み順位をINT2割り込みとINT0割り込みの間に設定する場合、IE0を‘1’にして、IP5とIP0を‘1’にします（IE0＝1、IP＝00100001B）。

▽ T0L→SIO1→INT0に優先順位を変更(図84)

#### 多重割り込みにおける注意点

高いレベルの割り込み処理ルーチン実行中に、低いレベルの割り込み要求が発生した場合は、高いレベルの割り込み処理ルーチンが終了した後に、1命令を実行してから低いレベルの割り込みを受け付けます。

割り込み処理ルーチン実行中に、同レベルの割り込み要求が発生した場合には、その割り込み要求は受け付けられません。

[←] | [INDEX] | [→]