PCIe8422使用说明书.docx
《PCIe8422使用说明书.docx》由会员分享,可在线阅读,更多相关《PCIe8422使用说明书.docx(16页珍藏版)》请在冰豆网上搜索。
![PCIe8422使用说明书.docx](https://file1.bdocx.com/fileroot1/2023-1/2/3634b11c-7791-4eaa-b82c-dbd583d4ea25/3634b11c-7791-4eaa-b82c-dbd583d4ea251.gif)
PCIe8422使用说明书
北京慧孚达科技有限公司
多路RS422/485/232通讯接口卡
PCIe8422
使用说明书
第一章功能概述
现今社会是飞速发展的信息社会,信息技术对社会发展有着深远影响,而数据采集是信息技术的关键环节。
我公司推出的基于PCI总线、PCIe总线、USB总线及嵌入式等数据采集卡综合了国内外众多同类产品的优点,以其使用的便捷、性能的稳定、性价比高,获得了客户的一致好评,是您理想的选择。
第一节、简介
PCIe8422是具有PCIe接口的8路422/485/232接口通讯板卡。
接口类型可以配置成RS232、RS422、RS485任意一种,或者RS232/RS422、RS232/RS485复合类型;可以配置为8路RS422异步接口模式,或配置为4路RS422同步接口模式。
灵活的定制方案,极大限度地满足客户的个性化应用要求。
可广泛用于航天测控、工业测控等系统中。
第二节、板卡性能指标
Ø总线接口PCIe,总线宽度x1,支持2.5Gbit/S的双向数据传输速度。
ØRS422数据传输速率可调节,最高可达4Mbps。
ØRS485/RS232模式支持异步通讯,RS422模式支持异步、同步通讯。
Ø支持用户自定义波特率。
ØRS422模式收、发独立,全双工工作方式。
Ø通讯接口起始位、数据位、停止位及校验位均可设置。
Ø每一路422/485/232发送及接收通道都对应有2KbytesFIFO,用于数据缓存。
Ø板卡有16路数字IO,可扩充为外触发信号。
支持外触发,软触发。
Ø数据接收方式支持查询、中断、DMA方式。
Ø数据发送方式可以单次发送,也可连续发送。
Ø可根据用户需求定制传输协议,如发送时添加帧头、帧尾;接收时检测帧头、帧尾等。
第三节、软件支持
PCIe8422多路422通讯卡为客户提供丰富的软件支持,提供集成软件和驱动程序以及编程接口、动态连接库、使用例程等。
第二章硬件详述
第一节、板卡外形
第二节、板卡构造说明
1:
RS422/485/232外部接口(D型头信号定义,J2)
RS422_Tn_N和RS422_Tn_P构成第n路RS422输出差分对信号。
RS422_Rn_N和RS422_Rn_P构成第n路RS422接收差分对信号。
RS485_n_N和RS485_n_P构成第n路RS485差分对信号。
RS232_TXn是第n路RS232输出信号。
RS232_RXn是第n路RS232接收信号。
DGND是板卡地信号。
2:
J3接口定义(数字IO)
IO0~IO7数字输入信号。
IO8~IO15数字输入信号。
其中IO0~IO7可以用作外触发信号。
4:
LED指示灯
LED1:
用来指示系统上电复位成功。
LED2:
用来指示板卡接收FIFO中有数据。
LED3:
用来指示板卡发送FIFO中有数据。
5:
安装驱动
将PCIe8422.inf文件和PCIe8422.sys文件分别拷贝到C:
\windows\inf\文件夹和C:
\windows\system32\drivers\文件夹下。
将PCIe8422板卡插入计算机PCIe插槽中,打开计算机,系统的“设备管理器”中显示“PCIe8422”设备。
第三章软件使用说明
第一节、界面构成
用户界面分为3个部分:
接收通道数据显示区、发送通道数据定义区、通道参数配置区。
其中通道参数配置区包括通道选择、通道设置、接收模式设置、发送模式设置。
第二节、操作指南
1:
参数配置选项
通道选择:
用于选择哪些通道用于传输数据。
通道设置:
波特率设置选择1200、9600、115200、614400等等,可以自己输入波特率数值
数据位选择5、6、7、8
起始位选择1、2
停止位选择1、1.5、2
校验位选择无、奇校验、偶校验
选择设置通道0~7
如何进行通道的参数设置:
波特率、数据位、起始位、停止位、校验位等参数设置完成后,选择设置通道用来将参数写入相应通道寄存器中;然后依照相应方法进行下一通道参数设置。
接收模式:
接收方式:
DMA、查询、中断
启动接收:
用于启动或停止接收通道数据
清除窗口:
用于清除接收窗口接收到的数据
发送模式:
发送方式:
连续发送、单次发送
HEX发送:
发送数据为十六进制
启动发送:
用于启动或停止发送通道数据
2:
接收数据显示区
用于显示接收通道的数据。
3:
发送数据定义区
用于定义选定通道的发送数据。
如何定义发送通道数据:
首先在发送数据定义区写入要发送的数据,然后在选择通道选项选择要发送通道,接下来点击设置通道数据按钮,数据写入通道数据缓冲区中,等待发送。
依照此方法设置下一通道数据。
第三节、二次开发指南
1:
编程接口
PCIe8422提供驱动文件为PCIe8422.inf和PCIe8422.sys,提供高级应用程序例程。
用户在此基础上二次开时,工程文件中需要包含PCIe8422.lib及头文件PCIe8422.h。
2:
PCIe8422.lib库函数简介
//用于传输的实际硬件参数
typedefstruct__PCIE8422_CHANNEL_PARAMETER
{
intm_BaudRate;
intm_DataBit;
intm_StartBit;
doublem_StopBit;
intm_ParityBit;
BOOLm_channel_enable[8];
BOOLm_rxbuffer_status[8];
}PCIE8422_CHANNEL_PARAMETER,*PPCIE8422_CHANNEL_PARAMETER;
typedefstruct_PCIE8422_STATUS_SEND
{
LONGbNotEmpty;//板载FIFO存储器的非空标志,=TRUE非空,=FALSE空
LONGbHalf;//板载FIFO存储器的半满标志,=TRUE半满以上,=FALSE半满以下
LONGbDynamic_Overflow;//板载FIFO存储器的动态溢出标志,=TRUE已发生溢出,=FALSE 未发生溢出
LONGbStatic_Overflow;//板载FIFO存储器的静态溢出标志,=TRUE已发生溢出,=FALSE 未发生溢出
}PCIE8422_STATUS_SEND,*PPCIE8422_STATUS_SEND;
typedefstruct_PCIE8422_STATUS_RECEIVE
{
LONGbNotEmpty;//板载FIFO存储器的非空标志,=TRUE非空,=FALSE空
LONGbHalf;//板载FIFO存储器的半满标志,=TRUE半满以上,=FALSE半满以下
LONGbDynamic_Overflow;//板载FIFO存储器的动态溢出标志,=TRUE已发生溢出,=FALSE 未发生溢出
LONGbStatic_Overflow;//板载FIFO存储器的静态溢出标志,=TRUE已发生溢出,=FALSE 未发生溢出
LONGulRemainCount;//板载FIFO存储器里剩余数据个数
}PCIE8422_STATUS_RECEIVE,*PPCIE8422_STATUS_RECEIVE;
//########################常量定义#################################
//CreateFileObject所用的文件操作方式控制字(可通过或指令实现多种方式并操作)
#definePCIE8422_modeRead0x0000//只读文件方式
#definePCIE8422_modeWrite0x0001//只写文件方式
#definePCIE8422_modeReadWrite0x0002//既读又写文件方式
#definePCIE8422_modeCreate0x1000//如果文件不存可以创建该文件,如果存在,则重建此文件,并清0
#definePCIE8422_typeText0x4000//以文本方式操作文件
//#######################################################################
//用户函数接口
//########################常规通用函数#################################
//适用于本设备的最基本操作
HANDLEDEVAPIFARPASCALPCIE8422_CreateDevice(intDeviceID=0);//创建设备对象
HANDLEDEVAPIFARPASCALPCIE8422_CreateDeviceEx(intDevicePhysID=0);//用物理号创建设备对象
intDEVAPIFARPASCALPCIE8422_GetDeviceCount(HANDLEhDevice);//取得设备总台数
BOOLDEVAPIFARPASCALPCIE8422_GetDeviceCurrentID(HANDLEhDevice,//取得当前设备相应的ID号
PLONGDeviceLgcID,
PLONGDevicePhysID);
BOOLDEVAPIFARPASCALPCIE8422_ListDeviceDlg(HANDLEhDevice);//列表系统当中的所有的该PCI设备
BOOLDEVAPIFARPASCALPCIE8422_ReleaseDevice(HANDLEhDevice);//关闭设备,禁止传输,且释放资源
//##################发送器传输控制函数#################################
//适于大多数普通用户,这些接口最简单、最快捷、最可靠,让用户不必知道设备
//低层复杂的硬件控制协议和繁多的软件控制编程,仅用下面的启动设备和写
//数据两个函数便能轻松高效地实现高速、连续的数据传输
BOOLDEVAPIFARPASCALPCIE8422_SetChannel(HANDLEhDevice,UCHARm_ChannelSelect);//setchannel_select_reg
BOOLDEVAPIFARPASCALPCIE8422_ConfigChannel(HANDLEhDevice,UCHARChannelNum,PCIE8422_CHANNEL_PARAMETERm_channel_parameter);
HANDLEDEVAPIFARPASCALPCIE8422_CreateSystemEvent_Int(void);
BOOLDEVAPIFARPASCALPCIE8422_InitDeviceInt(HANDLEhDevice,HANDLEhEvent,PTHREAD_PARApPara);
BOOLDEVAPIFARPASCALPCIE8422_ReleaseSystemEvent_Int(HANDLEhEvent);//释放内核事件对象
BOOLDEVAPIFARPASCALPCIE8422_InitDeviceDmaAD(//初始化设备,当返回TRUE后,设备即准备就绪.
HANDLEhDevice,//设备对象,它由CreateDevice函数创建
HANDLEhDmaEvent,//DMA事件句柄,它由CreateSystemEvent创建
PPCIE8422_STATUS_RECEIVEpDMAStatus);
HANDLEDEVAPIFARPASCALPCIE8422_CreateSystemEvent_Dma(void);//创建内核事件对象,供InitDeviceDma和VB子线程等函数使用
HANDLEDEVAPIFARPASCALPCIE8422_ReleaseSystemEvent_Dma(HANDLEhDmaEvent);//中断读数据消息
BOOLDEVAPIFARPASCALPCIE8422_StartDeviceSend(//使能发送器设备(如果发送器连接成功返回TRUE,否则返回FALSE)
HANDLEhDevice);//设备对象句柄
BOOLDEVAPIFARPASCALPCIE8422_ClrDeviceSendFifo(
HANDLEhDevice);//清发送器FIFO
BOOLDEVAPIFARPASCALPCIE8422_GetDevStatusSend(
HANDLEhDevice,//设备句柄
PPCIE8422_STATUS_SENDpSendStatus);//发送器状态
BOOLDEVAPIFARPASCALPCIE8422_WriteDeviceData_Pro(
HANDLEhDevice,//设备对象句柄
PULONGpDataBuffer,//数据用户缓冲区
ULONGnWriteSizeWords);//写入的点数(以字为单位)
BOOLDEVAPIFARPASCALPCIE8422_WriteDeviceData_Dma(
HANDLEhDevice,//设备对象句柄
PULONGpDataBuffer,//数据用户缓冲区
ULONGnWriteSizeWords);//写入的点数(以字为单位)
BOOLDEVAPIFARPASCALPCIE8422_StopDeviceSend(//禁止发送器设备
HANDLEhDevice);//设备对象句柄
//####################接收器传输控制函数###############################
//适于大多数普通用户,这些接口最简单、最快捷、最可靠,让用户不必知道设备
//低层复杂的硬件控制协议和繁多的软件控制编程,仅用下面的启动设备和读取
//数据两个函数便能轻松高效地实现高速、连续的数据传输
BOOLDEVAPIFARPASCALPCIE8422_StartDeviceReceive(//使能接收器设备(如果接收器连接成功返回TRUE,否则返回FALSE)
HANDLEhDevice);//设备对象句柄
BOOLDEVAPIFARPASCALPCIE8422_ClrDeviceReceiveFifo(
HANDLEhDevice);//清接收器FIFO
BOOLDEVAPIFARPASCALPCIE8422_ReadDevicePro_Npt(//用非空标志读取设备上的AD数据
HANDLEhDevice,//设备句柄
PULONGpDataBuffer,//将用于接受数据的用户缓冲区
ULONGnReadSizeWords,//读入的数据长度
PLONGnRetSizeWords);//返回实际读取的数据长度
BOOLDEVAPIFARPASCALPCIE8422_GetDevStatusReceive(
HANDLEhDevice,//设备句柄
PPCIE8422_STATUS_RECEIVEpReceiveStatus);//接收器状态
BOOLDEVAPIFARPASCALPCIE8422_ReadDevicePro_Half(//FIFO半满读AD数据
HANDLEhDevice,//设备句柄
PULONGpDataBuffer,//将用于接受数据的用户缓冲区(该区必须开辟65536个字的空间)
ULONGnReadSizeWords,//读入的数据长度
PLONGnRetSizeWords);//返回实际读取的数据长度
BOOLDEVAPIFARPASCALPCIE8422_ReadReceiveDeviceDma(//直接内存(DMA)方式函数
HANDLEhDevice,//设备对象,它由CreateDevice函数创建
PULONGpADBuffer,//用户缓冲区
LONGnReadSizeWords,//每次DMA时,用户从指定缓冲应读取的实际长度
PLONGnRetSizeWords);//返回实际读取的数据长度
BOOLDEVAPIFARPASCALPCIE8422_StopDeviceReceive(//禁止接收器设备
HANDLEhDevice);//设备对象句柄
//###################中断实现计数器控制函数###############################//DEVAPIBOOLFARPASCALPCIE8422_InitDeviceInt(
//HANDLEhDevice,//设备句柄
//HANDLEhEventInt);//非空中断事件(FIFO从空到非空产生一个中断)
DEVAPIBOOLFARPASCALPCIE8422_GetDeviceIntCount(HANDLEhDevice,PULONGpIntSrc);//得到中断次数
DEVAPIBOOLFARPASCALPCIE8422_ReleaseDeviceInt(HANDLEhDevice);//释放中断
//#########数据读取函数(DMA方式)(上层用户函数)###########################
//###########内存映射寄存器直接操作及读写函数############################
//适用于用户对本设备更直接、更特殊、更低层、更复杂的控制。
比如根据特殊的
//控制对象需要特殊的控制流程和控制效率时,则用户可以使用这些接口予以实现。
BOOLDEVAPIFARPASCALPCIE8422_GetDeviceAddr(//取得指定的指定设备ID号的映射寄存器的线性基地址,返回设备总数
HANDLEhDevice,//设备对象句柄
PULONGLinearAddr,//返回指定映射寄存器的线性地址
PULONGPhysAddr,//返回指定映射寄存器的物理地址
intRegisterID);//设备映射寄存器的ID号(0-5)
BOOLDEVAPIFARPASCALPCIE8422_GetDeviceBar(//取得指定的指定设备寄存器组BAR地址
HANDLEhDevice,//设备对象句柄,它由CreateDevice函数创建
ULONGpulPCIBar[6]);//返回PCIBAR所有地址,具体PCIBAR中有多少可用地址请看硬件说明书
BOOLDEVAPIFARPASCALPCIE8422_GetDevVersion(//获取设备固件及程序版本
HANDLEhDevice,//设备对象句柄,它由CreateDevice函数创建
PULONGpulFmwVersion,//固件版本
PULONGpulDriverVersion);//驱动版本
BOOLDEVAPIFARPASCALPCIE8422_WriteRegisterByte(//往设备的映射寄存器空间指定端口写入单节字数据
HANDLEhDevice,//设备对象
ULONGLinearAddr,//指定映射寄存器的线性基地址
ULONGOffsetBytes,//相对于基地址的偏移位置
BYTEValue);//往指定地址写入单字节数据(其地址由线性基地址和偏移位置决定)
BOOLDEVAPIFARPASCALPCIE8422_WriteRegisterWord(//写双字节数据(其余同上)
HANDLEhDevice,
ULONGLinearAddr,
ULONGOffsetBytes,
WORDValue);
BOOLDEVAPIFARPASCALPCIE8422_WriteRegisterULong(//写四节字数据(其余同上)
HANDLEhDevice,
ULONGLinearAddr,
ULONGOffsetBytes,
ULONGValue);
BYTEDEVAPIFARPASCALPCIE8422_ReadRegisterByte(//读入单字节数据(其余同上)
HANDLEhDevice