Intel 8259

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

Intel 8259Programmable Interrupt Controller(PIC)の一種であり、Intel 8080Intel 8085Intel 8086のような8bitや16bitのマイクロプロセッサの周辺LSIとして、同社により設計・開発された。元々、このPICの仲間は、8259、8259A、8259Bからなり、今日では多くのメーカーから幅広く互換チップが提供されている。8259はマルチプレクサ、つまり一つのデバイスに割り込みをかけるため、複数の割り込み入力を一つの割り込み出力に束ねるように振舞う。

歴史[編集]

この仲間のチップ同士の間の差はほとんど知られていない。NECが8259A、8259Bを開発し、8259BはPC/ATに採用された2代目の8259A以上の何者でもないと信じられていたりする。

8259は1980年に初代PCに採用され、1983年に開発されたPC/XTでも引き続き採用された。2番目の8259はPC/ATの開発の際に追加された。8259は対称型マルチプロセッサPCでも採用されたので、Intel APICアーキテクチャと共存している。ただ、最近のPCは8259系の採用を完全にやめて、代わりにIntel APICアーキテクチャの採用を進めている。

8259は元々単体のチップであったが、いまや最近のx86マザーボードではサウスブリッジの一部となっている。

特徴[編集]

8259での主要な接続ピンは以下のようなものである。8本の割り込み要求入力(IRQ0~IRQ7)、1本の割り込む出力(INTR)、割り込みACK(INTA)、割り込みレベルないし割り込みベクタオフセット用通信ライン(D0-D7)である。CAS0からCAS2を使って8259同士をカスケード接続することができる。

マスターとなる8259に8個までの8259をスレーブ接続できるので、全部で64個のIRQを提供できる。つまり、マスターの8259のIRQにスレーブの8259のINTをカスケード接続する。

8259には3つのレジスタ、Interrupt Mask Register(IMR)、Interrupt Request Register(IRR)、In-Service Register(ISR)がある。IRRはACKを未処理の現在の割り込みマスクを保持し、ISRはEOIを未処理の割り込みマスクを保持し、IMRはACKを送信してはならない割り込みのマスクを保持する。

End Of Interrupt(EOI)は指定EOI、非指定EOI、自動EOIをサポートしている。指定EOIはISRのACKを返すIRQレベルを指定する。非指定EOIはISRのIRQレベルをリセットする。自動EOIは割り込みにACKが返ってきた後、すぐにISRのIRQレベルをリセットする。

エッジおよびレベル割り込みトリガモードをサポートしている。

優先度設定および優先度回転モードもサポートしている。

8259は8085および8086でも動作するように設定されている。

プログラミング上の考慮点[編集]

DOSとWindows[編集]

MS-DOSMicrosoft Windowsで8259を使う際には、後方互換性、つまり1981年に採用された初代PCと互換性を残しつつ拡張してきたため、多くの面倒な問題が持ち込まれる。

最初の問題は2番目の問題の根っこになっている。DOSのデバイスドライバは8259に対してデバイスの処理を終了したときに非指定EOIを送ることを期待されている。つまりDOSでは8259の他のEOIモードは使用を禁止されている。そして、マスターの8259からスレーブの8259に対して再接続されている複数のデバイス割り込みの間には違いはない。

2番目の問題はPC/ATでスレーブの8259が採用されてからIRQ2からIRQ9までの扱いについてである。スレーブの8259のINT出力はマスターのIR2につながっている。ISAバスのIRQ2は元々このIR2につながっていたが、スレーブのIR1に再接続されている。このように古いIRQ2は今やCPUのIRQ9割り込みを発生させる。IRQ2を使用するように設定された装置との後方互換性を維持するために、IRQ9の割り込みハンドラとして、IRQ2の割り込みハンドラを呼び出すものがBIOSによってインストールされる。

その他のオペレーティングシステム[編集]

たいていのその他のオペレーティングシステムはデバイスドライバの要求仕様を変更していて、自動EOIのような他の8259モードを使っているかもしれない。これは8259と通信する際に、I/Oアドレス空間で結構な長さの時間を使ってしまう最近のx86ハードウェアでは重要である。このことにより、例えばクリティカルセクションのような他の多くの同期に関する最適化を、8259が搭載されているx86マルチプロセッサシステムで行うことができる。

エッジ/レベルトリガモード[編集]

ISAバスはレベルトリガ割り込みをサポートしていない。レベルトリガモードはISAデバイスに接続された割り込みを使うことができないかもしれない。これはPC/XT、PC/ATそしてMCAシステムでは8259は必ずエッジトリガモードに設定しなければならないことを意味する。より新しいEISA、PCI、その他後継のシステムでは、エッジ/レベルコントロールレジスタ(ELCRs)がIRQラインを制御し、ISAバスのあるようなシステムに対して、8259のモードとは無関係に効果的に制御を行う。正しく制御を行うためにELCRはBIOSによってシステム起動時に設定される。

x86のI/Oアドレス空間のELCRは0x4d0と0x4d1に配置されている。そのレジスタは8bit幅であって8259から出ているIRQとそれぞれのビットが一致している。あるビットをセットするとそのIRQはレベルトリガモードになり、リセットするとエッジトリガモードになる。

スプリアス割り込み[編集]

8259はいろいろな条件に対して反応できるようにスプリアス割り込みを発生する。

最初、IRQはACKを返す前にLからHに変位する。これはひょっとしてIRQラインにノイズが入ったせいかもしれない。エッジトリガモードでは、このノイズは100nsの間Lの状態に保持されなければならない。もしノイズが小さくなれば、プルアップ抵抗がIRQラインをHに押し上げ、誤った割り込みが発生したことになる。レベルトリガモードでは、ノイズはシステムのINTRラインでH信号を引き起こしているかもしれない。もし、システムがACK要求を投げると、8259はどの割り込みが発生したかを返すことができず、例えばIRQ7を送ってしまう。この場合はIRQ7のスプリアス割り込みが発生する。

2つ目は、スレーブのIRQラインが割り込みACKの立ち下がりエッジでアクティブになっていない時、マスターの8259のIRQ2がアクティブHになることがある。この場合はIRQ15のスプリアス割り込みが発生するが、非常にまれである。

PC/XTとPC/AT[編集]

PC/XTのISAシステムは8259コントローラを1個だけ持っていたが、一方PC/AT及びその後のシステムはマスター、スレーブと2つの8259コントローラを持っていた。IRQ0からIRQ7までがマスターの8259の割り込みラインで、IRQ8 からIRQ15はスレーブの8259の割り込みラインである。8259のピンの実際の名前はIR0からIR7である。IRQ0からIRQ15という名前は、8259に歴史的に接続されていたISAバスのラインによるものである。

  • Master 8259
    • IRQ0 – Intel 8253 or Intel 8254 プログラマブルインターバルタイマ、すなわちシステムタイマ
    • IRQ1 – キーボード
    • IRQ2 – PC/XTでは割り当てなし。PC/ATではスレーブの8259のINTにカスケード接続されている。
    • IRQ3 – シリアルポートCOM2及びCOM4
    • IRQ4 – シリアルポートCOM1及びCOM3
    • IRQ5 – PC/XTではハードディスクコントローラ。PC/ATではLPT2。
    • IRQ6 – フロッピーディスクコントローラ
    • IRQ7 – LPT1
  • Slave 8259 (PC/AT及びその後継のみ)

最初、IRQ7はサウンドカード用によく使われていたが、後にIRQ7はプリンタポート(LPT1)に使われるようになってから、IRQ5が使われるようになった。シリアルポートは他のデバイスのためにIRQを開放するため、しばしば無効にされた。

外部リンク[編集]