03 ROTSW02.c
8.1 IRQ(Interrupt ReQuest)
8.1.3 関連レジスタ
内部割込みとは、CPU内部の演算結果によって割込みをかけるものを言います。タイマの設定によっ て、一定時間がきたら割込みをかけるというようなものがその一例です。表
8.1
の内部割込みは、アドレ スブレーク以外は、マスクをかけることが出来るようです。表
8.1
における「ベクタアドレス」の欄が割込みの際に呼び出す関数を登録しておくメモリのアドレス です。P.58の図3.2
で「H8/3694グループのメモリマップ」を紹介しました。そこでは割込みベクトルがH’0000 ∼ H’0033
であることにふれましたが、その詳細が表8.1
になります。割込みベクタに割込み関数を登録する方法は開発環境によって異なります。また同じ
HEW
を利用して いても、マイコンによって(デフォルトの環境における)
登録の仕方が異なるようです。ここでは、外部割り込みの例として
IRQ0
を例に、割込みの機能とその設定方法を確認していきましょう。今回はポートモードレジスタ
1(PMR1)
を用いてP14
端子をIRQ0
に設定します。割込みを利用しますので、例外処理関連のレジスタも利用することになります。
例外処理関係で今回利用するレジスタは以下のものです。
•
割り込みエッジセレクトレジスタ1(IEGR1)
•
割り込みイネーブルレジスタ1(IENR1)
•
割り込みフラグレジスタ1(IRR1)
上記のレジスタは次のアドレスに割り振られています。
表
8.3
例外処理関連レジスタのアドレスレジスタ名 アドレス
割り込みエッジセレクトレジスタ
1(IEGR1) H’FFF2
割り込みイネーブルレジスタ1(IENR1) H’FFF4
割り込みフラグレジスタ1(IRR1) H’FFF6
割り込みエッジセレクトレジスタ
1(IEGR1)
IEGR1
はNMI、IRQ3 ∼ IRQ0
端子の割り込み要求を発生させるエッジの方向を選択します。立ち上が りエッジとは、端子の状態がLOW(0)
からHIGH(1)
に変化をするところを言い、立ち下がりエッジとは、端子の状態が
HIGH(1)
からLOW(0)
に変化をするところを言います(図 8.2)。
HIGH(1) HIGH(1) HIGH(1) HIGH(1)
LOW(0) LOW(0) LOW(0) LOW(0)
立 立 立 立ちちちち下下下下りりりり 立
立 立
立ちちちち上上上上がりがりがりがり
図
8.2
立ち上がりエッジと立ち下がりエッジ表
8.4
割り込みエッジセレクトレジスタ1(IEGR1)
ビット ビット名 初期値R/W
説 明7 NMIEG 0 R/W NMI
エッジセレクト0
:N M I端子入力の立ち下がりエッジを検出1
:N M I端子入力の立ち上がりエッジを検出6 - 1 -
リザーブビットです。読み出すと常に1
が読み出されます。5 - 1
-4 - 1
-3 IEG3 0 R/W IRQ3
エッジセレクト0
:IRQ3端子入力の立ち下がりエッジを検出1
:IRQ3端子入力の立ち上がりエッジを検出2 IEG2 0 R/W IRQ2
エッジセレクト0
:IRQ2端子入力の立ち下がりエッジを検出1
:IRQ2端子入力の立ち上がりエッジを検出1 IEG1 0 R/W IRQ1
エッジセレクト0
:IRQ1端子入力の立ち下がりエッジを検出1
:IRQ1端子入力の立ち上がりエッジを検出0 IEG0 0 R/W IRQ0
エッジセレクト0
:IRQ0端子入力の立ち下がりエッジを検出1
:IRQ0端子入力の立ち上がりエッジを検出割り込みイネーブルレジスタ
1(IENR1)
IENR1
は直接遷移割り込み、タイマA
オーバフロー割り込みおよび外部端子割り込みをイネーブルにします。「イネーブルにする」とは「有効にする」という意味です。
表
8.5
割り込みイネーブルレジスタ1(IENR1)
ビット ビット名 初期値R/W
説 明7 IENDT 0 R/W
直接遷移割り込み要求イネーブルこのビットを1にセットすると
直接遷移割り込み要求がイネーブルになります。
6 IENTA 0 R/W
タイマA
割り込み要求イネーブルこのビットを1にセットすると
タイマ
A
のオーバフロー割り込み要求がイネーブルになります。5 IENWP 0 R/W
ウェイクアップ割り込み要求イネーブルこのビットはW KP
5
∼W KP0
端子共通のイネーブルビットで 1にセットすると割り込み要求がイネーブルになります。4 - 1 -
リザーブビットです。読み出すと常に1
が読み出されます。3 IEN3 0 R/W IRQ3
割り込み要求イネーブルこのビットを1にセットするとIRQ3端子の 割り込み要求がイネーブルになります。
2 IEN2 0 R/W IRQ2
割り込み要求イネーブルこのビットを1にセットするとIRQ2端子の 割り込み要求がイネーブルになります。
1 IEN1 0 R/W IRQ1
割り込み要求イネーブルこのビットを1にセットするとIRQ1端子の 割り込み要求がイネーブルになります。
0 IEN0 0 R/W IRQ0
割り込み要求イネーブルこのビットを1にセットするとIRQ0端子の 割り込み要求がイネーブルになります。
割り込みイネーブルレジスタをクリアすることにより割り込み要求をディスエーブル
(無効)
にする場合、または割り込みフラグレジスタをクリアする場合は、割り込み要求をマスクした状態(I=
1)で行っ
てください。割り込みフラグレジスタ
1(IRR1)
IRR1
は直接遷移割り込み、タイマA
オーバフロー割り込み、IRQ3∼ IRQ0
割り込み要求ステータスフ ラグレジスタです。表
8.6
割り込みフラグレジスタ1(IRR1)
ビット ビット名 初期値
R/W
説 明7 IRRDT 0 R/W
直接遷移割り込み要求フラグ[
セット条件]
SYSCR2
のDTON
に1
をセットした状態でスリープ命令を実行し直接遷移したとき[
クリア条件]
0
をライトしたとき6 IRRTA 0 R/W
タイマA
割り込み要求フラグ[
セット条件]
タイマ
A
がオーバフローしたとき[
クリア条件]
0
をライトしたとき5 - 1 -
リザーブビットです。読み出すと常に1
が読み出されます。4 - 1
-3 IRRI3 0 R/W IRQ3
割り込み要求フラグ[
セット条件]
IRQ3端子が割り込み入力に設定され、指定されたエッジを検出したとき
[
クリア条件]
0
をライトしたとき2 IRRI2 0 R/W IRQ2
割り込み要求フラグ[
セット条件]
IRQ2端子が割り込み入力に設定され、指定されたエッジを検出したとき
[
クリア条件]
0
をライトしたとき1 IRRI1 0 R/W IRQ1
割り込み要求フラグ[
セット条件]
IRQ1端子が割り込み入力に設定され、指定されたエッジを検出したとき
[
クリア条件]
0
をライトしたとき3 IRRI0 0 R/W IRQ0
割り込み要求フラグ[
セット条件]
IRQ0端子が割り込み入力に設定され、指定されたエッジを検出したとき
[
クリア条件]
0
をライトしたときさらに、割込みを実行するためにはコンディションコードレジスタ
(CCR)
の割込みマスクビットをク リアする必要があります。コンディションコードレジスタ