PCI驱动程序开发

2019-08-01 15:26发布

 0 引 言
  计算机系统总是通过总线(Bus)实现相互间信息或数据交换的。这些定向的信息流和数据流在总线中流动,就形成计算机系统的各种操作,它能实现各种不同部件和设备之间的互连。
  PCI总线广泛使用在计算机中,一方面是因为该总线的数据吞吐量大,另一方面是因为该总线与具体的处理器无关。PCI总线的设计也使各种PCI外设卡可以直接插入PCI总线插槽中,而不需要考虑各种额外的特殊逻辑,在设计和使用PCI设备时,需要访问和控制硬件设备,如存储器读写、I/O端口访问、中断响应等。
  与工业标准结构(Industry Standard Architecture,ISA)设备不同的是: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中断以及电源管理。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
biechedan
2019-08-02 06:42
 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所示。

一周热门 更多>