基于PCI总线的CAN卡的设计与实现
时间:09-23
来源:与非网
点击:
由于PCI设备在计算机中的硬件资源是系统动态分配的,因此在设计出基本的硬件框架后,要进行PCI配置设计。CAN卡的硬件资源为映射SJA1000内部寄存器的内存映射空间和一个中断源。PCI9052提供5个局部地址空间,可以选用其中的一个作为SJA1000的地址空间,分配32个8位地址。同时设置相应的初始化,PCI配置寄存器中的寄存器PCIBAR2设置为0XFFFFFFE0,向系统请求分配内存的数量为32,类型为不可预读,其它寄存器的值可设置为0。设置局部地址空间的范围为0X00000000~0X00000020。PCI9052提供2个局部中断源,利用LINTi1即可,注意的是:LINTi1信号线没有驱动能力,SJA1000的INT引脚也没有驱动能力,因此该信号线必须加上拉电阻,否则该信号线的电平不确定,工作肯定不正常。SJA1000提供电平触发中断信号,因此PCI9052的中断触发模式设置为电平触发。利用PCI9052的局部设备片选CS0#作为SJA1000的片选信号。CS0#片选信号的起始地址和地址范围由CS0 Base Address寄存器设置,值为0X00000002。另外,PCI9052的LRDYi#信号为局部总线数据准备信号,SJA1000的寄存器地址映射成地址,数据传输不存在延迟等待,因此LRDYi#引脚可接地,表示SJA1000的寄存器总是立即可读写。PCI9052寄存器的初始值由串行EEPROM提供,在PCI9052加电后读取。EEPROM必须采用支持连读功能的芯片,本设计采用Microchip的93LC46B。用PLX公司提供的开发工具PlxMon可对93LC46B进行读写。
PCI9052的硬件调试可采用PlxMon。利用它可以对PCI设备的配置资源进行检验。利用PLX提供的SDK,可以对PCI9052的局部寄存器、局部总线及EEPROM进行读写,这样可以调试硬件。借助开发工具,不必开发PCI设备的调试软件,可节省很多时间。同时,SDK也为驱动程序的开发提供了程序框架,加快了开发进度。
2 软件设计
软件设计包括驱动程序的设计和COM组件程序设计。
由于PCI设备的中断、I/O端口、映射内存等资源都是动态分配的,必须编写驱动程序管理硬件,才能供用户编程使用。为了通用性和兼容性,CAN卡驱动程序的开发采用支持Windows XP、Windows2000和Windows98的WDM驱动程序。开发工具采用Visual C++6.0和Win2000 DDK。由于CAN卡上没有微控制器,因此对CAN总线端口的所有操作都是由驱动程序来完成的。这不仅可以由计算机来实现复杂的功能,例如,错误检测、断点续传等,同时节省了硬件,而且有利于CAN卡的升级--只要更换驱动程序即可。驱动程序的功能主要是配置SJA1000的CAN接口、收发CAN总线上的数据、对CAN总线进行实时监测、接收用户程序的收发命令。收发数据和CAN总线错误均采用中断处理,驱动程序可以快速响应,通过事件(Event)内核对象直接通知给用户程序。由于WDM驱动程序运行在系统的内核态,编写非常复杂,限于篇幅,仅给出软件的框图(见图2)。
CAN卡的电路框图如图1所示。
根据以上的设计,开发了名为Can1000的CAN卡。经使用证明,该卡设计简单明了、性能较高、成本低廉、驱动程序和ActiveX控件使用方便,达到了设计和用户的要求。
- PCI9656型64位PCI总线接口电路及其应用(01-18)
- PCI9054芯片接口设计中若干问题的深入研究(01-18)
- TM1300 PCI-XIO口的UART和USB接口设计(01-17)
- 什么是PCI总线?其接口芯片的应用(01-26)
- PCI总线数据输出板驱动程序的开发(05-16)
- 基于PCI9054和LTC4240的CPCI总线接口设计(05-13)