LCD驱动的学习

简介:

    LCD是基于液晶的。

LCDliquid crystal display)按驱动方式分类可以分为静态驱动简单矩阵驱动主动矩阵驱动。其中,简单矩阵又可以分为扭转向列型(TN超转向列型(STN,而主动矩阵驱动则以TFT(用的最多)为主。

TN型液晶驱动:是LCD中最基本的,他只能将入射光旋转90度,视角只有30度。

STN型驱动液晶:可以讲入射光旋转180度至270度,也改善了视角。

TFT解决了上述两种液晶屏的缺陷,属于比较常用的。

 

一块lcd屏显示图像不但需要lcd驱动器,还需要lcd控制器。很多主芯片cpu继承了lcd控制器。其显示原理为:作为帧同步信号的vsync,每发出一个脉冲,就意味着一幅图像开始传输。作为行同步信号的hsync,每发出一个信号,代表新的一行图像资料开始发送。图像为从左向右,从上向下显示

一个完整的时序图如下:

 

 

 

  

下面是lcd的技术参数:

1. 可视面积

2. 可视角度

3. 点距

4. 色彩度

5. 对比值

6. 亮度值

7. 响应时间

 

显存:

    Framebuffer(帧缓冲)从本质上讲是图形设备的硬件抽象。对开发者而言,framebuffer是一块显示缓存,往显示缓存中陷入特定格式的数据就意味着向屏幕中输出内容。通过不断地向framebuffer中写数据,显示控制器就自动的从framebuffer中读数据并显示出来。

 

在嵌入式一般没有专门的芯片做显存,一般是从内存中分一部分做显存Framebuffer其实就是显存。

 

帧缓冲设备对应的设备文件是/dev/fb*,如果系统中有多个显示卡,linux下还可支持多个帧缓冲设备,最多可达32个。帧缓冲设备的主设备号为29,次设备号是031.

 

下面是使用帧缓冲设备文件的演示。

 

 

帧缓冲设备编程:

     整个编程的系统架构如下:

 

 

       可以看出,我们实现帧缓冲设备主要需要完成两个任务:

1. 实现一个fb_info结构体,这其中包括可变参数,固定参数,操作列表等。

2. 使用register_frambuffer注册一个帧缓冲设备。

Fb_info

 

 

 

 

register_frambuffer

 

寻找lcd驱动对应的设备:

lcd驱动的init函数中,主要是初始化一个平台驱动。

 

平台驱动的结构体如下,其匹配的参数为“s3c2410-lcd”,可以查询同样名称为s3c2410-lcd的平台设备。

 

   下面可以看到,确实能查到这个设备,资源有两个,一个是寄存器起始地址,另一个是中断号。

 

 

    通过mach-s3c2440.c文件,这个设备被上报给内核。

 

驱动文件:

应用程序:





原文地址:https://www.cnblogs.com/dchipnau/p/5255316.html