用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案工业自动化

PCI9052在多功能CAN适配卡中的应用研究

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 15:11:14
所以我们采用IO控制操作实现数据的传送,在驱动程序派遣例程中实现这些操作,在API函数中提供这些操作的接口,应用程序可使用标准Win32 API函数DeviceIoControl来数据读写,也可以采用DriverStudio向导工具产生的DeviceControl来操作,在这里我们将它集成到对应的API函数里,生成相应的静态库或者动态连接库的形式提供给应用程序。    定义了7个IO控制代码: 
IOCTL_HIL100_READ_IO_DATA(用于读I/O口数据) 
IOCTL_HIL100_READ_AD_DATA(用于读AD数据) 
IOCTL_HIL100_READ_DA_DATA (用于读DA数据) 
IOCTL_HIL100_READ_CAN_DATA(用于读CAN数据) 
IOCTL_HIL100_WRITE_IO_DATA(用于写I/O口数据) 
IOCTL_HIL100_WRITE_DA_DATA(用于写DA数据) 
IOCTL_HIL100_WRITE_CAN_DATA(用于写CAN数据) 
这些控制代码在驱动程序的DeviceControl(KIrp I)函数中调用,如下程序所示: 
NTSTATUS PCIDriverDevice::DeviceControl(KIrp I) 

    NTSTATUS status; 
switch (I.IoctlCode()) 
    { 
       ……………………………………… 
        case IOCTL_HIL100_READ_IO_DATA:  
            status = IOCTL_HIL100_READ_IO_DATA _Handler(I); 
        case IOCTL_HIL100_WRITE_IO_DATA: 
            status = IOCTL_HIL100_WRITE_IO_DATA _Handler(I);     
  case IOCTL_HIL100_WRITE_DA_DATA: 
           status = IOCTL_HIL100_WRITE_DA_DATA _Handler(I); 
        case IOCTL_HIL100_READ_AD_DATA: 
           status = IOCTL_HIL100_READ_AD_DATA _Handler(I); 
        default: 
        status = STATUS_INVALID_PARAMETER; 
        break; 
    } 
    …………………………. 
    }     www.qiqi8.cn 778论文在线
在该函数进行驱动中相应的数据处理与传递,包括从内存中读上层应用程序发送下来的数据或将AD、CAN等外设传递上来的数据送到上层应用程序。 
API函数主要提供了PCI卡的开关,A/D、D/A、I/O的读写函数,CAN的设置、读写,中断事件消息函数等。API函数与以上控制代码相关联,传递数据和控制参数。如下程序所示: 
bool WriteDataToIO(unsigned char data)    //写数据到IO口 

    …… 
    ULONG BytesReturned; 
    if (!DeviceIoControl(hHIL100, IOCTL_HIL100_WRITE_IO_DATA, &data, 1,  
        NULL, 0, &BytesReturned, NULL)) 
…… 

bool ReadDataFromIO(unsigned char *data) //从IO口读数据 

    …… 
    ULONG BytesReturned; 
    if (!DeviceIoControl(hHIL100, IOCTL_HIL100_READ_IO_DATA, &data, 1,  
        data, 1, &BytesReturned, NULL)) 
    …… 

bool WriteDataToDA(unsigned short control,unsigned short freq )//写数据到AD 

    …… 
    ULONG BytesReturned; 
    unsigned short pData[16]; 
    pData[0]=control; 
    pData=freq[0]; 
    pData=freq; 
    pData=freq; 
    pData =freq; 

     


    if (!DeviceIoControl(hHIL100, IOCTL_HIL100_WRITE_DA_DATA, pData, 10,  
        NULL, 0, &BytesReturned, NULL)) 
    …… 

bool ReadDataFromAD(unsigned short address,unsigned short data)  
{                                                               //从AD读数据 
    …… 
    ULONG BytesReturned; 
    if (!DeviceIoControl(hHIL100, IOCTL_HIL100_READ_AD_DATA,address,16,  
        &data,16, &BytesReturned, NULL)) 
    …… 

bool ReadDataFromDA (unsigned char address,unsigned short *data)//从DA读数据 

    …… 
    ULONG BytesReturned; 
    if (!DeviceIoControl(hHIL100, IOCTL_HIL100_READ_DA1_DATA,&address,1,  
        data, 2, &BytesReturned, NULL)) 
    …… 
}  www.qiqi8.cn 778论文在线
将这些接口函数生成动态链接库的形式,供上层应用程序调用。 
3   结束语 
由于PCI总线的高速特性,使其被广泛应用于高速数据采集系统和数据传输通信系统中,有效地解决了实时采集、实时传输和实时存储等问题。而PCI总线控制器专用芯片的出现则缩短了PCI总线硬件设备的开发周期,使得硬件设备的可靠性和稳定性都有了较大的提高。在开发过程中,尤其对于高速采样及实时严格的系统,我们实现了对该系统高效率的操作特性,该研究有效的解决了高速实时采集、实时传输和实时存储等的驱动问题。同时该PCI多功能CAN适配卡既实现了CAN总线通信功能,同时也实现了多路通道的数据采集和相应控制。 
参考文献: 
 PCI 9052 Data Book. PLX公司,2001 
 Winows2000 DDK Documents. 微软公司,2000 
 Chris Cant著,孙义等译.Windows WDM设备驱动程序开发指南.北京:机械工业出版社, 2000 
 Windows 2000/XP WDM设备驱动程序开发.北京:电子工业出版社,2003.4 
 邬明宽,CAN总线原理和应用系统设计.北京:北京航空航天大学出版社,1996

     

上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:26,125.00000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号