第1章 PCのアドレス・マップと

割り込みコントローラ(13)

割り込みコントローラの動作コマンド

 

割り込みコントローラの動作コマンド

 OCW1〜OCW3の各レジスタのアクセスは動作中,常に行うことができます.

OCW1(IMR)

 OCW1は割り込みマスク・レジスタです.ビット7〜0がそれぞれIR7〜IR0に対応しており,該当するビットを“1”にするとそこからの割り込みが入らなくなります.OCW1のポート(ベース・アドレス+1)を読み出すと,設定したマスク状態が読み出されます.

 なお,PICの仕様書では書かれていないので仕様範囲外の使い方と思われますが,OCW1でマスクした状態でIRRを読み出すと,マスクされている割り込み入力ラインの状態をそのまま読み出すことができます.また,OCW3を使ったスペシャル・マスク・モードでは,OCW1はサービス中の割り込みをマスクするレジスタとして機能します

 PICの割り込み入力の優先度は固定されているため,優先度の高い割り込みがISRに入ると,それよりも順位の低い割り込みは受け付けられません.そこでOCW3でスペシャル・マスク・モードに入り,OCW1で該当する割り込みをマスクすると,これまで受け付けられなかった優先度の低い割り込みも受け付け可能となります.

 スペシャル・マスク・モードに入るにはOCW3のビット6,5を“11”に,スペシャル・マスク・モードを抜けるには“10”に設定します.

OCW2

 OCW2はEOIポートです.CPUが割り込み処理を完了したとき,PICに対して割り込みサービスが完了したことを通知するのがEOI(End Of Interrupt)です.PICはEOIを受け付けると該当するISRビットを“0”にし,次の割り込みが受け付けられるようにします.

 OCW2はこのEOI動作を行うレジスタです.PICではEOIモードをいろいろと設けており,かなり凝った使い方もできるようになっています.PICのEOIモードは次の3種類に分類されます.

・自動EOI(Automatic EOI)

・非指定EOI(Non-Specific EOI)

・指定EOI(Specific EOI)

 それぞれのモードについて,割り込み優先度の回転モードと固定モードの二つがあり,さらに優先度を動作中に(EOIせずに)変更する優先度設定コマンドも用意されています.

(1)自動EOI

 自動EOIはICW4のAEOIビット(ビット1)が“1”になっているときだけ有効です.自動EOIの場合,CPUが割り込みを受け付けた(INTAが出た)時点で自動的にISRがリセットされます.

(2)非指定EOI

 非指定EOIは比較的小規模なシステムでよく使われるEOIモードで,これを受けるとPICはISRの中でもっとも優先度の高いものを自分で判定,それをクリアします.

 通常,ISRに複数のビットが立っているときは低い順に受け付けられた(もっともプライオリティの高いものが最後に受け付けられた割り込みである)と考えられるため,優先度の高いものからクリアするというわけです.

(3)指定EOI

 指定EOIはプログラムで特定の割り込みに対するEOIを行います.比較的大きなシステムで,OSの割り込み処理が複雑になっているとき,割り込みの発生順序とは関係なく,特定の割り込みを先に処理してしまうことが起きるため,処理された割り込みからEOIを行うために使用します.このとき,OCW2ビット2,0で割り込みの番号を指定します.

(4)回転モード

 通常PICの割り込み優先度はIR0がもっとも高く,IR7がもっとも低くなっていますが,用途によっては,割り込みの優先度が固定では困る場合があります.このため設けられたのが回転モードです.回転モード時はOCW2のビット7を“1”にします.回転モードにすると最後に受け付けた割り込みは優先度がもっとも低く,それよりひとつ下の割り込みの優先度がもっとも高くなります

 たとえばIR3が受け付けられた後に回転モードにすると,IR3がもっとも優先度の低い割り込みで,以下IR2,IR1,IR0,IR7…という順序で並び,IR4がもっとも優先度の高い割り込みとなります.このように受け付けた割り込みの優先度がもっとも低くなることで,固定優先順位で使用したときに起こりがちな優先度の低い割り込みがなかなか受け付けられないという問題が回避できることになります.

 なお,指定EOIモード時に回転モードを指定すると,EOIを発行した割り込み番号の割り込みの優先度がもっとも低くなります.

(5)優先度設定コマンド

 OCW2のビット7〜5=“110”は,優先度設定コマンドです.PICのデフォルトのIR0〜IR7の優先度の順序づけが気に入らないような場合,ある割り込みの優先度をもっとも低い状態に設定するのに使用できます.

 EOIにはならないため,割り込みが発生していないときにも設定可能という点が他の回転コマンドとは異なります.


Copyright 2000 桑野 雅彦

新刊のご案内


Copyright 1997-2001 CQ Publishing Co.,Ltd.