APP下载

基于VxWorks的Compact PCI总线中断机制研究

2015-10-14席志红

电子科技 2015年4期
关键词:PC机驱动程序寄存器

杨 帅,席志红

(哈尔滨工程大学 信息与通信工程学院,黑龙江 哈尔滨 150001)

基于VxWorks的Compact PCI总线中断机制研究

杨 帅,席志红

(哈尔滨工程大学 信息与通信工程学院,黑龙江 哈尔滨 150001)

Compact PCI总线具有热插拔的特性,而使得CPU访问扩展设备的机制与非热插拔系统有较大不同,尤其是中断机制较为复杂,研发人员不仅需深入了解硬件中断结构,更需要掌握PCI设备驱动程序及中断服务的实现方法。本文针对中断的软硬件内容进行了分析研究,以设计的Compact PCI设备卡为例,讨论了利用中断方式和CPU运行的VxWorks操作系统进行数据通信的程序设计要点,从底层全面分析了Compact PCI中断处理机制,旨在为开发人员提供理论指导和编程思想。

Compact PCI;中断;VxWorks;PCI9030

Compact PCI是PICMG提出的一种基于PICMG2.0规范的总线接口标准,在完全兼容PCI总线的基础上,Compact PCI总线采用欧卡标准,使其结构更加坚固,且具有较好的散热性和抗震性。连接方式由传统的IPC金手指改为2 mm密度真空连接器,也使气密性和防腐性进一步提高。Compact PCI总线更加优越的性能使其广泛应用于航空、医疗和科学研究等领域。

然而,随着Compact PCI总线性能的不断提高,其结构变得更加复杂,接口电路要求更高,这使得开发人员的研究也面临着更多问题,尤其是Compact PCI中断的处理,其是CPU与外设完成数据交互的重要手段,中断处理的好坏,直接影响着系统性能。文中针对Compact PCI中断机制进行了分析研究,以VxWorks操作系统和X86架构PC机为软硬件平台,选用PLX公司生产的PCI9030作为Compact PCI板卡总线接口芯片,从PCI中断硬件组成结构到软件的中断服务程序给予了详细分析,实验分析验证了研究成果的正确性。

1 Compact PCI中断系统流程

Compact PCI中断流程图如图1所示[1]。

图1 Compact PCI中断流程图

中断可分为以下4个步骤:(1)本地事件发生,触发中断引脚LINTi1,通过设置PCI9030内部中断控制状态寄存器使其有效,中断输出引脚INTA#有效,产生PCI中断。(2)上电时,POST(Power On Self Test)软件进行初始化,并根据系统资源使用情况对PCI设备进行配置,包括分配I/O地址、存储器地址、分配中断并将中断线与中断控制器未使用的一个IRQi引脚相连,在PCI9030配置空间写入配置信息。(3)POST软件对PCI设备进行配置后,载入VxWorks操作系统,由VxWorks进行接后续控制。(4)若CPU运行的VxWorks开中断,则响应中断,进入中断服务程序执行相应处理工作。通过了解和掌握以下3方面内容,可实现系统中断:1)了解X86架构PC机的PCI中断结构。2)掌握PCI9030配置空间及其中断机制。3)掌握VxWorks下PCI设备驱动程序及其中断程序的设计要点。

2 X86架构PC机PCI中断结构

PCI中断结构如图2所示[2]。

图2 PCI中断结构

由图可知PCI中断结构由可编程中断路由器和中断控制器两部分构成,PCI总线上有INTA#~INTD#4个中断请求引脚,对于单功能PCI设备仅可使用INTA#,而多功能PCI设备则没有限制要求。对于X86架构的PC机,主板研发人员通过可编程路由器将PCI插槽的各个中断引脚与两个8259A组成的中断控制器中(IRQ0~IRQ15)未被使用的引脚相连[3]。系统上电后,POST软件进行初始化和系统配置,写中断路由信息到中断线寄存器,在PCI设备配置空间中,该寄存器的值表明PCI4个中断引脚与中断控制器哪个引脚相连。当9030的LINTi1触发中断后,9030的INTA#向中断控制器提出中断请求,通过相应的判断与处理,向运行VxWorks的CPU提出中断请求。CPU接收中断请求,响应中断后进入中断服务程序执行后续处理工作。

3 PCI9030的配置访问

3.1 PCI设备配置空间

