长理培训真题库
我的
军队文职考试一本通

嵌入式图形用户界面在S3C44B0X上的移植

2020-02-01 15:37
1 引言 如今随着信息化、智能化、网络化的迅速发展,嵌入式系统已被广泛应 用在消费电子、工业应用、军事国防、网络设备等领域。μC/GUIC/GUI 作为一个 通用的嵌入式应用的图形模块,它在嵌入式系统中的作用也显得的越来越重 要。 μC/GUIC/GUI 是一个源代码开放的图形系统,它提供了丰富的资源,包括二 维绘图库、多字体及可扩充字符集、Unicode、位图显示、多级 RGB 及灰度 调整、动画优化显示、具有 Windows 风格的对话框和预定义控件(按钮、编 辑框、列表框等),以及对键盘、鼠标、触摸屏等输入设备和双 LCD 输出的 支持,目前在具有图形界面的嵌入式产品中得到越来越广泛地应用。 2 通用嵌入式图形模块 uC/GUI μC/GUIC/GUI 是一个通用的嵌入式应用的图形模块,它是美国 Micrium 公司 开发的一种高效的、与处理器和 LCD 控制器独立的通用 GUI,可以适用各种 CPU 和 LCD,在单任务和多任务操作系统中,它都可以工作得很好。它具有 驱动接口层和应用层,全部代码采用 ANSI _C 编写,提供源代码,可以方便 的移植到各种平台下。 2.1 μC/GUIC/GUI 特点 (1) 支持 任何 8 位、 16 位 和 32 位的 CPU ,只 要求 CPU 具 有相 应的 ANSI_C 编译器即可。 (2) 所有硬件接口定义都使用可配置的宏。 (3) 字符、位图可显示与 LCD 的任意点,并不限制与字节长度的整数倍 数地址。 (4) 所有程序在长度和速度方面都进行了优化,结构清晰。 (5) 对于慢速的 LCD 控制器,可以使用缓冲存储器减少访问时间,提高 显示速度[1]。 因为 μC/GUIC/GUI 具有这些优点,它越来越受到更多嵌入式设计者的青睐。 2.2 μC/GUIC/OS-II 介绍 在嵌入式系统的开发过程中,选择操作系统与选择开发平台一样的重要 。 虽然不是一个完整的实时操作系统,只是一个实时内核,但与其它操作系统 比起来它具有很多优点因而得到了广泛的应用。首先它是一种结构简单、源 代码公开的操作系统,适合所有的开发者使用;它具有可移植性,它的绝大部 分源码都是用移植性很强的 ANSI _C 编写,与微处理器硬件相关的部分采用 汇编语言编写,很容易被移植到各种微处理器上;它还具有可固化和可裁剪等 特点,对于嵌入式设计者来讲的,只要拥有固化手段(C 编译、连接、下载和 固化),就可以很方便将其嵌入到产品中去。设计者还可以根据系统应用程序 的需要对 μC/GUIC/OS-II 进行相应的裁剪来减少产品中的 μC/GUIC/OS-II 所需的存储器 空间,这可以通过条件编译来实现。 2.3 μC/GUIC/GUI 接口 μC/GUIC/GUI 是运行于操作系统之上的程序,它既需要与操作系统的协调, 又需要与各种输入输出设备的协调,来实现用户层与应用程序层的联结,即 通过输入设备接收用户请求、通过输出设备反映微处理器的响应。因此在这 一过程中 GUI 至少要与 3 个对象打交道:输入设备、输出设备和操作系统。因 此 μC/GUIC/GUI 接口主要包括 2 个,与操作系统的接口和与输入输出设备的接口, 这也正是在移植 μC/GUIC/GUI 的过程中所要解决的关键问题。 对于操作系统,GUI 作为操作系统的一个显示任务接受操作系统的调度, μC/GUIC/GUI 提供了与操作系统的接口支持。与操作系统的接口主要解决系统实 时性的要求。对于用户输入,μC/GUIC/GUI 提供了键盘、鼠标以及触摸屏等支持, 对于输出设备 GUI 反映微处理器的响应给用户是通过 LCD 输出图像来完成的, 对于不同型号和显示原理的 LCD 要编制相应的驱动程序。 3 uC/GUI 在基于 S3C44B0X 的 μC/GUIC/OS-II 上移植 3.1 S3C44B0X 微处理器和开发平台简介 这里硬件开发平台的微处理器选择三星公司的 S3C44B0X,实时操作系 统选择移植性较强的 μC/GUIC/OS-II。 S3C44B0X 微处理器是三星公司专为手持设备和一般应用提供的一款高 性价比的微处理器解决方案,它采用 ARM 7TDM I 核,工作在 66MHz,为减 少外围件, 该芯片集成了 8KB 的 Cache、LCD 控制器、5 通道 PWM 定时器和 一个内部定时器、71 个 I/O 口、8 个外部中断源、实时时钟等[3]。 移植的目标平台的液晶模块使用 320×240 分辨率, 通过总线的形式连接 在 S3C44B0X 的 Bank3 上, 并在系统的内存区开辟了一块内存作为液晶显示 的后台缓存。 要成功将 μC/GUIC/GUI 移植到该平台上一般要解决以下几方面的问题。 3.2 μC/GUIC/GUI 与操作系统的接口相关部分的修改 μC/GUIC/GUI 在与 μC/GUIC/OS-II 结合应用时通常被分为几个小的显示任务,由于 每个显示任务都共用一个 GUI_Context 上下文变量,在操作系统进行任务切 换时一个 GUI 任务对上下文的操作可能被另外一个 GUI 任务打断,此时新的 GUI 任务对上下文的操作是在被中断任务的上下文基础上进行的,这样前一 个任务的信息会被后一个任务所使用,有些基本信息作为公用信息需要被共 用,而有些信息在处理过程中是不能被打断的。这就存在资源互斥的问题。 μC/GUIC/GUI 在设计时是通过上锁和解锁来解决此问题。其过程是通过在关 键 区域入口设置 GUI_X_Lock()以获得专一访问 权,用完 后在出口处设置 GUI_X_ Unlock()让出资源,达到多个 GUI 任务对同一数据在关键区域内访问 的互斥。 在 μC/GUIC/GUI 移植到 μC/GUIC/OS-II 的过程中,则需要利用操作系统实现资源互 斥的系统调用对上述宏进行替换,这涉及到 3 个任务调度函数的重新定义: void GUI_X_InitOS (void); /*任务初始化*/ void GUI_X_Lock (void); /*任务锁定*/ void GUI_X_Unlock (void); /*任务解锁*/ 此外 μC/GUIC/GUI 还用到 μC/GUIC/OS-II 中的延时调用,通过在 GUI_X_Delay()中调 用 μC/GUIC/OS-II 的 OSTimeDly()实现延时和任务切换。这涉及到 2 个系统时间接 口函数的定义: int GUI_X_GetTime (void); /*取系统时间*/ void GUI_X_Delay (int ms); /*延时函数*/ 3.3 μC/GUIC/GUI 与输入输出设备驱动接口模块设计 本文以 LCD 驱动接口模块设计为例介绍在 μC/GUIC/GUI 移植过程中 LCD 驱动 程序的编写,以最终实现图形显示。 驱动程序主要是 LCD 初始化,这个函数完成对 44B0X LCD 控制器的配 置、显存的映射等。这里还是以 320×240 彩色 LCD 为例介绍一下初始化程 序的编写。具体如下: void LCD_Init(void) { int i; LCD_DisplayOpen(FALSE); /* 关 LCD 显示 */ for(i=0; i<320*240; i++) /* 初始化显存 */ *(pLCDBuffer256+i) = 0x0; rPDATD = 0xff;; /* PDATD[7 :0]: 此处初始化为 0xff */ rPCOND = 0xaaaa; /* PCOND[15:0]: 配置为功能端 */ rPUPD = 0x00; /* PUPD [7 :0]: 允许相应位的上拉电阻(0=允许, 1=禁止) */ rLCDCON1 = (0)|(DISMODE<<5)|(WDLY<<8)|(WLH<<10)| (CLKVAL<<12); /* disable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk, CLKVAL=10*/ rLCDCON2 = (LINEVAL)|(HOZVAL<<10)|(LINEBLANK<<21); /* 彩色模式, LCDBANK=0xc000000, LCDBASEU=0x0 */ rLCDSADDR1= (MODESEL<<27) | (((U32)pLCDBuffer256>>22)<<21) | M5D((U32)pLCDBuffer256>>1); rLCDSADDR2= M5D(((U32)pLCDBuffer256+ (LCDWIDTH*LCDHEIGHT))>>1) | (MVAL<<21); rLCDSADDR3= PAGEWIDTH | (OFFSIZE<<9); rREDLUT = 0xfdb97531; /* 设置红绿蓝三色的颜色值*/ rGREENLUT = 0xfdb97531; rBLUELUT = 0xfb73; rDITHMODE = 0x0; rDP1_2 = 0xa5a5; rDP4_7 = 0xba5da65; rDP3_5 = 0xa5a5f; rDP2_3 = 0xd6b; rDP5_7 = 0xeb7b5ed; rDP3_4 = 0x7dbe; rDP4_5 = 0x7ebdf; rDP6_7 = 0x7fdfbfe; /* enable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk, CLKVAL=10*/ rLCDCON1 = (1)|(DISMODE<<5)|(WDLY<<8)|(WLH<<10)| (CLKVAL<<12); Delay(5000); LCD_BkLight(TRUE); /* 开背光 */ LCD_DisplayOpen(TRUE); /* 打开 LCD 显示 */ } 完成如上 LCD 驱动以后, 再设置相应的中断服务子程序(IS), μC/GUIC/GU I 就 可以稳定地运行在 μC/GUIC/OS-II 和目标平台之上了。 3.4 μC/GUIC/GUI 配置文件参数的修改 主要是 LCDConf.h 配置文件的修改,如果 LCD 选用 320×240 彩色,就 要作如下修改 LCDConf.h 的内容: /*LCDConf.h*/ #ifndef LCDCONF_H #define LCDCONF_H #define LCD_XSIZE (320) /* LCD 水平分辨率 */ #define LCD_YSIZE (240) /* LCD 竖直分辨率 */ #define LCD_BITSPERPIXEL (8) #endif 另外,还涉及到 LCD 寄存器常量的设置等这里不一一详述。 到这里 μC/GUIc/GUI 的移植基本完成。本文只介绍了 μC/GUIc/GUI 结合 LCD 在基于 S3C44B0X 的 μC/GUIC/OS-II 上的移植。如果涉及到输入设备键盘、鼠标以及触摸 屏的移植还要编写相应的驱动程序和其相关参数的修改。 4 结束语 本文详细介绍了嵌入式图形用户界面在基于 μC/GUIC/OS-II 目标平台上的移植 过程,实际表明在具有图形界面的嵌入式系统的开发中,采用基于 μC/GUIC/OS-II 的 图 形 系 统 μC/GUIc/GUI , 移 植 简 便 、 使 用 方 便 灵 活 , 目 前 基 于 μC/GUIC/OS-II 的 μC/GUIc/GUI 系统已成功移植到了系统效率测试仪上,系统的电能参数(电流、 电压、功率)可以实时采集和实时波形显示;参数设置以菜单、编辑框的形式 实现,界面的切换以窗口的形式实现。充分利用了 μC/GUIc/GUI 强大的图形功能, 使人机界面更加丰富、友好。实践表明系统具有良好的实时性和稳定性。
温馨提示:当前文档最多只能预览 2 页,此文档共4 页,请下载原文档以浏览全部内容。如果当前文档预览出现乱码或未能正常浏览,请先下载原文档进行浏览。
嵌入式图形用户界面在S3C44B0X上的移植 第 1 页嵌入式图形用户界面在S3C44B0X上的移植 第 2 页

下载提示

1 该文档不包含其他附件(如表格、图纸),本站只保证下载后内容跟在线阅读一样,不确保内容完整性,请务必认真阅读

2 除PDF格式下载后需转换成word才能编辑,其他下载后均可以随意编辑修改

3 有的标题标有”最新”、多篇,实质内容并不相符,下载内容以在线阅读为准,请认真阅读全文再下载

4 该文档为会员上传,版权归上传者负责解释,如若侵犯你的隐私或权利,请联系客服投诉

最近更新

热门排行