• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: RTX  DA  6208  驱动  

资源简介

基于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


评论

共有 条评论