花了几天时间把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本身的一些参数,代码如下:

[cpp] view plaincopy
  1. case LDI_SMRP_LTE480WV_RGB:
  2. LDI_INF((_T("[LDI:INF] Output Devce Type [%d] = LDI_(SMRP)LTE480WV_RGB/n/r"), g_ModuleType));
  3. pDeviceInfo->RGBOutMode = DISP_16BIT_RGB565_P;
  4. pDeviceInfo->uiWidth = 800;
  5. pDeviceInfo->uiHeight = 480;
  6. pDeviceInfo->VBPD_Value = 8;
  7. pDeviceInfo->VFPD_Value = 35
  8. pDeviceInfo->VSPW_Value = 2;
  9. pDeviceInfo->HBPD_Value = 88;
  10. pDeviceInfo->HFPD_Value = 40;
  11. pDeviceInfo->HSPW_Value = 128;
  12. pDeviceInfo->VCLK_Polarity = IVCLK_FALL_EDGE;
  13. pDeviceInfo->HSYNC_Polarity = IHSYNC_LOW_ACTIVE;
  14. pDeviceInfo->VSYNC_Polarity = IVSYNC_LOW_ACTIVE;
  15. pDeviceInfo->VDEN_Polarity = IVDEN_HIGH_ACTIVE;
  16. pDeviceInfo->PNR_Mode = PNRMODE_RGB_P;
  17. pDeviceInfo->VCLK_Source = CLKSEL_F_LCDCLK;
  18. pDeviceInfo->VCLK_Direction = CLKDIR_DIVIDED;
  19. pDeviceInfo->Frame_Rate = 60; // VCLK > 24.5 MHz (Max 35.7 MHz)
  20. 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的寄存器,代码如下:

[cpp] view plaincopy
  1. static DISP_ERROR Disp_initialize_RGBIF(void)
  2. {
  3. DISP_ERROR error = DISP_SUCCESS;
  4. unsigned int VCLKDivider;
  5. DISP_MSG((_T("[DISP]++Disp_initialize_RGBIF()/n/r")));
  6. if (Disp_get_vclk_direction_divider(g_DevInfoRGB.VCLK_Source, &g_DevInfoRGB.VCLK_Direction, &VCLKDivider))
  7. {
  8. g_pDispConReg->VIDCON0 = PROGRESSIVE | VIDOUT_RGBIF | g_DevInfoRGB.PNR_Mode | CLKVALUP_ALWAYS |
  9. CLKVAL_F(VCLKDivider) | VCLK_NORMAL | g_DevInfoRGB.VCLK_Direction |
  10. g_DevInfoRGB.VCLK_Source | ENVID_DISABLE | ENVID_F_DISABLE;
  11. g_pDispConReg->VIDCON1 = g_DevInfoRGB.VCLK_Polarity | g_DevInfoRGB.HSYNC_Polarity |
  12. g_DevInfoRGB.VSYNC_Polarity | g_DevInfoRGB.VDEN_Polarity;
  13. g_pDispConReg->VIDCON2 = TVIF_FMT_YUV444;    // Should be this value
  14. g_pDispConReg->VIDTCON0 = VBPDE(1) | VBPD(g_DevInfoRGB.VBPD_Value) |
  15. VFPD(g_DevInfoRGB.VFPD_Value) | VSPW(g_DevInfoRGB.VSPW_Value);
  16. g_pDispConReg->VIDTCON1 = VFPDE(1) | HBPD(g_DevInfoRGB.HBPD_Value) |
  17. HFPD(g_DevInfoRGB.HFPD_Value) | HSPW(g_DevInfoRGB.HSPW_Value);
  18. g_pDispConReg->VIDTCON2 = LINEVAL(g_DevInfoRGB.uiHeight) | HOZVAL(g_DevInfoRGB.uiWidth);
  19. }
  20. else
  21. {
  22. DISP_ERR((_T("[DISP:ERR] Disp_initialize_RGBIF() : Clock Source Decision Failed/n/r")));
  23. error = DISP_ERROR_ILLEGAL_PARAMETER;
  24. }
  25. DISP_MSG((_T("[DISP]--Disp_initialize_RGBIF() : %d/n/r"), error));
  26. return error;
  27. }

