Linux内核的amba lcd控制器使用clcd_panel结构体表示一个LCD屏的硬件参数:
/* include/linux/fb.h */
struct fb_videomode {
const char*name; /* optional*/
u32refresh; /* optional*/
u32 xres;
u32 yres;
u32 pixclock;
u32 left_margin;
u32 right_margin;
u32 upper_margin;
u32 lower_margin;
u32 hsync_len;
u32 vsync_len;
u32 sync;
|
名称 |
在数据手册中的简称 |
中文名 |
意义 |
备注 |
|
name |
No |
名字 |
液晶屏名字(可选) |
No |
|
refresh |
No |
刷新频率 |
刷新频率(内核中很多例子都赋值为60) |
No |
|
xres |
No |
行宽 |
每行的像素个数 |
No |
|
yres |
No |
屏幕高度 |
屏幕的行数 |
No |
|
pixclock |
No |
像素时钟 |
每个像素时钟周期的长度,单位是皮秒(10的负12次方分之1秒) |
No |
|
left_margin |
HBP (Horizontal Back Porch) |
水平后沿 |
在每行或每列的象素数据开始输出时要插入的象 |
No |
|
right_margin |
HFP (Horizontal Front Porch ) |
水平前沿 |
在每行或每列的象素结束到LCD 行时钟输出脉冲 |
No |
|
upper_margin |
VBP (Vertical Back Porch) |
垂直后沿 |
在垂直同步周期之后帧开头时的无效行数 |
No |
|
lower_margin |
VFP (Vertical Front Porch) |
垂直前沿 |
本帧数据输出结束到下一帧垂直同步周期开始之 |
No |
|
hsync_len |
HPW (HSYNC plus width) |
行同步脉宽 |
单位:像素时钟周期 |
也有手册简称为HWH(HSYNC width) |
|
vsync_len |
VPW (VSYNC width) |
垂直同步脉宽 |
单位:显示一行的时间th |
也有手册简称为VWH(VSYNC width) |
|
sync |
No |
同步极性设置 |
可以根据需要设置FB_SYNC_HOR_HIGH_ACT(水平同步高电平有效)和FB_SYNC_VERT_HIGH_ACT(垂直同步高电平有效) |
No |
|
vmode |
No |
No |
在内核中的大多数示例都直接置为FB_VMODE_NONINTERLACED。interlaced的意思是交错[隔行]扫描,电视中使用2:1的交错率, 即每帧分两场,垂直扫描两次,一场扫描奇数行,另一场扫描偶数行。很显然LCD目前不是这种模式。 |
No |
|
flag |
No |
No |
目前没有看到用法 |
No |
u32 vmode;
u32 flag;
};
在i.mx6中,关于lvds液晶屏的这个结构体参数所属文件为:driver/video/mxc/ldb.c
有这幅图可以知道结构体struct fb_videomode各个元素所对应的具体含义,如果液晶屏采用行场(HV)模式的,根据液晶屏数据手册可以很容易的把这个结构体中各个元素的数值填写进去,但是如果液晶屏是采用DE模式的话,液晶屏数据手册上提供的参数就不好和结构体中各个参数对应了。现在我就来说一下DE模式下的液晶屏如何把手册中提供的数据与该结构体中各元素的值进行对应。
液晶屏手册中该屏幕的参数如下:
有该数据列表可知(其后所述均采用标称值),该屏幕分辨率为1024x600,时钟频率为51.2MHz,由此可知像素时钟周期(单位皮秒)为14065。但是其他数据就和结构体里的元素对应不上了,有以上数据手册可以得知,其一行1344个像素点,空白点是320个,即其扫描一行在行首会有320个无效像素点。根据手册又可知,其扫描一场即扫描一屏有35个空白行,