资源简介
基于RTX2012的PCI6208/PCI6216V的驱动,可以实现对PCI6208的实时控制,广泛应用于PC-BASED的实时控制系统,低成本高可靠性的解决方案。
代码片段和文件信息
#include “RTX_PCI6208.h“
/*
本文件中的几个函数曾经在Ardence RTX下检测通过。用于PCI-6208/16的DA输出。
用法:
(1)、DWORD dwbaseAddr = _6208_Init(PCI卡序号设备ID制造商号);只有一块PCI卡时PCI卡序号为0.多块卡时在机器主板上PCI插槽从0开始检测
第一次遇到的插槽不为空时PCI卡序号 = 0第二次遇到的插槽不为空时PCI卡序号 = 1 ... PCI卡序号 = n.
(2)、int nStatus = _6208_GetDAStatus(dwbaseAddr);获取端口状态寄存器的状态。当寄存器为空就输出。
(3)、void _6208_DAOutPut(dwbaseAddr输出通道Channel输出数字量Value);
(4)、void _6208_Fail(“想要输出的错误提示信息“);初始化发生错误时输出错误信息并终止程序
(5)、UCHAR _6208_DI_ReadPort(DWORD dwAddr);从dwAddr端口读取数字信号
(6)、void _6208_DO_WritePort(DWORD dwAddrUCHAR uValue);从dwAddr端口输出数字信号
(7)、BOOL _6208_CloseCard(DWORD dwAddr);关闭PCI6208卡初始化时返回的地址。
*/
DWORD _6208_Init(const UINT CardIndexunsigned short DeviceIDunsigned short VendorID)
{
ULONG uDeviceNum = 0; //设备号
ULONG uFunNum = 0; //功能号
ULONG uBusNum = 0; //总线号
ULONG uOffset = 0; //偏置用于检索插槽是否为空空则为0相邻插槽关联常数为256。
ULONG uNothingToWrite = 0; //获取PCI配置空间失败.
ULONG uBytesWritten = 0; //获得PCI配置空间信息。一般为64字节。
BOOL bFlag = 0;
// UINT uIndex = 0; //当系统中存在多块相同PCI卡时检索之用。
DWORD _base_addr = 0; //返回的基地址
//================================================================================================
PCI_SLOT_NUMBER SlotNumber;
PPCI_COMMON_CONFIG PciData;
UCHAR chBuffer[PCI_COMMON_HDR_LENGTH];
PciData = (PPCI_COMMON_CONFIG)chBuffer;
SlotNumber.u.bits.Reserved = 0;
bFlag = TRUE;
for(uBusNum = 0; bFlag ;uBusNum++)
{
for(uDeviceNum = 0;uDeviceNum < PCI_MAX_DEVICES && bFlag ;uDeviceNum++)
{
SlotNumber.u.bits.DeviceNumber = uDeviceNum;
for(uFunNum = 0; uFunNum < PCI_MAX_FUNCTION; uFunNum++)
{
SlotNumber.u.bits.FunctionNumber = uFunNum;
uBytesWritten = RtGetBusDataByOffset(PCIConfigurationuBusNumSlotNumber.u.AsULONGPciDatauOffsetPCI_COMMON_HDR_LENGTH);
if(uBytesWritten == uNothingToWrite)
{
RtWprintf(L“NothingWritten!“);
printf(“Error ByteWritten = %d\n“uBytesWritten);
uDeviceNum = PCI_MAX_DEVICES;
bFlag = FALSE;
break;
}
if(PciData->VendorID == PCI_INVALID_VENDORID) //如果VendorID等于0xFFFF表示PCI卡错误进行下一个循环
{
break;
}
if((PciData->DeviceID == DeviceID) && (PciData->VendorID == VendorID) && uDeviceNum == CardIndex)
{
//设置命令参数用于访问PCI设备的控制寄存器
PciData->Command = (PCI_ENABLE_IO_SPACE | PCI_ENABLE_MEMORY_SPACE | PCI_ENABLE_BUS_MASTER | PCI_ENABLE_WRITE_AND_INVALIDATE);
RtSetBusDataByOffset(PCIConfigurationuBusNumSlotNumber.u.AsULONGPciData0PCI_COMMON_HDR_LENGTH);
_base_addr = PciData->u.type0.baseAddresses[2] & 0xfffffffe;
return _base_addr;
}
}
}
}
return 0;
}
int _6208_GetDAStatus(DWORD dwAddr)
{
if(dwAddr == 0)
{
return -1;
}
return (RtReadPortUshort((PUSHORT)dwAddr) & 0x0001);
}
//DA输出
void _6208_DAOutPut(DWORD dwAddrint nChanneldouble dValue)
{
if(dValue < -9.9999999)
{
dValue = -9.9999999;
}
else if(dValue > 9.9999999)
{
dValue = 9.99
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 666 2009-06-01 10:13 RTX_PCI6208.h
文件 4009 2009-06-17 11:37 RTX_PCI6208.c
----------- --------- ---------- ----- ----
4675 2
- 上一篇:红蓝3D立体图片-出屏效果不错
- 下一篇:CDN环境搭建与测试
相关资源
- CUDA工具包9.0.176 for windows 10
- CFG_PDA程序
- 150M射频芯片RDA1846 使用资料
- 音响放大器 NE5532+TDA2030A 原理图
- Radar Handbook(3rd) 雷达手册 第三版
- easyui datagrid 表格 打印
- echarts地图全国省份json资源JSON版本
- Adams四阶预测用Adams 显式计算预测值;
- ERDAS IMAGINE 2018
- FLIR公司的ADAS可见光-红外数据库,百
- Dash 4 系列许可 license.dash-license . Das
- vmware15+macos10.14+unlocker3.0+darwin
- Latent Dirichlet AllocationLDA论文翻译
- PandaDirectXMaxExporter for 3DS Max 2012 64位
- ADAMS参数化建模与优化设计.pdf
- VHDL课程设计--数字秒表
- Forest Fires Data Set
- (Multisim数电仿真指导DA转换器
- adams.rar
- 永不过期 SYDAY 软件
-
gba
se8t数据库安装说明亲测可用 - ADA2200驱动
- 遗传算法波段选择
- Intell Parallel Studio XE 2016 Update 2 Licens
- 基于labviewd的DAQmx持续读取
- 点阵汉字显示(VHDL描述
- 430单片机的键盘液晶和dac902的结合程
- G.8262/Y.1362 同步以太网设备从钟(SE
- EDA快速校时数字钟
- EDA_BOMHelper V2013.10.10完美和谐版补丁
评论
共有 条评论