到此为止,屏已经正常点亮了。

基于S3C6410WINCE6.0的LCD驱动详解相关推荐

  1. LCD液晶屏驱动详解

    开发环境: 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT043TN24 参考文 ...

  2. LCD 液晶屏驱动详解

    LCD液晶屏驱动详解 开发环境 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT0 ...

  3. STM32L475 SPI驱动LCD ST7789V2详解

    概述 最近在学习正点原子潘多拉开发板,在此结合原子哥的代码, 对SPI驱动LCD做一个详细介绍. TFTLCD 和 SPI TFTLCD介绍 TFT-LCD 即薄膜晶体管液晶显示器.其英文全称为:Th ...

  4. LCD的framebuffer驱动详解

    5.7.framebuffer驱动详解 5.7.1.framebuffer介绍 5.7.1.1.什么是framebuffer (1)裸机中如何操作LCD (2)OS下操作LCD的难点 显存就是一段内存 ...

  5. Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令)

    Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令) 原创 2017年03月01日 22:58:39 标签: 开发人员 / UAV / 软件 / 硬件 一.开篇 开源精神常在!!! 谁说软件 ...

  6. 博通wifi驱动详解

    1        WLAN技术 WLAN是英文WirelessLAN的缩写,就是无线局域网的意思.无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活.建网迅速.个人化等特点.将 ...

  7. imx6ul 驱动详解

    链表的知识: struct list_head {struct list_head *next, *prev; }; API函数 函数 功能 LIST_HEAD 声明并初始化双向链表. INIT_LI ...

  8. Spring基于注解TestContext 测试框架使用详解

    原创整理不易,转载请注明出处:Spring基于注解TestContext 测试框架使用详解 代码下载地址:http://www.zuidaima.com/share/1775574182939648. ...

  9. 16.Linux-LCD驱动(详解)

    在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 ...

最新文章

  1. 开源点云实时压缩方案测试
  2. 从JS数组中删除重复的值[duplicate]
  3. 中国python之父是谁-Python之父:我们能为中国的“996”程序员做什么?
  4. ASP.NET的SEO:HTTP报头状态码---内容重定向
  5. openstack之neutron linuxbridge + vlan组网
  6. Java常量池的大概理解
  7. html5里可移动线性进度条的类型怎么表示,HTML5触摸事件实现移动端简易进度条的实现方法...
  8. 最短路径问题 --- Dijkstra算法详解
  9. SAP CRM和SAP Hybris的订单修改记录
  10. JVM JRE JDK,这些东西到底是什么?(转载)
  11. 支持FreeMarker需要哪些JAR包?
  12. 设置grub从哪个分区的menu.lst引导系统
  13. 移动前端自适应适配布局解决方案
  14. redis运维常用的server端命令
  15. Degree and Closeness Centrality
  16. 【娱乐】Android实现监听通话、发送短信
  17. 拓嘉启远电商:拼多多买家不能退货的几种情况
  18. Android#studio@快捷键
  19. Arduino使用TM1637四位数码管
  20. SPH算法简介(四):Hello,SPH

热门文章

  1. k30最小宽度380不管用了_关于低压配电柜GCS、GCK、MNS、GGD的使用与区别,别再用混了!...
  2. [转载]关于如何选择5D2和6D的忠告
  3. BIM模型文件下载——某教学楼项目Revit模型
  4. 数据结构第二版(朱昌杰版)栈的应用之括号匹配
  5. 简单可控硅交流调压方案
  6. 【Excel函数】-Excel字符串系列函数之Find查找函数
  7. SAP 模块中文解释
  8. CSS三栏布局的7种方式代码详解 | 圣杯布局 | 双飞翼布局 | 弹性盒子
  9. 贴片加工厂家讲解__ICT是什么?主要测试什么?ICT测试的优缺点?
  10. 个人永久性免费-Excel催化剂功能第99波-手机号码归属地批量查询