著录项信息
专利名称 | 多PCIE设备系统中断处理方法 |
申请号 | CN200910250798.4 | 申请日期 | 2009-12-11 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2010-10-27 | 公开/公告号 | CN101872330A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F13/24 | IPC分类号 | G;0;6;F;1;3;/;2;4查看分类表>
|
申请人 | 杭州海康威视数字技术股份有限公司 | 申请人地址 | 浙江省杭州市马塍路36号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 杭州海康威视数字技术股份有限公司 | 当前权利人 | 杭州海康威视数字技术股份有限公司 |
发明人 | 栾焕志;赵先林;胡扬忠;邬伟琪 |
代理机构 | 北京集佳知识产权代理有限公司 | 代理人 | 逯长明;王宝筠 |
摘要
本发明公开一种多PCIE设备系统中断处理方法,涉及自动控制领域。预先设置中断寄存器和中断状态寄存器,中断状态寄存器的值按预设规则随中断寄存器值改变而改变;当PCIE设备产生中断时发送通知消息,消息中携带预先为PCIE设备配置的中断向量号及中断寄存器地址;主控端在接收到通知消息后,将中断向量号写入所述映射地址对应的中断寄存器;根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄存器的值,以恢复中断处理程序对应PCIE设备的中断状态为未产生中断状态。能够处理多个PCIE设备同时产生的中断。且不支持MSI中断方式的PCIE设备能够应用本发明,提高系统中断处理效率。
多PCIE设备系统中断处理方法\n技术领域\n[0001] 本发明涉及自动控制领域,特别涉及一种多PCIE设备系统中断处理方法。\n背景技术\n[0002] PCIE(个人计算机扩展总线接口)设备是新一代能够提供大量带宽和丰富功能以实现令人激动的新式图形应用的全新架构。参见图1,为多PCIE设备系统的拓扑结构示意图,包括主控端和若干个作为终点(End Point)的PCIE设备,其中主控端包括CPU和PCIE主桥(PCIE host bridge),PCIE主桥主要用于实现CPU所支持CPU总线数据格式与各PCIE设备所支持数据格式间的数据转换,通常,还会包括PCIE Switch(交换器),用于协调多PCIE设备间数据交换。\n[0003] 当前,在多PCIE设备的系统中,多个PCIE设备往往采用中断方式与主控端协作。\n目前PCIE设备支持的一种传统的中断处理方式主要是,系统为PCIE设备提供4个中断信号,INTA、INTB、INTC、INTD,不同的PCIE设备会被配置到不同的中断信号上,当系统中的PCIE设备多于4个时,需要采用共享中断的方式,即共享中断处理程序逐个检测共享该中断的多个PCIE设备的中断状态位,判断具体产生中断的PCIE设备,执行对应的中断处理程序。\n[0004] 在多PCIE设备的系统中,多个PCIE设备同时产生中断时,由于需要共享中断处理程序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,导致中断延时非常大,并且随着系统中PCIE设备的增加急剧增大。\n[0005] 有些PCIE设备的硬件能够支持MSI(Message Signaled Interrupt,信息信号中断)中断方式,MSI中断方式的处理过程具体为:产生中断的PCIE设备生成MSI消息(MSI消息中携带有预先为该PCIE设备分配的中断向量号),PCIE主桥接收到MSI消息后,将中断向量号写入预先配置在系统中的中断寄存器中,主控端便可以根据中断寄存器中的中断向量号调用中断处理程序。由于MSI中断方式中无需查询各个PCIE设备的中断状态位,节约了中断处理时间,解决了传统的中断处理方式的低效问题。\n[0006] 在实施本发明过程中,发明人发现现有技术中至少存在如下问题:当多个PCIE设备同时产生中断时,会产生多个MSI消息,PCIE主桥接收到多个MSI消息后,会将多个中断向量号顺序写入预先配置在系统中的中断寄存器中,此时,由于主控端还未来得及处理前一个中断向量号对应的中断,后一个中断向量号便会覆盖中断寄存器中的前一个中断向量号,也就是说,对于支持MSI中断方式的主控端CPU而言,无法处理多个PCIE设备同时产生的中断。\n发明内容\n[0007] 为解决上述技术问题,本发明提供一种多PCIE设备系统中断处理方法。\n[0008] 一种多PCIE设备系统中断处理方法,预先设置中断寄存器和用于记录产生中断的PCIE设备的中断状态寄存器,所述中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变;所述方法包括:\n[0009] 当PCIE设备产生中断时发送通知消息,所述通知消息中携带预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址;\n[0010] 主控端在接收到通知消息后,将所述中断向量号写入所述映射地址对应的中断寄存器;根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态。\n[0011] 所述主控端包括CPU,与所述CPU相连的PCIE主桥,用于所述CPU所支持CPU总线数据格式与各PCIE设备所支持数据格式间的数据转换,和与所述CPU相连的可编程逻辑器件,在所述可编程逻辑器件中设置中断寄存器和中断状态寄存器。\n[0012] 所述主控端在接收到通知消息后,将所述中断向量号写入所述映射地址对应的中断寄存器;根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态,具体为:\n[0013] 所述PCIE主桥在接收到通知消息后,向所述可编程逻辑器件中的中断寄存器中写入所述中断向量号;\n[0014] 当所述中断状态寄存器的值发生改变时,所述可编程逻辑器件通过中断引脚向所述CPU触发中断请求;\n[0015] 所述CPU根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态。\n[0016] 当所述PCIE设备支持MSI中断方式时,将中断寄存器在PCIE空间的映射地址写入PCIE设备的Msi_Addr寄存器中;将中断向量号写入PCIE设备的Msi_Data寄存器中;且所述通知消息具体为MSI消息。\n[0017] 当所述PCIE设备不支持MSI中断方式时,预配置所述PCIE设备在产生中断时,发送携带预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址的通知消息;并将中断寄存器在PCIE空间的映射地址和中断向量号分别写入PCIE设备的两个寄存器中。\n[0018] 用所述中断状态寄存器中每一位的值对应标识一个PCIE设备的中断状态;所述中断寄存器至少包括:\n[0019] 中断状态寄存器选择段,用于选择中断状态寄存器;和\n[0020] 中断状态寄存器位选择段,用于选择中断状态寄存器中的位;则\n[0021] 所述中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变具体为:\n[0022] 根据中断寄存器中所述中断状态寄存器选择段的值,选择对应的中断状态寄存器;\n[0023] 根据中断寄存器中所述中断状态寄存器位选择段的值,在选出的中断状态寄存器中选择对应的位;\n[0024] 将选出的所述位的值设置为预设值,用于标识该位对应的PCIE设备产生中断。\n[0025] 所述至少一个中断状态寄存器的位数相同,则\n[0026] 所述中断状态寄存器选择段的位数为Log2(N/M),当Log2(N/M)不是整数时,所述中断状态寄存器选择段的位数为Log2(N/M)向上取整,其中N为所述的多PCIE设备系统支持的最大PCIE设备数,M为中断状态寄存器的位数。\n[0027] 注册中断处理程序具体为:\n[0028] 将为PCIE设备配置的中断向量号加上偏移量得到CPU中断号;所述偏移量为所述CPU自身支持的中断数量;\n[0029] 所述PCIE设备驱动程序向所述CPU中断号注册中断处理程序;\n[0030] 所述根据中断状态寄存器的值调用并执行预先注册的中断处理程序具体为:\n[0031] 根据所述中断状态寄存器的值计算写入所述中断寄存器中的中断向量号;\n[0032] 将所述中断向量号加上所述偏移量得到CPU中断号;\n[0033] 调用并执行向所述CPU中断号注册的中断处理程序。\n[0034] 所述CPU为可编程逻辑器件中每个中断状态寄存器分配一个中断引脚,则当某中断状态寄存器的值发生改变时,所述可编程逻辑器件通过该中断状态寄存器对应的中断引脚向所述CPU触发中断请求。\n[0035] 所述CPU为可编程逻辑器件分配一个中断引脚,则所述可编程逻辑器件中还设置有主中断状态寄存器,将所述中断引脚与主中断状态寄存器相连;\n[0036] 每个中断状态寄存器在所述主中断寄存器中有一位与其相对应,当某个中断状态寄存器的值发生改变时,设置所述主中断状态寄存器中对应位的值为约定值;则当主中断状态寄存器的值发生改变时,所述可编程逻辑器件通过所述中断引脚向所述CPU触发中断请求。\n[0037] 本发明提供的多PCIE设备系统中断处理方法,有益效果是:由于本发明的多PCIE设备系统中,预先设置中断寄存器和用于记录产生中断的PCIE设备的中断状态寄存器,且所述中断状态寄存器的值能按预设规则随所述中断寄存器的值的改变而改变。这样,当多个PCIE设备同时产生中断时,主控端接收到多个MSI消息后,会将多个中断向量号顺序写入中断寄存器中,每写入中断寄存器中一个中断向量号,中断状态寄存器会记录该中断向量号对应的产生中断的PCIE设备,则当多个中断向量号顺序写入中断寄存器后,虽然中断寄存器中后写入的值会覆盖前一个值,但是中断状态寄存器中却将全部产生中断的PCIE设备记录了下来,主控端便可以根据中断状态寄存器中的值处理同时产生的多个中断,从而使得多PCIE设备系统能够处理多个PCIE设备同时产生的中断。\n[0038] 进一步的,当PCIE设备不支持MSI中断方式时,通过预配置所述PCIE设备,能够使其在产生中断时向主控端发送通知消息,将预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址告知主控端,从而能够使得主控端无需共享中断处理程序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,大大缩短处理不支持MSI中断方式的PCIE设备的中断延时,提高系统中断处理效率。\n附图说明\n[0039] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。\n[0040] 图1为现有技术中多PCIE设备系统的拓扑结构示意图;\n[0041] 图2为本发明实施例一提供一种多PCIE设备系统中断处理方法流程图;\n[0042] 图3为本发明实施例二提供一种优选的多PCIE设备系统中断处理方法流程图;\n[0043] 图4为本发明实施例二中主控端的一种优选结构框图;\n[0044] 图5为本发明实施例二中中断寄存器与中断状态寄存器的一种逻辑图;\n[0045] 图6为本发明实施例二中中断寄存器与中断状态寄存器的另一种逻辑图。\n具体实施方式\n[0046] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。\n[0047] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。\n[0048] 在实施本发明过程中,发明人发现现有技术中至少存在如下问题:当多个PCIE设备同时产生中断时,会产生多个MSI消息,PCIE主桥接收到多个MSI消息后,会将多个中断向量号顺序写入预先配置在系统中的中断寄存器中,此时,由于主控端还未来得及处理前一个中断向量号对应的中断,后一个中断向量号便会覆盖中断寄存器中的前一个中断向量号,也就是说,对于支持MSI中断方式的主控端CPU而言,无法处理多个PCIE设备同时产生的中断。进一步的,目前仅有少数的PCIE设备的硬件设计能够支持MSI中断方式,特别是嵌入式领域中应用的PCIE设备几乎都不支持MSI中断方式,只能采用传统中断方式。为解决上述技术问题,本发明实施例提出一种多PCIE设备系统中断处理方法,详细描述如下。\n[0049] 实施例一\n[0050] 参见图2,本发明实施例提供一种多PCIE设备系统中断处理方法,包括以下步骤:\n[0051] 步骤S201:预先设置中断寄存器,和用于记录产生中断的PCIE设备的中断状态寄存器,所述中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变。\n[0052] 步骤S202:当PCIE设备产生中断时发送通知消息,所述通知消息中携带预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址。\n[0053] 步骤S203:主控端在接收到通知消息后,将所述中断向量号写入所述映射地址对应的中断寄存器;根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态。\n[0054] 可见,由于本发明实施例的多PCIE设备系统中,预先设置中断寄存器和用于记录产生中断的PCIE设备的中断状态寄存器,且所述中断状态寄存器的值能按预设规则随所述中断寄存器的值的改变而改变。这样,当多个PCIE设备同时产生中断时,主控端接收到多个MSI消息后,会将多个中断向量号顺序写入中断寄存器中,每写入中断寄存器中一个中断向量号,中断状态寄存器会记录该中断向量号对应的产生中断的PCIE设备,则当多个中断向量号顺序写入中断寄存器后,虽然中断寄存器中后写入的值会覆盖前一个值,但是中断状态寄存器中却将全部产生中断的PCIE设备记录了下来,主控端便可以根据中断状态寄存器中的值处理同时产生的多个中断,从而使得多PCIE设备系统能够处理多个PCIE设备同时产生的中断。\n[0055] 进一步的,当PCIE设备不支持MSI中断方式时,通过预配置所述PCIE设备,能够使其在产生中断时向主控端发送通知消息,将预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址告知主控端,从而能够使得主控端无需共享中断处理程序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,大大缩短处理不支持MSI中断方式的PCIE设备的中断延时,提高系统中断处理效率。\n[0056] 实施例二\n[0057] 参见图3,本发明实施例提供一种优选的多PCIE设备系统中断处理方法,结合参见图4,优选的,主控端包括中央处理器CPU401,与CPU401相连的PCIE主桥402,用于CPU401所支持CPU总线数据格式与各PCIE设备所支持数据格式间的数据转换,和与CPU401相连的可编程逻辑器件403。当然,根据实际应用场景,在PCIE主桥402与各PCIE设备之间还可以包括PCIE Switch,用于协调多PCIE设备间数据交换。\n[0058] 优选的,所述可编程逻辑器件可以是CPLD或FPGA等。\n[0059] 在实际应用中,PCIE主桥402可以设置在主板上,也可以集成在CPU401中。\n[0060] 本发明实施例提供的方法包括如下步骤:\n[0061] 步骤S301:预先在可编程逻辑器件中设置中断寄存器,和用于记录产生中断的PCIE设备的中断状态寄存器。\n[0062] 优选的,用所述中断状态寄存器中每一位的值对应标识一个PCIE设备的中断状态;所述中断寄存器至少包括:中断状态寄存器选择段,用于选择中断状态寄存器;和中断状态寄存器位选择段,用于选择中断状态寄存器中的位。若中断寄存器中还剩余其它位的话,可以将其作为保留段。\n[0063] 进一步的,本实施例中,多个中断状态寄存器的位数均相同,则所述中断状态寄存器选择段的位数为Log2(N/M),当Log2(N/M)不是整数时,所述中断状态寄存器选择段的位数为Log2(N/M)向上取整,其中N为所述的多PCIE设备系统支持的最大PCIE设备数,M为中断状态寄存器的位数。\n[0064] 中断状态寄存器的值按预设规则随所述中断寄存器的值的改变而改变,具体为:\n[0065] 根据中断寄存器中中断状态寄存器选择段的值,选择对应的中断状态寄存器;根据中断寄存器中中断状态寄存器位选择段的值,在选出的中断状态寄存器中选择对应的位;将选出的所述位的值设置为预设值,用于标识该位对应的PCIE设备产生中断。\n[0066] 比如,可以用“0”和“1”两个值分别标识对应PCIE设备未产生中断的状态和对应PCIE设备产生中断的状态,即用“1”作为预设值,用于标识该位对应的PCIE设备产生中断。\n实际应用中,也可以用其它值标识对应PCIE设备未产生/产生中断状态,本发明实施例对此不做限制。在本实施例中,以用“1”作为预设值,用于标识该位对应的PCIE设备产生中断,用“0”作为默认值,用于标识该位对应的PCIE设备未产生中断为例进行说明。\n[0067] 具体的,假设中断寄存器为32位(当然实际应用中,中断寄存器的位数也可以是\n64位等,可以依据实际应用场景确定,本发明实施例对此不做限定。这里,中断寄存器的位数选为32位通常已经可以满足现有多PCIE设备系统的需求),中断状态寄存器的位宽可以选为8位、16位、或者32位等等,中断状态寄存器的位宽通常由访问可编程逻辑器件的PCIE主桥控制器(Device Controller)所支持的位宽决定,这里设定中断状态寄存器的位宽为M,本多PCIE设备系统所支持的最多PCIE中断数为N,两类寄存器的定义如下:\n[0068] 1)中断寄存器:该寄存器分为三段,第一段为中断状态寄存器位选择段,用来选择一个中断状态寄存器中的某一位,该段的位数为Log2M,即0~Log2M-1;第二段为中断状态寄存器选择段,该段的位数为Log2(N/M),即,Log2M~Log2N-1。中断寄存器中的其它位为第三段,即Log2N~32,用于保留。假设中断状态寄存器的位数为32(M=32),系统所支持的最大PCIE设备中断数为128(N=128),则需要4(128/32)个中断状态寄存器,第一段的位数为5位,为bit0~bit4(Log232-1),第二段的位数为2(Log2(128/32)),为bit5(Log232)~bit6(Log2128-1)。也就是说,根据中断寄存器中所述中断状态寄存器选择段的值,选择对应的中断状态寄存器:当中断寄存器的中断状态寄存器选择段的值为0x00时,表示选择第1个中断状态寄存器;当中断寄存器的中断状态寄存器选择段的值为0x01时,表示选择第2个中断状态寄存器;当中断寄存器的中断状态寄存器选择段的值为0x10时,表示选择第3个中断状态寄存器;当中断寄存器的中断状态寄存器选择段的值为0x11时,表示选择第4个中断状态寄存器,等等,依此类推,不再赘述。\n[0069] 根据中断寄存器中所述中断状态寄存器位选择段的值,在选出的中断状态寄存器中选择对应的位:当中断寄存器的中断状态寄存器位选择段的值为00000(二进制)时,表示选择该中断状态寄存器的第1位;当中断寄存器的中断状态寄存器位选择段的值为\n0x00001时,表示选择该中断状态寄存器的第2位;当中断寄存器的中断状态寄存器位选择段的值为00010(二进制)时,表示选择该中断状态寄存器的第3位;当中断寄存器的中断状态寄存器位选择段的值为00011(二进制)时,表示选择该中断状态寄存器的第4位,等等,依此类推,不再赘述。\n[0070] 2)中断状态寄存器:该寄存器的每一位保存着一个对应的MSI中断向量号,其中第一个中断状态寄存器保存的PCIE设备的MSI中断向量号为1~32,第二个中断寄存器保存的PCIE设备的MSI中断向量号为33~64,以此类推。该寄存器的每一位的值可以通过中断寄存器设置,当中断寄存器的值被修改时,中断状态寄存器中相应的位就会被设置为\n1。\n[0071] 步骤S302:将中断寄存器映射到PCIE空间中,为各PCIE设备配置中断向量号,并将中断寄存器在PCIE空间的映射地址及中断向量号写入各PCIE设备。\n[0072] 通过设置相关寄存器的值,将中断寄存器映射到PCIE空间中,以便系统中其它设备可以访问。\n[0073] 优选的,为各PCIE设备配置的中断向量号根据中断寄存器中断状态寄存器选择段及中断状态寄存器位选择段的定义,计算得到,比如:\n[0074] 为第1个中断状态寄存器的第1位对应PCIE设备分配的中断向量号为\n0x0000000,其中bit0-bit4为中断状态寄存器位选择段的值,bit5-bit6为中断状态寄存器选择段的值。\n[0075] 为第2个中断状态寄存器的第1位对应PCIE设备分配的中断向量号为\n0100000(二进制),其中bit0-bit4为中断状态寄存器位选择段的值,bit5-bit6为中断状态寄存器选择段的值。\n[0076] 为第1个中断状态寄存器的第2位对应PCIE设备分配的中断向量号为\n0x0000001,其中bit0-bit4为中断状态寄存器位选择段的值,bit5-bit6为中断状态寄存器选择段的值。\n[0077] 等等,依此类推,不再赘述。\n[0078] 本发明实施例中,当PCIE设备支持MSI中断方式时,将中断寄存器在PCIE空间的映射地址写入PCIE设备的Msi_Addr寄存器中;将中断向量号写入PCIE设备的Msi_Data寄存器中。\n[0079] 而当PCIE设备不支持MSI中断方式时,将中断寄存器在PCIE空间的映射地址和中断向量号分别写入PCIE设备的两个寄存器中;并需要预配置所述PCIE设备在产生中断时,发送携带预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址的通知消息,而不直接采用传统INTA、INTB、INTC、INTD的中断方式。\n[0080] 可见,当PCIE设备不支持MSI中断方式时,通过预配置所述PCIE设备,能够使其在产生中断时向主控端发送通知消息,将预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址告知主控端,从而能够使得主控端CPU无需共享中断处理程序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,大大缩短处理不支持MSI中断方式的PCIE设备的中断延时,提高系统中断处理效率。\n[0081] 本发明实施例中并不限制步骤S301和步骤S302的顺序,可以先执行步骤S301,再执行步骤S302;也可以先执行步骤S302,再执行步骤S301;还可以同时执行。\n[0082] 步骤S303:在各PCIE设备中注册中断处理程序。\n[0083] 优选的,在PCIE设备中注册中断处理程序的方法可以是:\n[0084] (1)将为PCIE设备配置的中断向量号加上偏移量得到CPU中断号;其中偏移量为主控端CPU自身支持的中断数量。由于可编程逻辑器件中设置的中断寄存器和中断状态寄存器为在主控端CPU外新扩展的MSI中断,则对于主控端CPU而言,可编程逻辑器件中扩展的MSI中断所使用的中断号,应为在中断向量号的基础上加上PCIE主桥自身支持的MSI中断数量。\n[0085] (2)所述PCIE设备驱动程序向所述CPU中断号注册中断处理程序。\n[0086] 步骤S304:当PCIE设备产生中断时发送通知消息,所述通知消息中携带预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址。\n[0087] 优选的,当PCIE设备支持MSI中断方式时,所述通知消息具体为MSI消息。\n[0088] 步骤S305:所述PCIE主桥在接收到通知消息后,向所述可编程逻辑器件中的中断寄存器中写入所述中断向量号。\n[0089] 当中断寄存器中写入中断向量号时,中断状态寄存器的值便会相应改变,具体的:\n首先,根据中断寄存器中所述中断状态寄存器选择段的值,选择对应的中断状态寄存器;再次,根据中断寄存器中所述中断状态寄存器位选择段的值,在选出的中断状态寄存器中选择对应的位;最后,将选出的所述位的值设置为预设值(比如置1),用于标识该位对应的PCIE设备产生中断。\n[0090] 中断寄存器用来记录通知消息发送过来的数据(中断向量号),并根据数据的内容来将相应的中断状态寄存器中的某一位设置为1,这样就记录了相应产生中断的PCIE设备。\n[0091] 当多个PCIE设备同时产生中断时,PCIE主桥将接收到的多个中断向量号顺序写入中断寄存器中,每写入中断寄存器中一个中断向量号,中断状态寄存器会记录该中断向量号对应的产生中断的PCIE设备,则当多个中断向量号顺序写入中断寄存器后,虽然中断寄存器中后写入的值会覆盖前一个值,但是中断状态寄存器中却将全部产生中断的PCIE设备记录了下来,比如,若中断向量号0000000(二进制)对应的PCIE设备、中断向量号\n0100000(二进制)对应的PCIE设备、及中断向量号0000001(二进制)对应的PCIE设备同时产生中断,则主控端CPU按顺序将中断向量号0000000(二进制)、0100000(二进制)、\n0000001(二进制)写入中断寄存器,当将中断向量号0000000(二进制)写入中断寄存器时,对应第1个中断状态寄存器的第1位被置1,当将中断向量号0100000(二进制)写入中断寄存器时,对应第2个中断状态寄存器的第1位被置1,当将中断向量号0000001(二进制)写入中断寄存器时,对应第1个中断状态寄存器的第2位被置1,则当将接收到的中断向量号全部写入中断寄存器后,对应的中断状态寄存器中便记录了全部产生中断的PCIE设备(中断状态寄存器中的值不会覆盖,只有在对应的中断被处理后才会被清掉,重新被置0)。\n[0092] 步骤S306:当所述中断状态寄存器的值发生改变时,所述可编程逻辑器件通过中断引脚向主控端CPU触发中断请求。\n[0093] 所述主控端CPU为可编程逻辑器件中每个中断状态寄存器分配一个中断引脚,当某中断状态寄存器的值发生改变时,所述可编程逻辑器件通过该中断状态寄存器对应的中断引脚向主控端CPU触发中断请求。图5中,每个中断状态寄存器对应一个中断引脚,当中断状态寄存器中至少有1位被置1时,该中断寄存器对应的中断引脚就产生中断。\n[0094] 但是在某些系统中由于可编程逻辑器件的引脚或者系统中断数的限制无法为每一个中断状态寄存器提供一个中断引脚,在这样的系统可以为多个中断状态寄存器分配一个中断引脚。当主控端CPU为可编程逻辑器件分配一个中断引脚,则所述可编程逻辑器件中还设置有主中断状态寄存器,将所述中断引脚与主中断状态寄存器相连;每个中断状态寄存器在所述主中断寄存器中有一位与其相对应,当某个中断状态寄存器的值发生改变时,设置所述主中断状态寄存器中对应位的值为约定值(比如置1);则当主中断状态寄存器的值发生改变时,所述可编程逻辑器件通过所述中断引脚向主控端CPU触发中断请求。\n参见图6,为多个中断状态寄存器提供了一个中断引脚,此时需增加一个主中断状态寄存器,每个中断状态寄存器在主中断状态寄存器都有一位与其相对应,当某个中断状态寄存器中至少有一位被设置为1时,在主中断寄存器中与其对应的相应位就会被设置为1,同时当主中断寄存器中至少有一位为1时该中断引脚就会产生中断。\n[0095] 步骤S307:主控端CPU根据中断状态寄存器的值调用并执行预先注册的中断处理程序,并修改中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态。\n[0096] 优选的,根据中断状态寄存器的值调用并执行预先注册的中断处理程序可以包括如下步骤:\n[0097] (1)根据所述中断状态寄存器的值计算写入所述中断寄存器中的中断向量号。\n[0098] (2)将所述中断向量号加上所述偏移量得到CPU中断号。\n[0099] (3)调用并执行向所述CPU中断号注册的中断处理程序。\n[0100] 对于图5所示逻辑结构而言,在中断分配函数中根据引发中断的中断引脚,确定引发中断的中断状态寄存器,然后读取该中断状态寄存器的值,进一步确定产生中断的MSI中断向量号,计算出对应的CPU中断号,最后调用并执行与该CPU中断号对应的中断处理程序。\n[0101] 对于图6所示逻辑结构而言,在中断分配函数中首先要读取主中断状态寄存器,根据其内容确定引发中断的中断状态寄存器,然后读取该中断状态寄存器的值,进一步确定产生中断的MSI中断向量号,计算出对应的CPU中断号,最后调用并执行与该CPU中断号对应的中断处理程序。\n[0102] 在本实施例中,修改中断状态寄存器的值,以恢复所述中断处理程序对应PCIE设备的中断状态为未产生中断状态具体为,将被调用并执行的中断处理程序对应的中断状态寄存器中的位的值置0。\n[0103] 本发明实施例中,主控端CPU还可以为不同的中断向量号设置优先级,则主控端CPU便可以按不同的优先级顺序判断产生中断的CPU中断号,进一步扩展本实施例的应用。\n[0104] 由于本发明实施例的多PCIE设备系统中,预先设置中断寄存器和用于记录产生中断的PCIE设备的中断状态寄存器,且所述中断状态寄存器的值能按预设规则随所述中断寄存器的值的改变而改变。这样,当多个PCIE设备同时产生中断时,主控端接收到多个MSI消息后,会将多个中断向量号顺序写入中断寄存器中,每写入中断寄存器中一个中断向量号,中断状态寄存器会记录该中断向量号对应的产生中断的PCIE设备,则当多个中断向量号顺序写入中断寄存器后,虽然中断寄存器中后写入的值会覆盖前一个值,但是中断状态寄存器中却将全部产生中断的PCIE设备记录了下来,主控端便可以根据中断状态寄存器中的值处理同时产生的多个中断,从而使得多PCIE设备系统能够处理多个PCIE设备同时产生的中断。\n[0105] 进一步的,当PCIE设备不支持MSI中断方式时,通过预配置所述PCIE设备,能够使其在产生中断时向主控端发送通知消息,将预先为所述PCIE设备配置的中断向量号及中断寄存器在PCIE空间的映射地址告知主控端,从而能够使得主控端无需共享中断处理程序逐个检测共享该中断的多个PCIE设备的中断状态寄存器,大大缩短处理不支持MSI中断方式的PCIE设备的中断延时,在中断产生时只需读取中断状态寄存器中的值即可确定产生中断的PCIE设备,并且中断处理的时延不会随着系统中的PCIE设备的增多而增加,从而提高系统中断处理效率。\n[0106] 需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。\n[0107] 本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括若干指令用以执行本发明各个实施例所述的方法。这里所述的存储介质,如:ROM/RAM、磁碟、光盘等。\n[0108] 以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
法律信息
- 2014-02-26
专利实施许可合同备案的生效
IPC(主分类): G06F 13/24
合同备案号: 2014990000024
专利号: ZL 200910250798.4
申请日: 2009.12.11
让与人: 杭州海康威视数字技术股份有限公司
受让人: 富阳海康保泰安防技术服务有限公司
发明名称: 多PCIE设备系统中断处理方法
申请公布日: 2010.10.27
授权公告日: 2012.07.25
许可种类: 独占许可
备案日期: 2014.01.13
- 2012-07-25
- 2010-12-08
实质审查的生效
IPC(主分类): G06F 13/24
专利申请号: 200910250798.4
申请日: 2009.12.11
- 2010-10-27
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2005-07-13
|
2004-08-09
| | |
2
| |
2008-07-02
|
2006-12-28
| | |
3
| |
2007-01-10
|
2004-12-08
| | |
4
| |
2001-06-06
|
1999-04-13
| | |
5
| |
1991-06-12
|
1990-10-31
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |