保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

在Linux下驱动STN彩色LCD


Console drivers --->
Frame-buffer support--->
[*]  Support for frame buffer devices (EXPERIMENTAL)
[*]  SA-1100 LCD support (NEW)
[*]  Advanced low level driver options (NEW)
[*]  16 bpp packed pixels support (NEW)
[*]  Select compiled-in fonts (NEW)
[*]  VGA 88 font
#make dep
#make zImage


    驱动帧缓冲的设计
    帧缓冲设备属于字符设备,采用了“文件层-驱动层”的接口方式。Linux为帧缓冲设备定义的驱动层接口为struct fb_info结构。在文件层次上,Linux为其定义了下面的操作函数:

static struct file_operations fb_fops = { 
   owner: THIS_MODULE, 
   read: fb_read,  /* 读操作*/ 
   write: fb_write,  /* 写操作*/ 
   ioctl: fb_ioctl,  /* 控制操作*/ 
   mmap: fb_mmap,  /* 映射操作*/ 
   open: fb_open,  /* 打开操作*/ 
   release: fb_release,  /*关闭操作*/ 
   };


    应用程序层对帧缓冲设备的访问同对文件的访问操作类似。在应用程序中,对帧缓冲设备(dev/fb)的操作只需调用文件层的操作函数。首先打开/dev/fb设备文件;随后用ioctl操作取得屏幕的分辨率和bpp值,从而计算出屏幕缓冲区的大小,并将屏幕的缓冲区映射到用户空间;最后就可直接对屏幕缓冲区进行图片显示。

    嵌入式Linux操作系统对帧缓冲的初始化入口在fbmem.c中的如下定义:

static struct {
 const char *name;
 int (*init)(void);
  int (*setup)(char*);
} fb_drivers[ ]__initdata = {
#ifdef CONFIG_FB_YOURCARD
   { "driver_name", xxxfb_init, xxxfb_setup },
#endif


    通过该入口可进入帧缓冲的初始化函数。下面是对整个帧缓冲的实现过程。

    首先,根据所选择的STN型LCD先初始化显示屏幕的分辨率(640×480)、每个像素的比特数(实际所选的LCD为12bpp,但在设计中可作为16bpp来设计。这是因SA1110的LCD控制器对两者处理方式相同而只有色彩深度的比例不同的缘故)和各种时序值。随后这些值将会被写入LCD控制器的控制寄存器LCCR0到LCCR3内,即完成对LCD控制器内一部分寄存器的配置。特殊的一点,因为所选的LCD是12bpp显示,所以rgbt色彩的深度比值应为4:4:4:0。

    其次对LCD进行显示缓冲区的分配。该过程由kmalloc函数实现动态分配一片连续的空间,需要分配的缓冲区大小为600K字节。缓冲区是在SDRAM中分配大容量的地址,存储器映射至SA1110内,其中上半屏起始地址保存到LCD控制器的寄存器DBAR1中,下半屏起始地址保存到DBAR2中。在此完全初始化一个fb_info结构,填充其中的各成员变量。之后进行中断处理请求和各种变量和调色板等的设置。然后注册驱动程序,通过调用register_framebuffer(&fb_info)实现将fb_info登记入内核。最后,启动GPIO9~2和LCD控制器。

    效果

    因为该设计将驱动作为内核的一部分,而不是模块加载的方式,所以需重新编译内核,并将新编译的Linux内核下载到开发板内。重新启动系统后,通过应用程序检测,可以使屏幕显示任意所需图片,表明了驱动LCD显示的设计已成功实现。

    在对嵌入式Linux系统进行驱动LCD的开发时,不仅涉及到对开发板的了解(特别是微处理器和外围接口),

《在Linux下驱动STN彩色LCD(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/169015.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。