每个PCI设备都对应一个配置空间,配置空间包含的头标区前16 Byte对于所有PCI设备的定义均相同,后48 Byte的定义根据不同功能设备布局也不同[4-5],配置空间头标区如图3所示。

图3 配置空间头标区定义

PCI设备的硬件及其初始化软件信息的交换通过配置空间得以完成。PCI设备通过它可向软件反映其状态和要求,而软件则可通过其对PCI设备进行配置、控制等操作。上电时,POST软件进行初始化和系统配置,查看PC机中是否安装PCI设备以及设备所需空间等信息,然后根据系统资源的实际情况为其自动分配。当PC机运行的VxWorks系统要访问设备的存储器空间和I/O空间时,只需通过相应的基地址加上偏移地址即可实现访问。

3.2 PCI9030的配置空间

PCI9030配置空间的头标区与图3所示相同,中断线寄存器在偏移地址0x3C处,系统自动配置其值,以表示9030的INTA#和中断控制器的哪个输入引脚相连,通过查询该寄存器可获得中断号[5]。中断引脚寄存器在偏移地址0x3D处,其值表明使用PCI设备的哪个中断引脚,文中9030为单功能设备,仅使用INTA#,故其值为1时,初始化软件才会将INTA#引接到系统中断控制器的某个IRQi上,INTB#~INTD#对应值为2、3、4。

PCI9030还有用于对自身进行配置和管理的本地配置空间。如图3所示,通过获取本地配置寄存器映射到存储空间的基地址,加上偏移地址即可实现对9030本地配置寄存器相应位置进行读写。如本地配置空间中偏移地址0x4C处为中断控制/状态寄存器INTCSR,通过配置INTCSR才可使能9030中断。

3.3 PCI9030中断机制

PCI9030的INTCSR格式如图4所示,其中13~31位保留位,位2和位5为只读位,其余位均可读写[6]。

图4 INTCSR格式

位0/3:置1使能LINTi1/2中断,否则禁止LINTi1/2中断;

位1/4:设置LINT1/2电平触发方式,置0低电平触发,否则高电平触发;

位2/5:只读位,“1”表示中断源LINT1/2有效,否则无效;

位6:置1使能PCI中断,否则禁止中断;

位7:置1产生软中断;

位8/9:置0表示电平触发,否则上升沿触发;

位10/11:置1清除LINT1/2边沿触发方式产生的中断;

位12:置1使能ISA模式。

由以上可知,为产生PCI中断,除了配置中断源LINTi1引脚有效外,还需使能PCI中断,这些均要通过VxWorks程序的软件部分实现。

4 VxWorks下中断服务实现

首先在Wind River Workbench 3.0软件环境下编写PCI设备驱动程序,然后在VxWorks操作系统下通过PCI设备驱动程序访问硬件资源,其中包括PCI中断的访问及处理。

驱动程序包括初始化、接口函数和中断服务程序ISR这3部分。初始化主要完成硬件初始化,为硬件分配所需系统资源。接口函数主要根据设备需求,添加注册设备的创建、删除、读写、打开、控制函数[7-8]。中断服务程序主要是响应外部中断,为保证VxWorks操作系统的实时性,中断处理操作应该在最短时间内完成。在ISR中不能调用引起系统阻塞的函数,如semTake()或I/O操作函数。

获得PCI设备的厂商号和设备号是访问该设备的前提,文中选用可在Windows XP平台下运行的编写驱动程序的WinDriver软件获取,可直观地看到PCI设备的厂商号为0x10b5和设备号为0x30c1。通过VxWorks提供的pciFindDevice()函数能找到指定设备并获取设备相关信息。在X86架构下的PC机,BIOS可自动配置内存基地址和I/O基地址,通过调用pciConfigInLong()读设备基地址寄存器,进行存储器空间映射。通过调用pciConfigInByte()得到设备中断号[9-10]。文中PCI设备没有要访问的I/O空间,所以没有涉及到I/O空间的映射和操作。

通过写入9030中INTCSR的值,使能PCI中断以及使能LINTi1中断输入,设置该引脚为电平触发,低电平有效。

图5为PCI中断服务实现流程图,在正确完成以上操作后,整个系统的PCI中断得以正确运行。

图5 PCI中断服务实现流程图

5 实验部分

