PCI总线运用INTA#、INTB#、INTC#和INTD#信号向处理器宣布中止请求。这些中止请求信号为低电平有用,并与处理器的中止控制器衔接。在PCI体系结构中,这些中止信号归于边带信号(Sideband Signals),PCI总线标准并没有明确规则在一个处理器体系中怎么运用这些信号,由于这些信号关于PCI总线是可选信号。PCI设备还能够运用MSI机制向处理器提交中止请求,而不运用这组中止信号。有关MSI机制的具体阐明见第8章。
1.4.1中止信号与中止控制器的衔接联系
不同的处理器运用的中止控制器不同,如x86处理器运用APIC(Advanced Programmable Interrupt Controller)中止控制器,而PowerPC处理器运用MPIC(Multiprocessor Interrupt Controller)中止控制器。这些中止控制器都供给了一些外部中止请求引脚IRQ_PINx#。外部设备,包含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#)能够依照图1‑5所示的拓扑结构进行衔接。
在一个处理器体系中,大都PCI设备仅运用INTA#信号,很少运用INTB#和INTC#信号,而INTD#信号更是很少运用。在PCI总线中,PCI设备装备空间的Interrupt Pin寄存器记载该设备终究运用哪个INTx信号,该寄存器的具体介绍见第2.3.2节。
1.4.2中止信号与PCI总线的衔接联系
在PCI总线中,INTx信号归于边带信号。所谓边带信号是指这些信号在PCI总线中是可选信号,并且只能在一个处理器体系的内部运用,并不能脱离这个处理器环境。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桥标准引荐运用表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#引脚相连。