77范文网 - 专业文章范例文档资料分享平台

XPC环境下PCI 1711数据采集卡驱动编写研究

来源:网络收集 时间:2018-11-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

xPC环境下PCI-1711数据采集卡驱动编写方法研究

蔡君

(东南大学 自动化学院 南京210096)

摘要:利用实时仿真开发平台xPC Target进行实时控制系统开发,具有周期短、费用低、效率高的特点,但是很多数据采集板卡不被xPC环境支持,需要自己编写驱动程序。本文以PCI-1711数据采集卡为例,论述了在xPC环境下采用C MEX S函数编写数据采集卡驱动程序的方法和要点。该方法同样适用于其他不被xPC支持的板卡驱动的开发。 关键词:xPC Target;C MEX S函数;设备驱动程序;PCI-1711 中图分类号: TP311. 1 文献标识码:A

Research on Writing PCI-1711 Data Acquisition Board Driver Under xPC Target

Cai Jun

(Southeast University, School of Automation, Nanjing, 210096)

Abstract: xPC target, as a real-time simulation development environment, has the advantages of short period, low cost and high efficiency when used to develop real-time control systems, but it does not support many kinds of Data Acquisition Boards (DAQ). Their drivers must be developed by users. This paper discusses the methods and techniques of writing PCI-1711 DAQ driver by C MEX S

Function under xPC Target. These methods can be applied to write the driver programs of other DAQ which are not supported under xPC Target.

Keywords: xPC Target; C MEX S Function; device driver program; PCI-1711

1、引言 由于该板卡不被xPC环境支持,因此开发该

MATLAB是功能强大的数值计算和图板卡设备驱动成了首要的事情。 形处理软件,其RTW实时开发环境提供了2.1 驱动编写方法及要点 从系统设计到硬件实现的直接途径。xPC 要在xPC环境下编写设备驱动程序,用Target作为一个基于RTW的低端实时仿真户必须熟悉Simulink C-MEX S函数格式、和开发平台,具有周期短、费用低、效率高应用程序接口(API),以及板卡寄存器编程的特点,在工程实际中得到了越来越广的应信息。编写设备驱动程序的步骤如下: 用。 ① 编写C格式的S函数的驱动源代码。

xPC Target提供了支持超过150种标准② 通过MATLAB的mex实用程序将CI/O板的I/O驱动设备库,然而在实际的工代码编译成可执行的MEX函数。 程应用中,经常遇到xPC Target不支持板卡③ 使用目标语言编译器(Target 的情况,这就需要为板卡自行编制驱动程Language Compiler)内嵌化S函数(可选)。 序,然而目前这方面的研究还比较少。本文④ 对设备驱动模块进行封装,以生成以研华PCI-1711为例,介绍在xPC环境下自定义的用户界面。 编写数据采集卡驱动程序的方法和要点。 在以S函数的形式编写设备驱动程序2、研华 PCI-1711驱动的设计与实现 之前,必须首先了解以下要点:

我们以Feedback公司提供的Maglev ⑴要了解板卡的访问方式。 33-006系统为基础,构建了磁悬浮球实验平PCI接口的板卡有两种访问方式:一种台。该平台采用了研华公司的PCI-1711数是通过板卡的厂商ID和设备ID,另一种是通据采集卡。该卡是12位的低损耗多功能采过板卡的插槽号[2]。由于第一种方式更为方集卡,具有独特的电路设计和完善的数据采便,我们在编写PCI-1711驱动中采用第一种集与控制功能,支持即插即用,具有FIFO方法。例如使用:

PCIDeviceInfo pciinfo; 的高速缓存,可灵活设定输入类型和范围。

rl32eGetPCIInfo(0x13fe,0x1711,&pciinfo); 可以得到研华PCI-1711卡包括基地址在内的板卡信息。

⑵要清楚板卡的地址映像方式,是I/O映像还是内存映像。

以下是能够在S函数设备驱动中需要调用的头文件:

io_xpcimport.h (用于I/O端口和内存通道) pci_xpcimport.h (用于PCI通道)

如果板卡是I/O映像的,我们将使用io_xpcimport.h头文件中的以下函数: rl32eInpB,rl32eOutpB (字节读写,8位) rl32eInpW,rl32eOutpW (字读写,16位)

rl32eInpDW,rl32eOutpDW(双节读写,32位)

