您的位置 首页 汽车

PCI驱动程序开发实例全解析

引 言PCI总线广泛使用在计算机中,一方面是因为该总线的数据吞吐量大,另一方面是因为该总线与具体的处理器无关。PCI硬件设备资源的分配不是硬件设计所

引 言

PCI总线广泛运用在计算机中,一方面是因为该总线的数据吞吐量大,另一方面是因为该总线与详细的处理器无关。PCI硬件设备资源的分配不是硬件规划所决议的,而是由Windows操作体系依据PC机中一切硬件设备对资源的占有统一分配的。这就要求规划设备驱动程序以跨过操作体系的鸿沟,对物理硬件进行操作。

1 DSP芯片中集成的PCI接口特色

1.1 PCI接口的内部结构

DM642片内集成一个主/从形式的PCI接口,它相当于专用的PCI接口芯片,这样能够不用深究PCI总线标准,将工作重点放在体系功用的完结上。DSP能够经过这个接口完结与PCI主机的互连。

从图1能够看出,PCI接口的内部结构包括7个部分:

(1)PCI总线接口模块(PCI Bus Interface Unit,PBIN):该模块对主/从形式下的总线买卖都不会刺进等候周期,能够完结最大的总线传输带宽。

(2)E2PROM操控器模块:操控器与外部的4线串行E2PROM相连。PCI接口复位时,操控器读取E2PROM中的数据,装备PCI接口。DSP能够经过映射寄存器拜访E2PROM。

(3)DSP从形式写模块:包括一个多路复用器和一个PBIN到DSP的FIFO。它完结的功用是:外部PCI设备经过PCI接口写数据到DSP从设备。外部主设备往DSP的Base0空间履行写操作时,PCI地址与DSPP寄存器中的固定偏移值结合,构成DSP意图地址,在传输进程中意图地址主动递加。

(4)DSP从形式读模块:包括一个多路复用器和一个DSP到PBIN的FIFO。它完结的功用是:外部PCI设备经过PCI接口能够从DSP从设备读取数据。在外部主设备从DSP的Base0空间履行读操作时,PCI地址与DSPP寄存器中的固定偏移值结合,构成DSP源地址,在传输进程中此地址主动递加。

(5)DSP主形式模块:包括读/写两个子模块,DSP是该模块的主控方。DSP主形式读这个子模块,完结DSP主设备经过PCI接口从外部PCI从设备中读取数据。DSP主形式写这个子模块完结DSP主设备经过PCI接口写数据到外部PCI从设备。

(6)PCI I/O接口模块:它包括PCI的I/O寄存器,HSR,HDCR,DSPP。只能由PCI主机经过基址1寄存器或基址2寄存器的空间映射进行拜访。

(7)DSP寄存器接口模块:包括DSP的映射寄存器,用于操控主形式接口,发生PCI中止以及电源办理。

其他几个模块都与PCI总线接口模块相连,而PCI总线接口模块对外经过PCI总线与外部设备相连,这样。DSP就能够经过主/从形式的读或写来完结与外部-设备之间的数据传输。


1.2 PCI接口中的寄存器

PCI接口中包括3类寄存器:

(1)PCI装备寄存器:只能被外部PCI主机(Host)拜访。

这些寄存器供给了PCI接口的装备信息,只能由外部主机拜访,能够从外部E2PROM主动加载,或许直接设置为默认值。

(2)PCI I/O寄存器:只能被外部PCI主机(Host)拜访。

PCI I/O寄存器只能由PCI主机经过基址l寄存器(Basel Address Register)或基址2寄存器(Base2Address Register)的空间映射进行拜访。

(3)映射在DSP外设空间的PCI寄存器,用于DSP操控PCI接口能够由外部PCI主机拜访,也能够由DSP拜访。

2 驱动程序规划

设备驱动程序供给连接到计算机硬件的软件接口。它是操作体系的信赖部分,由I/O办理器(I/O Manag-er)办理和调集。

用户运用程序以一种标准的方法拜访硬件,而不用考虑怎么操控硬件。驱动程序总是使设备看起来像一个文件,能够打开设备的一个句柄,然后运用程序能够在设备句柄最终封闭之前向驱动程序宣布读写恳求。

I/O办理器每收到一个来自用户运用程序的恳求就创立一个I/O恳求包(IRP)的数据结构,并将其作为参数传递给驱动程序。

2.1 设备驱动程序的组成部分

能够把一个完好的驱动程序看作是一个容器,它包括许多例程。当操作体系遇到一个I/O恳求包(I/ORequest Packet,IRP)时,它就调用这个容器中的例程来履行该IRP的各种操作。驱动程序包括以下几个根本例程:

(1)DriverEntry例程:它是驱动程序的初始化进口点,有必要叫作DriverEntry。它担任驱动程序的初始化,用来初始化驱动程序范围内的数据结构和资源。它主要有以下三个功用:设置Adddevice,Unload和其他例程的进口指针;能够从注册表中获取一些需求的信息以初始化驱动程序;初始化其他的在驱动程序范围内的数据结构和资源。一切的驱动程序都有必要包括它。当装载驱动程序时,PnP办理器为每个驱动程序调用一次 DriverEntry例程。

(2)AddDevice例程:在驱动程序初始化今后,PnP办理器调用驱动程序的Add Device例程来初始化由该驱动程序所操控的设备。在Add Device例程中,驱动程序创立一个设备方针作为方针设备,并将设备方针附着到设备仓库中。

(3)PnP例程:PCI设备都是即插即用设备,PCI设备的驱动程序有必要具有PnP例程。PnP办理器运用PnP例程来办理驱动程序发动、中止和删去设备。

(4)分发例程(Dispatch):用于办理驱动程序与运用程序之间的通讯,然后完结运用程序操控PCI设备的意图。

严格地说,驱动程序中只要“初始化”模块Drivet-Entry例程是必定不能少的。在实践工作中,一切驱动程序都有分发例程处理用户I/O恳求。

2.2 IRP处理

I/O恳求包(IRP)是驱动程序操作的中心,是一个预先界说的数据结构,带有一组对它进行操作的I/O办理器例程。一个IRP有固定的首部和可变数意图 IRP栈单元。IRP的固定部分含有IRP的固定特点,每个栈单元含有大多数有关的IRP参数。当IRP由多个驱动程序处理时,运用多个IRP栈单元。每个驱动程序从当时IRP栈单元得到它的IRP参数。如果把IRP沿当时设备的驱动程序栈向下传递,有必要在当时驱动程序中运用正确的参数设置下一个栈单元,然后在此驱动程序中使用函数IoCalldriver()调用更低层的驱动程序。驱动程序不用处理一切的IRP,但至少需求处理“创立”和“封闭”这两个 IRP。I/O办理器接纳I/O恳求,然后在把它传递到适宜的驱动程序栈中的最高驱动程序之前,分配并初始化IRP。驱动程序处理IRP的进程如图2所示。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/146386.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部