Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251549
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1538
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-24 07:45
个人简介

生活就像海洋,只有意志坚强的人,才能到达彼岸。

文章存档

2013年(52)

分类: LINUX

2013-09-14 16:10:49

一、LCD简介

1、液晶
要说LCD,先需要了解什么是液晶。1888年,奥地利植物学家莱尼茨尔发现一些有机物融化后变成液体。随后一位德国专家发现这些液体具有某些晶体的

特征,比如折射性,于是后称为“液态晶体”。

2、LCD是Liquid  Crystal Display的简称,液晶显示器按驱动方式分为静态驱动。简单矩阵驱动及主动矩阵驱动。其中,简单矩阵又可细分扭转向列型

(TN)和超扭转向列型(STN),而主动矩阵驱动则以TFT为主。

一块LCD屏显示图像不但需要LCD驱动器,还需要LCD控制器。很多主芯片CPU集成了LCD控制器。一句显示原理:作为帧同步信号的vsync,没发出一个脉

冲,都意味着新的一幅图像数据开始传送。而作为行同步信号的hsync,没发出一个脉冲,都表明新的一行图像资料开始发送。

3、LCD的技术参数

1、可视面积 2、可视角度 3、点距 4、色彩度 5、对比值 6、亮度值 7、响应时间

4、时序图

所有的LCD显示图像的而远离都是从上到下从左到右,衣服图像可以看做是一个矩形,由很多排列整齐的点一行一行组成,这些点称之为像素。




VSYNC:帧同步信号
    每发出一个脉冲,表示新的一屏图像数据开始传送。

HSYNC:行同步信号
    每发出一个脉冲,表示新的一行图像数据开始传送。

VCLK:像素时钟信号
    每发出一个脉冲,表示新的一个点图像数据开始传送。

LEND:行结束信号;
  
VBPD:表示在一帧图像开始时,帧同步信号以后的无效的行数,对应驱动中的upper_margin;

VFBD:表示在一帧图像结束后,帧同步信号以前的无效行数,对应驱动中的lower_margin;

VSPW:表示垂直同步脉冲的宽度,用行数计算,对应驱动中的vsync_len;

HBPD:表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数,对应驱动中的left_margin;

HFPD:表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数,对应驱动中的right_margin;

HSPW:表示水平同步信号的宽度,用VCLK计算,对应驱动中的hsync_len; 

二、帧缓冲驱动程序设计

 1、显存和帧缓冲

    FrameBuffer从本质上讲师图形设备的硬件抽象。对开发者而言,FrameBuffer是一块显示缓存,往显示缓存中写入特定格式的数据意味着向屏幕输出

内容。通过不断的项frame buffer中写入数据,显示控制器自动的从frame buffer中取数据并显示出来。

帧缓冲设备是字符设备,对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux下还可以支持多个帧缓冲设备,最多可达32个,分别为/dev/fb0

到/dev/fb31,而/dev/fb则为当前缺省的帧缓冲设备,通常指向/dev/fb0.帧缓冲设备为标准字符设备,主设备号为29,次设备号则从0到31.

2、访问帧缓冲设备实例演示

1、清除LCD

dd if=/dev/zero of=/dev/fb0 bs=240 count=320

2、运行应用程序,画图
./LCD

3、清除LCD

dd if=/dev/zero of=/dev/fb0 bs=240 count=320

4、显示图片

cat 7.bmp > /dev/fb0

3、Frame Buffer驱动程序实现

1>系统架构




2>设备描述

Linux内核使用struct fb_info来描述帧缓冲设备。
struct fb_info{
    .........................................
    struct fb_var_screeninfo var;/*可变参数*/
    Struct fb_fix_screeninfo fix;/*固定参数*/
    .........................................
    struct fb_ops *fbops;/*帧缓冲操作*/
};

struct fb_var_screeninfo记录了用户可以修改的显示参数

struct fb_fix_screeninfo记录了用户不能修改的显示控制器参数,如显示缓存的物理地址等。

 struct fb_ops *fbops包含了对控制器进行操作的函数指针。

3>设备注册

Linux内核使用register_framebuffer函数注册一个帧缓冲设备
    int register_framebuffer(struct fb_info *fb_info)

Linux内核使用unregister_framebuffer函数注销一个帧缓冲设备。
    int unregister_framebuffer(struct fb_info *fb_info)
阅读(2286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~