当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]利用MC68HC908开发Pocket PC掌上电脑外设

 摘要:概述Pocket PC掌上电脑的软、硬件构架;以一个输入设备的开发应用为例,介绍如何利用Motorola MC68HC908单片机以及Microsoft Embedded Visual Tools编程工具,开发Pocket PC掌上电脑的外设及其驱动程序。

    关键词:MC68HC908 Pocket PC Windows CE 外设

目前,Pocket PC掌上电脑正以其强大的多媒体性有和良好的可扩展性,逐步改变人们对于传统PDA的认识。

Pocket PC的应用领域迅速扩展,已经不再局限于日程、记事等简单功能。它能够胜伤从多媒体娱乐、文书处理,到诸如“交警事故的现场处理”等的各种应用。这些,为高效的移动办公、便携式的娱乐等开创了新的局面,同时也是新的市场。因为,每一个新的应用领域的出现,都伴随着相应的外设和应用程序的需求。

本文将以一个输入设备的开发为例,探讨如何利用Motorola MC68HC908单片机以及Microsoft Embedded Visual Tools编程工具,开发Pocket PC掌上电脑的外设及其驱动程序。

1 Pocket PC的软、硬件构架

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所示。

由图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仿真器等等。

2 外设的开发

下面以一个输入设备的开发为例,介绍如何开发Pocket PC掌上电脑的外设及其驱动程序。这是一个简单的按键式输入设备,可以认为是键盘或者游戏手柄。主要是为了解决Pocket PC的手写输入方式,在输入大量方案和进行游戏娱乐时不够方便的问题。

该输入设备硬件部分用MC68HC908GP32型单片机设计实现,其固件程序负责完成扫描输入、编码、串行通信的功能。而Pocket PC上的接口驱动程序用Embedded Visual Tools开发,负责完成串行通信、解码、向系统发出输入消息的功能。此外,还可进一步实现组合按键、定制快捷输入等高级功能。

2.1 硬件开发

整个输入设备以MC68HC908GP32单片机为核心。该型号是Motorola HC08系列的通用型产品,片内资源丰富,功能强大。系统框图如图2所示。

按键的输入,可以使用普通的按键开关,也可以使用阵列的小键盘。按键输入产生的信号,送往GP32的通用I/O口PortA和PortB,其中PortA是键盘模块的接口,可产生键盘中断。

单片机的串口通信,由其SCI异步串行模块外接MAX232实现。

2.2 单片机的固件开发

单片机的固件程序用汇编语言编写,使用P&EWIN-IDE编译器进行编译。程序的流程如图3所示。

单片机的初始化,包括对基本配置、SCI串口和时钟TIM1等部分的初始化,如表1所列。

表1 固件程序的初始化

地  址 寄存器 描    述
$001E CONFIG1 01 属性设置
$001F CONFIG2 3D
$0036 PCTL 71 锁相环(产生2.4576MHz内部总线时钟)
$0037 PBWC E0
$0038 PMSH 01
$0039 PMSL 2C
$003A PMRS 80
$0013 SCCR1 40 SCI(9600bps双向传输速率)
$0014 SCCR2 0C
$0019 BAUD 02
$0023 T1MODH 1E TIM1时钟(溢出中断10次/s)
$0024 T1MODL 00
$0020 T1SC 55

如流程图所示,固件程序在完成初始化后,就会尝试与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所示。

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的程序设计。

表1 程序使用的API函数

API函数

功   能   注   释

CreateFil() 以文件名为“COM1:”打开串口,返回个文件句柄
ReadFile() 根据文件句柄,从串口读取字节
WriteFile() 根据文件句柄,向串口发送字节
PurgeComm() 清除串口之前的任务和数据
CreateThread() 创建新的线程,一个负责程序界面和主要功能,另一个负责串行通信
keybd_event() 向系统的消息队列中插入自定义的虚拟按键消息,第一个参数是要发送的虚拟按键键码
RegCreateKeyEx() 在注册表指定位置创建一个键,返回键的句柄
RegSetValueEx() 在指定的键内设定一个值
RegOpenKeyEx() 打开指定的键(获得键的句柄)
RegQueryValueEx() 关闭已打开的键

接口驱动程序(见图5)在确认设备连接后,从设备获取每次2字节的按键编码,然后将其在程序界面中即时显示出来,并且向Win CE的消息循环中插入相应的虚拟按键消息,供其它应用程序响应;而输入信号对应的按键可以自行定义,并保存在注册表中。

3 总结

在本文基础上,如果采用数/模转换、电机控制等模块作为输入/输出信号,或是采用MC68HC908系列其它型号的单片机,则可以针对不同的需求开发出各种Pocket PC外设,实现如数据采集、测控、通信等各种功能,形成各种新的Pocket PC便携式应用方案。

此外,如果采用μC/OS-II实时操作系统以及IrDA协议栈,还可以开发出基于IrDA接口的PocketPC外设,将更加方便易用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