2008年8月11日 星期一

PIC中斷控制器介紹

在一般的電腦系統裡,當裝備需要系統來服務時.有二種方法:一是 polling,由CPU一直去問裝備是否需要服務,如果需要時就去服務它,但這很浪費 CPU 的時間,另一種方法就是IRQ的方式,當Device需耍服務時就發出IRQ,當系統收到這個IRQ訊號時才去服務它,這樣可大大減小系統的負擔。
PIC(Programmable Interrupt Controller)介紹
IRQ是由中斷控制器所處理的,中斷控制器用以連接Device和CPU的重要橋梁,一個Device產生中斷後,需經過中斷控制器的轉發,訊號才能到達CPU。中斷控制器經歷了PIC(Programmable Interrupt Controller可編程中斷控制器)和APIC(Advanced Programmable Interrupt Controller高級可編程中斷控制器)兩個階段。PIC在UP(Uni-processor單處理器)上使用,隨著SMP(Symmetric Multiple Processor對稱式多重處理器)開始使用,APIC已漸漸取代PIC了。
每一個PIC可處理八個中斷輸入,但是現在的系統多半由兩個PIC來處理,所以全部可以處理十六個中斷,由IRQ0~IRQ15,但是第二個PIC的輸出需要接到第一個PIC的其中一個輸入,所以最多只能處理到十五個中斷請求,而這個被用掉的輸入就是IRQ2。
與APIC不同的是,PIC每個IRQ都具有優先權,以IRQ0最高,也就是IRQ編號愈小的擁有愈高的中斷優先權。用於當有兩個Device同時發出IRQ時,就以這個順序來決定誰先被服務。由於IRQ2被當成第二個中斷控制器的輸入,所以整個中斷請求的順序為:
0 , 1 , 2 ( 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ) , 3 , 4 , 5 , 6 , 7.
一般來說十五個 IRQ 被設定為下列裝備 :
  1. IRQ 0 : System timer. 系統時間.

  2. IRQ 1 : Keyboard. 鍵盤.

  3. IRQ 3 : Com2. 串列埠.

  4. IRQ 4 : Com1. 串列埠.

  5. IRQ 5 : Parallel port 2. 並列埠

  6. IRQ 6 : Floppy Disk. 軟碟機.

  7. IRQ 7 : Parallel port 1. 並列埠.

  8. IRQ 8 : Real Time Clock. 時鐘.

  9. IRQ 9 : INT 0AH

  10. IRQ 10 : 保留

  11. IRQ 11 : 保留

  12. IRQ 12 : PS/2 mouse. 滑鼠.

  13. IRQ 13 : Coprocessor. 輔助(協)處理器.

  14. IRQ 14 : Primary IDE. 主 IDE. 如硬碟機.

  15. IRQ 15 : Secondary IDE. 副 IDE.
8259A當然也有暫存器囉!除了ICWs(Initialization Command Words:初始化命令暫存器)和OCWs(Operation Command Words:操作命令暫存器)
還有三個重要暫存器:
    IRR(Interrupt Request Register):中斷請求暫存器,它管八個IRQ訊號,當IRR的某個bit被設為1又沒被遮罩時,則準備將中斷訊號發送給CPU。
    ISR(In Service Register):服務中暫存器,在IRR中斷請求發送給CPU後,ISR中對應的bit將被設為1,表示已發送給CPU,但CPU尚未處理完畢。
    IMR(Interrupt Mask Register):中斷遮罩暫存器,用於遮罩中斷,當被遮罩後,硬體所發出的中斷將被忽略不管。

ICWs(Initialization Command Word)


ICW1設定中斷觸發方式及主僕模式(20h/A0h)

BIT7-5

Used by MCS-80/85,此設為0

BIT4

1

BIT3

1Level Trigger

當裝備要發出中斷請求時.就把 IRQ的訊號由低拉往高.8259A 接收到這個訊號表示有一個中斷請求.當中斷完成時 IRQ訊號會被還原成低電位.IRQ訊號還是在高電位表示有另外一個裝備發出同一個中斷請求.此方式可由多個裝備共用一個中斷.PCI的裝備即是使用這種方式.

0Edge Trigger

