微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > PCI设备WINDOWS驱动程序的开发

PCI设备WINDOWS驱动程序的开发

时间:04-18 来源:互联网 点击:

果指定的内存不能存取,函数将返回FFFFFFFFH。
如:PDWORD pBase = (PDWORD)MapPhysToLinear((PVOID)PhysAddress,PhysSize,0);
将pBase传递给调用驱动的用户程序,用户程序就可以像使用指针一样利用pBase访问内存。

4、I/O端口的操作
在PC机上,I/O寻址方式与内存寻址方式不同,所以处理方法也不同。I/O空间是一个64K字节的寻址空间,I/O寻址没有实模式与保护模式之分,在各种模式下寻址方式相同。在Windows9x系统下,运行于第3级的应用程序也可以直接使用I/O指令访问I/O空间。在设备初始化访问配置空间时,已用到了I/O指令,在对硬件进行配置时,也可以根据从配置空间基址寄存器PCI Base Address 1中返回的I/O端口基地址使用I/O指令。

5、响应中断
VTOOLSD提供了VHardwareInt类,虚拟IRQ,处理硬件中断。在Windows9x中,VPICD虚拟了物理可编程中断控制器的端口,从而可以控制物理中断控制器。虚拟IRQ的编程思路:首先从VHardwareInt类中派生出一个类,重载OnHardwareInt函数;然后,动态创建一个派生类对象实例;最后钩挂处理程序,这就是需要编写的中断服务程序。(关于VHardwareInt类可参考VTOOLSD)

四、驱动程序的调用和封装
编写设备驱动并不是最终的目的,需要由用户程序来调用驱动并实现一定的功能。一般调用设备驱动是使用CreateFile函数打开设备文件,得到一个文件句柄。使用如下的语句就可以打开文件。

HANDLE hVxD=CreateFile("\\\\.\\PCIDEVICE.VXD",0,0,0, OPEN_EXISTING,
FILE_FLAG_DELETE_ON_CLOSE,
0);
打开设备文件后,调用DeviceIoControl函数就可以实现应用程序与设备驱动程序的通信。完成硬件操作之后,可以调用函数CloseHandle(hVxD);关闭设备驱动。(关于这三个函数的详细说明请参考MSDN)
至此,我们完成了对驱动程序的初步设计,考虑到有的函数(如DeviceIoControl)调用起来非常复杂,为了提高程序的通用性,要对部分函数进行封装。因为动态链接库(DLL)可以在多数软件开发平台中调用,所以常用DLL封装形式。另外需要注意的是由于驱动程序具有与操作系统相同的特权,并且直接操作硬件,如果程序工作不稳定,会造成死机甚至系统崩溃,所以要对驱动程序进行全面细致的测试。
参考文献

1.李贵山. PCI局部总线开发者指南 西安电子科技大学出版社 1997
2.彭礼孝.虚拟设备驱动程序开发起步与进阶 人民邮电出版社 2000
3.PCI BIOS SPECIFICATION Revision 2.1 1994

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top