好文档 - 专业文书写作范文服务资料分享网站

Windriver的使用

天下 分享 时间: 加入收藏 我要投稿 点赞

如何使用Windriver操作PCI

使用Windriver操作PCI的流程

Radioboy2005@163.com

一、Windriver操作流程

打开WindriverWD_Open()成功打开NY添加许可WD_License()确认版本※WD_Version()版本符合NY搜索符合VID、DID要求的设备WD_PciScanCards()VID、DID匹配NY读/写配置寄存器的所有信息WD_PciConfigDump()读取设备的信息(BAR的物理地址和空间大小)WD_CardRegister()锁定设备可以进行读写的地址空间WD_PciGetCardInfo()对设备进行读写操作WD_Transfer()WD_MultiTransfer()退出WD_CardUnregister()WD_Close()

图1 操作流程图

第 1 页 共 4 页

如何使用Windriver操作PCI

二、Windriver操作函数

1、打开Windriver,添加许可

hWD = WD_Open(); // 确认版本和许可文件

if (hWD==INVALID_HANDLE_VALUE) {

exit_flag = 1; } else {

strcpy(lic.cLicense,\B375D728D6B53BCB4F.AAAAA\); WD_License(hWD,&lic); }

BZERO(cardReg);

cardReg.Card.dwItems = 1;

cardReg.Card.Item[0].item = ITEM_MEMORY; cardReg.Card.Item[0].fNotSharable = TRUE; cardReg.Card.Item[0].I.Mem.dwPhysicalAddr = cardReg.Card.Item[0].I.Mem.dwBytes = 8; WD_CardRegister(hWD, &cardReg);

BARAddr[0];

5、读写配置寄存器

UCHAR i=0 ;

DWORD ConfigBuffer[24]; BZERO(pciCnf);

pciCnf.dwBytes = 0x04; pciCnf.fIsRead = TRUE;

for (i=0;i<15;i++)//读取PCI寄存器所有信息 {

pciCnf.dwOffset = 4*i;

WD_PciConfigDump(hWD,&pciCnf);

2、打开指定的PCI设备

BZERO(pciScan);

pciScan.searchId.dwVendorId = axtoi(m_VendorID); //VendorID

pciScan.searchId.dwDeviceId = axtoi(m_DeviceID); //DeviceID

WD_PciScanCards (hWD, &pciScan);//打开设备

ConfigBuffer[i]= dwVal;

}

函数说明:(1)dwVal:从配置寄存器中读出的数据;或

者是要写入配置寄存器中的数据;

(2)dwReg:配置寄存器的偏移地址;

(3)dwBytes:读取的字节数,大小跟配置寄存器大小一致;

(4)pciCnf.fIsRead = TRUE:TURE是从配置寄存器中读取数据;FALSE是向配置寄存器中写入数据。

3、读取设备分配的地址空间

DWORD BARSize[2]; DWORD BARAddr[2]; BZERO(pciCardInfo); pciCardInfo.pciSlot =

pciScan.cardSlot[nCardNum];

WD_PciGetCardInfo (hWD, &pciCardInfo);//读取BAR0、BAR1的地址和空间大小 BARAddr[0] =

pciCardInfo.Card.Item[1].I.Mem.dwPhysicalAddr; BARSize[0] =

pciCardInfo.Card.Item[1].I.Mem.dwBytes; BARAddr[1] =

pciCardInfo.Card.Item[2].I.Mem.dwPhysicalAddr; BARSize[1] =

pciCardInfo.Card.Item[2].I.Mem.dwBytes;

6、从PCI读取单个数据

WD_TRANSFER Trans; DWORD dwResult; DWORD read_data; BZERO(Trans);

Trans.cmdTrans = RM_DWORD; /* Read Memory DWORD */ Trans.dwPort

=

cardReg.Card.Item[0].I.Mem.dwTransAddr;

//从WD_CardRegister(hWD, &cardReg)中读到的可执行的地址

//Trans.Data.Dword = 0x10223456;

4、锁定设备的读写地址空间

WD_CARD_REGISTER cardReg;

第 2 页 共 4 页

如何使用Windriver操作PCI

表1 寄存器地址定义和偏移量

表2 寄存器偏移地址定义

第 3 页 共 4 页

Windriver的使用

如何使用Windriver操作PCI使用Windriver操作PCI的流程Radioboy2005@163.com一、Windriver操作流程打开WindriverWD_Open()成功打开NY添加许可WD_License()确认版本※WD_Version()版本符合NY搜索符合VID、DID要求的设备WD_P
推荐度:
点击下载文档文档为doc格式
0pluf6ciup4zk8m0i2fh
领取福利

微信扫码领取福利

微信扫码分享