关 闭

新闻中心

EEPW首页>工控自动化>设计应用> PCI接口扩展卡的快速开发方案

PCI接口扩展卡的快速开发方案

作者: 时间:2009-04-09 来源:网络 收藏

  Local Address Space 0 Local Base Address(remap):设为0000 0001,表示将总线上的地址转换为局部总线地址0x0000~0x001F。
  Chip Select 0 Base Address:设为0000 0011,表示在局部总线地址为0x0000~0x001F时,局部总线的片选信号有效,用于SJA1000的片选。
  Interrupt Control/Status: 设为0000 0041, 表示中断使能,响应LINTi1上的中断申请。
  CNTRL: 设为0060 0C80,表示USER0、USER1引脚用于输入,USER2 、USER3引脚用于输出,初始值分别为0、1,数据传输等待超时长度为12个时钟周期。
  根据标准和PLX9052的说明文档,PCI连接器上所有的VCC、Vi/o 5V电源连接到一起,所有的GND端连接到一起,在尽可能靠近PLX9052电源引脚的地方放置高频去耦电容。PCI总线的时钟频率为33MHz,不恰当的布线会导致信号线之间的延时关系混乱,因此PCI协议对布线做了严格的规定,要求主时钟PCI_CLK线的长度为2.5英寸,误差应小于0.1英寸,其它引线短于1.5英寸,推荐使用四层板。设计中可以参考市面上的声卡和网卡布线实例,如考虑成本等因素,也可只使用两层板,双面覆铜接地。经实践验证该卡能够稳定工作。
3 PCI卡驱动程序及软件设计
  在DOS环境下,操作系统对应用程序开放所有权限,开发人员可以使用汇编指令、BIOS函数等任何方法操作硬件资源,此处不再赘述。
  在Windows系统中,为避免因不当的硬件操作而导致系统崩溃,应用程序不再具有直接的硬件访问权,如果要操作硬件,必须借助设备驱动程序。现有的Windows系列操作系统产品众多,所使用的设备驱动程序结构也有所不同。其中,VxD型驱动程序最古老,适用于Win3.x、Win95、Win98等操作系统;WinNT型驱动程序只适用于WinNT4.x以下版本的操作系统;WDM型驱动程序是WinNT型驱动程序的升级版,适用于Win98、Win2000、WinXP等操作系统,是今后几年的应用主流。
  Microsoft为设备驱动程序的编写提供了一些工具,如Windows Device Drivers Kit(简称DDK),它包含了驱动开发所需的各种类型的定义和内核函数库。如果直接使用DDK,开发者需要了解整个系统体系结构和WDM规范,熟谙上千个DDK函数的功能和使用场合。用这种方法编制的驱动程序有很高的运行效率,但是开发难度大,测试流程繁琐,一般用于有一定研发和生产需求的单位。
  为减轻开发者的负担,很多第三方厂商提供了辅助软件。如Numega公司的DriverStudio软件,它将DDK函数按照逻辑功能组织,把很多常用功能封装成类,建立了一个基于C++语言的面向对象的编程环境。开发者面对的不再是上千个复杂凌乱的DDK函数,而是逻辑清晰的类库,大大降低了开发难度和开发周期,获得了广泛的应用。
  对于速度要求不高、实时性要求不严的场合, Jungo公司的Windriver[3]软件提供了一种更加快速简洁的解决。它内置一个名为Wdpnp.sys的通用核心态WDM驱动程序,将一些基本的操作如存储器读写、I/O端口读写、中断服务、DMA操作等进行了封装,开发者只需编写一个外壳程序来调用这个驱动程序,就可以对硬件设备操作,如图3所示,图中灰色的部分表示Windriver已经提供。

本文引用地址://m.amcfsurvey.com/article/202702.htm

Windriver提供的驱动程序经过充分优化,功能完备,在通用性和高效性之间做了很好的平衡。另外,Windriver专门为PLX公司的芯片开发了软件包,因此非常适合在本中使用。
  Windriver启动后,会自行发现计算机上的所有即插即用设备,如图4所示。其中“PCI:PLX PCI 9050 Target PCI Interface Chip”即指本卡。点击“Generate.INF file'按钮可以生成INF文件,系统

用它提供的信息安装Wdpnp.sys。

为方便在用户态驱动代码中操作SJA1000 和PLX9052的寄存器,可以使用Windriver为已映射的存储器地址命名,如图5所示,图中CAN_IR表示中断寄存器,CAN_CR表示控制寄存器,等等。

Windriver的核心态驱动程序内置了中断服务函数,它的作用有两个:一是发送硬件清中断指令,用户在初始化阶段告知Windriver如何清中断(一般是对板卡上的某个寄存器进行读写),由核心驱动程序自动完成。二是通知应用程序有中断到来,回调用户程序的中断响应函数。
  用Windriver可以生成一个基于C语言的应用程序函数库,用户通过这些库函数控制内核驱动程序。现以笔者编制的程序为例进行介绍,工程文件名取为CAN01。
  在初始化阶段,先使用 WD_Open()打开驱动程序,再用CAN01_Open()设置驱动程序工作参数,生成一个CAN01实例,最后用CAN01_IntEnable()设置用户态中断响应函数。
  在退出应用程序前,先清除所有未处理的中断,释放分配的内存,再用CAN01_Close()删除CAN01,最后使用WD_Close()关闭驱动程序。
  对SJA1000和PLX9052的寄存器的操作通过两个函数完成,可以实现CAN总线通信和数字量I/O等功能:
  读操作CAN01_ReadByte(),
  写操作CAN01_WriteByte()。
  本文根据笔者的实际经验,介绍了开发PCI总线的软硬件流程,给出了一套快速可行的解决。该方案电路简单、调试方便、编程高效、可以使技术人员迅速掌握PCI总线的开发技术,从而设计符合个性要求的多功能

存储器相关文章:存储器原理


晶振相关文章:晶振原理
上拉电阻相关文章:上拉电阻原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