WinDriver驱动程序框架

来源:互联网 发布:linux ant安装路径 编辑:程序博客网 时间:2024/05/17 03:18

以下是最近的收获。

一般来说,驱动程序的结构如下所示:

a  打开WinDriver设备;

b  查找要访问的PCI设备;

c  枚举该设备的资源(内存、I/O、中断);

d  锁定该设备的资源;

e  访问插卡上的资源(读写内存、读写I/O、响应中断);

f  解锁资源;

g  关闭WinDriver设备。

 

以下是一段使用WinDriver开发的PLX9050的驱动代码,从中可以看出

WinDriver驱动程序的框架结构,只要对其稍作修改就可作为其他PCI

的一部分。程序中没有给出变量说明,具体说明请查阅WinDriver的设计

文档。

hWD=WD_open();//打开WinDriver设备,得到一个文件句柄;

Pciscan..searchId.dwVenderId=0x10b5;//PLX公司供货号;

Pciscan..searchId.dwDeviceId=0x9050;//PXL9050的设备号;

WD_PCIScanCards(hWD,&Pciscan)//检测PCI插槽上的设备;

PciSlot=Pciscan.cardslot[0];//将插卡的地址传递给变量PCICardInfo

PCICardInfo.pcislot=PciSlot;//检测卡上的资源信息;

WD_PciGetCardInfo(hWD,&PciCardInfo);//检测卡上的资源信息;

Card=PciCardInfo.card;

Cardreg.card=Card;

WD_CardRegister(hWD,&Cardreg);//向系统登记检测到的资源信息;

Item=Card.Item[0];//将卡上的0号资源赋给变量Item

If (Item.item==ITEM_MEMORY)

  RegAddress=Item.I.Mem.dwTrans.Addr;//得到PCI卡上的内存映射到用户态的地址;

Trans.dwport=RegAddress;

Trans.CmdTrans=RM_B;//设为内存字节读命令;

Trans.fAutoinc=True;

WD_Transfer(hWD,&Trans)//进行数据传递;

WD_CardUnregister(hWD,&Cardreg)//释放注册到的资源;

WD_Close(hWD)//关闭WinDriver设备

原创粉丝点击