如图6所示,在PC机运行的Windows XP系统下通过WinDriver软件查看PCI设备的厂商号0x10B5、设备号0x30C1、系统分配的中断号0xA、中断线寄存器的值0x1、PCI基地址0起始地址为0xFE9FFC00和PCI基地址2起始地址为0xFE9FC000。

图6 PCI设备配置信息

VxWorks操作系统运行时显示的中断提示信息如图7所示。

图7 VxWorks运行时中断提示信息

图中提示信息“the CPCI Board is detected”用于表示VxWorks发现板卡并初始化完成。BaseAddress[0]为0xfe9ffc00、BaseAddress[2]为0xfe9fc000、“interrupt num is 0xa”即中断号为0xa,这与图6获取的信息完全符合。demo函数用于注册添加接口函数和中断服务函数ISR,“succeed in connecting to the ISR”表示ISR添加完成。“interrupt:acknowledging interrupt”和“interrupt:semGive(semint_id)”为在中断服务函数中通过logMsg函数打印的提示信息,其中两次出现的“interrupt:”为VxWorks系统中断提供的字符,而并非直接输入的提示符。以上实验证明,整个中断系统实现正确。

6 结束语

文中从X86架构PC机硬件和VxWorks软件相结合的角度分析了基于Compact PCI总线的中断处理机制,给出了VxWorks下中断处理程序的编程要点,且通过实验部分验证了设计的正确性。

[1] 马鸣锦,赵秋霞,曾光裕.高性能个人计算机硬件结构及接口[M].北京:国防工业出版社,2001.

[2] 胡刚,石亚伟.PCI的中断处理技术[J].计算机 自动测量与控制,2001,9(6):55-56.

[3] 周启平,张扬.VxWorks下设备驱动程序及 BSP开发指南[M].北京:中国电力出版社,2004.

[4] 李贵山,陈金鹏.PCI局部总线及其应[M].西安:西安电子科技大学出版社,2003.

[5] 卞红雨,曹明明,桑恩方.VxWorks下PCI总线设备驱动程序设计[J].声学与电子工程,2005(2):42-44.

[6] PLX Technology,Inc.PCI9030 data book version1.4[EB/OL].(2002-05)[2013-06-11]http://www.plxtech.com.

[7] 陈智育,温彦军,陈琪.VxWorks程序开发实践[M].北京:人民邮电出版社,2004.

[8] 程敬原.VxWorks软件开发项目实例完全解析[M].北京:中国电力出版社,2005.

[9] 周启平,张杨.VxWorks程序员速查手册[M].北京:机械工业出版社,2005.

[10]张杨,于银涛.VxWorks内核、设备驱动与BSP开发详解[M].北京:人民邮电出版社,2009.

Research on the VxWorks-based Compact PCI Interruption Mechanism

YANG Shuai,XI Zhihong

(School of Information and Communication Engineering,Harbin Engineering University,Harbin 150001,China)

The compact PCI is a type of standard computer bus with the characteristics of hot-plugging.This result in the fact that the CPU accesses the extend device in a different way from the non-hot-plugging system,especially that the mechanism of interruption is very complex.Researchers not only need to understand the hardware interruption structure well,but also master the drivers of the PCI device and the implementation of the interruption service.This article analyzes both the software and hardware of interruption,and takes Compact PCI board as an example in the discussion of the programming essentials of communicating information with the CPU which runs VxWorks via interruption,the purpose of which is to have a thorough understanding of the Compact PCI-based interruption mechanism,and to provide theoretical guidance and programming ideas for developers.

Compact PCI;interrupt;VxWorks;PCI9030

2014- 08- 31

杨帅(1988—),男,硕士研究生。研究方向:信息系统与网络通信技术。E-mail:ys_0206@163.com。席志红(1965—),女,教授,博士生导师。研究方向:图像处理与应用,视觉目标探测与识别,信号检测与估计,DSP和ARM嵌入式系统开发等。

10.16180/j.cnki.issn1007-7820.2015.04.036

TP336;TN91

A

1007-7820(2015)04-135-04

猜你喜欢

PC机驱动程序寄存器
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
阻止Windows Update更新驱动程序
计算机硬件设备驱动程序分析
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
VC.NET下实现dsPIC单片机与PC机的通信
排除OLT设备登录故障
VIVID3彩色超声仪结构原理及维修
高速数模转换器AD9779/AD9788的应用
一种可重构线性反馈移位寄存器设计