资源描述:
《基于windows98平台开发dma高速数据采集系统》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于Windows98平台开发DMA高速数据采集系统
2、第1...摘要:介绍基于ydma.c、Mydma.mak;分别打开Mydma.h和Mydma.c进行代码功能的完善;最后在VisualC++6.0中,通过Mydma.mak文件加载工程,编程生成Mydma.VxD文件;在ring3级程序中即可中通过CreateFile函数进行调用。3DMA设备驱动程序的编写VxD在虚拟化了某个DMA通道后,500)this.style.ouseg(this)">必须利用VDMAD提供的特殊服务,管理DMA内存缓冲(Buffer)和应用程序内存缓
3、冲(Region)。Buffer是一块在物理地址上连续的内存;Region是一块在线性地址上连续的内存。如前所述,因为DMA只能识别物理地址,从而要求用于DMA传输的内存地址是线性的。这样在DMA传输开始前,选尝试锁定Region以获得其物理地址(因为Buffer是很宝贵的系统资源,只有在必须时才申请它来传输数据)。如果Region不能满足需要或是不连续时,VxD向VDMAD申请一个Buffer用作传输数据的中介。VDMAD控制DMA设备的设备驱动程序,赋给设备要传送数据的逻辑地址、数据长度及传送方向,该设备在没有主机CPU的帮助
4、下将数据移到指定的内容。这里给出一个简单的开发实例,使用的DMA通道是第3号通道。有过在DOS下DMA编程经验的人都知道,在允许DMA传输之后,要对其状态寄存器进行查询,或通过对/EOP信号的检测以确定DMA传输完成与否。在此VxD程序中用的是查询现行字节寄存器的方法,此种方法简单易行。当然还可以在DMA传输完成以后,由/EOP信号产生一次中断,通知计算机DMA传输结束;或是用一个timeout估计传输时间进行计时,计时到即DMA传输结束。部分程序如下://Mydma.h头文件#defineMAX_TRANSFER_BYTES//
5、最大传输字节数(自定)#defineMAX_PHYS_ADDR0xFFF#defineDMA_CHANNEL_NUMBER3//使用3号通道#defineREAD_DATA111//ring3级程序传入的命令码//模式字定义#defineSINGLE_MODE0x40//单字节传输模式#defineINCREMENT_MODE0x00//地址加1传输模式#defineEM_MODE0x04//写传输......//Mydma.c文件//全局变量声明BOOLhDMA;PVOIDClientBuffer;ULONGPhysAddr;D
6、ABufferLinear;......BOOLOnSysDynamicDeviceInit(){//虚拟化通道3hDMA=VDMAD_Virtualize_Channel(DMA_CHANNEL_NUMBER,NULL,NULL);if(hDMA==0){}returnFALSE;}elsereturnTRUE;}BOOLOnSysDynamicDeviceExit(){if(hDMA)VDMAD_Unvirtualize_Channel(hDMA);returnTRUE;}DSp){BOOLstatus;DHANDLEhVM=
7、Get_Cur_VM_Handle();Sp;MaxLockable,PhysAddr,error);if(status==0)//region锁定失败,申请buffer{nPages=......status=PageAllocate(nPages,PG_SYS,0,0xF,0,MAX_PHYS_ADDR,PhysAddr,PAGECONTIGPHGEFIXEDPAGEUSEALLGN,hMem,DMABufferLinear);if(status==FALSE){returnDIOC_FAILURE;}......}VDMAD
8、_Phys_Mask_Channel(hDMA)//屏蔽DMA通道VDMAD_Set_Region_Info(hDMA,bufID,TRUE,bUsingDMABuffer?DMABufferLinear:ClientBuffer,nBytes,(PVOID)PhysAddr);VDMAD_Set_Phys_State(hDMA,hVM,SINGLE_MODEEM_MODEINCRE-MENT_MODE);//写DMA模式寄存器VDMAD_UnMask_Channel(hVM,hDMA);//允许DMA传输ydma3.vxd,0,
9、0,0,CREATE_NEA技术传输数据较之查询、中断方式,无论在速度上还是数据传输量的大小上都优越得多。尤其在Windows98下虚拟设备驱动程序的开发,使得整个系统的图文界面更加美观,操作更加方便、灵活,大大缩短了开发周期,提高了效率。