μC/GUI在基于NiosⅡ嵌入式开发平台的环境智能监控系统中的移植与应用
0 引言
人机交互是智能化嵌入式产品一项重要功能,在设计智能监控系统时人机交互需要界面设计软件,常用的图形界面软件有MiniGUI,QT/Embedded,OpenGUI等。Altera公司NiosⅡ已经集成了μC/OS-Ⅱ系统。μC/OS-Ⅱ是一个实时多任务内核,不具有现代操作系统的线程,上述GUI不能方便的运行。
μC/GUI是一个优秀的嵌入式图形用户界面,具有众多的优点。如,代码开源,占用系统资源少,所有的代码均由ANSIC实现,功能强大且易于移植,可以应用于任何的LCD控制和CPU任何尺寸的物理与虚拟显示,非常适合用于资源有限的嵌入式系统中。同时,μC/GUI与μC /OS-Ⅱ都是美国Micrium公司产品,μC/GUI能轻易地在μC/OS-Ⅱ上应用,实现与μC/OS-Ⅱ的无缝结合。
本文在设计具有人机交互功能的基于NiosⅡ的嵌入式智能监控系统时,为实现友好的人机交互和更加方便的显示,将μC/GUI移植到NiosⅡ嵌入式平台,系统采用通用液晶显示器显示,具有更加广泛的通用性。
1 硬件系统设计
本系统设计采用的硬件平台是Altera公司生产的DE2开发板,使用软件是QuartusⅡ9.0,FPGA芯片是EP2C35F672C6,通过VGA接口连接液晶显示器显示,利用QuartusⅡ软件的SOPC Builder搭建的系统设计如图1所示。其中,PS/2 IP核是采用AItera公司大学计划中的IP核,SDR AM为系统运行时的内存。在系统中运行交互界面时,通过PIO传输系统设置的参数,控制硬件实现的视频的采集、显示与相关视频分析算法的实现。
VGA IP核采用突发传输模式,这样可以提高从端口的数据吞吐量,在主端口一次多个数据单元的时候,可以达到极高的效率。在本设计的VGA IP核设计一次传输10个数据单元,额外的burstcount信号为4位。
2 μC/GUI移植
本系统采用μC/GUI 3.98版本进行移植,在移植μC/GUI之前,有必要熟悉μC/GUI的软件体系结构与文件结构,μC/GUI的软件体系结构如图2所示。
μC/GUI函数库为用户程序提供GUI接口,包含的函数有文本、数值、二维图形、输入设备以及各种窗口对象。其中,输入设备可以是鼠标、键盘或触摸屏;二维图形包括图片、直线、多边形、圆、椭圆、圆弧等;窗口对象包括按钮、编辑框、进度条、复选框等。μC/GUI由库函数目录GUI和配置文件目录Config两个目录组成,表1是μC/GUI目录结构,带星号的都是可选项。
其中Config目录下包括3个文件分别是LCDConf.h、GUIConf.h和GUITouchConf.h,3个文件分别用来配置LCD驱动、μC/GUI配置、触摸屏的配置。μC/GUI移植主要就是对Config文件以及LCDDriver的移植,针对不同的平台做相应的修改。
2.1 配置文件的移植
GUIConf.h是μC/GUI的基本属性配置文件,有很多开关可以配置,配置的内容包括是否采用内存设备,是否采用窗口管理器,是否支持操作系统、触摸屏,以及配置动态内存的大小等。具体可以参考μC/GUI的用户手册,这里只需配置几个必要的参数如下:
2.2 LCD驱动文件的移植
由于采用VGA显示,根据LCDConf.h对LCD_CONTROLLER的配置,在LCD驱动文件目录下选择LCDDummy.c,删除其他无关的驱动文件,LCD驱动文件负责把μC/GUI的各种函数解释成LCDconf.h文件中定义的液晶接口函数,这个文件与具体的硬件连接无关,LCD驱动在SDRAM开辟帧缓冲以及往VGAIP中写入数据,在函数LCD_Controller_Init()完成,开辟显示缓冲区由framebuffer=(aIt_u32*)alt_uncached_malloc(LCD _XSIZE*LCD_YSIZE*LCD_BITSPERPIXEL/2)实现。同时编写void LCD_L0_SetPixelIndex(int x,int y,int PixelIndex)和unsigned int LCD_L0_GetPixelIndex(int x,int y)这2个函数,分别是设置一个像素和获取一个像素的颜色,后面很多操作如画点、线、圆等都需要调用这2个函数。
2.3 接口函数移植
由于支持μC/OS-Ⅱ操作系统,所以要对GUI_X_μCOS.c文件进行修改,GUI_X_μCOs.c定义了GUI与RTOS的接口函数,使之能与μC/OS-Ⅱ操作系统实现无缝衔接,要增加系统延时函数OSTimeDly(1),void GUI_X_Execldle(void){OS_X_Dday(1);}改为:
到此,μC/GUI移植需要修改的代码部分已经全部完成。
3 μC/GUI应用程序开发实例
根据平台修改完配置、驱动文件和接口函数之后,在NiosⅡ9.0 IDE建立一个新的工程,选择工程操作系统为μC/OS-Ⅱ,将已经修改好的Config和GUI文件夹以及GUI_X_μCOS.c拷贝到建立的工程目录下,可以根据实际需求,删掉一些不需要的功能文件,减少编译时间以及编程生成的执行文件的大小。根据需求编写相应的应用程序,要使PS/2IP核正确使用,在应用程序中要用要alt_up_ps2_open_dev("/ dev/ps2"),开启PS/2 IP核,同时要正确显示图形界面在显示界面代码之前要调用GUI_Init()函数,它的功能是初始化GUI,同时初始化LCD控制器与显示缓冲区。Nios II IDE编译器成功编译工程还要为移植的文件添加相应的路径,在include路径要包括Config、GUI/Core,GUI/Widget和GUI/WM,编译完成之后的工程目录如图3所示。成功编译之后将程序下载到DE2开发平台,程序运行嵌入式智能监控系统交互界面,运行画面如图4所示。
交互界面显示了系统标志,按键、窗口以及键盘,每个按键代表一个功能,按键按下,弹出参数输入窗口,可以在键盘输入相关的参数通过PIO传输到硬件模块。
- 基于DSP Builder的VGA接口设计(04-10)
- 基于DSP Builder的VGA接口系统设计(04-10)
- 基于FPGA的LCDVGA控制器设计(06-06)
- 利用FPGA实现外设通信接口之: 典型实例-VGA接口的设计与实现(06-05)
- 利用FPGA实现外设通信接口之: 利用FPGA实现常用显示接口(Display Interface)(06-05)
- 基于FPGA的VGA波形显示方法研究(06-05)