文章目录

  • 前言
  • 一、LCD和LCD控制器
    • LCD显示器
      • LCD种类
      • LCD的接口
        • 对于STNLCD
        • 对于TFT LCD
    • S3C2410LCD控制器
      • LCD控制器的特性与结构
        • STN LCD
        • TFT LCD
      • 显示器上数据的格式
      • TFTLCD的操作
        • 显示器上的颜色组合
    • 使用TFT LCD时LCD控制寄存器的寄存器设置
      • LCD控制寄存器LCDCON1
      • LCD控制寄存器LCDCON2
      • LCD控制寄存器LCDCON3
      • LCD控制寄存器LCDCON4
      • LCD控制寄存器LCDCON5
      • 帧内存地址寄存器 LCDSADDR1~LCDSADDR3
      • LCDSADDR1寄存器
      • LCDSADDR2寄存器
      • LCDSADDR3寄存器
      • 临时调色板寄存器TPAL
  • 二、TFTLCD显示实例
    • 程序设计
    • 代码解析
  • 总结

前言

  • 了解LCD显示器的接口和及时序
  • 掌握S3C2410LCD控制器的使用方法
  • 了解帧缓冲区的概念,掌握如何设置帧缓冲区来显示图像

一、LCD和LCD控制器

LCD显示器

LCD种类

LCD(Liquied Crystal Display),即液晶显示器,是一种采用了液晶控制透光技术来实现色彩的显示器。它与传统的CRT显示器相比有很多的优点:轻薄、能耗低、辐射小等。市场占有率很高。LCD有很多种类型,比如STN、TFT、LTPS TFT、OLED等,各有各的优缺点。

STN(超扭曲向列),有CSTN和DSTN之分,是4种LCD屏种最低端的一种,仅有的优点就是功耗低,在色彩鲜艳度和画面亮度上相对于TFT和其他LCD屏存在明显不足,在日光下几乎不能显示,而且响应时间也很长,简直是不能来播放视频,动画等。

TFT(薄膜晶体管)可以大大缩短屏幕响应时间,其响应时间已经小于80ms,并改善了STN连续显示时屏幕模糊闪烁,有效提高了动态画面的播放力,呈现话main色彩饱和度、真实效果和对比度都非常不错,完全超过了STN,知识功耗高。

LTPS(低温多晶硅)由TFT衍生的新一代的技术产品,可以获得更高的分辨率和更丰富的色彩。

OLED(有机发光二级管)各种物理特性都具备领先优势,色彩明亮,可视角度大,非常省电等

**注意:**这本书都是十年以前的了,最新信息还是大家网上收集资料

LCD的接口

CPU或显卡发出的图像数据是TTL信号,LCD本身接收的也是TTL信号。由于TTL信号在高速率的长距离传输时性能不佳,抗干扰能力也比较差,后来又提供了多种接口,比如LVDS,TDMS,GVIF,P&D,DVI和DEP等。它们实际上只是将CPU或显卡发出的TTL信号编码成各种信号以便传输,在LCD那边将接收到的信号进行解码得到TTL信号。

由于数字接口标准尚未统一,所以使用LCD时需要根据手册了解具体的接口定义。也是基于数字接口标准尚未统一的原因,市场上大多LCD都采用模拟信号接口,LCD需要先通过ADC将模拟信号转换为数字信号才能显示。
但是不管采用何种数字接口,本质的TTL信号是一样的

对于STNLCD

STN LCD的数据传输方式有3种:4位单扫,4位双扫,8位单扫。所谓**“单扫”是指对于一整屏的数据,从上到下,从左到右,一个一个的发送出来。“双扫”**是指将一整屏的数据分为上下两部分,同时地从上到下,从左到右,一个一个的发送出来。“4位”、“8位”是指发送数据时使用多少个数据线;需要注意的是,4位双扫方式也是用到8根数据线,其中4根用于上半屏数据,另外4根用于下半屏数据。
除数据信号外,还有其他控制信号,所有TTL信号如下:

对于TFT LCD

TFT LCD的TTL信号与STN类似,只是其数据信号多达24根,对应像素值中的每一位。

