WINCE6.0+S3C6410串口驱动
WINCE6.0+S3C6410串口驱动
WINCE6.0+S3C6410串口驱动
WINCE串口驱动
备注:本博文基于Real6410+WINCE6.0的系统来学习的
1. 硬件设计
图1
UART接口在此开发板中的应用如下: UART0作为调试口来使用
WINCE6.0+S3C6410串口驱动
图2
UART1用于和GPRS模块SIM900通信
图3
UART2用于和GPS模块COMPASS_EB818通信
WINCE6.0+S3C6410串口驱动
图4
UATR3用于和蓝牙模块通信
图5
2. 软件设计
2.1 WINCE串口驱动的架构
在WINCE系统中,串口驱动是作为一个流驱动的形式存在,其驱动架构如下图所示:
WINCE6.0+S3C6410串口驱动
图6
串口驱动分为MDD层和PDD层,DD层对上层的Device Manager(device.dll)提供了标准的流设备驱动接口(COM_xxx),PDD层实现了HWOBJ结构及结构中若干针对于串口硬件操作的函数指针,这些函数指针将指向PDD层中的串口操作函数。DDSI是指MDD层与PDD层的接口,在串口驱动中实际上就是指HWOBJ,PDD层会传给MDD层一个HWOBJ结构的指针,这样MDD层就可以调用PDD层的函数来操作串口。
2.2 MDD层的导出接口函数
MDD层为系统提供流设备接口,这些接口微软已经实现,但还是有必要学习一下
2.2.1 COM_Init
此函数始化串口设备,该函数通过读取注册表获得串口设备号,并获得相应的HWOBJ的结构指针,通过该指针调用PDD层的硬件初始化函数初始化串口。
Identifier:如果驱动被设备管理器加载,那么这个参数将包含一个注册表键值在” HKEY_LOCAL_MACHINE\Drivers\Active”路径下。如果驱动是通过调用RegisterDevice函数来加载的,那么这个值等于dwInfo的值。在COM_Init中,会先打开该键值,用返回的句柄来查询DeviceArrayIndex值,并根据该值获得PDD层的HWOBJ结构指针,下图是COM_Init函数的一部分
WINCE6.0+S3C6410串口驱动
图7
2.2.2 COM_Deinit
卸载串口设备,该函数中主要做了一些释放资源的操作。也可以被DeregisterDevice函数调用,而DeregisterDevice函数可以被应用程序调用。
2.2.3 COM_PreDeinit
2.2.4 COM_Open
打开串口设备,当应用程序调用CreateFile函数打开串口时,该函数会被调用来打开串口设备。
pContext:COM_Init函数返回的Handle。
AccessCode:设置访问模式,比如共享读或者是读写模式。
ShareMode:在参数从应用程序中的CreateFile函数中传来,表示是否支持独自占有。
2.2.5
COM_Close
WINCE6.0+S3C6410串口驱动
关闭串口设备,当应用程序调用CloseHandle函数的时候会调用这个函数。 pContext:COM_Init函数返回的Handle。
2.2.6 COM_PreClose
2.2.7 COM_Read
读串口数据,应用程序调用ReadFile函数读串口的时候,会调用该函数。 pContext:COM_Open函数返回的Handle。
pTargetBuffer:指向一个用于存放读到数据的Buffer。 BufferLength:pTargetBuffer指向的Buffer的大小。 pBytesRead:实际读到的数据的大小。
2.2.8 COM_Write 写串口数据。应用程序调用WriteFile函数写串口的时候,该函数被调用。 pContext:COM_Open函数返回的Handle。
pSourceBytes:指向一个Buffer,该Buffer包含要写入串口的数据。 NumberOfBytes:要写入串口的数据的大小。
2.2.9 COM_Seek
2.2.10 COM_PowerDown
该函数主要用于串口设备从正常模式进入suspend状态之前需要做的动作。 pContext:串口设备的Handle。
2.2.11 COM_PowerUp
该函数主要用于串口设备从suspend模式恢复到正常模式。 pContext:串口设备的Handle。
2.2.12 COM_IOControl
该函数主要实现了一些串口的IO控制,它会被应用层的一些串口函数调用来获得或者设置串口的状态。
dwOpenData:COM_Open函数返回的Handle。 dwCode:I/O控制操作码。 pBufIn:传入的Buffer。
dwLenIn:传入的Buffer的大小。 pBufOut:传出的Buffer。
dwLenOut:传出的Buffer的大小。
pdwActualOut:实际传出的数据的大小。
对于串口驱动来说,COM_IOControl函数非常有用,应用程序通过调用COM_IOControl函数并传入不同的操作码,实现了控制串口的功能。这里列举一些操作码如下: 操作码 解释
IOCTL_SERIAL_CLR_DTR 设置串口的DTR管脚为低 IOCTL_SERIAL_CLR_RTS
WINCE6.0+S3C6410串口驱动
设置串口的RTS管脚为低 IOCTL_SERIAL_DISABLE_IR 禁用串口的红外模式
IOCTL_SERIAL_ENABLE_IR
启用串口的红外模式
IOCTL_SERIAL_GET_COMMSTATUS
清除串口设备的异常标记并返回当前状态 IOCTL_SERIAL_GET_DCB
获得串口的DCB结构
IOCTL_SERIAL_GET_MODEMSTATUS 获得当前Modem的控制寄存器值 IOCTL_SERIAL_GET_PROPERTIES 重新获得当前串口设备的硬件属性 IOCTL_SERIAL_GET_TIMEOUTS 获得串口设备的读写超时
IOCTL_SERIAL_GET_WAIT_MASK 获得等待事件标记掩码
IOCTL_SERIAL_IMMEDIATE_CHAR
在发送数据前,先发送一个特定的字符 IOCTL_SERIAL_PURGE
清除串口中的输入输出Buffer,也可以中止未进行的读写操作 IOCTL_SERIAL_SET_BREAK_OFF 串口通讯从中断状态恢复 IOCTL_SERIAL_SET_BREAK_ON
设置串口为中断状态,停止发送接收数据 IOCTL_SERIAL_SET_DCB 设置串口的DCB结构 IOCTL_SERIAL_SET_DTR 设置串口的DTR管脚为高
IOCTL_SERIAL_SET_QUEUE_SIZE
目前,在微软的MDD层代码中没有支持 IOCTL_SERIAL_SET_RTS
设置串口的RTS管脚为高 IOCTL_SERIAL_SET_TIMEOUTS 设置串口的读写操作超时
IOCTL_SERIAL_SET_WAIT_MASK 设置等待事件标记掩码 IOCTL_SERIAL_SET_XOFF
软件流控模式下,终止数据传输 IOCTL_SERIAL_SET_XON
软件流控模式下,启动数据传输 IOCTL_SERIAL_WAIT_ON_MASK
等待一个与事件掩码中匹配的事件 上述的操作码,很多都会被应用程序调用,看看MDD层中的实现,其中一些也是调用了PDD
WINCE6.0+S3C6410串口驱动
层下的函数来完成对串口硬件的设置。
2.3 PDD层为MDD层提供的接口
MDD层和PDD层交互的接口是结构体HWOBJ,在串口驱动中,HWOBJ结构中的函数实现了对串口硬件的操作,并在MDD层被调用,定义如下:
图8
BindFlags:用于控制MDD层还是PDD层来启动IST,具体值如下
图9
dwInitID:系统的中断号 ,此成员本来用于当BindFlags取值为THREAD_IN_MDD,也就是在MDD层启动IST线程时记录串口使用的逻辑中断号,但是当前的串口驱动实在PDD层启动IST,所以现在dwIntID成员的取值不是中断号信息,而是借用来记录与串口驱动程序的PDD层对应的串口的端口号。
pFuncTbl: 指向一个PHW_VTBL结构,该结构中包含一个函数指针列表,这些函数指针指向串口硬件操作函数,用于操作串口。
那么结构体HWOBJ的成员是在哪里赋值的呢?从图7我们控制COM_Init函数调用函数GetSerialObject来获取PDD层的创建并且初始化的串口对象,就是在该函数中初始化HWOBJ的结构体成员的,如下图
…… 此处隐藏:3156字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




