|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
目前,Pocket PC掌上电脑正以其强大的多媒体性有和良好的可扩展性,逐步改变人们对于传统PDA的认识。
Pocket PC的应用领域迅速扩展,已经不再局限于日程、记事等简单功能。它能够胜伤从多媒体娱乐、文书处理,到诸如“交警事故的现场处理”等的各种应用。这些,为高效的移动办公、便携式的娱乐等开创了新的局面,同时也是新的市场。因为,每一个新的应用领域的出现,都伴随着相应的外设和应用程序的需求。
本文将以一个输入设备的开发为例,探讨如何利用Motorola MC68HC908单片机以及Microsoft Embedded Visual Tools编程工具,开发Pocket PC掌上电脑的外设及其驱动程序。
<strong>1 Pocket PC的软、硬件构架</strong>
Pocket PC的生产厂商包括COMPAQ、HP、Toshiba、联想、华硕等待,但其软、硬件构架是基本一致的。
1.1 Pocket PC的硬件构架
Pocket PC的硬件是以Intel StrongARM SA-1110通用处理器为核心来构建的。这是32位的RISC处理器,采用了ARM v4结构及指令系统,具有高性能(在206MHz条件下为2.1MIPS)、低功耗(在206MHz条件下小于400mW)的优点。在该芯片中,除了 CPU核心外,还集成了丰富的I/O和系统控制模块。使用SA-1110构建的Pocket PC系统框图如图1所示。
<ignore_js_op>
2010-3-9 19:48:50 上传
<strong>下载附件</strong> (36.31 KB)
</ignore_js_op>
由图1可知:在Pocket PC的构架中,如要扩充外围的输入设备,可用的接口有IrDA、PCMCIA、UART串口,而USB为从接口,不适用。从使用的方便性来讲,以IrDA 最好;而从功能的强大性来讲,以PCMCIA最强。但综合考虑开发简便以及成本因素,则是普通串口最合适。
各厂商的Pocket PC产品均具备标准串口,但一般都是将串口与USB等其它接口集成起来,做在一个自定义的接插件标准中。
例如COMPAQ公司的iPAQ系列,就是采用自定义的14引脚插口,其引脚定义可以查阅网上资料iPAQ H3600 Hardware Design Specification。开发外设时,可以将其中与串口相应引脚引出做成RS232插口,也可以直接使用符合该标准的14引脚插头。
1.2 Pocket PC的软件系统
通常所说的“Pocket PC”以及“Pocket PC 2002”平台,就是Windows CE 3.0操作系统针对特定操作产品进行裁剪和开发后的定制化版本。
Windows CE是一种全新构建的嵌入式操作系统,但是它在界面外观以及编程接口上,与Windows NT操作系统极其相似。
基于这种相似性,Microsoft Embedded Visual Tools提供了开发Windows CE平台软件的最佳方案。它包括类似Visual Studio 6.0的C++/Basic开发环境、ARM交叉编译器和链接器、x86平台上的Pocket PC仿真器等等。
<strong>2 外设的开发</strong>
下面以一个输入设备的开发为例,介绍如何开发Pocket PC掌上电脑的外设及其驱动程序。这是一个简单的按键式输入设备,可以认为是键盘或者游戏手柄。主要是为了解决Pocket PC的手写输入方式,在输入大量方案和进行游戏娱乐时不够方便的问题。
该输入设备硬件部分用MC68HC908GP32型单片机设计实现,其固件程序负责完成扫描输入、编码、串行通信的功能。而Pocket PC上的接口驱动程序用Embedded Visual Tools开发,负责完成串行通信、解码、向系统发出输入消息的功能。此外,还可进一步实现组合按键、定制快捷输入等高级功能。
2.1 硬件开发
整个输入设备以MC68HC908GP32单片机为核心。该型号是Motorola HC08系列的通用型产品,片内资源丰富,功能强大。系统框图如图2所示。
<ignore_js_op>
2010-3-9 19:48:50 上传
<strong>下载附件</strong> (11.89 KB)
</ignore_js_op>
按键的输入,可以使用普通的按键开关,也可以使用阵列的小键盘。按键输入产生的信号,送往GP32的通用I/O口PortA和PortB,其中PortA是键盘模块的接口,可产生键盘中断。
单片机的串口通信,由其SCI异步串行模块外接MAX232实现。
2.2 单片机的固件开发
单片机的固件程序用汇编语言编写,使用P&EWIN-IDE编译器进行编译。程序的流程如图3所示。
<ignore_js_op>
2010-3-9 19:48:51 上传
<strong>下载附件</strong> (28.09 KB)
</ignore_js_op>
单片机的初始化,包括对基本配置、SCI串口和时钟TIM1等部分的初始化,如表1所列。
<strong>表1 固件程序的初始化</strong>
地址寄存器值描 述$001ECONFIG101属性设置$001FCONFIG23D$0036PCTL71锁相环(产生2.4576MHz内部总线时钟)$0037PBWCE0$0038PMSH01$0039PMSL2C$003APMRS80$0013SCCR140SCI(9600bps双向传输速率)$0014SCCR20C$0019BAUD02$0023T1MODH1ETIM1时钟(溢出中断10次/s)$0024T1MODL00$0020T1SC55
如流程图所示,固件程序在完成初始化后,就会尝试与Pocket PC建立连接。
在向Pocket PC发送设备标识字节,并且反馈回正确的驱动字节后,认为成功建立了连接。之后,程序置位中断允许位,开始进入空循环方式等待时钟中断。
每次时钟中断发生后,将读取端口状态,然后进行判别、编码和送。输入的按键消息编码后用两个字节发送、并且附加上发送次序标识。
串口通信使用查询方式,通过反复查询SCI发送和接收器的状态,直到可以发送/接收数据为止。
*发送子程序
SENDATA:BRCLR7,SCS1,SENDATA
STA SCDR
RTS
*接收子程序
GETDATA:BRCLR 5,SCS1,GETDATA
LDA SCDR
RTS
此外,Pocket PC的外设开发应该做便携、低功耗等方面的考虑。例如,在固件程序等待中断的空循环体,加入一句WAIT指令,即在每次中断调用返回后等待下次中断期间,系统进入WAIT低功耗方式。因为每两次中断的间隔为100ms,而每次调用的中断子程不超过几十条指令,系统绝大部分的时间是等待;所以,这样能够比较明显地降低功耗。
2.3 软件的开发
Pocket PC上的接口驱动软件的开发,包括完成从串口获取数据、解码、向操作系统插入虚拟按键消息以及对于虚拟按键消息的设定等功能。接口驱动程序流程如图4所示。
<ignore_js_op>
2010-3-9 19:48:51 上传
<strong>下载附件</strong> (19.59 KB)
</ignore_js_op>
Windows CE操作系统在编程接口(API)上,保持了与Win32体系的高度兼容。同时,使用Embedded Visual Tools中的C++开发环境与使用VC++6.0具有很大的相似性。
在软件的开发中,使用到的技术主要有串口通信、多线程、发送虚拟按键消息、读写注册表等等。
这些功能都可以通过调用相应的API函数实现,如表2所列。Windows CE是一个全新架构的纯32位系统,它针对有限资源、高稳定度、模块化的需求,对于Win32 API函数作了大量的修改和简化。16位版本的API函数被舍弃,一些API函数对于Windows CE平台无意义的参数被定义为忽略,而且绝大部分API函数的内部实现已经不同于Win32平台了。但是,Windows CE版本的API函数在编程接口上与Win32平台还是保持了基于一致(见表2),因而,有VC++开发经验的人,能够比较快地转向Windows CE的程序设计。
<strong>表2 程序使用的API函数</strong>
API函数功 能 注 释CreateFil()以文件名为“COM1:”打开串口,返回个文件句柄ReadFile()根据文件句柄,从串口读取字节WriteFile()根据文件句柄,向串口发送字节PurgeComm()清除串口之前的任务和数据CreateThread()创建新的线程,一个负责程序界面和主要功能,另一个负责串行通信keybd_event()向系统的消息队列中插入自定义的虚拟按键消息,第一个参数是要发送的虚拟按键键码RegCreateKeyEx()在注册表指定位置创建一个键,返回键的句柄RegSetValueEx()在指定的键内设定一个值RegOpenKeyEx()打开指定的键(获得键的句柄)RegQueryValueEx()关闭已打开的键
接口驱动程序(见图5)在确认设备连接后,从设备获取每次2字节的按键编码,然后将其在程序界面中即时显示出来,并且向Win CE的消息循环中插入相应的虚拟按键消息,供其它应用程序响应;而输入信号对应的按键可以自行定义,并保存在注册表中。
<ignore_js_op>
2010-3-9 19:48:52 上传
<strong>下载附件</strong> (74.25 KB)
</ignore_js_op>
<strong>3 总结</strong>
在本文基础上,如果采用数/模转换、电机控制等模块作为输入/输出信号,或是采用MC68HC908系列其它型号的单片机,则可以针对不同的需求开发出各种Pocket PC外设,实现如数据采集、测控、通信等各种功能,形成各种新的Pocket PC便携式应用方案。
此外,如果采用μC/OS-II实时操作系统以及IrDA协议栈,还可以开发出基于IrDA接口的PocketPC外设,将更加方便易用。
<strong>参考文献</strong>
1. 刘慧银.程建平.龚光华 Motorola微控制器MC68HC08原理及其嵌入式应用 2001
2. 张友德.涂时亮.陈章龙 M68HC08系列单片机原理与应用 2001
3. 陈章龙.涂时亮 嵌入式系统Intel StrongARM结构与开发 2002
4. CHRIS MUENCH.精英科技 Windows CE权威指南 2001
5. Nick Grattan.Marshall Brain Windows CE 3.0 Application Programming 2001
6. Douglas Bo1ing.博彦科技 Windows CE程序设计 1999
作 者:清华大学 曾鸣 刘慧银
来 源:单片机与嵌入式系统应用 2003(7) |
|