S3C2410LCD控制器

LCD控制器的特性与结构

S3C2410LCD控制器被用来向LCD传输数据,并提供必要的控制信号,比如VFRAME,VLINE,VCLK,VM等。可以支持STN LCD和TFTLCD。其特性如下(BPP表示bit per pixel,即每个色素使用多少位来表示其颜色)

STN LCD

  • 支持3中扫描方式:4位单扫,4位双扫,8位单扫
  • 支持单色(1BPP),4级灰度和16级灰度屏
  • 支持256色(8BPP)和4096色(12BPP)彩色STN屏(CSTN)。

TFT LCD

  • 支持单色,4级灰度,16级灰度
  • 支持46K和16M色非调色板显示模式

S3C2410LCD控制器提供了驱动STNLCD,TFTLCD所需要的信号,另外还提供了颇外的信号以支持SEC公司生产的TFTLCD。这3类信号中很大部分是复用的

S3C2410控制器的内部结构如下所示
REGBANK是LCD寄存器组,含17个寄存器及一块265x16的调色板内存。用来设置各项参数。而LCDCDDMA,则是LCD控制器专用DMA信道,可以自动地从系统总线上取得图像数据,这使得显示图像时不需要CPU的干涉。VIDPRCS将LCDCDDMA中的数据组合成特定的格式(比如4位单扫,4位双扫,8位单扫等),然后从VD[23:0]发送给LCD屏。同时TIMEGEN和LPC3600负责产生LCD屏所需要的控制时序。例如VSYNC,HSYNC,VCLK,VDE等然后从VIDEO MUX送给LCD屏。其中LPC3600专用于SEC TFT LCD。

LCDCDDMA中有两个FIFO:FIFOH容量为16个字,FIFOL的容量为12个字。当使用”双扫方式时”,FIFOH,FIFOL分别传输上半屏、下半屏数据;当使用"单扫"的方式,只用到FIFOH。当FIFO为空时或者其中已经有其他数据已经减少到设定的阙值时,LCDCDDMA自动地发起DMA传输从内存中获得数据。

显示器上数据的格式

对于屏幕上的一整幅图像,它的数据是如何组织的?无论是CRT还是LCD显示器,它们都有一个共同的概念。
一幅图像被称为一帧,每帧由多行组成,每行由多个像素组成,每个像素的颜色使用若干位的数据来表示。对于单色显示器,每个像素使用1位来表示,被称为1BPP;对于256色显示器,每个像素使用8位来表示,称为8BPP。

显示器从屏幕左上方开始,一行一行地取得每个像素的数据并显示出来,当显示到一行的最右边时,跳到下一行的最左边开始显示一行;当显示完所有行后,跳到左上方开始下一帧。显示器沿着"Z"字型的路线进行扫描,使用HSYNC,VSYNC信号来控制扫描路线的跳转,HSYNC表示“跳转到最左边的时候了”,VSYNC表示“跳到最上面的时候了。”

在工作的显示屏上,可以看见在四周黑色的边框。上方的黑框是因为显示完所有行的数据时,显示器还没扫描到最下方(VSYNC信号还没给出),需要经过若干行之后第一行数据才有效:下方的黑框是因为显示完所有行的数据时,显示器还没扫描到最下方(VSYNC信号还没发出),这时数据已经无效;左边的黑框是因为当发出HSYNC信号时,需要经过若干像素之后第一列数据才有效;右边的黑框是因为显示完一行的数据时显示器还没扫描到最右边(HSYNC信号还没给出),这时数据已经无效。显示器只会依据VSYNC、HSYNC信号来取得、显示数据、并不理会数据是否有效,何时发出有效数据由显卡决定。

VSYNC信号出现的频率表示一秒钟能显示多少帧图像,称为垂直频率或场频率,这就是我们常说的“显示器频率”;HSYNC信号出现的频率称为水平频率。
显示器上,一帧数据的存放位置与VSYNC、HSYNC信号的关系如图所示

年代比较久远了,大家理解理论知识就行。
“有效数据”的行数、列数、即分辨率,它与VSYNC,HSYNC信号之间的距离等都是可以设置的,这是由显卡来完成的,这些设置在下面的操作中会看到。

