8259 (PIC) Edit

目次 Edit

基礎知識 Edit

PICとは Edit

Programmable Interrupt Controllerの略で、割り込みを制御するコントローラです。

割り込み番号と種類 Edit

割り込み番号種類
PIC0(マスタ)
IRQ0PIT
IRQ1キーボード
IRQ2PIC1:カスケード接続
IRQ3シリアルポート(COM2, COM4)
IRQ4シリアルポート(COM1, COM3)
IRQ5
IRQ6FDC

|IRQ7||LPT1

PIC1(スレーブ)
IRQ8RTC
IRQ9
IRQ10
IRQ11
IRQ12PS/2 マウス

|IRQ13|FPU

IRQ14ATA/ATAPI(プライマリ)
IRQ15ATA/ATAPI(セカンダリ)

I/Oポート、レジスタ Edit

PICのI/Oポートマップ Edit

I/OポートサイズR/W説明
PIC0(マスタ)
0x00208bitRIRR/ISR
WOCW2/OCW3/ICW1
0x00218bitRIMR
WOCW1/ICW2/ICW3/ICW4
PIC1(スレーブ)
0x00a08bitRIRR/ISR
WOCW2/OCW3/ICW1
0x00a18bitRIMR
WOCW1/ICW2/ICW3/ICW4

IRR : Interrupt Request Register (Port:0x0020,0x00a0) Edit

ISR : In-Service Register (Port:0x0020,0x00a0) Edit

IMR : Interrupt Mask Register (Port:0x0021,0x00a1) Edit

OCW1 : Operation Command Word 1 (Port:0x0021,0x00a1) Edit

OCW2 : Operation Command Word 2 (Port:0x0020,0x00a0) Edit

OCW3 : Operation Command Word 3 (Port:0x0020,0x00a0) Edit

ICW1 : Initialization Command Word 1 (Port:0x0020,0x00a0) Edit

ICW2 : Initialization Command Word 2 (Port:0x0021,0x00a1) Edit

ICW3 : Initialization Command Word 3 (Port:0x0021,0x00a1) Edit

ICW4 : Initialization Command Word 4 (Port:0x0021,0x00a1) Edit

参考ソース Edit

//PIC0
#define	PORT_PIC0_IRR		( 0x0020 )		//割り込みリクエスト
#define	PORT_PIC0_ISR		( 0x0020 )		//イン・サービス(現在処理中の割り込み)
#define	PORT_PIC0_OCW2		( 0x0020 )		//動作コマンド2
#define	PORT_PIC0_OCW3		( 0x0020 )		//動作コマンド3
#define	PORT_PIC0_ICW1		( 0x0020 )		//初期化コマンド1

#define	PORT_PIC0_IMR		( 0x0021 )		//割り込みマスク
#define	PORT_PIC0_OCW1		( 0x0021 )		//動作コマンド1
#define	PORT_PIC0_ICW2		( 0x0021 )		//初期化コマンド2
#define	PORT_PIC0_ICW3		( 0x0021 )		//初期化コマンド3
#define	PORT_PIC0_ICW4		( 0x0021 )		//初期化コマンド4

//PIC1
#define	PORT_PIC1_IRR		( 0x00a0 )		//割り込みリクエスト
#define	PORT_PIC1_ISR		( 0x00a0 )		//イン・サービス(現在処理中の割り込み)
#define	PORT_PIC1_OCW2		( 0x00a0 )		//動作コマンド2
#define	PORT_PIC1_OCW3		( 0x00a0 )		//動作コマンド3
#define	PORT_PIC1_ICW1		( 0x00a0 )		//初期化コマンド1

#define	PORT_PIC1_IMR		( 0x00a1 )		//割り込みマスク
#define	PORT_PIC1_OCW1		( 0x00a1 )		//動作コマンド1
#define	PORT_PIC1_ICW2		( 0x00a1 )		//初期化コマンド2
#define	PORT_PIC1_ICW3		( 0x00a1 )		//初期化コマンド3
#define	PORT_PIC1_ICW4		( 0x00a1 )		//初期化コマンド4


/*******************************************************************************
	PIC初期化
*******************************************************************************/
	//すべてのPIC割り込みをマスク(禁止)する。
	Out1( PORT_PIC0_IMR, 0xff );		//PIC0
	Out1( PORT_PIC1_IMR, 0xff );		//PIC1

	//PIC0
	Out1( PORT_PIC0_ICW1, 0x11 );
	Out1( PORT_PIC0_ICW2, 0x20 );		//割り込み番号IRQ0〜IRQ7を0x20〜(0x27)に指定。
	Out1( PORT_PIC0_ICW3, 0x04 );		//スレーブがつながっているビットを1。(IRQ2:0b0000 0100)
	Out1( PORT_PIC0_ICW4, 0x01 );

	//PIC1
	Out1( PORT_PIC1_ICW1, 0x11 );
	Out1( PORT_PIC1_ICW2, 0x28 );		//割り込み番号IRQ8〜IRQ15を0x28〜(0x2f)に指定。
	Out1( PORT_PIC1_ICW3, 0x02 );		//つながっているマスタの番号
	Out1( PORT_PIC1_ICW4, 0x01 );

	//IRQ2(PIC1)以外のすべての割り込みをマスク
	Out1( PORT_PIC0_IMR, 0xfb );		//PIC0
	Out1( PORT_PIC1_IMR, 0xff );		//PIC1

参考・関連 Edit


Since 2008 July. OS Project Wiki
リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS