ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:64.24KB ,
资源ID:20024258      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20024258.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(WinDriver教程Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

WinDriver教程Word下载.docx

1、/重新注册wd,去除过期限制 strcpy(lic.cLicense, 你的注册号);WD_License(m_hPex, &lic);/检查WD版本 WD_VERSION ver;BZERO(ver);WD_Version(m_hPex, &ver);if (ver.dwVer0) pciSlot = pciScan.cardSlot0;WD_PCI_CARD_INFO pciCardInfo;WD_CARD Card;BZERO(pciCardInfo);pciCardInfo.pciSlot = pciSlot;WD_PciGetCardInfo (m_hPex, &pciCardInf

2、o);if (pciCardInfo.Card.dwItems!=0) Card = pciCardInfo.Card;Pcicard=0WD_CARD_REGISTER cardReg;/Card.Item0PC机基本端口操作 /Card.Item1中断信息 BZERO(cardReg);cardReg.Card = Card;cardReg.fCheckLockOnly = FALSE;WD_CardRegister(m_hPex,&cardReg);if (cardReg.hCard = 0) cardReg=0open successfully/取得当前设备信息并显示 Interrup

3、t=Card.Item1.I.Int.dwInterrupt);Bus=pciScan.cardSlot0.dwBus;Slot=pciScan.cardSlot0.dwSlot;Fun=pciScan.cardSlot0.dwFunction;/CS0-CS3的地址映射信息 BaseAddrCS0=Card.Item2.I.Mem.dwPhysicalAddr;RangeAddrCS0=Card.Item2.I.Mem.dwBytes;BaseAddrCS1=Card.Item3.I.IO.dwAddr;RangeAddrCS1=Card.Item3.I.Mem.dwBytes;BaseAd

4、drCS2=Card.Item4.I.Mem.dwPhysicalAddr;RangeAddrCS2=Card.Item4.I.Mem.dwBytes;BaseAddrCS3=Card.Item5.I.Mem.dwPhysicalAddr;RangeAddrCS3=Card.Item5.I.Mem.dwBytes; else Open FailedWD_Close(m_hPex);AfxMessageBox(str);注:Card.Item0-5就是DEVICE/IO/MEM映射的地方,这里得到的值和windrive wizard里看到的是一样的。 二、设备的读写操作 1.写操作 WD_TRA

5、NSFER trans;BZERO(trans);trans.cmdTrans = WP_BYTE; /(WORD/DWORD) trans.dwPort = BaseAddrCS0;/可为其它的映射基地址 trans.Data.Byte = 0x00; /需要写的数据 WD_Transfer (m_hPex, &trans);2.读操错 trans.cmdTrans = RP_BYTE;trans.dwPort = BaseAddrCS1;return trans.Data.Bytes;三、其它 有关windriver对寄存器的操作要用到WDC_*函数,还有DMA操作在(二)中阐述。 三、寄

6、存器的读写 寄存器的读写用到一个非常好用的函数WD_PciConfigDump();具体的参数定义参照WD的API手册。WD_PCI_CONFIG_DUMP pciConfig;DWORD dwStatus;WORD arBuffer2;BZERO(pciConfig);pciConfig.pciSlot.dwBus = Bus;pciConfig.pciSlot.dwSlot = Slot;pciConfig.pciSlot.dwFunction = Fun;pciConfig.pBuffer = arBuffer;pciConfig.dwBytes = sizeof(arBuffer);p

7、ciConfig.fIsRead = TRUE;pciConfig.dwOffset = 每次累加4 WD_PciConfigDump(m_hPex, &pciConfig);四、数据的块操作 DWORD dataBuffer8192;* trans.Data.pBuffer=dataBuffer;利用WD_Transfer()函数来完成数据的块操作。五、DMA控制 WinDriver为提供了一组API函数,但是其提供的DMA 函数不是基于突发方式的,并且是以查询方式来检测DMA是否结束,比较适用于一次DMA读写。因此需要对其提供的DMA API函数及中断相关的函数进行改写,即在DMAOpen

8、()函数中,需对DMAMODE寄存器的本地突发使能位(BIT8)与BTERM输入使能位(BIT7)置位,否则,DMA操作只能完成一个双字的突发传输,只有将此二位置1 后,才能完成指定长度的DMA传输。因为传输量超过4 KB,所以要置为分散/聚拢(scatter/gather)模式(BIT9),同时使能DMA 中断完成位(BIT10)与DMA通道0 中断选择位(BIT17)。重写DMA 启动函数DMAStart(),设置每次DMA 传输所需的PCI 地址(主机物理内存地址)、本地地址、传输大小、传输方向等,并置DMA 启动位。这样每次数据捕获满中断到来,启动DMA 传输时,只需调用DMAStar

9、t()函数即可。如果采用Windriver 提供的DMAWriteRead 函数,每进行一次DMA 传输都要重新打开一个DMA,分配空间,设置各种相应的寄存器等,增加了DMA 传输的CPU 开销。经过测试,当进行数据全速捕获时,如果采用Windriver 提供的DmaWriteRead 函数及DMA 完成查询方式,CPU 的负荷最高可达80%,严重影响了系统其他程序的执行。当采用修改后的DmaStart()函数及DMA 中断方式后,全速进行数据捕获时,CPU 的负荷只有25%左右,大幅降低了CPU 的负荷,保证了整个系统软件的正常执行。在DMAStart()函数中,需要注意的是PCI 地址寄存

10、器的设置,因为传输数据量大于一页(4KB),所以采用了分散/聚集方式,即以分散的物理内存块映射连续分配的用户地址空间。与内存块分配方式不同,这时不是设置DMA的PCI地址与本地地址寄存器,而是设置DMA通道的描述符寄存器(DMADPR)。通过函数WD_DMALock()在物理内存中锁定所需大小的存储空间,取得每页的物理地址,大小以及相应的本地地址放入地址描述块链表中,在DMADPA寄存器中设置初时的描述块地址。1)Scatter/Gather DMA BOOL DMARoutine(WDC_DEVICE_HANDLE hDev, DWORD dwBufSize, UINT32 u32Local

11、Addr, DWORD dwOptions, BOOL fPolling, BOOL fToDev) PVOID pBuf;WD_DMA *pDma = NULL;BOOL fRet = FALSE;/* Allocate a user-mode buffer for Scatter/Gather DMA */ pBuf = malloc(dwBufSize);if (!pBuf) return FALSE;/* Lock the DMA buffer and program the DMA controller */ if (!DMAOpen(hDev, pBuf, u32LocalAddr

12、, dwBufSize, fToDev, &pDma) goto Exit;/* Enable DMA interrupts (if not polling) */ fPolling) MyDMAInterruptEnable(hDev, MyDmaIntHandler, pDma) goto Exit; /* Failed enabling DMA interrupts */ /* Flush the CPU caches (see documentation of WDC_DMASyncCpu() */ WDC_DMASyncCpu(pDma);/* Start DMA - write t

13、o the device to initiate the DMA transfer */ MyDMAStart(hDev, pDma);/* Wait for the DMA transfer to complete */ MyDMAWaitForCompletion(hDev, pDma, fPolling);/* Flush the I/O caches (see documentation of WDC_DMASyncIo() */ WDC_DMASyncIo(pDma);fRet = TRUE;Exit:DMAClose(pDma, fPolling);free(pBuf);retur

14、n fRet;2)Contiguous Buffer DMA BOOL DMARoutine(WDC_DEVICE_HANDLE hDev, DWORD dwDMABufSize, UINT32 u32LocalAddr, DWORD dwOptions, BOOL fPolling, BOOL fToDev) PVOID pBuf = NULL;/* Allocate a DMA buffer and open DMA for the selected channel */ if (!DMAOpen(hDev, &pBuf, u32LocalAddr, dwDMABufSize, fToDe

15、v, &六、windriver API的深入分析 windriver作为Jungo公司出品的一个高效易用的驱动开发软件,方便用户基于此开发自己设备的驱动程序,而不需要对windows DDK作更深入的研究(当然,要想称为驱动的高手,DDK是一定要钻研的)。windriver相比dirverstudio使用起来更为方便,同时,它支持windows、linux、Vxworks、winCE、solaris等OS,对当前流行的硬件设备,如端口、ISA、PCI(-X,-E)、PCMCIA、USB等都有很好的支持。作为驱动开发的入门工具,windriver是个很好的选择。当前windriver可以在网上得

16、到的破解版是ver8.01,已经可以很好的支持大家的要求(如果有银子的话,要获得好的稳定的产品和更多的技术支持,还是买正版哦)。很快大家都会熟悉上面的这两个图标,这就是windriver安装后的两个重要的快捷方式。windriver的正常工作,需要辅助安装windows DDK(95/98/2000/XP/2003。),和Visual C,等才能正确编译。当然,这也需要你正确的设置应有的环境变量。在8.01版中,windriver支持了更多的编译器平台,如下图所示:安装windriver后的目录如下所示:其中docs中就是windriver的各种手册,大家也不需要到网上找什么教程吧,看这个绝对受益菲浅,而且也是正道。include目录里就是最通用的包含文件了;lib目录则是重要的api函数库文件了;redist目录下是windriver的缺省驱动程序和DLL;对PLX芯片使用而言,最重要的就是PLX目录和wizard目录了,wizard就是建立的驱动工程,正确编译后会找到驱动程序*.sys。plx目录则是windriver为PLX系里芯片进行的二次封装函数库,当前我还是建议打击使用原始的WD和WDC函数,但是,其中的调用思路就可以在这里寻找。有了对windriver的总体认识,相信大家能很快上手,朝正确的方向努力。整理中(待续)。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1