新闻中心

EEPW首页>嵌入式系统>设计应用> PCI总线语音卡及WDM驱动程序设计

PCI总线语音卡及WDM驱动程序设计

作者: 时间:2012-03-13 来源:网络 收藏

1.2.2 PCI2040与TMS320VC5410接口

PCI2040与TMS320VC5410 HPI口的连接如图3所示。

PCI_AD31~PCI_AD15决定了PCI2040的控制空间基地址(Control Space Base Address)寄存器的值,这个值实际上是系统自动分配的。所有的PNP器件都是如此它将控制空间映射到主机内存,映射的空间大小为232-17=32KB。DSP芯片的选择是通过解码PCI_AD14、PCI_AD13来实现的。而PCI_AD12和PCI_AD11分别映射到HCNTL1和HCNTL0,用以决定访问DSP HPI寄存器的方式。其对应关系如表1所示。

因此,DSP与PC交换数据的过程,也就是读写HPI寄存器的过程。具体描述如下:

(1)初始化PCI2040内部配置寄存器,指向特定的DSP(本系统只有一个DSP和PCI2040相连),指定数据传输宽度为8位。

(2)分配HPI CSR基地址和控制空间基地址,允许PCI2040进行内存映射或I/O端口映射。值得注意的是,PCI2040控制空间只能映射在主机的内存空间里,不能映射在I/O空间。以上两步都由驱动程序完成。

(3)脱离复位状态后,PCI2040解码从来的地址,以此来做出响应。若落入32KB的控制空间中,则根据HCNTL1和HCNTL0及片选情况访问相应HPI寄存器。

(4)设定HPI控制寄存器中的BOB位,选择正确的高低8位排列方式。

(5)主机开始对HPI寄存器进行读写。

2 基于WDM的PCI驱动程序设计

2.1程序结构及原理

WDM是新一代的驱动程序构架,它是一个跨平台的驱动程序模型,在WINDOWS 98以上的操作系统中都实现了全面兼容。不仅如此,程序还可以在不修改源代码的情况下经过重新编译后在非Intel平台上运行,因而为驱动程序开发人员提供了极大的方便。
程序是分层的,即不同层上的驱动程序有着不同的优先级,而Windows 9x下的VxD则没有此结构。另外,WDM还引入了功能设备对象FDO(Functional Device Object)与物理设备对象PDO(Physical Device Object)两个新概念来描述硬件。PDO代表实际存在的硬件设备,它是在总线驱动程序(BUS DRIVER)下枚举并建立的,负责与真实硬件进行I/O操作。FDO是由用户驱动程序建立的,一般来说,它是用户与真实硬件进行I/O操作的一个窗口,是Win32赖以沟通内核的一个桥梁。对于驱动程序开发者,真正需要做的就是开发FDO。至于PDO,则由BUS DRIVER建立,并在需要的时候作为参数由I/O Manager或其它系统组件传给你的FDO。

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

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

2.2 PCI驱动程序设计

支持即插即用,因而采用WDM模型来设计驱动程序将使程序更加合理,支持更多的操作系统,并且在安装维护上更加方便。



评论


相关推荐

技术专区

关闭