TFTLCD的操作

先了解TFTLCD的时序,这使得我们在设置各个寄存器时有个形象的概念。每个VSYNC信号表示一帧数据的开始;每个HSYNC信号表示一行数据的开始;无论这些数据是否有效;每个VCLK信号表示正在传输一个像素的数据,无论它是否有效。数据是否有效只不过说对CPU的LCD控制器来说,LCD根据VSYNC,HSYNC,VCLK不停的读取总线数据、显示。
关于时序可参考下图:

  1. VSYNC信号有效时,表示一帧数据的开始
  2. VSPW表示VSYNC信号脉冲宽度为(VSPW+1)个HSYNC信号周期,即(VSPW+1)行,这(VSPW+1)行数据无效。
  3. VSYNC信号脉冲之后,还要经过(VBPD+1)个HSYNC信号周期,有效行的行数据才出现。所以,在VSYNC信号有效之后,总共话要经过(VSPW+1+VPBD+1)个无效行,它对应上面视图的上方边框。
  4. 随后即连续发出(LINEVAL+1)行的有效数据
  5. 最后是(VFPD+1)个无效的行,对应到下方的边框。

显示器上的颜色组合

这里不太建议大家来学习,百度认识一下就行
16M(24BPP)色,64K(16BPP)色,256(8BPP)色

使用TFT LCD时LCD控制寄存器的寄存器设置

LCD控制寄存器中REGBANK的17个寄存器可以分为6种,如下:
对于TFTLCD一般情况下只需要设置前两种寄存器:在8BPP模式下,如果想快速地输出一帧单色的图像,可以借助TPAL寄存器。

LCD控制寄存器LCDCON1

用于选择LCD类型,设置像素时钟,使能LCD信号的数据等。格式如下

LCD控制寄存器LCDCON2

用于设置垂直方向各信号的时间参数,格式如下

LCD控制寄存器LCDCON3

用于设置水平方向各信号的时间参数,格式如下

LCD控制寄存器LCDCON4

对于TFT LCD,这个寄存器只用来设置HSYNC信号的脉冲宽度,位[7:0]的数值称为HSPW,表示脉冲宽度为(HSPW+1)个VCLK周期

LCD控制寄存器LCDCON5

用于设置各个控制信号的极性,并可以从中读取到一些状态信息,格式如下

帧内存地址寄存器 LCDSADDR1~LCDSADDR3

帧内存可以很大,而真正要显示的区域被称为视口,它处于帧内存中。这3个寄存器用于用于确定帧内存的起始地址,定位视口在帧内存中的位置。

LCDSADDR1寄存器

LCDSADDR2寄存器

LCDSADDR3寄存器

临时调色板寄存器TPAL

如果输出一帧单色的图像,可以在TPAL寄存器中设定这个颜色值,然后使能TPAL寄存器,这种方法可以避免修改整个调色板或帧缓冲区。

二、TFTLCD显示实例

程序设计

从一个串口中输出一个菜单,从中选择各种方法进行测试,比如画线,画圆,显示单色,使用调色板等。

代码解析

  1. lcddrv.c封装了对LCD控制器、调色板的访问函数,可以设置LCD显示模式,开启/关闭LCD,设置调色板等。
  2. framebuffer.c直接操作帧缓冲区,实现画点,画线,画同心圆,清屏等函数
  3. lcdlib.c调用函数前两个文件提供函数在LCD上进行各种操作。
    程序结构如下

总结

代码设计还是很难的,所以有兴趣的同学可以深入的了解。其实对于我们做应用开发的来说,晓得怎么用就行,毕竟让我们直接操作寄存器,还是比较痛苦的。

