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

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PCI 设备中在WINDOWS下编写DMA的方法

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例程为每个驱动程序的入口点。下面简要说明驱动程序的分类。 1)驱动程序初始化和清理例程:在任何时候开始处理I/O请求之前,它必须执行一些初始化任务。DriverEntry例程、Reinitialize例程、Unload例程、Shutdown例程和错误回调例程一般用来执行这些操作。 2) I/O系统服务Dispatch(分发)例程:I/O管理器得到一个请求时,它使用请求的函数代码调用驱动程序中几个Dispatch例程中的一个。 3)数据传输例程:根据设备的不同设备操作涉及到一些不同的例程,一般有Start I/O例程、中断服务(ISR)例程、延迟过程调用(DPC)例程 4)资源同步回调:I/O管理器提供使用各种同步回调例程,使驱动程序更容易处理这些问题。当驱动程序需要访问某个共享资源时,它为该资源排队一个请求。当资源变得可用时,I/O管理器激活与该请求关联的一个驱动程序例程。驱动程序可以调用3种同步回调例程:ControllerControl回调例程、AdapterControl例程、SynchCritSection例程。 5)其他的驱动例程:驱动程序可以包括下面的一些例程。Timer例程,在设备操作过程中跟踪时间的例程。Cancel I/O很长时间持有等待请求的任何驱动程序必须把一个Cancel I/O例程挂到该请求。如果请求被取消,I/O管理器调用Cancel I/O例程执行必要的清理操作。 3 基于包的总线控制器DMA方式对DriverEntry例程的要求 为了使设备能在WINDOWS NT操

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档