a.DWORD PCI429_LibInit(void),该函数是对WinDriver的WDC_DriverOpen()函数进行的重封装,用于对WDC库的初始化。
b. WDC_DEVICE_HANDLE Pci429_FindAndOpen(DWORD dwVendorId, DWORD dwDeviceId),该函数是对WinDriver的WDC_PciScanDevices()、WDC_PciGetDeviceInfo()及WDC_PciDeviceOpen()函数进行的重封装,用于寻找并打开测试卡;在WDC_PciGetDeviceInfo()函数中返回的测试卡信息为结构体类型,在LABVIEW中不直接支持结构体,所以很难处理,经过重封装,使结构体只限于Pci429_FindAndOpen()函数内,LABVIEW外部调用时只需输入数值型变量,返回值为数值型句柄,可以很好解决不支持结构体类型问题。 c. void Pci429_ReadAddr(WDC_DEVICE_HANDLE hDev, DWORD dwAddrSpace, DWORD dwOffset, DWORD u32Data, BYTE mode),该函数是对WinDriver的WDC_ReadAddr32()函数进行的重封装,完成读数据。
d. void Pci429_WriteAddr(WDC_DEVICE_HANDLE hDev, DWORD dwAddrSpace, DWORD dwOffset, DWORD u32Data, BYTE mode),该函数是对WinDriver的WDC_WriteAddr32()函数进行的重封装,完成写数据。
e. DWORD PCI429_LibUninit(void),该函数是对WinDriver的WDC_DriverClose()函数进行的重封装,用以关闭测试卡句柄,释放资源。
在用户应用程序中对上述函数进行合理调用,即可完成对测试卡的驱动及数据的读写。 4 用户应用程序设计用户应用程序采用NI公司推出的虚拟仪器开发平台LabView设计,该软件采用图形化编程语言—G语言,以其直观简便的编程方式为用户快捷地构筑自己在实际应用中所需要的应用程序。LabVIEW具有开放的环境,能和第三方软件轻松连接。通过在LabVIEW中利用Call Library Function节点可以较容易地访问动态链接库。
在本设计中要求应用程序以20Hz频率发送用户的命令及工程参数信息,并接收航空电子设备的状态信息。在调用时,按PCI429_LibInit()、Pci429_FindAndOpen()、Pci429_ReadAddr()/Pci429_WriteAddr()、PCI429_LibUninit()顺序调用,应用程序主代码如图2所示。 图2 应用程序主代码 5 结束语 使用XILINX公司的片上逻辑分析仪Chipscope pro9.1抓取的信号波形如图3所示。该波形为写HI-8582发送寄存器波形,采样时钟为33MHz,从图中可以看出满足HI-8582的时序要求,在实际测试中也正确地完成了ARINC429数据的收发。
本设计在笔者参加的航空电子产品中进行了实测,完全能够满足工程使用要求。整个设计结构紧凑、成本低、扩展能力强、开发周期短,如有必要还可以进行多路扩展。参考文献:
[1] 李贵山,戚德虎.PCI局部总线开发者指南[M].西安:西安电子科技大学出版社,1997
[2] Spartan-II 2.5V FPGA Family:Complete Data Sheet[Z].XILINX公司,2004
[3] 林生,金京林等译.数字设计原理与实践[M].北京:机械工业出版社,2005
[4] 郑丽娜,翟林培.RS-232/ARINC429接口转换电路设计[J].计算机测量与控制,2007
[5] 姬昕禹,马捷中.基于ARINC429总线接口板卡的驱动程序设计与实现[J].计算机工程与设计,2007
[6] 王梦玲,王思明.基于PCI-1713和LABVIEW的高速数据采集系统设计[J].微计算机信息,2006
[7] LabVIEW User Manual,National Instruments Corporation,2007[Z].NI公司,2008