由于帧缓冲驱动程序的实现在许多论文中有详细叙述,这里不再赘述,本文重点讨论背光设备驱动程序的实现。
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结构体
static struct 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_lc0805贴片电感dctrl_init,
enable: smdk2一体电感440_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应用程序中提供人机操作的界面。
手机智能天线测试系统开发及应用本文描述了一项由德州仪器公司(TI)发起、弗吉尼亚理工学院和州立大学的弗吉尼亚科技天线组(VTAG)和移动便携式无线研究组(MPRG)合作完成的研究项目。 该项目重点确定智能发送和接收手机天线的可行性
新型电源转换器与稳压电源电源转换器又称交流转换器,主要应用于交流电的转换,在稳定的电压下为电器输送交流电。电源转换器在国内不同地方也也有不同的叫法,比如插线板、排插、插板、接线板,也有叫拖线板的。随着社会的发展,昂贵而精密的
3G手机中的电源管理分割方案第三代(3G)手机可提供具有更多功能的各种特性。当消费者享用这些通信设备最新及更好功能的时候,他们还继续要求单个电池的工作时间更长、手机的外形尺寸更小。尽管IC集成可帮助解决尺寸问题,但同时也会增加设