基于S3C2440A终端LCD驱动电路的设计与实现
引言
现在大部分的便携式手持终端产品,如移动电话、导航系统等,都拥有一个小型LCD显示屏,这使LCD驱动电路的设计成为手持终端设计的重要组成部分。
本文以应用于特殊行业的手持终端为例,叙述LCD驱动电路的设计实现方法。
硬件电路设计
硬件电路结构
本设计中手持终端CPU采用三星公司ARM920T内核处理器S3C2440A,其LCD控制器支持STN LCD和TFT LCD,实际使用的LCD为LTS350Q1-PE1_PI,属于TFT LCD。
电路框图如图1所示。
驱动电路主要包括三部分:第一部分是LCD驱动,采用MAX1779芯片;第二部分是LED背光驱动,采用MP1521芯片;第三部分是VCOM信号驱动,采用LM8261芯片。这里主要叙述LCD驱动和背光电路的实现。
LCD驱动电路
由于LCD内集成有数字电路和模拟电路,需要外部提供数字电压DVDD和模拟电压AVDD。另外,为了完成数据扫描,需要TFT轮流开启/关闭。当TFT开启时,数据通过源极驱动器加载到显示电极,显示电极和公共电极间的电压差再作用于液晶实现显示,因此需要控制TFT的开启电压VGH、关闭电压VGL,以及加到公共电极上的电压VCOM。
MAX1779芯片能产生LCD需要的模拟电压AVDD、栅极开启电压VGH及栅极关断电压VGL。芯片内部集成有3个DC-DC转换器,其中包括两个充电泵和一个升压转换器,可以为小型TFT液晶屏提供高效的调节电压。LCD驱动电路如图2所示。
这里,一个充电泵产生正电压,作为TFT的开启电压VGH;另外一个充电泵产生负电压,作为TFT的关闭电压VGL。此外,芯片还可以产生-5V电压输出,设计时利用-5V输出电压协助LM8261产生VCOM信号。
LED背光驱动电路
LCD作为一种被动显示器件本身并不能发光,必须要有背光模块提供光源。白光LED由于复杂程度较低、成本低且尺寸较小,被普遍用做嵌入式手持设备的LCD背光源。本文中背光驱动电路如图3所示。
驱动芯片采用MP1521,该芯片有3组独立的电流反馈回路,可同时驱动3组并联的LED。现将3组反馈回路FB1、FB2、FB3短接,可以提供更大的驱动电流,用于驱动6个白色串联LED背光灯。
MP1521支持两种方式控制LED亮度,一是将BRT连接在范围为0.26V~1.2V的电压上,另外一种是通过PWM信号控制LED亮度。设计时,将其连接在PWM端口,使用PWM控制LCD背光亮度。
S3C2440A有5个16bit定时器,其中定时器0、1、2、3有PWM功能。将BRT连接到能够输出PWM信号的CPU的TOUT0/GPB0引脚,利用定时器0产生的PWM信号控制LCD亮度。通过改变PWM信号的占空比调整LED亮度,而通过设置CPU内部寄存器的值可以改变PWM的占空比。
为了节省功耗,电路的使能(EN)端接CPU的LCD_PWREN管脚,高电平时背光电路工作;低电平时背光电路不工作。同时,可将EN端通过电阻直接连接到3.3V电源上以便调试时使用。
LCD_BCK+和LCD_BCK-分别连接到串联LED的正负两端。
软件设计
手持终端的嵌入式Linux所采用的内核版本是kernel-2.4.18。 为了使LCD能正常显示,还需要在Linux系统下开发LCD的驱动程序。
字符设备的驱动程序
字符设备是Linux系统中最简单的设备,可以像文件一样访问。当字符设备初始化的时候,其驱动程序向Linux内核登记,在chrdevs向量表中增加一个device_struct数据结构条目。这个设备的主设备标识符用作这个向量表的索引。一个设备的主设备标识符是固定的。chrdevs向量表中的device_struct数据结构包括一个登记设备驱动程序名称的指针和一个指向一组文件操作的指针。这组文件操作本身位于这个设备的字符设备驱动程序中,并处理一些特定任务。
Linux下的帧缓冲设备
Linux操作系统为LCD等显示设备提供了帧缓冲区。帧缓冲区(Framebuffer)是Linux为显示设备提供的一个接口,是把显存抽象化后的一种设备。为LCD编写驱动程序的实质就是为帧缓冲区编写驱动程序。
由于帧缓冲驱动程序的实现在许多论文中有详细叙述,这里不再赘述,本文重点讨论背光设备驱动程序的实现。
LCD背光设备的驱动程序
LCD背光设备可看作字符设备,可以按照字符设备驱动程序的编写方法进行实现。在驱动程序里实现了LCD各种控制功能。驱动程序主要包括lcdctrl.c和lcdctrl_smdk2440.c。其中lcdctrl.c屏蔽了具体的硬件,它通过钩子函数调用lcdctrl_smdk2440.c相关函数完成各种具体操作。为了形象地说明两个文件之间的关系,这里以LCD亮度调节过程为例,说明函数的调用过程,如图4所示。
lcdctrl.c中的lcdctrl_ioctl函数需根据上层应用程序的不同参数实现不同的功能,这些控制LCD的功能包括亮度调整、对比度调整、关闭LCD、开启LCD等。
下面分别叙述两个文件的实现。
lcdctrl.c文件
1、定义file_operation结构体
st
- 采用灵活的汽车FPGA 提高片上系统级集成和降低物料成本(04-28)
- 从LCD电极读数的单片机接口技术(01-15)
- 嵌入式Linux下彩色LCD驱动的设计与实现(03-09)
- 基于FPGA的液晶显示控制器设计(02-17)
- LCD部分专业术语解释(03-06)
- 点阵LCD的驱动显控原理(上册)(03-20)