PCI匯流排使用INTA#、INTB#、INTC#和INTD#訊號向處理器發出中斷請求。
這些中斷請求訊號為低電平有效,並與處理器的中斷控制器連線。在PCI體系結構中,這些中斷訊號屬於邊帶訊號(Sideband Signals),PCI匯流排規範並沒有明確規定在一個處理器系統中如何使用這些訊號,因為這些訊號對於PCI匯流排是可選訊號。所謂邊帶訊號是指這些訊號在PCI匯流排中是可選訊號,而且只能在一個處理器系統的內部使用,並不能離開這個處理器環境。
注:PCI Spec對邊帶訊號的定義如下:
Any signal not part of the PCI specification that connects two or more PCI-compliant agents and has meaning only to those agents.
完整的PCI訊號結構圖如下:
中斷訊號與中斷控制器的連線關係
PCI匯流排規範沒有規定PCI裝置的INTx訊號如何與中斷控制器的IRQ_PINx#訊號相連,這為系統軟體的設計帶來了一定的困難,為此係統軟體使用中斷路由表存放PCI裝置的INTx訊號與中斷控制器的連線關係。在x86處理器系統中,BIOS可以提供這個中斷路由表,而在PowerPC處理器中Firmware也可以提供這個中斷路由表。
在一些簡單的嵌入式處理器系統中,Firmware並沒有提供中斷路由表,此時系統軟體開發者需要事先了解PCI裝置的INTx訊號與中斷控制器的連線關係。此時外部裝置與中斷控制器的連線關係由硬體設計人員指定。
我們假設在一個處理器系統中,共有3個PCI插槽(分別為PCI插槽A、B和C),這些PCI插槽與中斷控制器的IRQ_PINx引腳(分別為IRQW#、IRQX#、IRQY#和IRQZ#)可以按照下圖所示的拓撲結構進行連線。
此時,PCI插槽A、B、C的INTA#、INTB#和INTC#訊號將分散連線到中斷控制器的IRQW#、IRQX#和IRQY#訊號,而所有INTD#訊號將共享一個IRQZ#訊號。採用這種連線方式時,整個處理器系統使用的中斷請求訊號,其負載較為均衡。而且這種連線方式保證了每一個插槽的INTA#訊號都與一根獨立的IRQx#訊號對應,從而提高了PCI插槽中斷請求的效率。
在一個處理器系統中,多數PCI裝置僅使用INTA#訊號,很少使用INTB#和INTC#訊號,而INTD#訊號更是極少使用。在PCI匯流排中,PCI裝置配置空間的Interrupt Pin暫存器記錄該裝置究竟使用哪個INTx訊號。
中斷訊號與PCI匯流排的連線關係
在PCI匯流排中,INTx訊號屬於邊帶訊號。PCI橋也不會處理這些邊帶訊號。這給PCI裝置將中斷請求發向處理器帶來了一些困難,特別是給掛接在PCI橋之下的PCI裝置進行中斷請求帶來了一些麻煩。
在一些嵌入式處理器系統中,這個問題較易解決。因為嵌入式處理器系統很清楚在當前系統中存在多少個PCI裝置,這些PCI裝置使用了哪些中斷資源。在多數嵌入式處理器系統中,PCI裝置的數量小於中斷控制器提供的外部中斷請求引腳數,而且在嵌入式系統中,多數PCI裝置僅使用INTA#訊號提交中斷請求。
在這類處理器系統中,可能並不含有PCI橋,因而PCI裝置的中斷請求訊號與中斷控制器的連線關係較易確定。而在這類處理器系統中,即便存在PCI橋,來自PCI橋之下的PCI裝置的中斷請求也較易處理。
在多數情況下,嵌入式處理器系統使用的PCI裝置僅使用INTA#訊號進行中斷請求,所以只要將這些INTA#訊號掛接到中斷控制器的獨立IRQ_PIN#引腳上即可。這樣每一個PCI裝置都可以獨佔一個單獨的中斷引腳。
而在x86處理器系統中,這個問題需要BIOS參與來解決。在x86處理器系統中,有許多PCI插槽,處理器系統並不知道在這些插槽上將要掛接哪些PCI裝置,而且也並不知道這些PCI裝置到底需不需要使用所有的INTx#訊號線。因此x86處理器系統必須要對各種情況進行處理。
x86處理器系統還經常使用PCI橋進行PCI匯流排擴充套件,擴充套件出來的PCI匯流排還可能掛接一些PCI插槽,這些插槽上INTx#訊號仍然需要處理。PCI橋規範並沒有要求橋片傳遞其下PCI裝置的中斷請求。事實上多數PCI橋也沒有為下游PCI匯流排提供中斷引腳INTx#,管理其下游匯流排的PCI裝置。但是PCI橋規範推薦使用下面的表建立下游PCI裝置的INTx訊號與上游PCI匯流排INTx訊號之間的對映關係
我們舉例說明該表的含義。在PCI橋下游匯流排上的PCI裝置,如果其裝置號為0,那麼這個裝置的INTA#引腳將和PCI匯流排的INTA#引腳相連;如果其裝置號為1,其INTA#引腳將和PCI匯流排的INTB#引腳相連;如果其裝置號為2,其INTA#引腳將和PCI匯流排的INTC#引腳相連;如果其裝置號為3,其INTA#引腳將和PCI匯流排的INTD#引腳相連。
在x86處理器系統中,由BIOS或者APCI表記錄PCI匯流排的INTA~D#訊號與中斷控制器之間的對映關係,儲存這個對映關係的資料結構也被稱為中斷路由表。大多數BIOS使用表中的對映關係,這也是絕大多數BIOS支援的方式。如果在一個x86處理器系統中,PCI橋下游匯流排的PCI裝置使用的中斷對映關係與此不同,那麼系統軟體程式設計師需要改動BIOS中的中斷路由表。
BIOS初始化程式碼根據中斷路由表中的資訊,可以將PCI裝置使用的中斷向量號寫入到該PCI裝置配置空間的Interrupt Line register暫存器中
PCI匯流排的錯誤處理
PCI裝置可以透過奇偶校檢來檢測到來自AD上的地址或者資料的錯誤,並透過PERR#或者SERR#報告錯誤。但是需要注意的是,PCI Spec並未規定任何硬體層面上的錯誤處理或者恢復機制,因此,這些錯誤都只能透過軟體進行處理。