PCI中断路由机制
PCI中断是可选的,中断是电平触发,低电平有效,集电极开路驱动。中断信号与PCI CLK异步,设备一旦断言为低,则要维持低电平状态,直到驱动程序清除这个中断请求。PCI中断可以为通过链的方式来共享。下文会仔细分析。
PCI 中断的硬件组成
如图1所示:在PCI 总线上中断请求信号引出脚有INTA# - INTD# 4个,单功能设备只能使用INTA#,而对于多功能设备,各功能设备可任意接至PCI 总线的四条中断申请线INTA# - INTD# 。与中断密切相关的PCI配置寄存器是中断引脚寄存器(Interrupt Pin:0x3C) 和中断线寄存器(Interrupt Line:0x3B)。
图1中断的硬件结构
中断引脚寄存器(Interrupt Pin:0x3C):
它是一个8 位的寄存器,由接口设计者根据PCI设备使用的PCI 总线中断引脚(INTA# - INTD#)来设置:如果设备使用INTA#脚来申请中断,该寄存器应写入1;如果设备使用INTB#脚来申请中断,该寄存器应写入2;如果设备使用INTC#脚来申请中断,该寄存器应写入3 ;如果设备使用INTD#脚来申请中断,该寄存器应写入4;如果设备不使用中断,该寄存器应写入0,0x05 到0xFF为保留值。
中断线寄存器(Interrupt Line:0x3B):
对于X86 系列的PC 机,各个插槽的INTA# - INTD#引脚由主板设计者通过可编程路由器接到由主从两个8259A 组成的系统中断控制器的IRQ0 - IRQ15 引脚共计16个引脚中的未使用引脚上。中断线寄存器(Interrupt Line)用于保存中断路由信息的寄存器,在初始化和配置系统时,HOST把路由信息写入到该寄存器。在PCI 接口卡配置空间中,该寄存器的值表明设备的中断引脚( INTA# - INTD#)被连接到系统中断控制器的哪一个引脚(1RQO - IRQ15中的哪一个)上了。设备本身不使用这个值,设备驱动和操作系统使用该值来决定中断的优先权和中断矢量信息, 义,值0 —15 对应16个IRQ 引脚号,值255 用于表示“未知”或“没有连接到中断控制器”,值16 到254 保留。例如:某设备的INTA#被路由至IRQ3 脚,其中断线寄存器的值会设置为3。
可编程中断控制器(PIC:Programmable interrupt controller) 是用来检测中断申请。如图1所示。可编程中断路由器集成在PCI/ ISA 桥芯片(南桥)中,并且提供了四个中断输入端INTA#、INTB#、INTC#、INTD#;通过路由器编程可以使其与系统中断控制器的输入端IRQi连接。
INTX#线怎样路由到IRQi 线上,由系统定义。如果系统的中断控制器有四个未使用的中断请求信号脚可供使用,如图1所示的IRQW,IRQX ,IRQY,IRQZ ,下面给出的路由机制可以将所有设备的中断请求均匀地分配到四条IRQ线上。
设:MB = IRQ 引脚号( IRQW:0 ,IRQX:1 ,IRQY:2 ,IRQZ:3) D = 设备号
I = INTX # 线号( INTA#:0 ,INTB#:1 , INTC#:2 , INTD#:3)
MB = ( D + I) MOD 4
在母板上的设备号
|
在PCI设备上的中断脚
|
在母板上的中断脚
|
0,4,8,12,
16,20,24,28
|
INTA#
|
IRQW
|
INTB#
|
IRQX
|
INTC#
|
IRQY
|
INTD#
|
IRQZ
|
1,5,9,13
17,21,25,29
|
INTA#
|
IRQX
|
INTB#
|
IRQY
|
INTC#
|
IRQZ
|
INTD#
|
IRQW
|
2,6,10,14
18,22,26,30
|
INTA#
|
IRQY
|
INTB#
|
IRQZ
|
INTC#
|
IRQW
|
INTD#
|
IRQX
|
3,7,11,15
19,23,27,31
|
INTA#
|
IRQZ
|
INTB#
|
IRQW
|
INTC#
|
IRQX
|
INTD#
|
IRQY
|
如下图2以COM Express的PCI中断路由为例:
图2 COM Express的中断路由
按照上面的中断路由表,图1 设计中四个设备的七个中断的路由情况为:
设备0 的INTA#, 设备2 的INTC# 连接IRQW
设备1 的INTA# 连接IRQX
设备2 的INTA#, 设备1 的INTB# 连接IRQY
设备3 的INTA#, 设备2 的INTB# 连接IRQZ
如此,通过中断脚和中断线配置寄存器实现了中断的路由和自动配置。