#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 dwAddr,UCHAR uValue);从dwAddr端口输出数字信号
(7)、BOOL _6208_CloseCard(DWORD dwAddr);关闭PCI6208卡初始化时返回的地址。
*/
DWORD _6208_Init(const UINT CardIndex,unsigned short DeviceID,unsigned 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(PCIConfiguration,uBusNum,SlotNumber.u.AsULONG,PciData,uOffset,PCI_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(PCIConfiguration,uBusNum,SlotNumber.u.AsULONG,PciData,0,PCI_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 dwAddr,int nChannel,double dValue)
{
if(dValue < -9.9999999)
{
dValue = -9.9999999;
}
else if(dValue > 9.9999999)
{
dValue = 9.9999999;
}
while(_6208_GetDAStatus(dwAddr));
RtWritePortUshort((PUSHORT)(dwAddr + nChannel*2),(USHORT)(dValue * 32767/10.0));
}
void _6208_DO_WritePort(DWORD dwAddr,UCHAR nValue)
{
RtWritePortUchar((PUCHAR)(dwAddr + 0x40),nValue);
}
UCHAR _6208_DI_ReadPort(DWORD dwAddr)
{
UCHAR nValue = 0;
nValue = RtReadPortUchar((PUCHAR)(dwAddr + 0x40)) >> 4;
return nValue;
}
BOOL _6208_CloseCard(DWORD dwAddr)
{
if(dwAddr != 0)
{
dwAddr = 0;
return TRUE;
}
else
{
return FALSE;
}
}
//初始化发生错误时,输出错误信息并终止程序
void _6208_Fail(char *mesg)
{
RtPrintf("Fatal Error: %s (0x%X)\n", mesg, RtGetLastError());
ExitProcess(1);
}
没有合适的资源?快使用搜索试试~ 我知道了~
windows 实时性扩展-RTX技术培训+驱动.rar
共18个文件
ppt:7个
doc:3个
caj:2个
5星 · 超过95%的资源 需积分: 50 102 下载量 123 浏览量
2020-05-11
11:46:44
上传
评论 9
收藏 13.87MB RAR 举报
温馨提示
模块一:Real-Time Extension介绍 模块二:RTX开发环境建立和应用程序开发 模块三:RTX子系统架构和实时内核 模块四:RTX设备驱动开发 模块五:RTX TCP/IP协议栈 模块六:RTX与Win32进程间通讯 通过扩展Windows操作系统,RTX使得除了非实时应用组件外的应用程序组件和模块运行在一个普通的Windows系统中时拥有确定性的、高速的相应时间成为可能。利用RTX,你可以用一个单一的低成本的平台来满足一个广泛地实时嵌入式应用程序的要求。
资源推荐
资源详情
资源评论
收起资源包目录
windows 实时性扩展-RTX技术培训+驱动.rar (18个子文件)
windows 实时性扩展-RTX技术培训+驱动
RTX支持驱动列表.doc 61KB
PCI串口驱动示例.rar 2.33MB
RTX培训课程.doc 33KB
RTX技术培训-4.ppt 358KB
RTX技术培训-1.ppt 5.45MB
RTX2012简介.doc 159KB
RTWindows实时性能评估.pdf 324KB
PCI智能多路串口卡的设计与实现_吴成富.caj 575KB
RTWindows在分布式实时仿真系统中的应用.pdf 466KB
RTX技术培训-5.ppt 341KB
RTX技术培训-0.ppt 233KB
RTX技术培训-3.ppt 838KB
RTX下PCI6208&6216驱动
RTX_PCI6208.c 4KB
RTX_PCI6208.h 666B
PCI总线时统卡RTX实时扩展研究_岳绪军.caj 3.02MB
RTX系统在不同CPU芯片组下性能分析.docx 857KB
RTX技术培训-6.ppt 115KB
RTX技术培训-2.ppt 983KB
共 18 条
- 1
资源评论
- 无能为力就要努力2023-07-29这个文件提供了很多有用的关于Windows实时性扩展-RTX技术的培训资料,对我提高了理解。
- 经年哲思2023-07-29使用这个文件后,我对Windows实时性扩展-RTX技术有了更深入的了解,帮助我解决了一些实践中的问题。
- 朱王勇2023-07-29下载这个文件后,我发现它包含了一些示例代码,这对我学习Windows实时性扩展-RTX技术非常有帮助。
- 刘璐璐璐璐璐2023-07-29虽然这个文件可能有一些不足之处,但总体来说,它是我学习相关技术的一个很好的资源。
- 阿汝娜老师2023-07-29这个文件对初学者来说非常有帮助,讲解详细,易于理解。
weixin_46188837
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功