微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于Nios II自助点菜系统的μC/GUI应用

基于Nios II自助点菜系统的μC/GUI应用

时间:06-05 来源:互联网 点击:

随着嵌入式系统在各领域的广泛应用,对图形化人机交互界面的需求逐渐增加。由于嵌入式系统硬件资源有限,从而要求图形用户界面具有轻型、占用资源少、高性能等特点。μC/GUI是一种用于嵌入式应用的Windows风格图形支持软件,它为任何使用图形LCD的应用提供一个有效的不依赖于处理器和LCD控制器的图形用户接口,工作在单任务或多任务系统环境下,适用于使用任何LCD控制和任何CPU尺寸的物理或虚拟显示。因此,掌握μC/GUI在嵌入式系统中的应用极为重要。移植μC/GUI到Nios II嵌入式软核处理器[1]成了最佳选择。本文根据自助点菜系统的实际应用,详细介绍了μC/GUI移植方法,并在融合触摸屏操作的基础上实现控件使用和操作系统开发。

1 硬件

系统中顾客使用终端触摸屏浏览服务信息并实现相关操作,通过无线局域网络和前台通信。各个点菜终端作为独立系统工作,所有数据传到前台上位机协调处理。本文仅介绍与μC/GUI相关的点菜终端构成部分。终端硬件框图如图1所示,利用片上可编程系统(SoPC)技术将Nios II处理器、外设接口控制器等功能模块集成到FPGA,构成可编程片上系统[2]。SDRAM、Flash控制器用于处理程序和数据的存储;512 KB SRAM作为图像数据缓存区;FPGA内部自定义LTM控制器和SD卡控制器模块,辅助软核工作,操作触摸屏并读取SD卡内的JPEG图片;UART接口用于和移植到CC2430的ZigBee模块通信;采用定时器以嵌入式uC/OS II操作系统。

触摸显示屏是4.3英寸数字LCD触碰面板TRDB-LTM,长宽比为15:9,支持24 bit并行RGB接口,能通过内置模数转换器(AD7843)将触碰点X/Y坐标转换成对应数字信息。触摸屏物理分辨率为800×480,支持16 bit RGB565格式。

2 μC/GUI移植

本系统的用户界面采用uC/GUI,其最新版本是3.98,其中一些组件不太完整。根据点菜系统使用需求,特添加3.94版本的JPEG模块来显示图片数据。ucgui398\Start\Config和ucgui398\Start\GUI是源码包最重要的两个文件夹,其中包括各种配置文件、μC/GUI内核文件、与字体相关的代码文件、LCD驱动代码文件、μC/GUI支持的控件代码以及视窗管理部分代码等[3]。

2.1 修改LCD配置文件

为使系统正确工作,必须修改文件LCDConf.h(GUI目录中)中的一些配置宏。该文件与硬件直接相关,根据所使用的LCD类型和LCD控制器进行配置。由于μC/GUI提供不同型号的LCD配置文件(文件夹Sample\LCDConf\xxx中,xxx代表LCD驱动器名称),应用程序开发者可直接在此基础上修改程序。实际应用中,选择LCDLin.c驱动文件。由于LTM控制器对显示分辨率进行硬扩处理,因此LCD尺寸选择400×240。系统底层配置的部分宏如表1所示。

LCD_READ_MEM(off)、LCD_WRITE_MEM(off,data)宏定义是μC/GUI与LTM控制器接口的关键[4]。SRAM_BASE是512 KB SRAM读写操作的基地址,这些宏定义能实现对图像数据缓存区的16 bit读写操作。此外,一般移植操作必须定义LCD_INIT_CONTROLLER(),以实现LCD屏初始化配置。LTM控制器初始化了触摸屏,因此软件配置中省略此项。

2.2 修改GUI和触摸屏配置文件

在调整系统或减小内存消耗时需配置LCDConf.h。具体步骤如下:(1)备份原始配置文件;(2)检查所有配置开关;(3)删除配置中不使用部分。除此之外,系统工程编译时,会出现一些未定义错误,需要将Sample\GUI_X\GUI_X.c添加到工程中,该文件定义GUI与操作系统的接口,以及Debug错误报告等函数。由于系统使用μ/OS II,可选择GUI_X_uCOS.c文件,并在文件结尾处添加以下函数:
void GUI_X_Log(const char *s){GUI_USE_PARA(s);}
void GUI_X_Warn(const char *s){GUI_USE_PARA(s);}
void GUI_X_ErrorOut(const char *s){GUI_USE_PARA(s);}
同时将GUI_X_ExecIdle( )中的OS_X_Delay(1)替换为OSTimeDly(1)。

GUI文件夹中另一个需要配置的文件是GUITouchConf.h,根据触摸屏类型不同,宏参数也不同。执行触摸屏操作的主要流程在GUI\Core\GUI_TOUCH_DriverAnalog.c文件中。头文件部分宏配置如表2所示。

2.3 触摸屏与GUI接口

μC/GUI支持键盘、鼠标、触摸屏等外设,并在源码级对其消息响应。为使触摸屏正常工作,系统除对相应配置文件修改和添加一些相关函数外,必须实现触摸屏底层驱动,即修改LCDLin.c驱动文件。

理论上,GUI_TOUCH_AD_LEFT和GUI_TOUCH_AD_RIGHT取值应当为0或1 024,但实际操作时,必须根据具体情况校准。系统取触摸屏四个角坐标作为校正标准,经过多次试验,四个坐标分别是(29,160)、(3 936,160)、(29,3 900)和(3 936,3 900)。在GUI\Core\GUI_TOUCH_DriverAnalog.c中修改相应宏,再据实际情形确定余下开关宏的值。

通过调用GUI_TOUCH_Exec()函数来获得触摸屏触点位置:系统通过中断服务程序读回触点实际坐标值(x,y);接着将实际坐标值转换到逻辑坐标;最后调用GUI_TOUCH_StoreState(x,y)保存逻辑坐标值。为实时得到触点坐标,需不断调用GUI_TOUCH_Exec()函数,因此建立单独任务对该函数调用,以保证触摸屏任务的实时响应。该部分设计难点在于中断标志清零,如果每次得到触点位置后不能即刻清零,则会影响GUI内部去抖操作和校准处理,因此在保存稳定坐标值后再清除标志位。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top