Linux应用开发(十二)——LCD控制器相关推荐

  1. 专题开发十二:JEECG微云快速开发平台-基础用户权限

      专题开发十二:JEECG微云快速开发平台-基础用户权限 11.3.4自定义按钮权限 Jeecg中,目前按钮权限设置,是通过对平台自己封装的按钮标签(<t:dgFunOpt等)进行设置.而在开 ...

  2. 质量管理14条原则、敏捷开发宣言、敏捷开发十二原则

    一.质量管理大师爱德华·戴明博士经典的质量管理14条原则 1. Create constancy of purpose toward improvement of product and servic ...

  3. 专题开发十二:JEECG微云高速开发平台-基础用户权限

      专题开发十二:JEECG微云高速开发平台-基础用户权限 11.3.4自己定义button权限 Jeecg中.眼下button权限设置,是通过对平台自己封装的button标签(<t:dgFun ...

  4. linux内核开发入门二(内核KO模块介绍、开发流程以及注意事项)

    linux内核开发入门二(内核KO模块介绍.开发流程以及注意事项) 一.什么是内核模块 内核模块:ko模块(Kernel Object Module)是Linux内核中的可加载模块,它可以动态地向内核 ...

  5. linux中ftp的工作原理,Linux系统学习 十二、VSFTP服务—简介与原理

    1.简介与原理 互联网诞生之初就存在三大服务:WWW.FTP.邮件 FTP主要针对企业级,可以设置权限,对不同等级的资料针对不同权限人员显示. 但是像网盘这样的基本没有权限划分. 简介: FTP(Fi ...

  6. 嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析

    嵌入式Linux裸机开发(二)--S5PV210启动过程分析 一.iROM启动方式简介 友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅 ...

  7. 纯干货!Java后端开发十二条经验分享!

    前言 本文是博主从事后端开发以来,对公司.个人项目的经验总结,包含代码编写.功能推荐.第三方库使用及优雅配置等,希望大家看到都能有所收获 一. 优雅的进行线程池异常处理 在Java开发中,线程池的使用 ...

  8. 嵌入式linux s5pv210,嵌入式Linux裸机开发(二)——S5PV210启动过程分析

    嵌入式Linux裸机开发(二)--S5PV210启动过程分析 一.iROM启动方式简介友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅三 ...

  9. RockChip Linux USB 开发(二)

    目录 一:Linux USB 驱动框架 二:USB PHY驱动开发 1.USB 2.0 PHY驱动开发 </

  10. 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!

     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigame.com/android-game/327.html 很多童鞋说 ...

最新文章

  1. yii连接mysql主从_Connection 数据库主从连接源码剖析
  2. 如何系统搭建现代 Web CI/CD
  3. idea提示“ cannot access xxxxxxxx.class“的解决方法,idea的bug
  4. bs架构在php哪个文件里,ThinkPHP开发之目录部署
  5. python 图像走势预测_在keras中对单一输入图像进行预测并返回预测结果操作
  6. python字符串操作_Python 字符串操作 - 树懒学堂
  7. python什么时候用类设计_关于python:类模板的习惯用法或设计模式?
  8. Git合并特定commits 到另一个分支
  9. Oracle中的next_day(date,char)
  10. 利用人性做大闸蟹,给予客户特殊的身份优越感,思维决定财富!
  11. 注射php,手工注射php学习
  12. 单细胞论文记录(part19)--A comprehensive comparison on cell-type composition inference for ST data
  13. 新电脑怎么把计算机放在桌面,新安装的Win10怎么将“我的电脑”放在桌面
  14. Java生成与解析二维码
  15. 服务器硬件与 Linux 初体验
  16. 纸质合同扫描存档和电子合同签字盖章的区别
  17. YOLOv2—passthrough层
  18. 什么是MysQL数据库
  19. 在 Linux 下安装 HM,运行 HEVC 参考代码
  20. 如何写好状态机?跑马灯/流水灯Verilog HDL实现

热门文章

  1. win 10 mstsc连接 RemoteApp
  2. 【第二季】图像像素格式RGB和YUV的理解
  3. 解决xbox无法登录、没有反应
  4. python分析股票数据的项目_用Python分析股市指数
  5. 武林外传搞笑语录英汉对照
  6. Java实现接口测试的实战练习
  7. vue3实现高德地图多点标注(so easy)
  8. python汇率转换_python 实现汇率计算功能
  9. win7剪切板_win7系统如何清空剪切板 win7系统清空剪切板步骤【图文】
  10. 卧龙岗大学厉万庆老师访问ZZUNLP交流记录