驱动程序通过对这些函数的调用来对板卡寄存器地址(通常是“基地址”+“偏移量”)进行数据读写。例如:

rl32eOutpB((unsigned short)(base_pci+2),0);

如果板卡是内存映像的,则还需要再调用头文件io_xpcimport.h下的函数:

r132eGetDevicePtr()来使在保护模式下的页表相应地进行更新,以避免地址错误[2]。

⑶要确定编写的是内嵌还是非内嵌的设备驱动。

内嵌是在应用程序中生成例程的显式代码,消除了调用过程的开销,提高了性能却大大增加了开发和维护的开销;非内嵌是基于例程的调用,编写灵活方便,移植性好,因而得到了广泛的使用,我们这里采用非内嵌的设备驱动。

⑷对一个I/O板卡,应当分别编写A/D驱动模块和D/A驱动模块。

2.2 C-MEX的S函数驱动源文件编写

S函数的设备驱动程序分为宏定义区、mdlCheckParameters、mdlInitializeSizes、mdlInitializeSampleTimes、mdlStart、mdlOutputs、mdlTerminate几部分,分别完成宏定义、参数合法性检查、初始化参数、初始化采样时间、初始化硬件、数据输入输出、硬件复位等功能。建议将MATLAB提供的S函数模板作为开发起点,该文件是:matlabroot/simulink/src/sfuntmpl_basic.c 2.2.1 宏定义区

(1)文件开头所必需的语句。 #define S_FUNCTION_LEVEL 2//调用级别2使用户可以利用S函数提供的全部功能 #define S_FUNCTION_NAME adadvpci1711 //定义函数对外接口的名称,该名称必须与该S函数源码文件的名字相同

#include \//此头文件对Simulink数据结构simstruc和相关的访问宏进行了定义

(2)条件编译函数。

#ifdef MATLAB_MEX_FILE //仿真环境 #include \#else //实时环境

#include #include \#include \#endif

(3)定义参数的数量和有关宏。

#define NUM_PARAMS (4) // 定义参数数目为4

#define CHANNEL_ARG

(ssGetSFcnParam(S,0))//通道数

#define RANGE_ARG (ssGetSFcnParam(S,1)) //输入范围

#define SAMPLE_TIME_PARAM (ssGetSFcnParam(S,2)) // 采样时间

#define BASE_ADDRESS_ARG (ssGetSFcnParam(S,3)) // 基地址 2.2.2 附加参数合法性检查

子函数mdlCheckParameters()完成对其输入输出附加参数进行合法性检查,检查项目包括参数的个数和格式、字符长度、行数列数等。

2.2.3 初始化参数

子函数mdlInitializeSizes()用于初始化Simstruct中的sizes结构,该结构保存了有关S函数模块必要的信息,包括输入、输出、状态的个数和另外的一些模块属性。如果某个值没有被指定,它的值将在程序执行时被初始化为0。下面是PCI-1711的A /D驱动程序的属性定义部分:

sssetnumconstates(S,0);//连续状态个数为0 sssetnumdisstates(S,0);//离散状态个数为0 ssSetNumSampleTimes(S,1);//采样时间个数为1,即所有通道使用相同的采样时间。

采样时间将在mdlInitializeSampleTimes()中进行设置

ssSetNumInputPorts(S,0);// A/D模块只有输出,因此设置输入端口数为0。

ssSetNumOutputPorts(S,(int_T)mxGetPr(CHANNEL_ARG)[0]);//设置输出端口数使之与对话框中设定的I/O通道数相同

for(i=0;i<(int_T)mxGetPr(CHANNEL_ARG)[0]);i++)

ssSetOutputPortWidth(S,i,1); //设置输出端口的端口宽度为1

需指定某个参数在仿真期间不能改变时,应使用ssSetSFcnParamNotTunable(S,N),其中N为参数号,从0开始。

需要注意的是,A/D 模块没有直馈通路,因为其输出是根据从硬件中读取的数据计算得到,而不是从其他模块获得数据。

而对D/A模块来说,直馈的设置就非常重要,它表示输出或可变采样时间由某一端口的输入值控制。例如下面的语句设置通道0的直馈:

ssSetInputDirectFeedThrough(S,0,1)。 2.2.4 初始化采样时间

子函数mdlInitializeSampleTimes()设定采样时间。例如在1711驱动中如下设置: ssSetSampleTime(S, 0,

mxGetPr(SAMPLE_TIME_PARAM)[0]); //从对话框读取采样时间

