论文部分内容阅读
摘 要: 阐述基于Cortex-M3内核芯片和Zigbee技术的无线手持移动设备的软硬件开发设计。在硬件设计中,按照功能模块阐述各个模块的设计原理;在软件中主要涉及ucos-II操作系统的移植,无线通信的工作流程以及ucGUI图形用户软件的在触摸屏中的应用。
关键词: Cortex-M3;Zigbee;ucos-II;ucGUI
中图分类号:TP391 文献标识码:A 文章编号:1671-7597(2011)0910053-02
0 引言
随着Internet的发展和后PC时代的到来,嵌入式系统的应用越来越广泛,基于ARM的嵌入式技术已经成为当前嵌入式领域研究的一个亮点。本设备采用基于Cortex-M3内核的ARM嵌入式微处理器和目前流行的ZigBee无线通讯技术开发。其中Cortex-M3内核采用指令和数据可以同时从存储器中读取的哈佛总线架构,对多个操作可以并行执行。它的Thumb-2指令集支持8位,16位,32位等非对齐访问和位操作,使得指令共存于同一模式,复杂性大幅下降。通讯部分采用Zigbee技术,它是一种短距离、低速率的无线网络技术,具有低功耗、低成本、短时延和高安全性等特点。适合于自动控制、传感、监控和远程控制等领域,可以嵌入各种设备,同时支持地理定位功能。
1 总体架构设计
系统的架构如图1所示:
整个设备分为四层:硬件层、系统服务层、驱动程序层和应用层。硬件层采用搭载基于cortex-M3内核的ARM嵌入式微处理器芯片的主板和由CC2430/2431芯片组建的ZigBee无线通信网络,其强大的多媒体处理能力和低功耗特点使它适用于手持式移动设备的开发;系统服务层建立在ucos-II实时操作系统上,包括实时内核、通信服务等部分。在这个层次中主要实现操作系统,如任务调度、时间管理、消息队列和信号量等内核服务;在驱动程序层主要实现对触摸屏,LCD的驱动程序的开发,以及完成ZigBee协议层的实现;应用层建立在以上几层结构之上,通过ucGUI图形界面利用系统服务层提供的接口实现网络的管理和数据传输等任务。
2 系统的硬件开发
手持移动设备硬件结构如图2所示,本系统核心采用意法半导体(ST)
公司的STM32F103芯片作为主处理器。它在Cortex-M3内核的基础上扩展了高性能的外围设备。性价比更高,价格低,接口丰富,提供了UART,SPI、I2C总线接口,以及JTAG。该处理器具有良好的实时性和低功耗的特点,以及出色的计算性能和优越的系统中断响应能力,能满足系统对性能的要求。
根据系统的功能不同,主要有以下硬件模块,如图2。
2.1 存儲器模块
辅助存储器是用来存放大数据量的程序代码或信息,如系统的启动代码Bootloader文件、内核镜像文件以及文件系统均存于此。本设计选用三星公司的8bit NANDFLASH存储器K9F1208作为本系统的辅助存储器,大小为64M,完全可以满足本系统的要求。
2.2 Zigbee无线通信结点以及收发模块
移动设备数据的采集和传输主要通过ZigBee无线网络来实现。通过无线网络的设计可以提供更大的灵活性和流动性。无线通信节点选用TI公司的ZigBee射频收发芯片CC2430,它是Chipcon公司推出的用来实现嵌入式ZigBee应用的片上系统。它支持2.4GHz IEEE 802.15.4协议,并结合了高性能的2.4GHz Dsss(直接序列扩频)射频收发器核心,以及增强性能的8051MCU和8kB的RAM等。CC2430的应用电路如图3所示,其中内部的电压稳压器可为所有1.8V电压的引脚和内部电源供电,C214,C209,C200等为去耦电容,主要用于电源滤波,以提高芯片的工作稳定性。电路中的非平衡变压器由电感L301,L302,L303和电容C309,C311组成,满足RF输入/输出匹配电阻50欧姆的要求。R200,R201为偏置电阻,其中R200主要用于为32MHz的晶体振荡器提供合适的工作电流,通过R201可为芯片内部射频部分提供精密电流参考源。晶体振荡器电路由一只32MHz的石英谐振器和两只电容(C210,C211)构成。
2.3 TFT触摸屏
该设备的显示方案采用触摸屏。为了保证显示的速度要求和系统的稳定性,采用四线电阻式触摸屏。四线电阻式触摸屏每次按压后,将产生4个电压信号:X+,Y+,X-,Y-。它们经过A /D转换后得到相应的值。触摸屏控制器选用的是ADS7843芯片,该控制器为SPI接口,具有触摸中断功能;液晶屏选用的是SPFD5408A,该屏幕为3.5英寸,具有高速8,9,16,18位并行接口,可以显示16位和18位的RGB彩色。触摸屏控制电路如图4所示,主要是ADS7843的外围电路。MOSI,MISO是ADS7843与STM32F103之间的信号线。INT为触摸中断信号,SCLK是时钟线。X+/-,Y+/-是触摸屏的信号。
2.4 片上和片外扩展模块
包括晶振、电源电路、复位电路、JTAG调试电路,SPI总线扩展等。用于实现系统的输入输出控制和音频、图像等的编解码。
3 系统的软件开发
3.1 ucos-II的移植
本设备选用ucos-II嵌入式实时操作系统。该操作系统支持最多64个任务,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,主要用于建立和管理各个模块的任务,完成多任务之间的调度和同步,并为硬件驱动和系统服务程序提供服务。ucos-II在STM32F103芯片上的移植按照要求分为需要修改部分和不需要修改部分,其中需要修改源代码的文件包括:
1)头文件OS_CPU.H主要包含与编译器相关的数据类型的定义、堆栈类型的定义以及几个宏定义和函数说明。我们需要在OS_CPU.H中重定义与编译器相关的数据类型,其代码如下:
typedef unsigned char BOOLEAN; // Boolean布尔变量
typedef unsigned char INT8U; // 无符号8位整数
typedef signed char INT8S; // 有符号8位整数
typedef unsigned short INT16U; // 无符号16位整数
typedef signed short INT16S; // 有符号16位整数
typedef unsigned int INT32U; // 无符号32位整数
typedef signed int INT32S; // 有符号32位整数
typedef float FP32; // 单精度浮点数
typedef double FP64; // 双精度浮点数
typedef unsigned int OS_STK; // 堆栈入口宽度是32位宽度
typedef unsigned int OS_CPU_SR; // 定义CPU状态寄存器的宽度为32位 (PSR = 32 bits)
在这个文件中还定义开关中断的方式及指令实现,并通过语句#define
OS_STK_GROWTH 1 定义堆栈的增长方向为向下递减。
2)汇编格式文件OS_CPU_A.ASM主要包含与移植有关的汇编语言函数,需要对处理器的寄存器进行操作。主要包括OSStartHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickISR()4个函数。OSStartHighRdy
()在多任务系统启动函数OSStart()中调用,完成的功能是将就绪表中最高优先级任务的栈指针加载到sp中,并强制中断返回。这样就绪的最高优先级任务就如同从中断返回到运行态一样,使得整个系统得以运转。OSCtxSw()函数实现任务级的上下切换。OSIntCtxSw()在程序退出中断服务函数OSIntExit()中调用,实现中断级任务切换。OSTickISR()是系统时钟节拍中断服务函数,为内核提供时钟节拍。
3)OS_CPU.C主要包括6个c函数:OSTaskStkInit(),OSTaskCreate
Hook(),OSTaskDelHook(),OSTaskSwHook(),OSTaskStartHook(),
OSTimeTickHooK()。唯一必要的函数是OSTaskStkInit(),STaskStkI
Nit()在OSTaskCreate()和OSTaskCreateExt()中调用,用来初始化任务的堆栈结构。其他的5个是用户可以定义的钩子函数,只需声明即可。
3.2 无线通信设计
无线节点与设备的通信流程见图5:
主要步骤如下:
第一步:初始化,主要是串口UART的初始化。串口UART的初始化函数为voidHalUARTInit(),该函数没有任何参数和返回值。
第二步:扫描信道,使用void MAC_MlmeScanReq(macMlmeScanReq_t *pData)。
函數来完成,因为节点工作工作在2.4GHz的频段上,共扫描16条信道,以找到空闲信道。pData为指向参数结构体的指针。
第三步:执行绑定,以建立逻辑链路,使用函数:ZDP EndDeviceBin
DReq()通过该绑定请求函数,完成绑定的功能。
第四步:建立逻辑链路之后,如果有数据传输的要求,就执行相应的程序。数据的处理包括数据的发送和接收,在接收数据过程中,要判断数据是否溢出。
3.3 ucGUI在触摸屏上的移植
本设备的人机交互采用触摸屏。它的主要功能是报告用户的触摸操作并标识触摸位置的坐标。它通过对每次发生的触摸操作产生一个中断来实现。一旦接收到中断信号,该触摸屏的设备驱动程序开始查询触摸屏处理器,并请求处理器发送触摸坐标。当驱动程序接收到坐标,就将有关的触摸信号和相关数据信息发送给用户应用程序,然后由用户应用程序根据它的需要处理数据。
目前ucGUI是一种用于嵌入式应用的图形支持软件,它占用空间小,
移植性强,效率高,被设计用于不依赖于处理器和LCD控制器的图形用户接口。它实现了复杂绘图函数的封装,解决了绘图中出现的大部分问题,并给用户层提供API 接口。用户层利用ucGUI 系统层提供的API 就可以实现系统图形用户界面的开发。在使用 ucGUI 提供的触摸屏驱动程序时,需要将以下4 个与硬件相关的函数加入到工程中,它们定义在文件GUI_X_TOUCH.C中,通过GUI_TOUCH_Exec()在轮询触摸屏时调用。
TOUCH_X_ActivateX()//准备X 轴的测量
TOUCH_X_ActivateY()//准备Y轴的测量
TOUCH_X_MeasureX()//返回A/D转换器X轴的测量结果
TOUCH_X_MeasureY()//返回A/D转换器Y轴的测量结果
除此之外GUI_X_TOUCH.c还要定义触摸屏的初始化函数vInitTouch
Panel(),主要是用来初始化触摸屏的I/O口和A/D转换器,伪码描述如下:
void vInitTouchPanel( void ){
vInitTouchPanelAD();//初始化触摸屏的A/D 转换器
vInitTouchPanelIO();//初始化触摸屏的I/O 口
}
4 总结
本系统充分利用了Cortex-M3芯片高效快速的性能,以及Zigbee低功耗,短距离传输,抗干扰能力强,硬件成本低等优势,在ucos-II的操作系统中通过ucGUI编出可视化的友好界面移动设备,实现低成本、高效率、实用性强的目标。该设备可广泛应用于景区导游,矿区监控,病人监护以及物联网等领域。
参考文献:
[1]李文仲、段朝玉,ZigBee2006无线网络与无线定位实战[M].北京:北京航空航天大学出版社,2008.
[2]史萌萌、江海河,uc/GUI在嵌入式测控系统中的移植与应用,微计算机信息[J].2007,11(2):22-24.
[3]Labrosse J J,uCOS-II MicroC/OS-II the real-time kernel second edtion[M].邵贝贝等译,北京:北京航空航天大学出版社,2003.
[4]曾鸣,u-cosII实时操作系统在嵌入式平台上进行移植的一般方法和技巧[J].今日电子,2004,11(3).
关键词: Cortex-M3;Zigbee;ucos-II;ucGUI
中图分类号:TP391 文献标识码:A 文章编号:1671-7597(2011)0910053-02
0 引言
随着Internet的发展和后PC时代的到来,嵌入式系统的应用越来越广泛,基于ARM的嵌入式技术已经成为当前嵌入式领域研究的一个亮点。本设备采用基于Cortex-M3内核的ARM嵌入式微处理器和目前流行的ZigBee无线通讯技术开发。其中Cortex-M3内核采用指令和数据可以同时从存储器中读取的哈佛总线架构,对多个操作可以并行执行。它的Thumb-2指令集支持8位,16位,32位等非对齐访问和位操作,使得指令共存于同一模式,复杂性大幅下降。通讯部分采用Zigbee技术,它是一种短距离、低速率的无线网络技术,具有低功耗、低成本、短时延和高安全性等特点。适合于自动控制、传感、监控和远程控制等领域,可以嵌入各种设备,同时支持地理定位功能。
1 总体架构设计
系统的架构如图1所示:
整个设备分为四层:硬件层、系统服务层、驱动程序层和应用层。硬件层采用搭载基于cortex-M3内核的ARM嵌入式微处理器芯片的主板和由CC2430/2431芯片组建的ZigBee无线通信网络,其强大的多媒体处理能力和低功耗特点使它适用于手持式移动设备的开发;系统服务层建立在ucos-II实时操作系统上,包括实时内核、通信服务等部分。在这个层次中主要实现操作系统,如任务调度、时间管理、消息队列和信号量等内核服务;在驱动程序层主要实现对触摸屏,LCD的驱动程序的开发,以及完成ZigBee协议层的实现;应用层建立在以上几层结构之上,通过ucGUI图形界面利用系统服务层提供的接口实现网络的管理和数据传输等任务。
2 系统的硬件开发
手持移动设备硬件结构如图2所示,本系统核心采用意法半导体(ST)
公司的STM32F103芯片作为主处理器。它在Cortex-M3内核的基础上扩展了高性能的外围设备。性价比更高,价格低,接口丰富,提供了UART,SPI、I2C总线接口,以及JTAG。该处理器具有良好的实时性和低功耗的特点,以及出色的计算性能和优越的系统中断响应能力,能满足系统对性能的要求。
根据系统的功能不同,主要有以下硬件模块,如图2。
2.1 存儲器模块
辅助存储器是用来存放大数据量的程序代码或信息,如系统的启动代码Bootloader文件、内核镜像文件以及文件系统均存于此。本设计选用三星公司的8bit NANDFLASH存储器K9F1208作为本系统的辅助存储器,大小为64M,完全可以满足本系统的要求。
2.2 Zigbee无线通信结点以及收发模块
移动设备数据的采集和传输主要通过ZigBee无线网络来实现。通过无线网络的设计可以提供更大的灵活性和流动性。无线通信节点选用TI公司的ZigBee射频收发芯片CC2430,它是Chipcon公司推出的用来实现嵌入式ZigBee应用的片上系统。它支持2.4GHz IEEE 802.15.4协议,并结合了高性能的2.4GHz Dsss(直接序列扩频)射频收发器核心,以及增强性能的8051MCU和8kB的RAM等。CC2430的应用电路如图3所示,其中内部的电压稳压器可为所有1.8V电压的引脚和内部电源供电,C214,C209,C200等为去耦电容,主要用于电源滤波,以提高芯片的工作稳定性。电路中的非平衡变压器由电感L301,L302,L303和电容C309,C311组成,满足RF输入/输出匹配电阻50欧姆的要求。R200,R201为偏置电阻,其中R200主要用于为32MHz的晶体振荡器提供合适的工作电流,通过R201可为芯片内部射频部分提供精密电流参考源。晶体振荡器电路由一只32MHz的石英谐振器和两只电容(C210,C211)构成。
2.3 TFT触摸屏
该设备的显示方案采用触摸屏。为了保证显示的速度要求和系统的稳定性,采用四线电阻式触摸屏。四线电阻式触摸屏每次按压后,将产生4个电压信号:X+,Y+,X-,Y-。它们经过A /D转换后得到相应的值。触摸屏控制器选用的是ADS7843芯片,该控制器为SPI接口,具有触摸中断功能;液晶屏选用的是SPFD5408A,该屏幕为3.5英寸,具有高速8,9,16,18位并行接口,可以显示16位和18位的RGB彩色。触摸屏控制电路如图4所示,主要是ADS7843的外围电路。MOSI,MISO是ADS7843与STM32F103之间的信号线。INT为触摸中断信号,SCLK是时钟线。X+/-,Y+/-是触摸屏的信号。
2.4 片上和片外扩展模块
包括晶振、电源电路、复位电路、JTAG调试电路,SPI总线扩展等。用于实现系统的输入输出控制和音频、图像等的编解码。
3 系统的软件开发
3.1 ucos-II的移植
本设备选用ucos-II嵌入式实时操作系统。该操作系统支持最多64个任务,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,主要用于建立和管理各个模块的任务,完成多任务之间的调度和同步,并为硬件驱动和系统服务程序提供服务。ucos-II在STM32F103芯片上的移植按照要求分为需要修改部分和不需要修改部分,其中需要修改源代码的文件包括:
1)头文件OS_CPU.H主要包含与编译器相关的数据类型的定义、堆栈类型的定义以及几个宏定义和函数说明。我们需要在OS_CPU.H中重定义与编译器相关的数据类型,其代码如下:
typedef unsigned char BOOLEAN; // Boolean布尔变量
typedef unsigned char INT8U; // 无符号8位整数
typedef signed char INT8S; // 有符号8位整数
typedef unsigned short INT16U; // 无符号16位整数
typedef signed short INT16S; // 有符号16位整数
typedef unsigned int INT32U; // 无符号32位整数
typedef signed int INT32S; // 有符号32位整数
typedef float FP32; // 单精度浮点数
typedef double FP64; // 双精度浮点数
typedef unsigned int OS_STK; // 堆栈入口宽度是32位宽度
typedef unsigned int OS_CPU_SR; // 定义CPU状态寄存器的宽度为32位 (PSR = 32 bits)
在这个文件中还定义开关中断的方式及指令实现,并通过语句#define
OS_STK_GROWTH 1 定义堆栈的增长方向为向下递减。
2)汇编格式文件OS_CPU_A.ASM主要包含与移植有关的汇编语言函数,需要对处理器的寄存器进行操作。主要包括OSStartHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickISR()4个函数。OSStartHighRdy
()在多任务系统启动函数OSStart()中调用,完成的功能是将就绪表中最高优先级任务的栈指针加载到sp中,并强制中断返回。这样就绪的最高优先级任务就如同从中断返回到运行态一样,使得整个系统得以运转。OSCtxSw()函数实现任务级的上下切换。OSIntCtxSw()在程序退出中断服务函数OSIntExit()中调用,实现中断级任务切换。OSTickISR()是系统时钟节拍中断服务函数,为内核提供时钟节拍。
3)OS_CPU.C主要包括6个c函数:OSTaskStkInit(),OSTaskCreate
Hook(),OSTaskDelHook(),OSTaskSwHook(),OSTaskStartHook(),
OSTimeTickHooK()。唯一必要的函数是OSTaskStkInit(),STaskStkI
Nit()在OSTaskCreate()和OSTaskCreateExt()中调用,用来初始化任务的堆栈结构。其他的5个是用户可以定义的钩子函数,只需声明即可。
3.2 无线通信设计
无线节点与设备的通信流程见图5:
主要步骤如下:
第一步:初始化,主要是串口UART的初始化。串口UART的初始化函数为voidHalUARTInit(),该函数没有任何参数和返回值。
第二步:扫描信道,使用void MAC_MlmeScanReq(macMlmeScanReq_t *pData)。
函數来完成,因为节点工作工作在2.4GHz的频段上,共扫描16条信道,以找到空闲信道。pData为指向参数结构体的指针。
第三步:执行绑定,以建立逻辑链路,使用函数:ZDP EndDeviceBin
DReq()通过该绑定请求函数,完成绑定的功能。
第四步:建立逻辑链路之后,如果有数据传输的要求,就执行相应的程序。数据的处理包括数据的发送和接收,在接收数据过程中,要判断数据是否溢出。
3.3 ucGUI在触摸屏上的移植
本设备的人机交互采用触摸屏。它的主要功能是报告用户的触摸操作并标识触摸位置的坐标。它通过对每次发生的触摸操作产生一个中断来实现。一旦接收到中断信号,该触摸屏的设备驱动程序开始查询触摸屏处理器,并请求处理器发送触摸坐标。当驱动程序接收到坐标,就将有关的触摸信号和相关数据信息发送给用户应用程序,然后由用户应用程序根据它的需要处理数据。
目前ucGUI是一种用于嵌入式应用的图形支持软件,它占用空间小,
移植性强,效率高,被设计用于不依赖于处理器和LCD控制器的图形用户接口。它实现了复杂绘图函数的封装,解决了绘图中出现的大部分问题,并给用户层提供API 接口。用户层利用ucGUI 系统层提供的API 就可以实现系统图形用户界面的开发。在使用 ucGUI 提供的触摸屏驱动程序时,需要将以下4 个与硬件相关的函数加入到工程中,它们定义在文件GUI_X_TOUCH.C中,通过GUI_TOUCH_Exec()在轮询触摸屏时调用。
TOUCH_X_ActivateX()//准备X 轴的测量
TOUCH_X_ActivateY()//准备Y轴的测量
TOUCH_X_MeasureX()//返回A/D转换器X轴的测量结果
TOUCH_X_MeasureY()//返回A/D转换器Y轴的测量结果
除此之外GUI_X_TOUCH.c还要定义触摸屏的初始化函数vInitTouch
Panel(),主要是用来初始化触摸屏的I/O口和A/D转换器,伪码描述如下:
void vInitTouchPanel( void ){
vInitTouchPanelAD();//初始化触摸屏的A/D 转换器
vInitTouchPanelIO();//初始化触摸屏的I/O 口
}
4 总结
本系统充分利用了Cortex-M3芯片高效快速的性能,以及Zigbee低功耗,短距离传输,抗干扰能力强,硬件成本低等优势,在ucos-II的操作系统中通过ucGUI编出可视化的友好界面移动设备,实现低成本、高效率、实用性强的目标。该设备可广泛应用于景区导游,矿区监控,病人监护以及物联网等领域。
参考文献:
[1]李文仲、段朝玉,ZigBee2006无线网络与无线定位实战[M].北京:北京航空航天大学出版社,2008.
[2]史萌萌、江海河,uc/GUI在嵌入式测控系统中的移植与应用,微计算机信息[J].2007,11(2):22-24.
[3]Labrosse J J,uCOS-II MicroC/OS-II the real-time kernel second edtion[M].邵贝贝等译,北京:北京航空航天大学出版社,2003.
[4]曾鸣,u-cosII实时操作系统在嵌入式平台上进行移植的一般方法和技巧[J].今日电子,2004,11(3).