kernel版本:linux-2.6.34
开发板:PW2440
CPU:S3C3440
LCD:3.5 寸TFT(320×240),Model Name LQ035NC111
LCD的参数设定是需要根据LCD的手册来设定arch/arm/mach-s3c2440/mach-smdk2440.c里面的s3c2410fb_display smdk2440_lcd_cfg结构体
例如从LQ035NC111的手册可以得到如下一个表
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-01/31800.htm
该表描述了该款并行LCD的所有时钟需求,在这里我参照的全是典型值“Typ”栏
一个很具有参考价值的文档文件是Documentation/fb/framebuffer.txt文件,里面给我们描述了一个架构
+----------+---------------------------------------------+----------+-------+
| | ↑ | | |
| | |upper_margin | | |
| | ↓ | | |
+----------###############################################----------+-------+
| # ↑ # | |
| # | # | |
| # | # | |
| # | # | |
| left # | # right | hsync |
| margin # | xres # margin | len |
|<-------->#<---------------+--------------------------->#<-------->|<----->|
| # | # | |
| # | # | |
| # | # | |
| # |yres # | |
| # | # | |
| # | # | |
| # | # | |
| # | # | |
| # | # | |
| # | # | |
| # | # | |
| # | # | |
| # ↓ # | |
+----------###############################################----------+-------+
| | ↑ | | |
| | |lower_margin | | |
| | ↓ | | |
+----------+---------------------------------------------+----------+-------+
| | ↑ | | |
| | |vsync_len | | |
| | ↓ | | |
+----------+---------------------------------------------+----------+-------+
还有一个很有用的公式 Pixelclock:
xfree: in MHz
fb: in picoseconds (ps)
pixclock = 1000000 / DCF
再结合结构体 static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
.lcdcon5 = S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE |
S3C2410_LCDCON5_INVVFRAME |
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
.type = S3C2410_LCDCON1_TFT,
.width = LCD_WIDTH,
.height = LCD_HEIGHT,
.pixclock = LCD_PIXCLOCK,
.xres = LCD_WIDTH,
.yres = LCD_HEIGHT,
.bpp = 16,
.left_margin = LCD_LEFT_MARGIN,
.right_margin = LCD_RIGHT_MARGIN,
.hsync_len = LCD_HSYNC_LEN,
.upper_margin = LCD_UPPER_MARGIN ,
.lower_margin = LCD_LOWER_MARGIN,
.vsync_len = LCD_VSYNC_LEN,
};
pixclock:现在我们就可以开始设置这个结构体的参数了,有上面第3小结的表我们可以知道LCD的时钟Dclk应该是156ns,这个对应结构体里面的像素点时钟pixclock,在来看看第四节提到的一个公式 pixclock=1000000/DCF,这个DCF就是LCD的Dclk对应的频率,注意,单位为MHz,所以DCF=1000 000 000/156 Hz=1000/156 MHz;可以得到pixclock=1000000/(1000/156)=156000;
width、height的设定这个就没什么歧义了,对应320和240
bpp:其实我的这个LCD手册上说该屏是支持24位色的,但是这里填写16位,有空可以试试24位
其他的参数:其他参数对应第3节的表填写 xres <===========> TEP
yres <===========> Tvd
left_margin <===========> Thf time from sync to picture HS Front Porch
right_margin <===========> Thb time from picture to sync HS Back Porch
hsync_len <===========> THS length of horizontal sync HS pulse width
upper_margin <===========> Tvf time from sync to picture VS Front Porch
lower_margin <===========> Tvb time from picture to sync VS Back Porch
vsync_len <===========> Tvs length of vertical sync VS pulse width
所以我的配置如下 #define LCD_WIDTH 320
#define LCD_HEIGHT 240
#define LCD_PIXCLOCK 156000
#define LCD_RIGHT_MARGIN 38
#define LCD_LEFT_MARGIN 20
#define LCD_HSYNC_LEN 30
#define LCD_UPPER_MARGIN 4
#define LCD_LOWER_MARGIN 15
#define LCD_VSYNC_LEN 3
基本上就这样了吧,呵呵
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-01/31800.htm