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并未規定任何硬件層面上的錯誤處理或者恢復機制,因此,這些錯誤都只能通過軟件進行處理。
-
PCI
+關注
關注
4文章
666瀏覽量
130272 -
總線
+關注
關注
10文章
2881瀏覽量
88090 -
嵌入式處理器
+關注
關注
0文章
253瀏覽量
30743
原文標題:【博文連載】PCIe掃盲——PCI總線的中斷和錯誤處理
文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論