ssSetOffsetTime(S,0, 0.0);//设置采样时间偏移量为0

2.2.5 初始化硬件

子函数mdlStart( )是可选函数,该函数只是在模型执行的开始被调用一次。在PCI-1711的驱动中我们在此函数中检查硬件设备是否存在、获取板卡的基地址以及对硬件进行初始化。对于D/A模块还应该初始化硬件端口信号,使其初始模拟量输出为0。 2.2.6 数据输入输出

子函数mdlOutput()包含了对硬件进行读写的代码。

对于输入型设备,必须完成如下操作: ⑴对每个通道的conversion进行初始化;

⑵对每个通道读取硬件板的A/D输出

(可能还要对读取的数据进行比例变换);

⑶将读取的数据赋值到模块输出变量y中。

在仿真模式下,只需将各通道的输出设为0。

对于输出型设备,其实现如下操作: ⑴从上游模块中读取输入信号u; ⑵为每个通道设置硬件板的D /A输出,(有必要时还需进行比例变换);

⑶为每个通道进行conversion的初始化。

在仿真模式下,此函数是个空函数体。 mdlOutput()部分的编写是非常灵活和多样的,也是编写驱动的重难点所在。由于要涉及到板卡寄存器的读写,因此需参考相应板卡的寄存器编程手册。表1中列出了PCI-1711的寄存器读写信息[3]: 偏移量 读操作 写操作 1 0 通道数和A/D数据 软件A/D触发 2 A/D通道范围设置 5 结束通道 4 开始通道 7 6 状态寄存器 A/D控制寄存器 9 清除FIFO寄存器 8 清除中断 11 10 D/A输出通道0 13 12 D/A输出通道1 14 D/A控制寄存器 17 16 数字输入 数字输出 24 计数器0 计数器0 26 计数器1 计数器1 28 计数器2 计数器2 30 计数器控制 表1:PCI-1711的寄存器读写信息

2.2.7 内存释放和输出归零

子函数mdlTerminate()主要用于重置硬件设备到理想的状态。该函数通常只用在D/A设备中(A/D设备驱动程序通常将该函数体设置为空),对设备的模拟量输出进行

归零处理。

2.3、创建MEX文件和设备驱动模块

S函数设备驱动源文件编写好之后,需进行编译和封装,步骤如下:

⑴将C语言的S函数源文件(例如adadvpci1711.c)放置在MATLAB当前工作路径下,输入指令:mex adadvpci1711.c。

⑵这时mex命令将生成动态链接库文件adadvpci1711.dll(Windows环境下)或adadvpci1711(UNIX环境下)。

⑶通过Simulink标准模块库中的S-Function模块可以将S函数加进Simulink模型,在name一栏填入S函数的名字,在parameters一栏按照在S函数中对附加参数定义的顺序依次填入数值或变量。

⑷选择该模块,按下Ctrl+M,打开封装编辑器(Mask Editor)对模块进行封装:在Mask type 编辑框中输入模块类型名;在Icon页中用MATLAB 的有关绘图命令绘制模块图标;在Initialization页中添加定义的变量参数,必要时对变量初始化;在Documentation 页中添加模块的说明和帮助文档。

2.4、驱动测试

我们将自行编制的设备驱动程序应用

在磁悬浮球系统实时控制实验中,经实验证明,能满足实验要求。 3、小结

本文以PCI-1711为例对xPC环境下编写设备驱动程序作了初步的研究,对C-MEX S函数的工作原理、函数格式及其封装过程作了较详细的说明。该方法同样适用于其他不被xPC支持的板卡驱动的开发。

参考文献:

[1] 杨涤,李立涛,杨旭,朱承元.系统实时仿真开发环境与应用[M].北京:清华大学出版社.2002.10 [2] Mvetsch,Hacker’s Guide to Writing S-function based I/O Drivers for xPC Target[J].2001.12 [3] User’ Manual PCI-1710 Series 12/ 16bit Multifunction Card.ADVANTECH, 2003.5.

[4] 刘玉玺,桑会平,汤楠,崔琪琳. PCI-1711数据采集卡及其应用[J].

———————————— 作者简介:蔡君(1977年—),男,汉族,东南大学自动化学院硕士研究生。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库XPC环境下PCI 1711数据采集卡驱动编写研究在线全文阅读。

XPC环境下PCI 1711数据采集卡驱动编写研究.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/279566.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: