魔仙小蓝黑化文:ucgui 3.90在ARM7+S6DO129上裸奔成功!(
来源:百度文库 编辑:九乡新闻网 时间:2024/05/09 05:52:13
ucgui 3.90在ARM7+S6DO129上裸奔成功!(木瓜) [转贴 2007-06-27 11:05:53 ] 发表者: cbqcgq 在移植前, 仔细阅读UC/GUI 3.90的用户手册中关于显示驱动与UC/GUI底层配置信息. 在UC/GUI用户手册中, UC/GUI按接口连接类型分成了几大类, 分别为完全总线型, 简单总线型, 4脚SPI, 3脚SPI, IIC型. 从手册中得知, 本电路中TFT4267与ARM的连接方式属于简单总线型.
移植工作主要是修改LCDConf.h和LCD驱动文件的编写, UC/GUI也提供了一些芯片的驱动文件, 可以从中选择一个接口连接类型相同的芯片驱动文件来修改. 本移植使用LCDSLin.c驱动文件作为参照.
LCDConf.h文件的修改
LCD的大小、颜色,对应的LCD控制器以及与硬件连接有关的LCD读写函数在该文件中定义, 按照UC/GUI 的规定,底层的读写LCD函数包括LCD_WRITE_A1()(即写LCD命令)、LCD_WRITE_A0()(写LCD数据)、 LCD_READ_A0()(读LCD状态)、LCD_READ_A1()(读LCD数据),以及LCD初始化函数 LCD_CONTROLLER_INIT(), 这些函数的实现与底层硬件有关,必须根据硬件连接的具体情况编写这些函数。其中LCD的四个读写函数不是都要编写的, 通常根据情况三个就可以了, LCD_READ_A0读状态函数在LCD_WAIT()中使用, 如果LCD写数据不需要等待, 该函数可以定义为空操作. LCD_READ_A1读数据函数在获取像素点颜色值_GetPixel()中时调用, 如果UC/GUI的显示缓存选项打开, 此函数也可定义为空操作. LCD_CONTROLLER_INIT()宏在LCD_L0_Init()函数中调用, 以初始化LCD, 此宏也非必需, 如果没有定义该宏, 必须提供一个LCD初始化函数给LCD_L0_Init()函数调用.
本文具体实现如下:
#define S6D0129_CMD (*((volatile unsigned short *) 0x83200000))
#define S6D0129_DAT (*((volatile unsigned short *) 0x83200002))
#define LCD_WRITE_A1(dat) LCD_Write01(dat) //write command
#define LCD_WRITE_A0(dat) LCD_Write00(dat) //write data
#define LCD_READ_A1() LCD_Read01() //read data
void LCD_Write00(unsigned short dat)
{
S6D0129_DAT = dat;
}
void LCD_Write01(unsigned short dat)
{
S6D0129_CMD = dat;
}
unsigned short LCD_Read01(void)
{
unsigned short r;
r= S6D0129_DAT;
return(r);
}
驱动文件的编写
下表中的函数为UC/GUI上层各模块调用硬件功能的接口函数, 而它们又调用用户编写的几个基本的函数如画点, 获取单个像素的颜色值等, 因此最基本的移植只需向UC/GUI提供画点函数_SetPixel()和获取像素信息_GetPixel()函数. 下列函数中关于像素点位置坐标都为int型, 须注意与这些函数传递参数时的数据类型, 及发生类型传换时编译器的行为.
表1 硬件接口函数的名称和功能
函数名称 功 能
LCD_L0_InIt() 显示初始化
LCD_L0_ReInIt() 重新初始化而不擦除显示内容
LCD_L0_OFF 关显示
LCD_L0_ON 开显示
LCD_L0_DrawBitmap() 画图
LCD_L0_DrawPixel() 以指定颜色画点
LCD_L0_DrwaVline() 画水平线
LCD_L0_DrwaVline() 画垂直线
LCD_L0_FillRect() 填充一矩形
LCD_L0_XorPixel() 翻转指定点颜色
根据不同的硬件特性, 可以对上表中一些函数实现进行优化, 比如UC/GUI提供的LCDSLin.c文件, 其中LCD_L0_DrawBitmap函数调用了一个DrawBitLine1BPP()画1BPP位图的函数, 驱动必须向DrawBitLine1BPP()提供XY20FF位置转换函数及LCD_WRITE, XY20FF的像素坐标(x,y)转换为显示缓冲的偏移量, LCD_WRITE根据偏移量进行画点的函数.
移植工作最基本的工作实现_SetPixel()和_GetPixel()函数两个函数就可以, 优化可以慢慢熟悉后再进行.
移植工作主要是修改LCDConf.h和LCD驱动文件的编写, UC/GUI也提供了一些芯片的驱动文件, 可以从中选择一个接口连接类型相同的芯片驱动文件来修改. 本移植使用LCDSLin.c驱动文件作为参照.
LCDConf.h文件的修改
LCD的大小、颜色,对应的LCD控制器以及与硬件连接有关的LCD读写函数在该文件中定义, 按照UC/GUI 的规定,底层的读写LCD函数包括LCD_WRITE_A1()(即写LCD命令)、LCD_WRITE_A0()(写LCD数据)、 LCD_READ_A0()(读LCD状态)、LCD_READ_A1()(读LCD数据),以及LCD初始化函数 LCD_CONTROLLER_INIT(), 这些函数的实现与底层硬件有关,必须根据硬件连接的具体情况编写这些函数。其中LCD的四个读写函数不是都要编写的, 通常根据情况三个就可以了, LCD_READ_A0读状态函数在LCD_WAIT()中使用, 如果LCD写数据不需要等待, 该函数可以定义为空操作. LCD_READ_A1读数据函数在获取像素点颜色值_GetPixel()中时调用, 如果UC/GUI的显示缓存选项打开, 此函数也可定义为空操作. LCD_CONTROLLER_INIT()宏在LCD_L0_Init()函数中调用, 以初始化LCD, 此宏也非必需, 如果没有定义该宏, 必须提供一个LCD初始化函数给LCD_L0_Init()函数调用.
本文具体实现如下:
#define S6D0129_CMD (*((volatile unsigned short *) 0x83200000))
#define S6D0129_DAT (*((volatile unsigned short *) 0x83200002))
#define LCD_WRITE_A1(dat) LCD_Write01(dat) //write command
#define LCD_WRITE_A0(dat) LCD_Write00(dat) //write data
#define LCD_READ_A1() LCD_Read01() //read data
void LCD_Write00(unsigned short dat)
{
S6D0129_DAT = dat;
}
void LCD_Write01(unsigned short dat)
{
S6D0129_CMD = dat;
}
unsigned short LCD_Read01(void)
{
unsigned short r;
r= S6D0129_DAT;
return(r);
}
驱动文件的编写
下表中的函数为UC/GUI上层各模块调用硬件功能的接口函数, 而它们又调用用户编写的几个基本的函数如画点, 获取单个像素的颜色值等, 因此最基本的移植只需向UC/GUI提供画点函数_SetPixel()和获取像素信息_GetPixel()函数. 下列函数中关于像素点位置坐标都为int型, 须注意与这些函数传递参数时的数据类型, 及发生类型传换时编译器的行为.
表1 硬件接口函数的名称和功能
函数名称 功 能
LCD_L0_InIt() 显示初始化
LCD_L0_ReInIt() 重新初始化而不擦除显示内容
LCD_L0_OFF 关显示
LCD_L0_ON 开显示
LCD_L0_DrawBitmap() 画图
LCD_L0_DrawPixel() 以指定颜色画点
LCD_L0_DrwaVline() 画水平线
LCD_L0_DrwaVline() 画垂直线
LCD_L0_FillRect() 填充一矩形
LCD_L0_XorPixel() 翻转指定点颜色
根据不同的硬件特性, 可以对上表中一些函数实现进行优化, 比如UC/GUI提供的LCDSLin.c文件, 其中LCD_L0_DrawBitmap函数调用了一个DrawBitLine1BPP()画1BPP位图的函数, 驱动必须向DrawBitLine1BPP()提供XY20FF位置转换函数及LCD_WRITE, XY20FF的像素坐标(x,y)转换为显示缓冲的偏移量, LCD_WRITE根据偏移量进行画点的函数.
移植工作最基本的工作实现_SetPixel()和_GetPixel()函数两个函数就可以, 优化可以慢慢熟悉后再进行.
ucgui 3.90在ARM7+S6DO129上裸奔成功!(
庭审程序严重违法,北海中院必将吞食在法庭上裸奔的苦果!
移植ucGUI到s3c2440
成功之钥在周围人身上
辛亥革命在什么意义上成功什么意义上失败?
[别让婚姻在真理中裸奔]
阿凡达伟大光环中谁在裸奔
别让婚姻在真理中裸奔
想成功吗?不要纠结在一件事情上。
男子在火车站"裸奔"求票续:否认已拿到火车票-裸奔-国内频道
老板离婚后患上心理疾病 多次上街裸奔解压(图)
俄罗斯美女香烟咋能在哈尔滨裸奔
坝美:大美秘境 我在天堂里裸奔(组图)
越南战火中裸奔的小女孩今安在
越南战火中裸奔的小女孩今安在?
越南战火中裸奔的小女孩今安在?
越南战火中裸奔的小女孩今安在
白宫前花艺主管披露希拉里曾在白宫“裸奔”
越南战火中裸奔的小女孩今安在?
我在成功交易中总结出的交易要在领(上)
ARM9处理器与ARM7处理器比较
潜能成功学(上)-------
英语成功学<上>
成功不靠上大学