1 / 6
文档名称:

PCI 设备中在WINDOWS下编写DMA的方法.doc

格式:doc   大小:22KB   页数:6页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

PCI 设备中在WINDOWS下编写DMA的方法.doc

上传人:zxwziyou8 2022/1/14 文件大小:22 KB

下载得到文件列表

PCI 设备中在WINDOWS下编写DMA的方法.doc

文档介绍

文档介绍:PCI 设备中在WINDOWS下编写DMA的方法
作者:ppphaitaoamingpan   来源:驱动开发网   发布日期:2004-5-21   点击次数: 261
对于在PCI总线上进行高速数据传输,通常采用直接数据存储(DMA)技术。在DMA方式下数据能够达到PCI总线规范的最大数据传输速率,所以在设备驱动程序的开发过程中,实现DMA的工作方式成为驱动程序的设计的重点。而对于DMA工作方式的设备驱动程序的开发又是设备驱动程序的难点,并且国内介绍这类的书籍又相对很少,给设计者带来很大困难。
内核(Kernel)模式的驱动程序可以应用于WINDOWS NT和WINDOWS 2000的操作系统中。它区别于WDM(Win32 Driver Model)模型,主要不支持即插即用,但对于编程的思想二者基本上一致,对于本文所述的DMA编程的方法在WDM模式的驱动程序中一样适合。
本文通过现有最常见的AMCC公司生产的AMCC S5933 PCI 控制芯片为例说明在WINDOWS NT平台下如何编写设备驱动程序以实现DMA传输方式。本文对基本的驱动程序设计技术不作详细的说明,重点介绍基于包的总线主控DMA方式的原理和对常见驱动程序例程的要求。并介绍这种模式下驱动程序的实现方法。文章从几个不同的方面进行全面的阐述。
1、AMCC S59333控制芯片PCI主控DMA功能概述
AMCC S5933控制芯片,它具有实现完整的PCI主控模块和目标模块的接口功能。将复杂的PCI总线接口转换为相对简单的用户接口,用户只需要设计转换后的总线接口即可
AMCC S5933有两个FIFO(先入先出)存储器,一个是PCI到ADD-ON(附加设备)的FIFO,另一个是从ADD-ON到PCI的FIFO。S5933通过它的FIFO接口在PCI总线上进行DMA传输(总线主控)。FIFO可以作为PCI的发起者也可以作为目标者。FIFO作为目标,PCI总线主控访问ADD-ON数据。FIFO作为发起者可以向PCI发送数据。
PCI发起的DMA传输:此时FIFO作为目标。PCI发起的DMA传输必须通过总线主控控制状态寄存器(MCSR)来使能,读写使能分别控制,在驱动程序适配器控制(AdapterControl)例程设定这个寄存器。另外在驱动程序的设计中必须设定AMCC S5933读写地址寄存器(MWAR/MRAR)以及读写传输数据计数器(MWTC/MRTC)的值。AMCC S5933的DMA中断有下列几种情况:读传输计数器计到 0,写传输计数到0,或在DMA传输过程中PCI总线上发生错误。
2、 内核式驱动程序的基本结构和编程技术
驱动程序与应用程序的最大差别之一是驱动程序的控制结构,应用程序一直用main或WinMain函数控制运行。而驱动程序没有main或WinMain函数。它是由I/O(输入输出)管理器在下列情况下调用一个程序例程:
1) 驱动程序被装入时。
2) 驱动程序被卸出或系统被关闭时。
3) 用户程序发出I/O系统服务调用时。
4) 共享硬件资源对驱动程序可用时。
5) 设备操作过程中的任何时候。
任何设备驱动程序都必须拥有一个DriverEntry例程为每个驱动程序的入口点。下面简要说明驱动程序的分类。