1 概述
高性能PC机一般以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机的中断结构[1]
芯片组是主板的灵魂。有些主板的芯片组由北桥和南桥组成。高性能的南桥芯片除涵盖常规南桥功能外,还具有为微机系统服务的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的配置空间[2]
由于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的中断机制[2]
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中断。
4 中断处理流程及编程要点[3]
在Win9x环境下通常需要通过设备驱动程序来访问硬件资源,VtoolsD是常用的第三方VxD设备驱动程序开发工具。下面以VC++6.0为开发环境,结合VtoolsD工具及本文所讨论的中断机制来介绍中断处理程序的开发要点。
4.1 主程序编写要点
图5 中断处理主程序流程
在主程序中要完成中断的初始化工作,其流程见图5。在编程中需注意下述几点:
① 获取配置资源
在系统初始化期间若发现新设备,则Win9x会发出PnP_NEW _DEVNODE消息,此时VxD就可以利用CONFIGMG_Register_Device_Driver和CONFIGMG_Get_Alloc_Log_Conf等函数来获取PCI设备的配置资源,并将配置信息放入一个类型为CMCONFIG的结构config中。
② 设置中断向量
从config中可获得系统为9052配置的中断号IRQ,据之保存原中断向量,然后设置中断向量使其指向用户中断服务例程,以便CPU响应中断时自动进入用户的中断处理子程序。
VtoolsD提供了VsharedHardwareInt类来实现硬件中断处理,用户从中派生出Mic_IOINT类,其中成员函数OnSharedHardwareInt是用户的中断处理子程序。
③ 允许9052中断
允许9052产生中断可通过编程9052的INTCSR寄存器来实现。假设应用系统利用9052 LINTi2的上升沿来产生中断,则代码如下:
④ 开放中断屏蔽寄存器的相应位
外部中断事件未受82C59的屏蔽且有足够高的优先级时,才能向CPU发出中断请求,所以在CPU开中断之前必须去除82C59对应中断的屏蔽。这可用VSharedHardwareInt类中的physicalUnmask()函数实现。
4.2 子程序编写要点
中断处理子程序的流程如图6所示。在编写中断处理子程序时,要注意下述两点:
① 清9052中断
因PCI中断是电平检测的,则当它得到响应后应及时撤消其请求,以免引起不应该有的第二次中断,这可通过对INTCS的位11写1来实现。代码如下:
② 清PC机相应中断标志
中断返回前,或进入中断子程序后允许动态改变中断的优先级,则要向82C59发中断结束命令以清除PC机的相应中断标志位。若中断来自主片,则只对主片发结束命令,若来自从片,则要向主片和从片分别发结束命令。这可用VSharedHardwareInt类中的sendPhysicalEOI()函数实现。
5 结束语
本文从计算机硬件和软件相结合的角度深入系统地介绍了基于PCI总线的中断处理机制,并给出了中断处理程序的开发要点,对计算机硬件或软件开发人员可提供较大帮助。
参考文献
1马鸣锦,赵秋霞,曾光裕.高性能个人计算机硬件结构及接口[M].北京:国防工业出版社,2001.
2PLX Technology,Inc. PCI9052 Data Book Version 2.0[EB/OL].http://www.plxtech.com. September 2001.
3 [美]Jon Bates,Tim Tompkins著,石祥生译. Visual C++6使用指南[M].北京:电子工业出版社,1999.
分享到:
相关推荐
本文针对基于PCI总线的CAN(Controller Area Network)和RS485串行通信接口卡,详细讨论了其WDM(Windows Driver Model)驱动程序的设计。 PCI总线是用于连接主板和外围设备的一种高性能总线标准,它支持即插即用...
PCI(Peripheral Component Interconnect)总线是计算机系统中一种重要的扩展总线标准,它由英特尔...通过学习这些知识,读者将能够理解PCI总线如何在计算机系统中运行,以及如何设计和优化基于PCI总线的硬件解决方案。
总的来说,USB和PCI总线设计涉及到计算机硬件、接口协议和数字逻辑等多个领域的知识,学习相关源代码不仅可以提升硬件设计能力,也能加深对计算机系统架构的理解。对于想要深入研究嵌入式系统、FPGA或ASIC设计的人来...
### 基于PCI总线数据通信卡WDM驱动程序设计 #### 摘要解析与核心知识点概览 在《计算机测量与控制》期刊2006年第14卷第2期发表的一篇文章中,司玉美等人探讨了基于PCI总线的数据通信卡在Windows 2000操作系统下的...
3. **中断产生器**:支持通过局部总线中断输入或通过写入中断寄存器来产生PCI总线中断信号。 4. **总线驱动器**:无需外部驱动器,PCI9052能直接驱动PCI总线和局部总线的控制、地址和数据信号。 5. **串行EEPROM...
为了更好地理解PCI9052的应用,以下是一个基于PCI9052开发PCI总线接口卡的具体实例: 假设需要设计一款用于工业控制领域的PCI总线接口卡,该接口卡需要连接到现有的VME总线上。此时,PCI9052将作为这两者之间的桥梁...
### 基于PCI总线的DVB_T数据接收卡的设计 #### 摘要与背景 本文介绍了一种基于PCI总线的DVB-T数据接收卡的设计方案,旨在接收符合MPEG-2标准的传输流(Transport Stream, TS)。该接收卡主要用于电视广播信号的...
PCI(Peripheral Component Interconnect)总线协议是计算机系统中一种重要的接口标准,它定义了处理器与...同时,通过学习这个协议,开发者和工程师可以更好地设计和优化基于PCI接口的硬件设备,提升系统整体性能。
【DSP中的基于PCI总线的DSP系统应用程序的更新】 在现代数字信号处理(DSP)系统中,为了提高灵活性和减少维护成本,系统升级和应用程序更新是必不可少的。传统的更新方式通常依赖于仿真器通过JTAG接口进行,但这既...
### 基于PCI总线数据通信卡WDM驱动程序设计 #### 一、引言 随着光电设备的发展,为了实现各个子系统与主控计算机之间的实时通信,开发专用的硬件设备变得至关重要。这些硬件设备通常需要具备高数据传输率、支持即...
综上所述,基于PCI总线的DSP运动控制卡的Windows驱动程序开发涉及到多方面的专业知识和技术应用,包括对PCI总线特性的理解、DSP芯片的选择与应用、WDM驱动程序模型的掌握以及高效通信机制的设计。通过合理的硬件选型...
【基于PCI总线的DSP数据运算平台设计】是一种利用高性能数字信号处理器(DSP)和PCI总线技术构建的高效数据处理系统。随着DSP技术的进步,它在多个领域,如语音处理、数字加密、图像处理和多路数据流复用等方面的...
4. **PCI总线中断机制**: 在传统的PCI总线中,中断机制主要依赖于INTx,每个设备通过一个单独的中断线向CPU发送中断请求。然而,这种方式在多设备系统中容易导致中断冲突和资源浪费。 5. **PCIE中断机制**: - **...
《基于PCI总线和DSP的交流调速系统的设计与实现》 随着科技的进步,交流调速系统在现代电气传动领域中的应用越来越广泛。本文重点探讨了一种基于PCI总线和数字信号处理器(DSP)的交流调速系统设计,旨在利用高级...
### 基于PCI总线的数据采集系统设计与实现 #### 概述 本文主要介绍了一种基于PCI总线的高速数据采集系统的实现方案。该系统利用AD6644作为核心的模数转换器(ADC)来实现高速采样,并结合IDT72V293作为外部缓存...
PCI总线标准协议详细阐述了这种接口的工作原理、结构设计以及通信机制,旨在提高系统性能并简化硬件集成。 PCI总线的主要特点包括以下几点: 1. **高速数据传输**:PCI总线提供了32位或64位的数据宽度,支持多种...
通过学习和理解PCI总线协议V2.3,开发者和硬件工程师可以更好地设计和优化基于PCI接口的硬件系统,提高系统的性能和稳定性。"pci23.pdf"文档很可能是这份规范的详细说明,包含了上述所有知识点的具体细节和技术要求...
综上所述,PCI局部总线开发者指南涵盖了从基础的PCI总线原理、设备操作,到高级的PCIe技术,是理解和开发基于PCI接口设备的宝贵资源。对于想要深入学习计算机硬件和系统扩展性的专业人士来说,这份指南是不可或缺的...
1. PCI总线协议:包括PCI的版本、数据宽度(如32位或64位)、时序规范、中断机制、配置空间等。 2. AHDL语言:学习AHDL的基本语法、数据类型、操作符、进程语句等,以便编写PCI接口逻辑。 3. FPGA设计流程:包括逻辑...