保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

基于PCI总线的双DSP系统及WDM驱动程序设计


,一般来说,它是用户与真实硬件进行I/O操作的一个窗口,是Win32赖以沟通内核的一个桥梁。对于驱动程序开发者,真正需要做的就是开发FDO。至于PDO,则由BUS DRIVER建立,并在需要的时候作为参数由I/O Manager或其它系统组件传给你的FDO。

在应用层与底层进行通讯时,操作系统为每一个用户请求打包成一个IRP(IO Request Packet)结构,将其发送至驱动程序,并通过识别IRP中的PDO来识别是发送给哪一个设备的。另外,WDM不是通过驱动程序名称,而是通过一个128位的全局惟一标识符(GUID)来识别驱动程序的[3]。

WDM驱动程序都有一个初始化入口点,即DriverEntry,它相当于C语言中的main函数。当WDM驱动程序被装入时,内核调用DriverEntry例程。另外WDM设备驱动程序还需要一个即插即用模块,即AddDevice。AddDevice例程就是PnP管理器在用户插入新设备时调用它来创建WDM设备对象的。

本文主要采用Windows2000 DDK来设计该驱动程序。调试工具为SOFTICE。驱动程序的主要工作集中在:

(1)DriverEntry(),这是驱动程序的入口点,驱动程序被装入时首先执行DriverEntry例程。主要工作是建立驱动程序这所需的函数。

(2)dspPciAddDevice(),在这个例程里驱动程序主要是创建设备。

(3)dspPciPnp(),在这个例程中驱动程序主要是启动设备和停止设备等,并且从PnP管理器读出为双DSP所分配的硬件资源,包括HPI CSR基地址和HPI控制空间基地址,对PCI配置空间进行初始化。初始化中断等。需要注意的是,在初始化中断之前禁止卡向主机发中断,因此应有屏蔽中断的操作。

(4)dspPciDeviceControl(),在这个例程中可以定制自己的函数来达到Ring3层和Ring0层相互通讯的目的。通过IOCTL_CODE可以区分不同的请求。

(5)Isr_Irq(),这个例程是用来处理中断的。Windows 2000的中断处理机制是假定多个设备可以共享一个硬件中断。因此,Isr的首要工作就是找出哪一个设备发生了中断。如果没有,则应该立刻返回FALSE,以便HAL能把中断送往其它设备驱动程序。中断服务例程Isr执行在提升的IRQL上,在DIRQL级别上运行的代码需要尽可能快地运行。通常情况下,若判断中断是由自己的设备产生的,则调用一个在DISPATCH_LEVEL级别上运行的延迟过程调用(DpcFor_Irq)。

注意:当确定是自己卡的中断时,要马上屏蔽中断位防止中断再进来,等到DpcFor_Irq的结尾处再开中断。

3 结论

通过上述的软硬件设计,成功实现了预期的目标。高效的利用DSP高速处理能力。


《基于PCI总线的双DSP系统及WDM驱动程序设计(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/161691.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。