基于S3C6410WINCE6.0的LCD驱动详解
花了几天时间把6410的点屏代码研究了一下,这里分享出来供大家参考。
先大致说下目前LCD的类型以及渠道。针对手持设备,如手机,PMP,MID,GPS,UMPC,相机等,大多采用的是TFT,LTPS(低温多晶硅屏),OLED等。其中以TFT屏用的最广泛,LTPS屏以其色彩鲜艳,视角广而闻名,目前也逐渐多起来。OLED显示效果是以上三者中最好的,能够达到全视角,而且在阳光照射下也能清晰的观看,但由于技术还不够成熟,价格一直居高不下,但是OLED是未来屏的主流趋势。现在很多价值上千元的手机都采用了OLED的屏,色彩鲜艳,拿在手上感觉就不一样。LTPS以统宝的屏最为典型,如统宝4.3寸,4.8寸的WVGA屏。大名鼎鼎的艾诺V3000就是采用的统宝4.3寸WVGA屏,效果远比TFT要好。另外,大名鼎鼎的诺基亚N97也采用了统宝的3.2寸屏。当然使用最广泛也是最泛滥的,就非TFT屏莫属了。一般将TFT屏分成日韩系,台系,以及大陆系三个级别,其质量基本上也是依次降低。日韩以三星,LG,夏普为典型,当然价格一直是居高不下。台系以友达,奇美,汉彩,群创为代表,大陆的如比亚迪,国显,京东方等。在中国中低端市场,基本上都采用奇美的IC,玻璃拼成的模组,因此虽然很多虽然不同的厂家,但屏的驱动不用变。但是如果驱动IC变了,驱动也要稍加调整。下面就以三星的6410处理器为例讲述如何调整这些参数。
液晶屏的硬件接口如下图所示:
上面是40PIN的LCD的电路接口,该接口基本上兼容了市面上大多数的4.3,5.0寸的屏。4.3的屏如群创,信利,比亚迪,国显,高显,奇美,汉彩等;5.0寸的屏如奇美,比亚迪,国显,高显,汉彩等,都采用上面的接口。虽然有些屏用的driver IC不尽相同,但是都是八九不离十,要知道在中国很多IC本身就是抄来抄去的。
针对S3C6410的LCD驱动,首先,在bootloader中,会配置LCD的一些寄存器参数,配置overlay,window等寄存器参数,在进入系统后,会调用LCD驱动,驱动中又会重新刷一片LCD的寄存器,最终进入系统。这里主要说明关于LCD本身的一些参数,代码如下:
- case LDI_SMRP_LTE480WV_RGB:
- LDI_INF((_T("[LDI:INF] Output Devce Type [%d] = LDI_(SMRP)LTE480WV_RGB/n/r"), g_ModuleType));
- pDeviceInfo->RGBOutMode = DISP_16BIT_RGB565_P;
- pDeviceInfo->uiWidth = 800;
- pDeviceInfo->uiHeight = 480;
- pDeviceInfo->VBPD_Value = 8;
- pDeviceInfo->VFPD_Value = 35
- pDeviceInfo->VSPW_Value = 2;
- pDeviceInfo->HBPD_Value = 88;
- pDeviceInfo->HFPD_Value = 40;
- pDeviceInfo->HSPW_Value = 128;
- pDeviceInfo->VCLK_Polarity = IVCLK_FALL_EDGE;
- pDeviceInfo->HSYNC_Polarity = IHSYNC_LOW_ACTIVE;
- pDeviceInfo->VSYNC_Polarity = IVSYNC_LOW_ACTIVE;
- pDeviceInfo->VDEN_Polarity = IVDEN_HIGH_ACTIVE;
- pDeviceInfo->PNR_Mode = PNRMODE_RGB_P;
- pDeviceInfo->VCLK_Source = CLKSEL_F_LCDCLK;
- pDeviceInfo->VCLK_Direction = CLKDIR_DIVIDED;
- pDeviceInfo->Frame_Rate = 60; // VCLK > 24.5 MHz (Max 35.7 MHz)
- break;
程序中uiWidth,uiHeight,VBPD,VFPD,VSPW,HBPD,HFPD,HSPW即为相关屏的参数,上面的参数是国显5寸屏的参数。
uiWidth:液晶屏的行点数,即扫描一行需要在屏上绘制多少个点。
uiHeight:液晶屏的列点数。
VBPD:列开始等待周期,即LCD显示每帧开始时有VBPD个周期没有图像输出。
VFPD:列结束等待周期,即LCD显示每帧结束时有VFPD个周期没有图像输出。
VSPW:场同步脉宽,指Vsync为低电平时的行脉冲周期数目。
HBPD:行开始等待周期,即LCD显示每行开始时有HBPD个周期没有图像输出。
HFPD:行结束等待周期,即LCD显示每行结束时有HFPD个周期没有图像输出。
HSPW:行同步脉宽,指Hsync为低电平时占用的DCLK的周期。
以上VBPD,VFPD,VSPW是为了场同步,HBPD,HFPD,HSPW是为了行同步,在硬件接口中有Vsync和Hsync两个PIN脚,就是帧同步信号和行同步信号。
Vsync:帧同步信号,整幅图像输出后会产生一个下降沿,即帧同步的标志。
Hsync:行同步信号,扫描完一行后会产生一个下降沿,即行同步的标志。
国显屏的时序图如下:
从上面图可以看出,
TWH=HSPW,
THS-TWH=HBPD,
THA=uiWidth,
TH-THA-THS=HFPD,
TWV=VSPW,
TVS-TWV=VBPD,
TVA=uiHeight,
TV-TVS-TVA=VFPD.
再参看下面的表,即可计算出相应的值。
将值填入上面的代码,到目前为止,离成功已经不远了。
最后,还有屏的帧频没有设置。国显屏规格书的建议值是DCLK=33.26M,这里,通过S3C6410手册上提供的公式,
RGB_VCLK (Hz) =HCLK/ (CLKVAL+1) where CLKVAL >= 1;
Frame Rate = 1/ [ { (VSPW+1) + (VBPD+1) + (LIINEVAL + 1) + (VFPD+1) } x {(HSPW+1) + (HBPD +1)
+ (HFPD+1) + (HOZVAL + 1) } x { ( CLKVAL+1 ) / ( Frequency of Clock source ) } ]
这里RGB_VCLK=33.26M,HCLK=133000000,可以计算出CLKVAL=3.我们将这个值填入6410的寄存器,代码如下:
- static DISP_ERROR Disp_initialize_RGBIF(void)
- {
- DISP_ERROR error = DISP_SUCCESS;
- unsigned int VCLKDivider;
- DISP_MSG((_T("[DISP]++Disp_initialize_RGBIF()/n/r")));
- if (Disp_get_vclk_direction_divider(g_DevInfoRGB.VCLK_Source, &g_DevInfoRGB.VCLK_Direction, &VCLKDivider))
- {
- g_pDispConReg->VIDCON0 = PROGRESSIVE | VIDOUT_RGBIF | g_DevInfoRGB.PNR_Mode | CLKVALUP_ALWAYS |
- CLKVAL_F(VCLKDivider) | VCLK_NORMAL | g_DevInfoRGB.VCLK_Direction |
- g_DevInfoRGB.VCLK_Source | ENVID_DISABLE | ENVID_F_DISABLE;
- g_pDispConReg->VIDCON1 = g_DevInfoRGB.VCLK_Polarity | g_DevInfoRGB.HSYNC_Polarity |
- g_DevInfoRGB.VSYNC_Polarity | g_DevInfoRGB.VDEN_Polarity;
- g_pDispConReg->VIDCON2 = TVIF_FMT_YUV444; // Should be this value
- g_pDispConReg->VIDTCON0 = VBPDE(1) | VBPD(g_DevInfoRGB.VBPD_Value) |
- VFPD(g_DevInfoRGB.VFPD_Value) | VSPW(g_DevInfoRGB.VSPW_Value);
- g_pDispConReg->VIDTCON1 = VFPDE(1) | HBPD(g_DevInfoRGB.HBPD_Value) |
- HFPD(g_DevInfoRGB.HFPD_Value) | HSPW(g_DevInfoRGB.HSPW_Value);
- g_pDispConReg->VIDTCON2 = LINEVAL(g_DevInfoRGB.uiHeight) | HOZVAL(g_DevInfoRGB.uiWidth);
- }
- else
- {
- DISP_ERR((_T("[DISP:ERR] Disp_initialize_RGBIF() : Clock Source Decision Failed/n/r")));
- error = DISP_ERROR_ILLEGAL_PARAMETER;
- }
- DISP_MSG((_T("[DISP]--Disp_initialize_RGBIF() : %d/n/r"), error));
- return error;
- }
到此为止,屏已经正常点亮了。
基于S3C6410WINCE6.0的LCD驱动详解相关推荐
- LCD液晶屏驱动详解
开发环境: 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT043TN24 参考文 ...
- LCD 液晶屏驱动详解
LCD液晶屏驱动详解 开发环境 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT0 ...
- STM32L475 SPI驱动LCD ST7789V2详解
概述 最近在学习正点原子潘多拉开发板,在此结合原子哥的代码, 对SPI驱动LCD做一个详细介绍. TFTLCD 和 SPI TFTLCD介绍 TFT-LCD 即薄膜晶体管液晶显示器.其英文全称为:Th ...
- LCD的framebuffer驱动详解
5.7.framebuffer驱动详解 5.7.1.framebuffer介绍 5.7.1.1.什么是framebuffer (1)裸机中如何操作LCD (2)OS下操作LCD的难点 显存就是一段内存 ...
- Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令)
Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令) 原创 2017年03月01日 22:58:39 标签: 开发人员 / UAV / 软件 / 硬件 一.开篇 开源精神常在!!! 谁说软件 ...
- 博通wifi驱动详解
1 WLAN技术 WLAN是英文WirelessLAN的缩写,就是无线局域网的意思.无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活.建网迅速.个人化等特点.将 ...
- imx6ul 驱动详解
链表的知识: struct list_head {struct list_head *next, *prev; }; API函数 函数 功能 LIST_HEAD 声明并初始化双向链表. INIT_LI ...
- Spring基于注解TestContext 测试框架使用详解
原创整理不易,转载请注明出处:Spring基于注解TestContext 测试框架使用详解 代码下载地址:http://www.zuidaima.com/share/1775574182939648. ...
- 16.Linux-LCD驱动(详解)
在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 ...
最新文章
- 开源点云实时压缩方案测试
- 从JS数组中删除重复的值[duplicate]
- 中国python之父是谁-Python之父:我们能为中国的“996”程序员做什么?
- ASP.NET的SEO:HTTP报头状态码---内容重定向
- openstack之neutron linuxbridge + vlan组网
- Java常量池的大概理解
- html5里可移动线性进度条的类型怎么表示,HTML5触摸事件实现移动端简易进度条的实现方法...
- 最短路径问题 --- Dijkstra算法详解
- SAP CRM和SAP Hybris的订单修改记录
- JVM JRE JDK,这些东西到底是什么?(转载)
- 支持FreeMarker需要哪些JAR包?
- 设置grub从哪个分区的menu.lst引导系统
- 移动前端自适应适配布局解决方案
- redis运维常用的server端命令
- Degree and Closeness Centrality
- 【娱乐】Android实现监听通话、发送短信
- 拓嘉启远电商:拼多多买家不能退货的几种情况
- Android#studio@快捷键
- Arduino使用TM1637四位数码管
- SPH算法简介(四):Hello,SPH
热门文章
- k30最小宽度380不管用了_关于低压配电柜GCS、GCK、MNS、GGD的使用与区别,别再用混了!...
- [转载]关于如何选择5D2和6D的忠告
- BIM模型文件下载——某教学楼项目Revit模型
- 数据结构第二版(朱昌杰版)栈的应用之括号匹配
- 简单可控硅交流调压方案
- 【Excel函数】-Excel字符串系列函数之Find查找函数
- SAP 模块中文解释
- CSS三栏布局的7种方式代码详解 | 圣杯布局 | 双飞翼布局 | 弹性盒子
- 贴片加工厂家讲解__ICT是什么?主要测试什么?ICT测试的优缺点?
- 个人永久性免费-Excel催化剂功能第99波-手机号码归属地批量查询