Intel 8259
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Intel 8259はProgrammable Interrupt Controller(PIC)の一種であり、Intel 8080やIntel 8085、Intel 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
DOSやMicrosoft 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を設定するまでDOSデバイスドライバは後方互換性を維持するために、元々のIRQ2の割り込みハンドラをIRQ9に対してリダイレクトするような割り込みハンドラを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
- Slave 8259 (PC/AT及びその後継のみ)
- IRQ8 – リアルタイムクロック (RTC)
- IRQ9 – 割り当てなし
- IRQ10 – 割り当てなし
- IRQ11 – 割り当てなし
- IRQ12 – PS/2 マウス
- IRQ13 – 数値演算コプロセッサ
- IRQ14 – ハードディスクコントローラ1
- IRQ15 – ハードディスクコントローラ2
最初、IRQ7はサウンドカード用によく使われていたが、後にIRQ7はプリンタポート(LPT1)に使われるようになってから、IRQ5が使われるようになった。シリアルポートは他のデバイスのためにIRQを開放するため、しばしば無効にされた。