PXA270的LCD显示系统的设计与实现

[09-13 16:47:12]   来源:http://www.88dzw.com  信息显示与光电技术   阅读:8870

文章摘要:3.1 帧缓冲器的初始化主要数据结构如下:struct pxafb_info:主要用于帧缓冲区设备驱动框架的搭建,也是Linux为帧缓冲设备定义的驱动层接口。它不仅包含了底层函数,而且还记录了帧缓冲器设备的全部信息。每个帧缓冲设备都必须与一个fb_info结构相对应。其中成员变量modename为设备名称,fontname为显示字体,fbops为指向底层操作的函数的指针。struct pxafb_fix_screeninfo:记录用户不能修改的显示控制器参数。它包括屏幕缓冲区的物理地址和长度。 struct pxafb_var_screeninfo:记录用户可以修改的显示控制器参数。它包括显示

PXA270的LCD显示系统的设计与实现,标签:显示及光电,光电显示技术,http://www.88dzw.com

3.1 帧缓冲器的初始化

主要数据结构如下:

  struct pxafb_info:主要用于帧缓冲区设备驱动框架的搭建,也是Linux为帧缓冲设备定义的驱动层接口。它不仅包含了底层函数,而且还记录了帧缓冲器设备的全部信息。每个帧缓冲设备都必须与一个fb_info结构相对应。其中成员变量modename为设备名称,fontname为显示字体,fbops为指向底层操作的函数的指针。

  struct pxafb_fix_screeninfo:记录用户不能修改的显示控制器参数。它包括屏幕缓冲区的物理地址和长度。

  struct pxafb_var_screeninfo:记录用户可以修改的显示控制器参数。它包括显示屏幕的分辨率、每个像素的比特数和一些时序变量。其中变量xres定义了屏幕一行所占的像素数,yres定义了屏幕一列所占的像素数,bits_per_pixel定义了每个像素用多少个位来表示。

  帧缓冲区的初始化函数在/drivers/video/pxafb.c文件中,结构如下:

  int __init pxafb_init(void)

  {

        struct pxafb_info *fbi;

        int ret;

  …………

        fbi = pxafb_init_fbinfo();     //初始化一些重要的数据结构

  …………

  /* Initialize video memory */

        ret = pxafb_map_video_memory(fbi);  //在内存中创建一个图像缓存区

        …………

        pxafb_set_var(&fbi->fb.var, -1, &fbi->fb);

     …………

        ret = register_framebuffer(&fbi->fb);   //登记,使画面缓冲区与控制台设备驱动的高层挂钩

…………

  / * Ok, now enable the LCD controller  */

        set_ctrlr_state(fbi, C_ENABLE);

        …………

        return ret;

  }

  首先是pxafb_init_fbinfo()的调用,目的在于对几个数据结构进行初始化,并设置有关的基本的参数,例如所用的字体、显示屏的规格等,还有为了搭建帧缓冲器的设备驱动框架做一些准备。接着通过pxafb_map_video_memory()函数在内存中创建帧缓冲区,实际上是为一个内存区间另外建立一个映射。这里分配用于帧缓冲区的内存区间应该是不经高速缓存、不加写缓冲的,这样才可以一经写入便立即反映在显示屏上,而无需先对高速缓存进行刷新。

  pxafb_set_var()函数是为控制台设备驱动的高层提供一个驱动帧缓冲区的界面。同时也确定一些与画面缓冲区有关的参数,并记录在一个fb_var_screeinfo数据结构中。确定了这些参数以后,如果目标帧缓冲区属于当前选定的控制台设备,就通过pxa_activate_var()函数把这些参数分门别类地组合生成PXA270各有关寄存器的映像,并最终设置到PXA270的各个LCD控制寄存器中。

这里用到6个寄存器:

  • DBAR1:DMA通道1的基地址寄存器,用于调色板;
  • DBAR2:DMA通道2的基地址寄存器,用于画图;
  • LCCR0:黑白/彩色模式选择,单画面/双画面显示方式、被动/主动显示模式选择;
  • LCCR1:控制着水平方面的扫描,包括每行的像素、水平同步脉冲宽度、在水平扫描行的开头和末尾各空出几个像素等参数;
  • LCCR2:控制着垂直方面的扫描,包括每个画面的行数、垂直同步脉冲宽度、在画面的顶部和底部各空出几行等参数;
  • LCCR3:控制着像素时钟的频率以及各种同步脉冲的极性。

  这些宏操作都在/drivers/video/pxafb.h文件里。

  #if defined(CONFIG_FB_LB064v02)

  #define LCD_PIXCLOCK        250000//54000//150000

  #define LCD_BPP             16

  #define LCD_XRES            640

上一页  [1] [2] [3]  下一页


Tag:信息显示与光电技术显示及光电,光电显示技术信息显示与光电技术
分类导航
最新更新
热门排行