专利名称:多pcie设备系统中断处理方法
技术领域:
本发明涉及自动控制领域,特别涉及一种多PCIE设备系统中断处理方法。
背景技术:
PCIE(个人计算机扩展总线接口)设备是新一代能够提供大量带宽和丰富功能以 实现令人激动的新式图形应用的全新架构。参见图1,为多PCIE设备系统的拓扑结构示意 图,包括主控端和若干个作为终点(End Point)的PCIE设备,其中主控端包括CPU和PCIE 主桥(PCIE host bridge),PCIE主桥主要用于实现CPU所支持CPU总线数据格式与各PCIE 设备所支持数据格式间的数据转换,通常,还会包括PCIE Switch(交换器),用于协调多 PCIE设备间数据交换。当前,在多PCIE设备的系统中,多个PCIE设备往往采用中断方式与主控端协作。 目前PCIE设备支持的一种传统的中断处理方式主要是,系统为PCIE设备提供4个中断信 号,INTA、INTB, INTC、INTD,不同的PCIE设备会被配置到不同的中断信号上,当系统中的 PCIE设备多于4个时,需要采用共享中断的方式,即共享中断处理程序逐个检测共享该中 断的多个PCIE设备的中断状态位,判断具体产生中断的PCIE设备,执行对应的中断处理程 序。在多PCIE设备的系统中,多个PCIE设备同时产生中断时,由于需要共享中断处理 程序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,导致中断延时非常大,并且 随着系统中PCIE设备的增加急剧增大。有些PCIE设备的硬件能够支持MSI (Message Signaled Interrupt,信息信号中 断)中断方式,MSI中断方式的处理过程具体为产生中断的PCIE设备生成MSI消息(MSI 消息中携带有预先为该PCIE设备分配的中断向量号),PCIE主桥接收到MSI消息后,将中 断向量号写入预先配置在系统中的中断寄存器中,主控端便可以根据中断寄存器中的中断 向量号调用中断处理程序。由于MSI中断方式中无需查询各个PCIE设备的中断状态位,节 约了中断处理时间,解决了传统的中断处理方式的低效问题。在实施本发明过程中,发明人发现现有技术中至少存在如下问题当多个PCIE设 备同时产生中断时,会产生多个MSI消息,PCIE主桥接收到多个MSI消息后,会将多个中断 向量号顺序写入预先配置在系统中的中断寄存器中,此时,由于主控端还未来得及处理前 一个中断向量号对应的中断,后一个中断向量号便会覆盖中断寄存器中的前一个中断向量 号,也就是说,对于支持MSI中断方式的主控端CPU而言,无法处理多个PCIE设备同时产生 的中断。
发明内容
为解决上述技术问题,本发明提供一种多PCIE设备系统中断处理方法。一种多PCIE设备系统中断处理方法,预先设置中断寄存器和用于记录产生中断 的PCIE设备的中断状态寄存器,所述中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变;所述方法包括当PCIE设备产生中断时发送通知消息,所述通知消息中携带预先为所述PCIE设 备配置的中断向量号及中断寄存器在PCIE空间的映射地址;主控端在接收到通知消息后,将所述中断向量号写入所述映射地址对应的中断寄 存器;根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄 存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态。所述主控端包括CPU,与所述CPU相连的PCIE主桥,用于所述CPU所支持CPU总线 数据格式与各PCIE设备所支持数据格式间的数据转换,和与所述CPU相连的可编程逻辑器 件,在所述可编程逻辑器件中设置中断寄存器和中断状态寄存器。所述主控端在接收到通知消息后,将所述中断向量号写入所述映射地址对应的中 断寄存器;根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状 态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态,具 体为所述PCIE主桥在接收到通知消息后,向所述可编程逻辑器件中的中断寄存器中 写入所述中断向量号;当所述中断状态寄存器的值发生改变时,所述可编程逻辑器件通过中断引脚向所 述CPU触发中断请求;所述CPU根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改 中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断 状态。当所述PCIE设备支持MSI中断方式时,将中断寄存器在PCIE空间的映射地址写 入PCIE设备的Msi_Addr寄存器中;将中断向量号写入PCIE设备的Msi_Data寄存器中;且 所述通知消息具体为MSI消息。当所述PCIE设备不支持MSI中断方式时,预配置所述PCIE设备在产生中断时,发 送携带预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址的通 知消息;并将中断寄存器在PCIE空间的映射地址和中断向量号分别写入PCIE设备的两个 寄存器中。用所述中断状态寄存器中每一位的值对应标识一个PCIE设备的中断状态;所述 中断寄存器至少包括中断状态寄存器选择段,用于选择中断状态寄存器;和中断状态寄存器位选择段,用于选择中断状态寄存器中的位;则所述中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变具体 为根据中断寄存器中所述中断状态寄存器选择段的值,选择对应的中断状态寄存 器;根据中断寄存器中所述中断状态寄存器位选择段的值,在选出的中断状态寄存器 中选择对应的位;将选出的所述位的值设置为预设值,用于标识该位对应的PCIE设备产生中断。所述至少一个中断状态寄存器的位数相同,则
所述中断状态寄存器选择段的位数为Log2 (N/M),当Log2 (N/M)不是整数时,所述 中断状态寄存器选择段的位数为Log2 (N/M)向上取整,其中N为所述的多PCIE设备系统支 持的最大PCIE设备数,M为中断状态寄存器的位数。注册中断处理程序具体为将为PCIE设备配置的中断向量号加上偏移量得到CPU中断号;所述偏移量为所述 CPU自身支持的中断数量;所述PCIE设备驱动程序向所述CPU中断号注册中断处理程序;所述根据中断状态寄存器的值调用并执行预先注册的中断处理程序具体为根据所述中断状态寄存器的值计算写入所述中断寄存器中的中断向量号;将所述中断向量号加上所述偏移量得到CPU中断号;调用并执行向所述CPU中断号注册的中断处理程序。所述CPU为可编程逻辑器件中每个中断状态寄存器分配一个中断引脚,则当某中 断状态寄存器的值发生改变时,所述可编程逻辑器件通过该中断状态寄存器对应的中断引 脚向所述CPU触发中断请求。所述CPU为可编程逻辑器件分配一个中断引脚,则所述可编程逻辑器件中还设置 有主中断状态寄存器,将所述中断引脚与主中断状态寄存器相连;每个中断状态寄存器在所述主中断寄存器中有一位与其相对应,当某个中断状态 寄存器的值发生改变时,设置所述主中断状态寄存器中对应位的值为约定值;则当主中断 状态寄存器的值发生改变时,所述可编程逻辑器件通过所述中断引脚向所述CPU触发中断 请求。本发明提供的多PCIE设备系统中断处理方法,有益效果是由于本发明的多PCIE 设备系统中,预先设置中断寄存器和用于记录产生中断的PCIE设备的中断状态寄存器,且 所述中断状态寄存器的值能按预设规则随所述中断寄存器的值的改变而改变。这样,当多 个PCIE设备同时产生中断时,主控端接收到多个MSI消息后,会将多个中断向量号顺序写 入中断寄存器中,每写入中断寄存器中一个中断向量号,中断状态寄存器会记录该中断向 量号对应的产生中断的PCIE设备,则当多个中断向量号顺序写入中断寄存器后,虽然中断 寄存器中后写入的值会覆盖前一个值,但是中断状态寄存器中却将全部产生中断的PCIE 设备记录了下来,主控端便可以根据中断状态寄存器中的值处理同时产生的多个中断,从 而使得多PCIE设备系统能够处理多个PCIE设备同时产生的中断。进一步的,当PCIE设备不支持MSI中断方式时,通过预配置所述PCIE设备,能够 使其在产生中断时向主控端发送通知消息,将预先为所述PCIE设备配置的中断向量号及 中断寄存器在PCIE空间的映射地址告知主控端,从而能够使得主控端无需共享中断处理 程序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,大大缩短处理不支持MSI中 断方式的PCIE设备的中断延时,提高系统中断处理效率。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为现有技术中多PCIE设备系统的拓扑结构示意图;图2为本发明实施例一提供一种多PCIE设备系统中断处理方法流程图;图3为本发明实施例二提供一种优选的多PCIE设备系统中断处理方法流程图;图4为本发明实施例二中主控端的一种优选结构框图;图5为本发明实施例二中中断寄存器与中断状态寄存器的一种逻辑图;图6为本发明实施例二中中断寄存器与中断状态寄存器的另一种逻辑图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方 式作进一步地详细描述。在实施本发明过程中,发明人发现现有技术中至少存在如下问题当多个PCIE设 备同时产生中断时,会产生多个MSI消息,PCIE主桥接收到多个MSI消息后,会将多个中断 向量号顺序写入预先配置在系统中的中断寄存器中,此时,由于主控端还未来得及处理前 一个中断向量号对应的中断,后一个中断向量号便会覆盖中断寄存器中的前一个中断向量 号,也就是说,对于支持MSI中断方式的主控端CPU而言,无法处理多个PCIE设备同时产生 的中断。进一步的,目前仅有少数的PCIE设备的硬件设计能够支持MSI中断方式,特别是 嵌入式领域中应用的PCIE设备几乎都不支持MSI中断方式,只能采用传统中断方式。为解 决上述技术问题,本发明实施例提出一种多PCIE设备系统中断处理方法,详细描述如下。实施例一参见图2,本发明实施例提供一种多PCIE设备系统中断处理方法,包括以下步骤步骤S201 预先设置中断寄存器,和用于记录产生中断的PCIE设备的中断状态寄 存器,所述中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变。步骤S202 当PCIE设备产生中断时发送通知消息,所述通知消息中携带预先为所 述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址。步骤S203 主控端在接收到通知消息后,将所述中断向量号写入所述映射地址对 应的中断寄存器;根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改 中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断 状态。可见,由于本发明实施例的多PCIE设备系统中,预先设置中断寄存器和用于记录 产生中断的PCIE设备的中断状态寄存器,且所述中断状态寄存器的值能按预设规则随所 述中断寄存器的值的改变而改变。这样,当多个PCIE设备同时产生中断时,主控端接收到 多个MSI消息后,会将多个中断向量号顺序写入中断寄存器中,每写入中断寄存器中一个 中断向量号,中断状态寄存器会记录该中断向量号对应的产生中断的PCIE设备,则当多个 中断向量号顺序写入中断寄存器后,虽然中断寄存器中后写入的值会覆盖前一个值,但是中断状态寄存器中却将全部产生中断的PCIE设备记录了下来,主控端便可以根据中断状 态寄存器中的值处理同时产生的多个中断,从而使得多PCIE设备系统能够处理多个PCIE 设备同时产生的中断。进一步的,当PCIE设备不支持MSI中断方式时,通过预配置所述PCIE设备,能够 使其在产生中断时向主控端发送通知消息,将预先为所述PCIE设备配置的中断向量号及 中断寄存器在PCIE空间的映射地址告知主控端,从而能够使得主控端无需共享中断处理 程序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,大大缩短处理不支持MSI中 断方式的PCIE设备的中断延时,提高系统中断处理效率。实施例二参见图3,本发明实施例提供一种优选的多PCIE设备系统中断处理方法,结合 参见图4,优选的,主控端包括中央处理器CPU401,与CPU401相连的PCIE主桥402,用 于CPU401所支持CPU总线数据格式与各PCIE设备所支持数据格式间的数据转换,和与 CPU401相连的可编程逻辑器件403。当然,根据实际应用场景,在PCIE主桥402与各PCIE 设备之间还可以包括PCIE Switch,用于协调多PCIE设备间数据交换。优选的,所述可编程逻辑器件可以是CPLD或FPGA等。在实际应用中,PCIE主桥402可以设置在主板上,也可以集成在CPU401中。本发明实施例提供的方法包括如下步骤步骤S301 预先在可编程逻辑器件中设置中断寄存器,和用于记录产生中断的 PCIE设备的中断状态寄存器。优选的,用所述中断状态寄存器中每一位的值对应标识一个PCIE设备的中断状 态;所述中断寄存器至少包括中断状态寄存器选择段,用于选择中断状态寄存器;和中断 状态寄存器位选择段,用于选择中断状态寄存器中的位。若中断寄存器中还剩余其它位的 话,可以将其作为保留段。进一步的,本实施例中,多个中断状态寄存器的位数均相同,则所述中断状态寄存 器选择段的位数为Log2(N/M),当Log2(N/M)不是整数时,所述中断状态寄存器选择段的位 数为Lo&(N/M)向上取整,其中N为所述的多PCIE设备系统支持的最大PCIE设备数,M为 中断状态寄存器的位数。中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变,具体为根据中断寄存器中中断状态寄存器选择段的值,选择对应的中断状态寄存器;根 据中断寄存器中中断状态寄存器位选择段的值,在选出的中断状态寄存器中选择对应的 位;将选出的所述位的值设置为预设值,用于标识该位对应的PCIE设备产生中断。比如,可以用“0”和“1”两个值分别标识对应PCIE设备未产生中断的状态和对应 PCIE设备产生中断的状态,即用“ 1”作为预设值,用于标识该位对应的PCIE设备产生中断。 实际应用中,也可以用其它值标识对应PCIE设备未产生/产生中断状态,本发明实施例对 此不做限制。在本实施例中,以用“1”作为预设值,用于标识该位对应的PCIE设备产生中 断,用“0”作为默认值,用于标识该位对应的PCIE设备未产生中断为例进行说明。具体的,假设中断寄存器为32位(当然实际应用中,中断寄存器的位数也可以是 64位等,可以依据实际应用场景确定,本发明实施例对此不做限定。这里,中断寄存器的位 数选为32位通常已经可以满足现有多PCIE设备系统的需求),中断状态寄存器的位宽可
8以选为8位、16位、或者32位等等,中断状态寄存器的位宽通常由访问可编程逻辑器件的 PCIE主桥控制器(Device Controller)所支持的位宽决定,这里设定中断状态寄存器的位 宽为M,本多PCIE设备系统所支持的最多PCIE中断数为N,两类寄存器的定义如下1)中断寄存器该寄存器分为三段,第一段为中断状态寄存器位选择段,用来选 择一个中断状态寄存器中的某一位,该段的位数为Log2M,即O Log2M-I ;第二段为中断 状态寄存器选择段,该段的位数为Log2 (N/M),S卩,Log2M Log2N-l。中断寄存器中的其它 位为第三段,即Lo&N 32,用于保留。假设中断状态寄存器的位数为32 (M = 32),系统 所支持的最大PCIE设备中断数为128 (N= 128),则需要4(128/32)个中断状态寄存器, 第一段的位数为5位,为bitO bit4 (Lo&32-l),第二段的位数为2 (Log2 (128/32)),为 bit5(Log232) bit6(Log2128-l)。也就是说,根据中断寄存器中所述中断状态寄存器选择 段的值,选择对应的中断状态寄存器当中断寄存器的中断状态寄存器选择段的值为0x00 时,表示选择第1个中断状态寄存器;当中断寄存器的中断状态寄存器选择段的值为OxOl 时,表示选择第2个中断状态寄存器;当中断寄存器的中断状态寄存器选择段的值为OxlO 时,表示选择第3个中断状态寄存器;当中断寄存器的中断状态寄存器选择段的值为Oxll 时,表示选择第4个中断状态寄存器,等等,依此类推,不再赘述。根据中断寄存器中所述中断状态寄存器位选择段的值,在选出的中断状态寄存器 中选择对应的位当中断寄存器的中断状态寄存器位选择段的值为00000( 二进制)时, 表示选择该中断状态寄存器的第1位;当中断寄存器的中断状态寄存器位选择段的值为 0x00001时,表示选择该中断状态寄存器的第2位;当中断寄存器的中断状态寄存器位选择 段的值为00010 ( 二进制)时,表示选择该中断状态寄存器的第3位;当中断寄存器的中断 状态寄存器位选择段的值为00011 ( 二进制)时,表示选择该中断状态寄存器的第4位,等 等,依此类推,不再赘述。2)中断状态寄存器该寄存器的每一位保存着一个对应的MSI中断向量号,其中 第一个中断状态寄存器保存的PCIE设备的MSI中断向量号为1 32,第二个中断寄存器保 存的PCIE设备的MSI中断向量号为33 64,以此类推。该寄存器的每一位的值可以通过 中断寄存器设置,当中断寄存器的值被修改时,中断状态寄存器中相应的位就会被设置为 1。步骤S302 将中断寄存器映射到PCIE空间中,为各PCIE设备配置中断向量号,并 将中断寄存器在PCIE空间的映射地址及中断向量号写入各PCIE设备。通过设置相关寄存器的值,将中断寄存器映射到PCIE空间中,以便系统中其它设 备可以访问。优选的,为各PCIE设备配置的中断向量号根据中断寄存器中断状态寄存器选择 段及中断状态寄存器位选择段的定义,计算得到,比如为第1个中断状态寄存器的第1位对应PCIE设备分配的中断向量号为 0x0000000,其中bit0-bit4为中断状态寄存器位选择段的值,bit5-bit6为中断状态寄存 器选择段的值。为第2个中断状态寄存器的第1位对应PCIE设备分配的中断向量号为 0100000( 二进制),其中bit0-bit4为中断状态寄存器位选择段的值,bit5-bit6为中断状 态寄存器选择段的值。
9
为第1个中断状态寄存器的第2位对应PCIE设备分配的中断向量号为 0x0000001,其中bit0-bit4为中断状态寄存器位选择段的值,bit5-bit6为中断状态寄存 器选择段的值。等等,依此类推,不再赘述。本发明实施例中,当PCIE设备支持MSI中断方式时,将中断寄存器在PCIE空间的 映射地址写入PCIE设备的Msi_Addr寄存器中;将中断向量号写入PCIE设备的Msi_Data 寄存器中。而当PCIE设备不支持MSI中断方式时,将中断寄存器在PCIE空间的映射地址和 中断向量号分别写入PCIE设备的两个寄存器中;并需要预配置所述PCIE设备在产生中断 时,发送携带预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地 址的通知消息,而不直接采用传统INTA、INTB、INTC、INTD的中断方式。可见,当PCIE设备不支持MSI中断方式时,通过预配置所述PCIE设备,能够使其 在产生中断时向主控端发送通知消息,将预先为所述PCIE设备配置的中断向量号及中断 寄存器在PCIE空间的映射地址告知主控端,从而能够使得主控端CPU无需共享中断处理程 序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,大大缩短处理不支持MSI中断 方式的PCIE设备的中断延时,提高系统中断处理效率。 本发明实施例中并不限制步骤S301和步骤S302的顺序,可以先执行步骤S301,再 执行步骤S302 ;也可以先执行步骤S302,再执行步骤S301 ;还可以同时执行。步骤S303 在各PCIE设备中注册中断处理程序。优选的,在PCIE设备中注册中断处理程序的方法可以是(1)将为PCIE设备配置的中断向量号加上偏移量得到CPU中断号;其中偏移量为 主控端CPU自身支持的中断数量。由于可编程逻辑器件中设置的中断寄存器和中断状态寄 存器为在主控端CPU外新扩展的MSI中断,则对于主控端CPU而言,可编程逻辑器件中扩展 的MSI中断所使用的中断号,应为在中断向量号的基础上加上PCIE主桥自身支持的MSI中 断数量。(2)所述PCIE设备驱动程序向所述CPU中断号注册中断处理程序。步骤S304:当PCIE设备产生中断时发送通知消息,所述通知消息中携带预先为所 述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址。优选的,当PCIE设备支持MSI中断方式时,所述通知消息具体为MSI消息。步骤S305 所述PCIE主桥在接收到通知消息后,向所述可编程逻辑器件中的中断 寄存器中写入所述中断向量号。当中断寄存器中写入中断向量号时,中断状态寄存器的值便会相应改变,具体的 首先,根据中断寄存器中所述中断状态寄存器选择段的值,选择对应的中断状态寄存器;再 次,根据中断寄存器中所述中断状态寄存器位选择段的值,在选出的中断状态寄存器中选 择对应的位;最后,将选出的所述位的值设置为预设值(比如置1),用于标识该位对应的 PCIE设备产生中断。中断寄存器用来记录通知消息发送过来的数据(中断向量号),并根据数据的内 容来将相应的中断状态寄存器中的某一位设置为1,这样就记录了相应产生中断的PCIE设备。
当多个PCIE设备同时产生中断时,PCIE主桥将接收到的多个中断向量号顺序写 入中断寄存器中,每写入中断寄存器中一个中断向量号,中断状态寄存器会记录该中断向 量号对应的产生中断的PCIE设备,则当多个中断向量号顺序写入中断寄存器后,虽然中断 寄存器中后写入的值会覆盖前一个值,但是中断状态寄存器中却将全部产生中断的PCIE 设备记录了下来,比如,若中断向量号0000000 ( 二进制)对应的PCIE设备、中断向量号 0100000 ( 二进制)对应的PCIE设备、及中断向量号0000001 ( 二进制)对应的PCIE设备 同时产生中断,则主控端CPU按顺序将中断向量号0000000 ( 二进制)、0100000 ( 二进制)、 0000001 ( 二进制)写入中断寄存器,当将中断向量号0000000 ( 二进制)写入中断寄存器 时,对应第1个中断状态寄存器的第1位被置1,当将中断向量号0100000 ( 二进制)写入 中断寄存器时,对应第2个中断状态寄存器的第1位被置1,当将中断向量号0000001 ( 二 进制)写入中断寄存器时,对应第1个中断状态寄存器的第2位被置1,则当将接收到的中 断向量号全部写入中断寄存器后,对应的中断状态寄存器中便记录了全部产生中断的PCIE 设备(中断状态寄存器中的值不会覆盖,只有在对应的中断被处理后才会被清掉,重新被 置0)。步骤S306 当所述中断状态寄存器的值发生改变时,所述可编程逻辑器件通过中 断引脚向主控端CPU触发中断请求。所述主控端CPU为可编程逻辑器件中每个中断状态寄存器分配一个中断引脚,当 某中断状态寄存器的值发生改变时,所述可编程逻辑器件通过该中断状态寄存器对应的中 断引脚向主控端CPU触发中断请求。图5中,每个中断状态寄存器对应一个中断引脚,当中 断状态寄存器中至少有1位被置1时,该中断寄存器对应的中断引脚就产生中断。但是在某些系统中由于可编程逻辑器件的引脚或者系统中断数的限制无法为每 一个中断状态寄存器提供一个中断引脚,在这样的系统可以为多个中断状态寄存器分配一 个中断引脚。当主控端CPU为可编程逻辑器件分配一个中断引脚,则所述可编程逻辑器件 中还设置有主中断状态寄存器,将所述中断引脚与主中断状态寄存器相连;每个中断状态 寄存器在所述主中断寄存器中有一位与其相对应,当某个中断状态寄存器的值发生改变 时,设置所述主中断状态寄存器中对应位的值为约定值(比如置1);则当主中断状态寄存 器的值发生改变时,所述可编程逻辑器件通过所述中断引脚向主控端CPU触发中断请求。 参见图6,为多个中断状态寄存器提供了一个中断引脚,此时需增加一个主中断状态寄存 器,每个中断状态寄存器在主中断状态寄存器都有一位与其相对应,当某个中断状态寄存 器中至少有一位被设置为1时,在主中断寄存器中与其对应的相应位就会被设置为1,同时 当主中断寄存器中至少有一位为1时该中断引脚就会产生中断。步骤S307 主控端CPU根据中断状态寄存器的值调用并执行预先注册的中断处理 程序,并修改中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为 未产生中断状态。优选的,根据中断状态寄存器的值调用并执行预先注册的中断处理程序可以包括 如下步骤(1)根据所述中断状态寄存器的值计算写入所述中断寄存器中的中断向量号。(2)将所述中断向量号加上所述偏移量得到CPU中断号。(3)调用并执行向所述CPU中断号注册的中断处理程序。
对于图5所示逻辑结构而言,在中断分配函数中根据引发中断的中断引脚,确定 引发中断的中断状态寄存器,然后读取该中断状态寄存器的值,进一步确定产生中断的MSI 中断向量号,计算出对应的CPU中断号,最后调用并执行与该CPU中断号对应的中断处理程序。对于图6所示逻辑结构而言,在中断分配函数中首先要读取主中断状态寄存器, 根据其内容确定引发中断的中断状态寄存器,然后读取该中断状态寄存器的值,进一步确 定产生中断的MSI中断向量号,计算出对应的CPU中断号,最后调用并执行与该CPU中断号 对应的中断处理程序。在本实施例中,修改中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设 备的中断状态为未产生中断状态具体为,将被调用并执行的中断处理程序对应的中断状态 寄存器中的位的值置0。本发明实施例中,主控端CPU还可以为不同的中断向量号设置优先级,则主控端 CPU便可以按不同的优先级顺序判断产生中断的CPU中断号,进一步扩展本实施例的应用。由于本发明实施例的多PCIE设备系统中,预先设置中断寄存器和用于记录产生 中断的PCIE设备的中断状态寄存器,且所述中断状态寄存器的值能按预设规则随所述中 断寄存器的值的改变而改变。这样,当多个PCIE设备同时产生中断时,主控端接收到多个 MSI消息后,会将多个中断向量号顺序写入中断寄存器中,每写入中断寄存器中一个中断向 量号,中断状态寄存器会记录该中断向量号对应的产生中断的PCIE设备,则当多个中断向 量号顺序写入中断寄存器后,虽然中断寄存器中后写入的值会覆盖前一个值,但是中断状 态寄存器中却将全部产生中断的PCIE设备记录了下来,主控端便可以根据中断状态寄存 器中的值处理同时产生的多个中断,从而使得多PCIE设备系统能够处理多个PCIE设备同 时产生的中断。进一步的,当PCIE设备不支持MSI中断方式时,通过预配置所述PCIE设备,能够 使其在产生中断时向主控端发送通知消息,将预先为所述PCIE设备配置的中断向量号及 中断寄存器在PCIE空间的映射地址告知主控端,从而能够使得主控端无需共享中断处理 程序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,大大缩短处理不支持MSI中 断方式的PCIE设备的中断延时,在中断产生时只需读取中断状态寄存器中的值即可确定 产生中断的PCIE设备,并且中断处理的时延不会随着系统中的PCIE设备的增多而增加,从 而提高系统中断处理效率。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排 他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而 且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有
的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包
括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以 通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中, 该程序在执行时,包括若干指令用以执行本发明各个实施例所述的方法。这里所述的存储 介质,如ROM/RAM、磁碟、光盘等。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围 内。
权利要求
一种多个人计算机扩展总线接口PCIE设备系统中断处理方法,其特征在于,预先设置中断寄存器和用于记录产生中断的PCIE设备的中断状态寄存器,所述中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变;所述方法包括当PCIE设备产生中断时发送通知消息,所述通知消息中携带预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址;主控端在接收到通知消息后,将所述中断向量号写入所述映射地址对应的中断寄存器;根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态。
2.根据权利要求1所述的多PCIE设备系统中断处理方法,其特征在于,所述主控端包 括中央处理器CPU,与所述CPU相连的PCIE主桥,用于所述CPU所支持CPU总线数据格式与 各PCIE设备所支持数据格式间的数据转换,和与所述CPU相连的可编程逻辑器件,在所述 可编程逻辑器件中设置中断寄存器和中断状态寄存器。
3.根据权利要求2所述的多PCIE设备系统中断处理方法,其特征在于,所述主控端在 接收到通知消息后,将所述中断向量号写入所述映射地址对应的中断寄存器;根据中断状 态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄存器的值,以恢复 所述中断处理程序对应PCIE设备的中断状态为未产生中断状态,具体为所述PCIE主桥在接收到通知消息后,向所述可编程逻辑器件中的中断寄存器中写入 所述中断向量号;当所述中断状态寄存器的值发生改变时,所述可编程逻辑器件通过中断引脚向所述 CPU触发中断请求;所述CPU根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断 状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态。
4.根据权利要求3所述的多PCIE设备系统中断处理方法,其特征在于,当所述PCIE设 备支持信息信号中断MSI中断方式时,将中断寄存器在PCIE空间的映射地址写入PCIE设 备的Msi_Addr寄存器中;将中断向量号写入PCIE设备的Msi_Data寄存器中;且所述通知 消息具体为MSI消息。
5.根据权利要求4所述的多PCIE设备系统中断处理方法,其特征在于,当所述PCIE设 备不支持MSI中断方式时,预配置所述PCIE设备在产生中断时,发送携带预先为所述PCIE 设备配置的中断向量号及中断寄存器在PCIE空间的映射地址的通知消息;并将中断寄存 器在PCIE空间的映射地址和中断向量号分别写入PCIE设备的两个寄存器中。
6.根据权利要求3所述的多PCIE设备系统中断处理方法,其特征在于,用所述中断状 态寄存器中每一位的值对应标识一个PCIE设备的中断状态;所述中断寄存器至少包括中断状态寄存器选择段,用于选择中断状态寄存器;和中断状态寄存器位选择段,用于选择中断状态寄存器中的位;则所述中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变具体为根据中断寄存器中所述中断状态寄存器选择段的值,选择对应的中断状态寄存器;根据中断寄存器中所述中断状态寄存器位选择段的值,在选出的中断状态寄存器中选 择对应的位;将选出的所述位的值设置为预设值,用于标识该位对应的PCIE设备产生中断。
7.根据权利要求6所述的多PCIE设备系统中断处理方法,其特征在于,所述至少一个 中断状态寄存器的位数相同,则所述中断状态寄存器选择段的位数为Log2(N/M),当Log2(N/M)不是整数时,所述中断 状态寄存器选择段的位数为Log2(N/M)向上取整,其中N为所述的多PCIE设备系统支持的 最大PCIE设备数,M为中断状态寄存器的位数。
8.根据权利要求6所述的多PCIE设备系统中断处理方法,其特征在于,注册中断处理 程序具体为将为PCIE设备配置的中断向量号加上偏移量得到CPU中断号;所述偏移量为所述CPU 自身支持的中断数量;所述PCIE设备驱动程序向所述CPU中断号注册中断处理程序;所述根据中断状态寄存器的值调用并执行预先注册的中断处理程序具体为根据所述中断状态寄存器的值计算写入所述中断寄存器中的中断向量号;将所述中断向量号加上所述偏移量得到CPU中断号;调用并执行向所述CPU中断号注册的中断处理程序。
9.根据权利要求3所述的多PCIE设备系统中断处理方法,其特征在于,所述CPU为可 编程逻辑器件中每个中断状态寄存器分配一个中断引脚,则当某中断状态寄存器的值发生 改变时,所述可编程逻辑器件通过该中断状态寄存器对应的中断引脚向所述CPU触发中断 请求。
10.根据权利要求3所述的多PCIE设备系统中断处理方法,其特征在于,所述CPU为可 编程逻辑器件分配一个中断引脚,则所述可编程逻辑器件中还设置有主中断状态寄存器, 将所述中断引脚与主中断状态寄存器相连;每个中断状态寄存器在所述主中断寄存器中有一位与其相对应,当某个中断状态寄 存器的值发生改变时,设置所述主中断状态寄存器中对应位的值为约定值;则当主中断状 态寄存器的值发生改变时,所述可编程逻辑器件通过所述中断引脚向所述CPU触发中断请 求。
全文摘要
本发明公开一种多PCIE设备系统中断处理方法,涉及自动控制领域。预先设置中断寄存器和中断状态寄存器,中断状态寄存器的值按预设规则随中断寄存器值改变而改变;当PCIE设备产生中断时发送通知消息,消息中携带预先为PCIE设备配置的中断向量号及中断寄存器地址;主控端在接收到通知消息后,将中断向量号写入所述映射地址对应的中断寄存器;根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄存器的值,以恢复中断处理程序对应PCIE设备的中断状态为未产生中断状态。能够处理多个PCIE设备同时产生的中断。且不支持MSI中断方式的PCIE设备能够应用本发明,提高系统中断处理效率。
文档编号G06F13/24GK101872330SQ200910250798
公开日2010年10月27日 申请日期2009年12月11日 优先权日2009年11月4日
发明者栾焕志, 胡扬忠, 赵先林, 邬伟琪 申请人:杭州海康威视数字技术股份有限公司