显示屏参数

来源:互联网 发布:淘宝开放平台如何赚钱 编辑:程序博客网 时间:2024/04/27 22:03

这网站有更详细更权威的描述http://www.linux-fbdev.org/HOWTO/2.html

    这些参数都是由以前的 CRT(阴极射线显像管)带过来的 TFT 液晶跟 CRT 显示方法根本不同至于为什么这些参数也会引入到 TFT 我也不知道.

要理解这些参数得以 CRT 显示器的显示方法来理解.

CRT 侧面看是个漏斗状的真空的东东根部就是电子枪打出的电子撞击前面的玻璃面上的荧光物质荧光物发光控制电子枪按规律射出电子逐行的打到荧光物质上打完一行(也即扫描完一行), 就回头扫描下一行..... 扫描完一个显示屏所有的行后就是一幅完整的画面了称为一帧(frame), 扫描过程如果非常快人眼看到是一幅完整画面但实际是一个个点发不同光组成的扫描得慢时就会觉得闪烁了(以前听老师讲课说在他们的年代能明显看到一行一行刷过的壮观场景).

    一帧扫描完再回头从第一行开始继续扫描重复过程看到的就是持续在显示的画面了(实际上电子的运动轨迹是由磁场控制的电子枪没有机械的运动为好理解,就当是电子枪做了机械运动吧).

OK, 大概如此更详细得找专业电工请教.

描述方式多数显示器选择从左上角开始从左至右到了右边界再偏转到左边界的下一行这是所谓的”Z”型扫描
类似地扫描完最后一帧时
要偏转回左上角起始处准备扫描下一帧.

HSYNC 信号用于告诉电子枪该扫描下一行了即要转到下一行起始处了;

VSYNC 信号告诉电子枪该显示下一帧了即该转回左上角起始处了;

H for Horizontal, V for vertical.

在这里 Hsync, Vsync 两者各表示一种信号分别由 HSPW  VSPW 两个参数确定信号持续时间也就是脉冲的宽度.

 

在扫描一行中首先

HSYNC 脉冲信号为高电平一发出此信号电子枪迅速移回左边界期间电子枪不发射电子.

 HSYNC 信号持续时间上的某电子枪开始再次向右扫描了 HSYNC 信号结束表示该开始显示下一行的数据了电子枪又要开始发射电子
HSYNC 信号结束与开始显示数据之间可以插入一段延时( HBPD 参数控制)让显示屏仍然不显示有效数据(效果就是黑色), 是为显示屏左边框.   
 HFPD 结束电子枪才可以发射电子显示该行的有效数据.

显示完毕又该开始发出 HSYNC 信号了在一行中有效数据扫描完毕与 HSYNC 信号发出之间也插入一段延时 HFPD, 是为显示屏右边框,

之后就是重复过程了.

因此显示一行时序为:  HSPW -> HBPD -> 扫描数据 -> HFPD .

 

类似地垂直扫描一帧的时序:

VSPW -> VBPD -> 扫描有效行 -> VFPD .


为什么要有边框(vbpd, vfpd, hbpd, hfpd)? 按上边贴出网页的说法:
Usually, one doesn't use that feature nowadays, as we have tunable monitors that allow stretching the mode to the physical limits of the monitor.
我的理解是:确实是以前的显示器调整显示屏边界用的,而新的显示有调整能力了, 所以不再需要刻意关注了,但术语被保留了下来.
-------------------------------------------- 

对于 TFT LCD, 但这些参数作用是同样的. 但如何确定 ?  TFT  LCD  datasheet 中一定得标有.

如型号 WXCAT35-TG3  3.5 寸的液晶中有表如下:

对照下边的时序图(时序图的 Vsync, Hsync 信号(红框圈出的)跟上边讲的有点出入信号都是低电平
而非高电平
因此编程时要设置信号反相s3c244a  LCDCON5INVLINE  INVFRAME 即是干这活的):

 

tvp  VSPW,

tvb  VBPD,

tvf  VFPD

thp  HSPW

thb  HBPD

thf  HFPD

 

参考的时钟就是 CLK, 一个 CLK 时钟完成一个像素点的显示.

计算帧频率(刷新频率)的方法就是所有的像素点跟边沿(边框,hbpd 之类),同步脉冲的时间相加结果就是显示完整一帧所需时间其倒数即是帧频率.

 -----------------------------------------

Linux  LCD 驱动

LCD 驱动主要得完成两部分一是跟 framebuffer 注册驱动; 二是设置 LCD 控制器的寄存器以适配 LCD.

struct fb_info  是关键有显示驱动的所有信息要拿此结构跟 framebuffer 注册代表着本驱动,  该结构定义在 <linux/fb.h>, 
在驱动程序中, 主体部分就是实现 struct fb_info .
在该结构中以下定义的三个字段也是比较重要的要填一些数据入去:

 struct fb_var_screeninfo var;   /* Current var */

  struct fb_fix_screeninfo fix;   /* Current fix */

  struct fb_ops *fbops;

 

struct fb_fix_screeninfo 里定义的 pixclock 是像素点的周期单位是皮秒数值等于像素点显示频率的倒数如上图贴出的表格中, Dclk 那行中, 6.4 Mhz 就是频率频率倒数即为周期换算出来为 156250 ps, 约为表中给出的 156 ns.

 

驱动具体的实现要看开发板对应的驱动源码文件一般位于 kernel_src/drivers/video/ 

这部分最好看看 Sreekrishnan Venkateswaran 写的 Essential Linux Device Drivers  12章视频部分.

对于设置以及 LCD 的显示参数这些比较近硬件的,韦东山的 嵌入式 Linux 应用开发完全手册 可看看.

0 0