WinDriver教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WinDriver教程
一、如何用windrive打开、关闭设备以及查看设备的信息
1.所有有关的WD_API在安装后的相关目录下可以找到,建议打印出来,仔细看下。
2.打开、关闭设备与查看相应信息:
HANDLE m_hPex;
DWORD Bus,Slot,Fun,Interrupt;
DWORD BaseAddrCS0,BaseAddrCS1,BaseAddrCS2,BaseAddrCS3;
DWORD RangeAddrCS0,RangeAddrCS1,RangeAddrCS2,RangeAddrCS3;
//打开设备:
WD_LICENSE lic;
m_hPex=WD_Open();
if (m_hPex==INVALID_HANDLE_VALUE) {
str="INVALID_HANDLE_VALUE"; }
else
{
//重新注册wd,去除过期限制
strcpy(lic.cLicense, "你的注册号");
WD_License(m_hPex, &lic); }
//检查WD版本
WD_VERSION ver;
BZERO(ver);
WD_Version(m_hPex, &ver);
if (ver.dwVer { str="Windriver Overdue"; } WD_PCI_SCAN_CARDS pciScan; WD_PCI_SLOT pciSlot; BZERO(pciScan); //以PEX8311为例 pciScan.searchId.dwVendorId = 0x10b5; pciScan.searchId.dwDeviceId = 0x86e1; WD_PciScanCards (m_hPex, &pciScan); if (pciScan.dwCards>0) { pciSlot = pciScan.cardSlot[0]; WD_PCI_CARD_INFO pciCardInfo; WD_CARD Card; BZERO(pciCardInfo); pciCardInfo.pciSlot = pciSlot; WD_PciGetCardInfo (m_hPex, &pciCardInfo); if (pciCardInfo.Card.dwItems!=0) { Card = pciCardInfo.Card; } else { str="Pcicard=0"; } WD_CARD_REGISTER cardReg; //Card.Item[0]PC机基本端口操作 //Card.Item[1]中断信息 BZERO(cardReg); cardReg.Card = Card; cardReg.fCheckLockOnly = FALSE; WD_CardRegister(m_hPex,&cardReg); if (cardReg.hCard == 0) { str="cardReg=0"; } str="open successfully"; //取得当前设备信息并显示 Interrupt=Card.Item[1].I.Int.dwInterrupt); Bus=pciScan.cardSlot[0].dwBus; Slot=pciScan.cardSlot[0].dwSlot; Fun=pciScan.cardSlot[0].dwFunction; //CS0-CS3的地址映射信息 BaseAddrCS0=Card.Item[2].I.Mem.dwPhysicalAddr; RangeAddrCS0=Card.Item[2].I.Mem.dwBytes; BaseAddrCS1=Card.Item[3].I.IO.dwAddr; RangeAddrCS1=Card.Item[3].I.Mem.dwBytes; BaseAddrCS2=Card.Item[4].I.Mem.dwPhysicalAddr; RangeAddrCS2=Card.Item[4].I.Mem.dwBytes; BaseAddrCS3=Card.Item[5].I.Mem.dwPhysicalAddr; RangeAddrCS3=Card.Item[5].I.Mem.dwBytes; else { str="Open Failed"; WD_Close(m_hPex); } AfxMessageBox(str); 注:Card.Item[0-5]就是DEVICE/IO/MEM映射的地方,这里得到的值和windrive wizard里看到的是一样的。二、设备的读写操作 1.写操作 WD_TRANSFER trans; BZERO(trans); trans.cmdTrans = WP_BYTE; //(WORD/DWORD) trans.dwPort = BaseAddrCS0;//可为其它的映射基地址 trans.Data.Byte = 0x00; //需要写的数据 WD_Transfer (m_hPex, &trans); 2.读操错 WD_TRANSFER trans; BZERO(trans); trans.cmdTrans = RP_BYTE; //(WORD/DWORD) trans.dwPort = BaseAddrCS1;//可为其它的映射基地址 WD_Transfer (m_hPex, &trans); return trans.Data.Bytes; 三、其它