资源简介
基于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环境搭建与测试
相关资源
- labview中的DAQ助手采集多个通道电压
- Eeupdate.exe
- Reparatory Effects of Nicotine on NMDA Recepto
- Rtx51_tiny_RTOS中文版.pdf
- DAC0832波形发生器幅值及频率都精确可
- adams vibration 练习原文件
- EDA课程设计_密码锁
- DAS1302蜂鸣 独立按键 闹钟设定 IIC存储
- 怎样在flex的datagrid中运用checkbox
- VESA Computer Display Monitor Timing (DMT)
- 一个读取地震数据seg2或dat格式的程序
- LDA 人脸识别
- 图片存储到数据库保存二进制文件并
- 软件方法测试RTX时钟
- 图形学集成程序dda、中点算法、多边
- ADAMS 驱动函数
- EDA课程设计(出租车计费系统)
- DataGridView财务金额格式显示
- powerdatagrid控件 源码
- Fundamentals of Data Structure in C
- Qt 读取16进制的data文件
- lmdb代码——caffe
- SVNDrv.sys
- Cellular automata Model: an Adaptive Approach
- 大数据中的云网络Cloud Networking for B
- Cyclone 10LP Remote Update Intel FPGA IP 官方工
- SDINBDG4-64GB_datasheet generic final v1.pdf
- SN9C291B datasheet
- RDA5807应用说明
- Effect of dietary nitrate dosage on gas produc
评论
共有 条评论