一、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)
阅读(2332) | 评论(0) | 转发(0) |