首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于PCI总线的中断处理机制

基于PCI总线的中断处理机制

由于PCI总线协议较为复杂,因此在开发PCI扩展卡时常采用专用的PCI接口芯片。常见的PCI接口芯片有AMCC公司的S59XX系列和PLX公司的PLX905X系列,其中PLX9052(文中称为9052)使用广泛。
    在应用开发中,常常使用中断作为CPU和外设间交换数据的方式。但由于PCI总线具有即插即用特性,即PCI设备的存储器空间、I/O空间以及中断等资源都是自动配置的,使得CPU访问扩展卡的机制与非即插即用系统有较大的不同,尤其是中断机制比较复杂。
    基于9052接口芯片设计的PCI扩展卡若以硬件中断方式和CPU进行数据交换,则其过程可概括为以下四个步骤,参见图1。
① 若连接到9052本地中断输入引脚LINTi[2:1]的外部中断源有效,且9052内部中断使能,则9052的中断输出信号INTA#有效,从而产生PCI中断请求。
② 上电时,初始化软件根据资源使用情况已自动将PCI中断引接到系统中断控制器的某一个中断引脚(IRQi)上,并将该信息写入了9052的配置空间中。用户可通过其配置空间来获取该配置信息。
③ 若IRQi上的中断请求未被屏蔽且级别足够高,则该中断可以通过系统中断控制器向CPU提交请求。
④ 若CPU当前开中断,则响应中断,进入中断服务例程进行数据交换。
    因此,用户若要实现PCI扩展卡的中断功能,则不仅需了解高性能PC机的中断结构,还需了解PCI接口芯片的配置空间及中断机制。本文首先介绍高性能PC 机的中断结构、9052的配置空间和中断机制,然后给出以中断方式实现CPU和PCI扩展卡间数据交换的程序设计要点。
2  PC机的中断结构
    芯片组是主板的灵魂。有些主板的芯片组由北桥和南桥组成。高性能的南桥芯片除涵盖常规南桥功能外,还具有为微机系统服务的I/O接口,如中断控制器、 DMA控制器等。为此,本文也称南桥为SIO(System I/O)。不同南桥芯片其集成的中断控制逻辑复杂程度不同、功能也有所扩展,但为保持兼容性,其最低两级的中断控制器仍与原PC/AT微机一致。

2.1 SIO中断控制器
    图1所示的"系统中断控制器"即是集成于SIO内部进行中断管理的I/O接口,文中称为SIO中断控制器,其最低两级的结构见图2。每片82C59支持8 个中断源,主片的IR2与从片的INTR相连,两片共支持15个可屏蔽中断源,其中,主片的输入源编号为IRQ0~IRQ7,从片的输入源编号为 IRQ8~IRQ15。

    外部中断源向82C59提出请求后,经片内的判优逻辑判优,若该请求具有当前最优的中断级别,该片就会通过其INTR引脚向上提中断请求。CPU收到请求且当前开中断,则响应中断,进入用户的中断服务例程。
    集成在SIO内的两个82C59仍具有原82C59的所有寄存器,各寄存器的功能及格式均保持不变,但SIO中断控制器中82C59的许多可选功能已固定,不能通过程序改写。
2.2 PCI中断如何纳入系统的中断结构
    PCI总线上有4条中断请求信号线:INTA#、INTB#、INTC#和INTD#,均为漏极开路且低电平有效(相应的IRQi应编程为电平触发方式)。单功能PCI设备只能使用一条中断线且为INTA#,多功能PCI设备可以按PCI规范的要求使用其它中断线。SIO可将4个PCI中断输入到 SIO中,并在上电初始化时根据资源使用情况分别将它们引接到合适的中断源上。这样,PCI中断就可以通过系统的可屏蔽中断请求向CPU提出。

3  PLX9052的配置空间和中断机制

3.1 PCI设备的配置空间[1]
    每个PCI设备都有一个配置空间,其每一项称为配置寄存器,每个PCI设备的配置空间都包括头标区。头标区中前16个字节的定义对所有PCI设备都是相同的,位于0Eh处的配置寄存器给出了头标类型,01h 用于主桥,00h 用于其它PCI设备。00h类型头标区的布局见图3。

    配置空间是PCI设备的硬件与PCI设备的初始化软件及错误处理软件之间的信息交换区。有了这个信息交换区,PCI设备可以向软件反映其状态和要求,软件可以对PCI设备进行辩识、配置和控制。上电时初始化软件首先读出配置空间中的相关内容,以确定是否已安装PCI扩展卡以及扩展卡所需的I/O空间和 MEM空间等信息,然后根据系统的资源状况自动为其配置I/O空间和MEM空间的基地址、扩展卡占用的中断号等参数。当CPU要访问扩展卡上的存储器地址或I/O端口地址时,只需从配置空间中获取相应的基地址再加上地址偏移量即可。

3.2 PLX9052的配置空间
    由于9052头标类型字段已硬编码为0,则其头标区布局与图3所示同。头标区偏移3Ch处为中断线寄存器,其值由系统上电时自动配置,表明9052的中断引脚INTA#连到了系统中断控制器的哪个输入上。通过查询该寄存器,即可了解系统分配给PCI扩展卡的中断号。偏移3Dh处为中断引脚寄存器,其值表明 PCI设备使用了哪一个中断引脚,对应关系为:1-INTA#、2-INTB#、3-INTC#、4- INTD#。由于9052是单功能设备,所以它只支持INTA#一个中断,只有当该寄存器的值设置为1时,初始化软件才会将INTA#引接到系统中断控制器的某个IRQi上。
    9052还有一个本地配置空间,用于对9052进行配置和管理。9052头标区中的基地址寄存器0/1已固定用于以存储器或I/O方式映射9052的本地配置空间。PCI主设备(如CPU)可通过基地址寄存器0/1中的基地址加上本地配置寄存器的偏移来读取或修改相应的本地配置寄存器。
    本地配置空间中偏移地址为4Ch的寄存器为中断控制/状态寄存器INTCSR,用于控制9052的中断和提供相关状态信息。

3.3 PLX9052的中断机制

    9052的INTCSR格式如图4所示,除保留位和LINTi状态位为只读外,其余位均为读/写位。
· LINTi使能位:"1"允许LINTi中断,否则禁止。
· LINTi有效电平位:当采用电平触发方式时,该位为"1"表示本地中断输入LINTi高电平有效,否则低电平有效。
· LINTi状态位:"1"表示中断源LINTi有效,否则无效。
· PCI中断使能位:"1"允许9052产生PCI中断,否则禁止。
· 软件中断位:当PCI中断使能位为"1"时,对本位写"1"将产生PCI中断。
· LINTi触发方式位:"1"表示上升沿触发,"0"表示电平触发。缺省为电平触发方式。
· LINTi边沿触发中断清除位:当LINTi以边沿触发方式产生PCI中断时,可通过对本位写"1"予以清除。
· ISA模式使能位(只能通过串行E2PROM加载):置"1"允许ISA模式,否则禁止。
    由上可知, 9052提供了两种类型的中断源:①硬中断源。本地中断输入引脚LINTi[2:1]有效且未被禁止时产生;②软中断源。通过设置INTCSR中的软件中断位产生。只有在任意一个中断源有效且PCI中断使能的条件下,才能产生PCI中断。
继承事业,薪火相传
返回列表