欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LCD驱动移植

程序员文章站 2022-03-22 14:41:03
...

*********************************************************************************************************************************************

cpu          : s3c2440(arm9)

开发板    :fl2440开发板

内核版本:linux 3.0

**********************************************************************************************************************************************

   什么是lcd?

    LCD ( Liquid Crystal Display 的简称)液晶显示器。LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分普及。按照背光源的不同,LCD可以分为CCFLLED两种。
由于我的开发板的lcd尺寸大小是4.3寸,所以查看一下lcd手册将内核中lcd重要的参数进行修改,参数表如图所示:
LCD驱动移植
TFT工作时序图:
LCD驱动移植
***********************************************************************************************************************************************************************
说明:
VBP(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数,对应驱动中的upper_margin; 
VFB(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数,对应驱动中的lower_margin;

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

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

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

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

*********************************************************************************************************************


1.修改内核代码
[aaa@qq.com linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.c
218 /* LCD driver info */
219 
220 static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
221 
222         .lcdcon5        = S3C2410_LCDCON5_FRM565 |
223                           S3C2410_LCDCON5_INVVLINE |
224                           S3C2410_LCDCON5_INVVFRAME |
225                           S3C2410_LCDCON5_PWREN |
226                           S3C2410_LCDCON5_HWSWP,
227 
228         .type           = S3C2410_LCDCON1_TFT,
229 
230         .width          = 480,/*modify by zoulei 2017.4.18*/
231         .height         = 272,/*modify by zoulei*/
232 
233         .pixclock       = 600000, /* HCLK 60 MHz, divisor 10 像素时钟*/
234         .xres           = 480,/*modify by zoulei  水平可见的有效像素*/
235         .yres           = 272,/*modify by zoulei 垂直可见的有效像素*/
236         .bpp            = 16,/*modify by zoulei色位模式*/
237         .left_margin    = 19,/*modify by zoulei行切换,从同步到绘图之间的延迟*/
238         .right_margin   = 10,/*modify by zoulei行切换,从绘图到同步之间的延迟*/
239         .hsync_len      = 30,/*modify by zoulei水平同步的长度*/
240         .upper_margin   = 4,/*modify by zoulei帧切换,从同步到绘图之间的延迟*/
241         .lower_margin   = 2,/*modify by zoulei帧切换,从绘图到同步之间的延迟*/
242         .vsync_len      = 8,/*modify by zoulei垂直同步的长度*/
243 };
......
262         .lpcsel         = 0,//((0xCE6) & ~7) | 1<<4,/*modify by zoulei这个是三星TFT屏参数*/
263 };
**************************************************************************************************************************************************************************
说明:像素时钟pixclock计算:

    DOTCLK = fframe × (X + HBP + HFP+HSPW) × (Y + VBP + VFP+VSPW)  (单位:MHz)

    pixclock = 1012/ DOTCLK=1012/ (fframe × (X + HBP + HFP+HSPW) × (Y + VBP + VFP+VSPW)) (单位:皮秒)

************************************************************************************************************************************

2.配置make menuconfig
[aaa@qq.com linux-3.0]$ make menuconfig

Device Drivers  ---> Graphics (图像)support  --->

             <*> Support for frame buffer devices  --->

                           [*]   Enable firmware EDID

                           [*]   Enable Video Mode Handling Helpers

                           <*>   S3C2410 LCD framebuffer support

             [*] Backlight & LCD device support  --->

                          <M>   Lowlevel LCD controls

                          <M>   Lowlevel Backlight controls

                          <M>     Generic (aka Sharp Corgi) Backlight Driver

                                        Console display driver support  --->

                                                     <*> Framebuffer Console support
                                                     [*]   Map the console to the primary display device

                                                     [*]   Framebuffer Console Rotation

                                                     [*] Select compiled-in fonts

                                                     [*]   VGA 8x8 font

                                                     [*]   Mini 4x6 font

                                    [*] Bootup logo  ---> 

                                                    [*]   Standard 224-color Linux logo

配置好后make编译,将内核烧入开发板.....

如果要想在开发板的屏幕上看到启动的代码,则因修改如下环境变量,我的是jffs2文件系统,

set bootargs'noinitrd root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttyS0 console=tty1,115200'

set bootargs_jffs2'noinitrd root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttyS0 console=tty1,115200'

***************************************************************************************************************************

说明:我的开发板内核是加载的jffs2文件系统,所以想在开发板屏幕上显示启动信息,在uboot 环境变量里面添加那两段代码

不过主要是添加tty1文本型控制台,也就是对应的putty或者secure crt虚拟控制终端,因此加上控制台参数console=tty1.

********************************************************************************************************************


如果在开发板上看到小企鹅,以及显示信息,ok这样lcd驱动就顺利移植好了......