新闻中心

EEPW首页>嵌入式系统>设计应用> 嵌入式微处理器EP9315二次开发

嵌入式微处理器EP9315二次开发

作者: 时间:2012-10-18 来源:网络 收藏

2.2 驱动程序

2.2.1 应用模块初始化

应用模块的初始化在标准流接口函数DEV_Init( )中完成,在内核加载驱动时调用该函数,其中DEV为设备文件名的前缀,Windows CE使用其识别与特殊流接口驱动程序相对应的特殊设备。初始化的基本步骤为:

(1)检查应用模块硬件信息的正确性。

(2)用Windows CE中的API函数为应用模块驱动中用到的数据结构分配缓冲区。

hDev=LocalAlloc(LPTR,sizeof(Dev_INFO));

其中:pDev为包含设备必要信息的结构体指针,Dev_INFO为该结构体类型。

(3)设置应用模块的默认参数,如应用模块在系统中分配的物理地址空间的基地址。

PHYSICAL_ADDRESS phyAddr;//64_bit地址

phyAddr.LowPart=hDev->dwIOBaseAddr;//32_bit物理基地址

phyAddr.HighPart=0;//高32_bit地址

(4)通过HalTranslateBusAddress( )和MmIoSpace( )映射I/O地址,提供直接访问设备的虚拟地址。

if(!HalTranslateBusAddress(Isa,0,phyAddr,0,phyAddr)) return FALSE;

hDev->lpMappedBaseAddr=(LPBYTE)MmMapIoSpace(phyAddr,size,FALSE);

if(!hDev->lpMappedBaseAddr) return FALSE;

如果分配内存或映射虚拟地址失败,则返回FALSE,退出初始化程序。

(5)初始化应用模块的读写属性和共享模式。

2.2.2 应用模块数据接收与发送

应用模块数据的传递在流接口函数Dev_Write( )和Dev_Read( )中完成。

DEV_Write(由应用程序传入的设备句柄>,写入数据指针>,写入数据位数>)

{//每写1字节调用一次WRITE_PORT_UCHAR( );}

DEV_Read(由应用程序传入的设备句柄>,存放数据指针>,读入数据位数>)

{//每读1字节调用一次READ_PORT_UCHAR( );}

其中:WRITE_PORT_UCHAR( )和READ_PORT_UCH-

AR( )中传递的地址为经过MmMapIoSpace( )映射过的虚拟地址。

2.2.3 建立应用程序和设备驱动的联系

操作系统中的应用程序与驱动中的流接口函数一一对应。其关系如图4。

当应用程序准备对某个设备进行读写时,系统必须先执行CreateFile( )函数打开这个设备,得到的设备句柄即为底层设备驱动中Dev_Open( )的返回值。应用程序通过CloseHandle( )调用设备驱动中的Dev_Close( )。执行完该函数后驱动程序引用的设备将不再有效。当一个流接口驱动程序被打开后,应用程序使用ReadFile( )对这个设备进行读操作,驱动程序中Dev_Read( )响应该操作;同样应用程序使用WriteFile( )对该设备进行写操作,驱动程序中Dev_Write( )响应此操作。另外,应用程序还可以使用DeviceIOControl()通知操作系统调用流接口驱动中的DEV_IOControl( )去通知驱动程序要执行的操作。这些操作用户可用Windows CE提供的API函数CTL_CODE自定义。

结论

基于系统对武汉中科院岩土力学所设计的SY5声波仪的控制,设备运行稳定。与原来由51单片机搭建的SY5声波仪相比,该系统功耗降低、体积变小、稳定性增强、成本降低,更适合工业控制中的运用。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