首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
基于AT91RM9200的LCD驱动程序设计
来源:本站整理  作者:佚名  2009-04-01 09:39:31




这些函数都是用来设置和获取驱动层接口fb_info结构体中的成员变量的,在第4小节中已提到,当应用程序对设备文件进行操作或读取设备文件状态时会调用这些函数。如fb_get_fix和fb_get_var函数得到的是fb_info中变量fix和var,fb_set_var则是对var变量进行设置。这些函数都要根据实际的操作来进行实现,下面以s1d13xxxfb_set_var函数为例来说明这些子函数都是如何实现的。它的作用是设置fb_info里的结构体fb_var_screeninfo变量var的值:
static int s1d13xxxfb_set_var(struct fb_var_screeninfo *var,){
memset(var, 0, sizeof(struct fb_var_screeninfo));
    var->xres =  800;     //显示800×600分辨率
    var->yres =  600;
    var->bits_per_pixel = 16;  //定义16位颜色数
    …  //其他与LCD硬件有关的参数}

5.2 LCD初始化
LCD控制器是通过产生显示驱动信号来驱动LCD的。在驱动程序里,用户只需要通过读写一系列的寄存器,就可以完成配置和显示控制。而Linux下驱动程序总是先调用module_init()函数,括号里的参数是所要初始化的文件设备的初始化函数。因此在本系统中,通过调用module_init(s1d13xxxfb_init)初始化函数来实现对一系列寄存器的设置。s1d13xxxfb_init初始化函数部分代码如下:
int __init s1d13xxxfb_init(char *dummy){
  S1D_INDEX  s1dReg;  //定义寄存器数组
  S1D_VALUE  s1dValue;  //设置所对应寄存器的值
  plateform_init_video();    //LCD显示电压寄存器的初始化
  for (i = 0; i < sizeof(aS1DRegs)/sizeof(aS1DRegs[0]); i++) {
      s1dReg = aS1DRegs[i].Index;  //把设定的值写入寄存器
      s1dValue = aS1DRegs[i].Value;…  }  
local_s1d13xxxfb_open();   //打开sld13506控制器
  strcpy(fb_info.modename, "s1d13xxx"); //复制modename
  fb_info.node = -1; //指向底层函数指针赋初值为-1
  fb_info.fbops = &s1d13xxxfb_ops; //对结构体fb_info.fbops初始化 
  fbgen_get_var(&disp.var, -1, &fb_info.gen.info); //获取当前的显示参数
  fbgen_do_set_var(&disp.var, 1, &fb_info.gen); //设置显示控制器参数
  fbgen_install_cmap(0, &fb_info.gen); //根据LCD硬件参数开辟显存空间
 
  if (register_framebuffer(&fb_info.gen.info) < 0) {//注册显示驱动程序,不成功则报错
    return -EINVAL;  }
  printk("Installed sld31506 frame buffer \n”);   };
首先对LCD的背光灯进行点亮,LCD显示是一种被动的显示模式,它不能发光,只能依靠控制透射或反射周围环境的光来达到显示的目的,因此,必须通过写电压寄存器,用高电平对LCD显示器加3.2伏电压来实现背光灯的点亮。其函数的部分代码如下:

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

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:103,527.30000 毫秒