微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于ARM9和Linux的液晶驱动终端设计

基于ARM9和Linux的液晶驱动终端设计

时间:05-03 来源:测控网 点击:

ide0下的fbcon.c文件,其主要依靠fb_info、fb_var_screeninfo、 fb_fix_screeninfo3个数据结构,这些结构定义在include/Linux/fb.h程序内。S1D13506基于 Framebuffer的设备驱动程序主要完成AT91RM9200 EBI总线的配置工作、S1D13506内部寄存器的初始化及Frambuffer中预定义的数据结构的填充。系统中使用的驱动程序是对EPSON公司 S1D13xxx系列显示控制器件Linux驱动程序修改完成。其初始化函数示意性代码如下:

  int sldl3506fb_init()

  {

  init_9200_bank(); //初使化AT9lRM9200EBI总线

  fb_info.RegAddr=(unsigned char*)ioremap_nocache(Ox300000000,0x200000);

  fb_jnfo.VmemAddr=(unsigned char*)ioremap_nocache(0x30200000,Ox200000);

  //将S1D13506的寄存器与显示存储的线性地址空间保存到显卡状态结构体

  setsIdl3506_reg();//配置S1D13506显卡寄存器,并填充显卡状态数据结构

  register_framebuffer(&fb_info.gen.info);||注豫framebuffer,初始化完成

  }

  将驱动文件添加至Linux根目录下的drivers\vide0目录中,并在当前目录下makefile文件中添加obi一$(CONFIG FBS1D13506)+=sldl3506fb.O,在Config.ini文件中添加boolSldl3506‘CONFIG_FB_EPSON,在 Linux移植过程中可将驱动程序静态编译到内核中。若要使MiniGUl支持Frame-buffer,需将MiniGUI.efg文件中GAL引擎设为Framebuffer,如gal_engine=fbcon

  4.3 应用程序

  在应用程序设计中,使用多线程可更好的协调串口接收、图像显示、数据存储以及超时处理等操作。终端中基于POSIX的应用程序由图形显示与串口命令解析组成,由于Linux操作系统中不同的线程之间可通过全局变量传递参数,应用程序中使用了一个全局的循环FIFO作为两个线程之间的命令缓冲区,采用两个静态数据缓冲区用于存放串口传来的图像数据资源,数据缓冲区大小与LCD分辨率和像素深度有关。命令循环FIFO管理结构如下所示。

  系统中,基于Framebuffer的设备被映射为/dev/fb0文件,应用程序启动后,首先调用open()函数打开设备,然后调用 mmap()函数将显存影射到用户空间开辟的数据缓冲区内,初始化命令缓冲队列后,启动串口命令接收,接收到有效的串口命令后则执行相应的显示操作。

  5 结语

  目前,该终端可成功驱动SHARP LQ035Q3DG01、LQl04-V1DG21等多种分辨率18 bit接口LCD,并在某纺织厂的细纱机车速监控仪中得到应用。使用该终端可降低人机界面的设计难度,提高仪器仪表的开发效率,并且可进一步扩展网络视频播放及网络命令接口等功能,具有良好的市场前景和使用价值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top