LCD屏参:手把手教你配置LCD屏参(proch值)

您所在的位置:网站首页 1024x768什么意思 LCD屏参:手把手教你配置LCD屏参(proch值)

LCD屏参:手把手教你配置LCD屏参(proch值)

2024-07-09 10:39| 来源: 网络整理| 查看: 265

  LCD屏参(proch值)解释和计算

Linux内核的lcd控制器使用clcd_panel结构体表示一个LCD屏的硬件参数:

 

/* include/linux/fb.h */   struct fb_videomode {   const char *name; /* optional */   u32 refresh; /* 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;   u32 vmode;   u32 flag;   };   /* include/linux/amba/clcd.h */   struct clcd_panel {   struct fb_videomode mode;   signed short width; /* width in mm */   signed short height; /* height in mm */   u32 tim2;   u32 tim3;   u32 cntl;   unsigned int bpp:8,   fixedtimings:1,   grayscale:1;   unsigned int connector;   };   /* include/linux/fb.h */ struct fb_videomode { const char *name; /* optional */ u32 refresh; /* 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; u32 vmode; u32 flag; }; /* include/linux/amba/clcd.h */ struct clcd_panel { struct fb_videomode mode; signed short width; /* width in mm */ signed short height; /* height in mm */ u32 tim2; u32 tim3; u32 cntl; unsigned int bpp:8, fixedtimings:1, grayscale:1; unsigned int connector; };

先看一个例子:http://lxr.linux.no/linux+v2.6.37.4/arch/arm/mach-lpc32xx/phy3250.c

 

 

fb_videomode各个参数的意义

Linux对LCD的抽象如下图所示:

下面研究一下fb_videomode各个成员的意义:

 

名称在数据手册中的简称中文名意义备注nameNo名字液晶屏名字(可选)NorefreshNo刷新频率刷新频率(内核中很多例子都赋值为60)NoxresNo行宽每行的像素个数NoyresNo屏幕高度屏幕的行数NopixclockNo像素时钟每个像素时钟周期的长度,单位是皮秒(10的负12次方分之1秒)Noleft_marginHBP (Horizontal Back Porch)水平后沿在每行或每列的象素数据开始输出时要插入的象 素时钟周期数Noright_marginHFP (Horizontal Front Porch )水平前沿在每行或每列的象素结束到LCD 行时钟输出脉冲 之间的象素时钟数Noupper_marginVBP (Vertical Back Porch)垂直后沿在垂直同步周期之后帧开头时的无效行数Nolower_marginVFP (Vertical Front Porch)垂直前沿本帧数据输出结束到下一帧垂直同步周期开始之 前的无效行数Nohsync_lenHPW (HSYNC plus width)行同步脉宽单位:像素时钟周期也有手册简称为HWH(HSYNC width)vsync_lenVPW (VSYNC width)垂直同步脉宽单位:显示一行的时间th也有手册简称为VWH(VSYNC width)syncNo同步极性设置可以根据需要设置FB_SYNC_HOR_HIGH_ACT(水平同步高电平有效)和FB_SYNC_VERT_HIGH_ACT(垂直同步高电平有效)NovmodeNoNo在内核中的大多数示例都直接置为FB_VMODE_NONINTERLACED。interlaced的意思是交错[隔行]扫描,电视中使用2:1的交错率, 即每帧分两场,垂直扫描两次,一场扫描奇数行,另一场扫描偶数行。很显然LCD目前不是这种模式。NoflagNoNo目前没有看到用法No

说明:

(1)Linux对LCD的抽象是以图像为中心的,而LCD手册则以同步信号为中心,所以内核中的left_margin是指在每一行之前(前面自然对应左边)的空闲周期数,而它对应LCD数据手册中的水平后沿(HBP Horizontal Back Porch),是指在行同步信号之后的空闲周期。参照物不同而已,但是说的是同一个东西。

(2)水平同步信号有时也成为行同步型号,垂直同步信号有人称为场同步信号。

(3)对于LCD的frambuffer抽象模型请参考内核中的文档:Documention/fb/frambuffer.txt。

(4)fb_videomode各个成员的用处是我自己参照内核代码中的include/linux/amba/clcd.h中的clcdfb_decode()函数总结的,不保证护绝对正确。

 

clcd_panel各个成员的意义

clcd_panel是ARM的AMBA LCD控制器专有的数据结构,定义在include/linux/amba/clcd.h中。

ARM的AMBA LCD控制器数据手册在这里:http://infocenter.arm.com/help/topic/com.arm.doc.ddi0121d/DDI0121.pdf

width和height的单位是mm,应该是指屏幕的物理尺寸。但是在drivers/video/amba-clcd.c中只是简单的赋给fb.var.width/height,内核中大多数例子直接赋为-1。

 

从include/linux/amba/clcd.h中的clcdfb_decode()函数和drivers/video/amba-clcd.c中的clcdfb_set_par()函数可以看出 tim2是时钟和信号极性寄存器,tim3是行末控制寄存器,用来控制每行输出结束后是否输出一个脉冲。tim3一般不用理,使用默认值。tim2一般要根据LCD数据手册用下面几个宏赋值:

#define TIM2_CLKSEL (1



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3