PCI總線的中斷機制
1.4.1中斷信號與中斷控制器的連接關系
不同的處理器使用的中斷控制器不同,如x86處理器使用APIC(Advanced Programmable Interrupt Controller)中斷控制器,而PowerPC處理器使用MPIC(Multiprocessor Interrupt Controller)中斷控制器。這些中斷控制器都提供了一些外部中斷請求引腳IRQ_PINx#。外部設備,包括PCI設備可以使用這些引腳向處理器提交中斷請求。
本文引用地址:http://2s4d.com/article/201612/330477.htm但是PCI總線規(guī)范沒有規(guī)定PCI設備的INTx信號如何與中斷控制器的IRQ_PINx#信號相連,這為系統(tǒng)軟件的設計帶來了一定的困難,為此系統(tǒng)軟件使用中斷路由表存放PCI設備的INTx信號與中斷控制器的連接關系。在x86處理器系統(tǒng)中,BIOS可以提供這個中斷路由表,而在PowerPC處理器中Firmware也可以提供這個中斷路由表。
在一些簡單的嵌入式處理器系統(tǒng)中,F(xiàn)irmware并沒有提供中斷路由表,此時系統(tǒng)軟件開發(fā)者需要事先了解PCI設備的INTx信號與中斷控制器的連接關系。此時外部設備與中斷控制器的連接關系由硬件設計人員指定。
我們假設在一個處理器系統(tǒng)中,共有3個PCI插槽(分別為PCI插槽A、B和C),這些PCI插槽與中斷控制器的IRQ_PINx引腳(分別為IRQW#、IRQX#、IRQY#和IRQZ#)可以按照圖1?5所示的拓撲結構進行連接。
在一個處理器系統(tǒng)中,多數(shù)PCI設備僅使用INTA#信號,很少使用INTB#和INTC#信號,而INTD#信號更是極少使用。在PCI總線中,PCI設備配置空間的Interrupt Pin寄存器記錄該設備究竟使用哪個INTx信號,該寄存器的詳細介紹見第2.3.2節(jié)。
1.4.2中斷信號與PCI總線的連接關系
在PCI總線中,INTx信號屬于邊帶信號。所謂邊帶信號是指這些信號在PCI總線中是可選信號,而且只能在一個處理器系統(tǒng)的內(nèi)部使用,并不能離開這個處理器環(huán)境。PCI橋也不會處理這些邊帶信號。這給PCI設備將中斷請求發(fā)向處理器帶來了一些困難,特別是給掛接在PCI橋之下的PCI設備進行中斷請求帶來了一些麻煩。
在一些嵌入式處理器系統(tǒng)中,這個問題較易解決。因為嵌入式處理器系統(tǒng)很清楚在當前系統(tǒng)中存在多少個PCI設備,這些PCI設備使用了哪些中斷資源。在多數(shù)嵌入式處理器系統(tǒng)中,PCI設備的數(shù)量小于中斷控制器提供的外部中斷請求引腳數(shù),而且在嵌入式系統(tǒng)中,多數(shù)PCI設備僅使用INTA#信號提交中斷請求。
在這類處理器系統(tǒng)中,可能并不含有PCI橋,因而PCI設備的中斷請求信號與中斷控制器的連接關系較易確定。而在這類處理器系統(tǒng)中,即便存在PCI橋,來自PCI橋之下的PCI設備的中斷請求也較易處理。
在多數(shù)情況下,嵌入式處理器系統(tǒng)使用的PCI設備僅使用INTA#信號進行中斷請求,所以只要將這些INTA#信號掛接到中斷控制器的獨立IRQ_PIN#引腳上即可。這樣每一個PCI設備都可以獨占一個單獨的中斷引腳。
而在x86處理器系統(tǒng)中,這個問題需要BIOS參與來解決。在x86處理器系統(tǒng)中,有許多PCI插槽,處理器系統(tǒng)并不知道在這些插槽上將要掛接哪些PCI設備,而且也并不知道這些PCI設備到底需不需要使用所有的INTx#信號線。因此x86處理器系統(tǒng)必須要對各種情況進行處理。
x86處理器系統(tǒng)還經(jīng)常使用PCI橋進行PCI總線擴展,擴展出來的PCI總線還可能掛接一些PCI插槽,這些插槽上INTx#信號仍然需要處理。PCI橋規(guī)范并沒有要求橋片傳遞其下PCI設備的中斷請求。事實上多數(shù)PCI橋也沒有為下游PCI總線提供中斷引腳INTx#,管理其下游總線的PCI設備。但是PCI橋規(guī)范推薦使用表1?3建立下游PCI設備的INTx信號與上游PCI總線INTx信號之間的映射關系。
表1?3PCI設備INTx#信號與PCI總線INTx#信號的映射關系
設備號 | PCI設備的INTx#信號 | PCI總線的INTx#信號 |
0, 4, 8, 12, 16, 20, 24, 28 | INTA# | INTA# |
INTB# | INTB# | |
INTC# | INTC# | |
INTD# | INTD# | |
1, 5, 9, 13, 17, 21, 25, 29 | INTA# | INTB# |
INTB# | INTC# | |
INTC# | INTD# | |
INTD# | INTA# | |
2, 6, 10, 14, 18, 22, 26, 30 | INTA# | INTC# |
INTB# | INTD# | |
INTC# | INTA# | |
INTD# | INTB# | |
3, 7, 11, 15, 19, 23, 27, 31 | INTA# | INTD# |
INTB# | INTA# | |
INTC# | INTB# | |
INTD# | INTC# |
我們舉例說明該表的含義。在PCI橋下游總線上的PCI設備,如果其設備號為0,那么這個設備的INTA#引腳將和PCI總線的INTA#引腳相連;如果其設備號為1,其INTA#引腳將和PCI總線的INTB#引腳相連;如果其設備號為2,其INTA#引腳將和PCI總線的INTC#引腳相連;如果其設備號為3,其INTA#引腳將和PCI總線的INTD#引腳相連。
評論