微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于S3C2440A终端LCD驱动电路的设计与实现

基于S3C2440A终端LCD驱动电路的设计与实现

时间:08-20 来源:电子设计应用 点击:

atic ruct file_operations lcdctrl_fops = {
ioctl: lcdctrl_ioctl,
open: lcdctrl_open,
release: lcdctrl_close };

  LCD的各种控制功能在lcdctrl_ioctl函数中实现,lcdctrl_open和lcdctrl_close不实现具体功能,直接返回0值。

  2、lcdctrl_ioctl函数

  lcdctrl_ioctl函数需根据上层应用程序的不同参数实现不同的功能,这里主要说明亮度调节功能的实现。部分代码如下:

static int lcdctrl_ioctl(struct inode * inode, struct file *filp, unsigned int cmd , unsigned long arg)
{……
switch(cmd)
{ ……
case
_LCDCTRL_IOCTL_BRIGHTNESS:
if ((arg >=0) && (arg <= 100))
ret = lcdctrl_set_brightness(arg);
break; //调节LCD背光亮度
……
break;}
return ret;}

  当应用程序传递的命令参数为LCDCTRL_IOCTL_BRIGHTNESS时,lcdctrl_ioctl调用lcdctrl_set_ brightness具体实现亮度调节功能。

  3、lcdctrl_set_brightness函数

  lcdctrl_set_brightness具体实现亮度调节功能。主要代码如下:

int lcdctrl_set_brightness(int b)
{
brightness = b;
return lcd_device->set_brightness(b);
}

  可以看出,此函数调用lcd_ device->set_brightness函数,而lcd_device在初始化时已被指向与具体的硬件相关的函数。

  4、初始化函数

  初始化函数主要完成初始信息的设置和设备的注册。

  lcdctrl.c_smdk2440文件

  1、lcdctrl_device结构体

  lcdctrl_device结构体定义了具体操作LCD的各函数指针,包括LCD初始化函数,LCD开启和关闭函数,亮度、对比度等设置函数。其中LCD关闭函数的本质就是将LCD背光亮度设置为0。

static struct lcdctrl_device smdk2440_dev = {
init: smdk2440_lcdctrl_init,
enable: smdk2440_lcdctrl_enable,
disable: smdk2440_lcdctrl_disable,
set_intensity: smdk2440_lcdctrl_set_intensity,
set_brightness: smdk2440_lcdctrl_set_brightness,
set_contrast: smdk2440_lcdctrl_set_contrast};

  2、smdk2440_lcdctrl_set_brightnes函数

  这里只叙述亮度设置函数的实现。

static int smdk2440_lcdctrl_set_brightness( int b)
{ ……
TCNTB0 = 100;
TCMPB0 = b*100/100;
//设置TCMPB0寄存器的值
TCON = (TCON & ~(0xf)) | ( TCON_0_AUTO | TCON_0_MAN | COUNT_0_OFF);
TCON = (TCON & ~(0xf)) | 0;
TCON=(TCON & ~(0xf)) | (TCON_0_AUTO | COUNT_0_ON);}

函数中的语句大部分是给与定时器相关的寄存器写值。其中b就是上层函数传递下来的bright值,从程序中可以看到,调节亮度本质上是通过TCMPB0寄存器写入与bright相关的值,控制PWM占空比实现亮度调节功能。

  3、LCDctrl_device_get_ops函数

  用于上层获取具体设备的钩子函数。代码如下:

struct lcdctrl_device *lcdctrl_device_get_ops(void)
{return &smdk2440_dev;}

  此函数被lcdctrl.c初始化时调用,将设备指向smdk2440_dev。

  至此,驱动程序设计完成,为了更好地实现LCD的管理,需要在上层的Qtopia应用程序中提供人机操作的界面。

  Qtopia应用程序

  Qtopia应用程序提供人机操作界面并调用底层驱动程序完成LCD控制功能,这里,仍然以亮度调节为例叙述应用程序工作过程。

  主要完成功能:

  1、应用程序完成人机操作的界面,为使用人员提供友好界面;

  2、读取亮度值,并将其存入变量bright中;

  3、打开设备文件:fd=open("/dev/devname",O_RDONLY);

  4、调用底层的驱动程序,通过底层的驱动程序将LCD背光亮度调整为指定值。

  ioctl(fd, _BACKLIGHT_ IOCTL_BRIGHT, bright)。

  ioctl函数调用驱动程序完成亮度的调节。

  结语

  经测试,设计完成的LCD能很好地完成图形的显示,终端电源管理界面中包含了LCD亮度调节功能。

  LCD驱动电路的设计是手持终端产品的重要组成部分。本文设计并实现了基于S3C2440A的手持终端LCD驱动电路。通过图形管理界面能够方便地管理LCD,达到节约能量、延长手持终端工作时间的目的。

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

网站地图

Top