微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式图形用户界面在S3C44B0X上的移植

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

时间:10-08 来源:互联网 点击:

μC/GUI 在与μC/OS-II结合应用时通常被分为几个小的显示任务,由于每个显示任务都共用一个GUI_Context上下文变量,在操作系统进行任务切换时一个GUI任务对上下文的操作可能被另外一个GUI任务打断,此时新的GUI任务对上下文的操作是在被中断任务的上下文基础上进行的,这样前一个任务的信息会被后一个任务所使用,有些基本信息作为公用信息需要被共用,而有些信息在处理过程中是不能被打断的。这就存在资源互斥的问题。

μC/GUI在设计时是通过上锁和解锁来解决此问题。其过程是通过在关键区域入口设置GUI_X_Lock()以获得专一访问权,用完后在出口处设置GUI_X_ Unlock()让出资源,达到多个GUI任务对同一数据在关键区域内访问的互斥。

在μC/GUI移植到μC/OS-II的过程中,则需要利用操作系统实现资源互斥的系统调用对上述宏进行替换,这涉及到3个任务调度函数的重新定义:

void GUI_X_InitOS (void);

/*任务初始化*/

void GUI_X_Lock (void);

/*任务锁定*/

void GUI_X_Unlock (void);

/*任务解锁*/

此外μC/GUI还用到μC/OS-II中的延时调用,通过在GUI_X_Delay()中调用μC/OS-II的OSTimeDly()实现延时和任务切换。这涉及到2个系统时间接口函数的定义:

int GUI_X_GetTime (void);

/*取系统时间*/

void GUI_X_Delay (int ms);

/*延时函数*/

3.3 μC/GUI与输入输出设备驱动接口模块设计

本文以LCD驱动接口模块设计为例介绍在μC/GUI移植过程中LCD驱动程序的编写,以最终实现图形显示。

驱动程序主要是LCD初始化,这个函数完成对44B0X LCD控制器的配置、显存的映射等。这里还是以320×240彩色LCD为例介绍一下初始化程序的编写。具体如下:

void LCD_Init(void)

{

int i;

LCD_DisplayOpen(FALSE);

/* 关LCD显示 */

for(i=0; i320*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)|(DISMODE5)|(WDLY8)|(WLH10)|(CLKVAL12);

/* disable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk, CLKVAL=10*/

rLCDCON2 = (LINEVAL)|(HOZVAL10)|(LINEBLANK21);

/* 彩色模式, LCDBANK=0xc000000, LCDBASEU=0x0 */

rLCDSADDR1= (MODESEL27) | (((U32)pLCDBuffer256>>22)21) |

M5D((U32)pLCDBuffer256>>1);

rLCDSADDR2= M5D(((U32)pLCDBuffer256+(LCDWIDTH*LCDHEIGHT))>>1) |

(MVAL21);

rLCDSADDR3= PAGEWIDTH | (OFFSIZE9);

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)|(DISMODE5)|(WDLY8)|(WLH10)|(CLKVAL12);

Delay(5000);

LCD_BkLight(TRUE);

/* 开背光 */

LCD_DisplayOpen(TRUE);

/* 打开LCD显示 */

}

完成如上LCD驱动以后, 再设置相应的中断服务子程序(IS), μC/GU I就可以稳定地运行在μC/OS-II和目标平台之上了。

3.4 μC/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/GUI的移植基本完成。本文只介绍了μc/GUI结合LCD在基于S3C44B0X的μC/OS-II上的移植。如果涉及到输入设备键盘、鼠标以及触摸屏的移植还要编写相应的驱动程序和其相关参数的修改。

4 结束语

本文详细介绍了嵌入式图形用户界面在基于μC/OS-II目标平台上的移植过程,实际表明在具有图形界面的嵌入式系统的开发中,采用基于μC/OS-II的图形系统μc/GUI,移植简便、使用方便灵活,目前基于 μC/OS-II的μc/GUI系统已成功移植到了系统效率测试仪上,系统的电能参数(电流、电压、功率)可以实时采集和实时波形显示;参数设置以菜单、编辑框的形式实现,界面的切换以窗口的形式实现。充分利用了μc/GUI强大的图形功能,使人机界面更加丰富、友好。实践表明系统具有良好的

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

网站地图

Top