Windows CE6.0的DM9000A流接口驱动开发
发送函数dm9000_send(pInBuf,nInBufSize)获取流接口函数传入的发送数据指针和相应数据长度,然后驱动DM9000A发送数据,其工作流程如图4所示。
4 Windows CE 6.0系统下流驱动程序的使用
4.1 流驱动程序的加载
流接口驱动程序需要按一定的方式配置后才能被系统识别并编译。其配置的主要流程如图5所示。
将流驱动程序加入定制系统之后还需要添加相应的注册表启动信息,在platform.reg文件中添加以下内容:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\DM9]
“Index”=dword:1
“Order”=dword:30
“Prefix”=“DM9”
“DLL”=“DM9.dll”
为使生成的DLL文件能够被包括在烧写文件中并下载到开发板上,还需在platform.bib文件中加入相应代码,内容如下:
IF BSP_NODM91
DM9.dll $(FLATRELEASEDIR)\DM9.dll NK SHK
ENDIF BSP_NODM9 !
经过以上的配置之后,流接口驱动程序已经配置完成,只需要对Windows CE 6.0的系统定制工程重新编译,并将生成的镜像文件下载到开发板上,即可通过文件API操作DM9000A的数据收发。
4.2 应用程序对流驱动程序的调用
Windows CE启动时会自动枚举注册表HKEY_LOCAL_MACHINE\Drivers\BuiltIn目录下的驱动信息,并加载相应驱动程序的动态链接库,然后执行初始化接口函数——DM9_Init()。在驱动程序成功加载之后,应用程序对硬件的操作就只需调用文件API便可实现,但前提是相应的操作必须在驱动程序中有定义,并且分配了操作码。对于DM9000A的数据发送,其文件API代码如下:
……
hDm9=CreateFile(TEXT(“DM91:”),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
该代码调用文件API打开设备进行读写操作,得到文件操作的句柄名hDm9。
DeviceIoControl(hDm9,DM9_SendFrame,&SendData,sizeof(SendData),NULL,0,&dwReturn,Null);
……
该代码调用文件API对设备发送操作命令。其中,hDm9告诉系统要操作的设备为DM9000A;DM9 SendFrame为发送数据的操作码,这必须与驱动程序中定义的相一致,也就是让系统知道进行的是什么操作;&SendData为发送的数据帧首地址;sizeof(SendData)为发送数据的长度……
评论