IRQ - interrupt request

IRQ ( 中斷請求 ) 是 PC 非常重要的一個功能. 在一般的電腦系統裡. 當裝備需要系統來服務時.有二種方法 :一是 polling. 由 CPU 一直去問裝備是否需要服務. 如果需要時就去服務它. 這很浪費 CPU 的時間. 另一種方法就是 IRQ 法. 當裝備需耍服務時就發出 IRQ. 當系統收到這個 IRQ 時才去服務它. 就樣可大大減小系統的負擔.

IRQ 由中斷控制器 (8259A) 所處理. 每一中斷控制器可處理八個中斷輸入. 現在的系統多由二個中斷控制器來處理. 所以共可以處理十六個中斷. 由 IRQ 0 到 IRQ 15. 但是第二個中斷控制器的輸出需要接到第一個中斷控制器的其中一個輸入. 所以最多只可處理到十五個中斷請求. 而這個被用掉的輸入就是 IRQ 2. 在 ISA bus 增加到 16 bits 時. 因 IRQ 2 不能用了. 所以在 ISA 插槽上就把 IRQ 2 的腳位讓給 IRQ 9 了. 所以可以說 IRQ 9 就是 IRQ 2 了.

中斷控制器有優先順序. 0 最大. 7 最小. 當有二個裝備同時發出 IRQ 時. 就由這個順序來決定誰先被服務. 因 IRQ 2 被當成第二個中斷控制器的輸入. 所以整個中斷請求的順序為 :

0 , 1 , 2 ( 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ) , 3 , 4 , 5 , 6 , 7.
 
十五個 IRQ 被設定為下列裝備 : 未列有裝備者可供給其他裝備使用. 如音效卡 , 網路卡等. 可由使用者自由調整但不衝突. 否則系統就會當機了. Plug and Play 的系統則可由系統自動調整.
 
中斷請求的流程如下 :
  1. 由裝備發出中斷請求.
  2. 8259A 收到中斷請求.
  3. 由 8259A 檢查此中斷的優先順序來決定是否送出中斷給 CPU.
  4. 等到 CPU 接受此中斷就送出訊號給 8259A.
  5. 由 8259A 發出此中斷的參數給 CPU.
  6. 透過此參數可取得中斷服務程式的位址.
  7. CPU 執行中斷服務程式.
中斷請求的訊號分為二種 :

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

LEVEL TRIGGER 方式 - 當裝備要發出中斷請求時. 就把 IRQ 的訊號由低拉往高. 8259A 接收到這個訊號表示有一個中斷請求. 當中斷完成時 IRQ 訊號會被還原成低電位. 若 IRQ 訊號還是在高電位表示有另外一個裝備發出同一個中斷請求. 此方式可由多個裝備共用一個中斷. PCI 的裝備即是使用這種方式.
 
相關資料 
 
ISA
PCI
 
連接到相關網站 
 
[ 7/28/1998  袁明煥 ]
  1