Chinaunix首页 | 论坛 | 博客
  • 博客访问: 77108
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 321
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-24 18:56
文章分类
文章存档

2019年(2)

2014年(8)

我的朋友

分类: LINUX

2014-07-21 14:00:20

 

LCD时序

重要的结构fb_var_screeninfo

struct fb_var_screeninfo {

      __u32 xres;                 /*显存可视区域宽度,单位像素*/

      __u32 yres;         /*显存可视区域高度,单位像素*/

      __u32 xres_virtual;           /*显存的宽度,单位像素*/

      __u32 yres_virtual;      /*显存的高度,单位像素*/

      __u32 xoffset;             /* 显存可视区域左上角x方向偏移*/

      __u32 yoffset;             /* 显存可视区域左上角y方向偏移*/

      __u32 bits_per_pixel;        /* 每个像素在显存中所占的bit*/

      __u32 grayscale;         /* 当使用非彩色时使用,一般不用 */

      struct fb_bitfield red;        /*指定一个像素中每个颜色分量的偏移和长度 */

      struct fb_bitfield green;     /* */

      struct fb_bitfield blue;

      struct fb_bitfield transp;   /* transparency                */ 

      __u32 nonstd;             /* 如果使用的是非标准的色彩格式,一般不用 */

      __u32 activate;                 /* FB的开启策略?see FB_ACTIVATE_*          */

      __u32 height;              /* height of picture in mm,好像也不用吧    */

      __u32 width;              /* width of picture in mm    */

      __u32 accel_flags;       /* (OBSOLETE) see fb_info.flags */

      /* Timing: All values in pixclocks, except pixclock (of course) */

      __u32 pixclock;                /* 像素时钟,单位皮秒,也就是每隔这个时间,控制器向LCD发出一个完整的像素数据*/

      __u32 left_margin;      /*水平前肩,单位(像素时钟个数)time from sync to picture   */

      __u32 right_margin;          /*水平后肩,单位(像素时钟个数)time from picture to sync   */

      __u32 upper_margin;        /* 垂直前肩,单位(像素时钟个数)time from sync to picture */

      __u32 lower_margin;   /*垂直后肩,单位(像素时钟个数)*/

      __u32 hsync_len;        /* 水平同步信号的有效电平的长度,单位(像素时钟个数)length of horizontal sync      */

      __u32 vsync_len;        /*垂直同步信号的有效电平的长度,单位(像素时钟个数) length of vertical sync     */

      __u32 sync;                /* 水平或垂直同步信号的有效电平see FB_SYNC_*       */

      __u32 vmode;             /* 电子枪扫描模式,LCD显然是非交错扫描模式see FB_VMODE_*          */

      __u32 rotate;              /* 显存旋转角度,一般不用angle we rotate counter clockwise */

      __u32 reserved[5];       /* Reserved for future compatibility */

};

LinuxLCD的抽象如下图所示:

下图清晰的展现了各个时钟信号之间的关系,当然,这只是S3C2410开发板上的LCD,不同的LCD的时钟信号都不一样,但都没有太大区别:

在编写LCD控制器驱动的过程中,需要设置

pixclock

left_margin/right_margin

upper_margin/lower_margin

hsync_len/vsync_len

这些参数都是显示器的数据手册直接或间接给出的,除了pixclock。假如,我要输出60fps的帧率,那么1/pixclock=( left_margin+right_margin+hsync_len+xres)* ( upper_margin+lower_margin+ vsync_len+yres)*60,这样就计算出了pixclock,由于一般向LCD控制器寄存器中写入的是pixclock,而不是帧率,所以,实际的帧率并不一定严格等于60,因为在上面计算过程中pixclock可能会取整。

阅读(2839) | 评论(0) | 转发(1) |
0

上一篇:内核timer架构的解释

下一篇:h264-cavlc 详解

给主人留下些什么吧!~~