當裝備要發出中斷請求時.就把 IRQ的訊號由低拉往高.8259A 接收到這個訊號表示只有一個中斷請求.若有二個以上的裝備使用同一個中斷就不能正常工作.PC系統只有十五個中斷不夠使用.所以有下面一種方式產生.

BIT2

Used by MCS-80/85,此設為0

BIT1

1單一模式

0:串接模式

BIT0

18086/8088工作模式

08080/8085工作模式


ICW2設定對應的中斷向號碼(21h/A1h)

BIT 7-3

中斷向量號碼的T7~T3T2~T0為產生要求之IR

BIT 2-0

Used by 8080/8085,此設為0


ICW3若為PIC Master則設定已連接PIC SlaveIR腳位(21h/A1h)

BIT 7-0

1:該IR端接有PIC Slave

0:該IR端未接PIC Slave

ICW3若為PIC Slave則設定連接至PIC Master的那個IR腳位(21h/A1h)

BIT 7-3

0

BIT 2-0

指示PIC Slave接到PIC Master那個IR


ICW4設定工作模式(21h/A1h)

BIT 7-5

0

BIT 4

1:特殊全巢狀模式

0:非特殊全巢狀模式

BIT 3-2

0x:非緩衝模式

10PIC Slave緩衝模式

11PIC Master緩衝模式

BIT 1

1:自動EOI(End Of Interrupt)

0:正常EOI

BIT 0

18086/8088工作模式

08080/8085工作模式


OCW1遮罩暫存器(21h)

BIT 7-0

1:設定遮罩以禁止中斷

0:清除遮罩以允許中斷


OCW2送出EOI命令(20h)

BIT 7-5

001:非特定之EOI命令

011:特定之EOI命令

101:非特定的EOI與旋轉命令,用於優先權自動旋轉模式。

100:啟動自動EOI與旋轉命令,用於優先權自動旋轉模式。

000:清除自動EOI與旋轉命令,用於優先權自動旋轉模式。

111:特定的EOI與旋轉命令,用於優先權自動旋轉模式。

110:設定優先權之命令,用於優先權自動旋轉模式。

010:保留

BIT 4-3

0

BIT 2-0

指定作用的IR層次


OCW3雜項暫存器(20h)

BIT 7

保留

BIT 6-5

0x:保留

10:清除特定遮罩模式

11:設定特定遮罩模式

BIT 4

0

BIT 3

1

BIT 2

1:使用Polling模式

0:取消Polling模式

BIT 1-0

0x:保留

10:在下一個讀取時脈時讀取IRR

11:在下一個讀取時脈時讀取ISR

PIC 的串接模式如果全用的話,則可擴充至 64(8*8) 個中斷等級;而且,PIC更提供了中斷優先權控制的功能,稱之為全巢式的中斷層次(fully nested ode),此模式允許中斷等級較低的ISR被較高等級的中斷要求中斷;一般優先權的等級從IRQ0至IRQ7為由高到低排列下來,但優先權可透過自動旋轉和特定旋轉的方式加以變更,變更的方法是利用OCW2送出EOI時進行,而特定遮罩模式也是用來配合全巢式中斷層次使用的。

80X86有NMI與INTR兩個硬體中斷輸入接腳,當NMI(Non - Maskable Interrupt)Enable時CPU會執行第二型中斷動作。NMI通常用於parity以及諸如電源斷路之系統錯誤。線路圖如下80x86 CPU共有四種中斷方式;Reset、DMA、NMI、INT,其中以RESET具有較高的優先權,其次才是NMI(不可遮罩中斷),接著是DMA及INT。
NMI(Non Maskable Interrupt不可遮罩中斷)及INT兩者皆屬於硬體中斷。
INT xx及除零中斷(Divid Zero)屬軟體中斷。



輔助資料:http://tw.ic-on-line.cn/IOL/viewpdf/8259A_362922.htm
參考資料:
http://www.csie.ntu.edu.tw/~d4526011/my_book_copy/CHAP1.4.htm
http://www.geocities.com/Tokyo/Towers/6851/irq.htm
http://wwwme.nchu.edu.tw/~neural/3C/sensoring%20data/Chap5.ppt
http://yuat1.cpshs.hcc.edu.tw/~yuat/loxa/ch21.htm

沒有留言: