您的位置:首页 > 其它

基于TWL6032 PWM控制液晶背光亮度

2016-02-02 17:00 246 查看

0引言

目前市场上的液晶显示器,都是指LED背光液晶屏,实际上使用了侧面led二极管作为背光源,替代传统的CCFL荧光背光,即采用了LED背光源的TFT液晶屏幕。相比于传统的CCFL冷阴极背光源液晶显示器,以LED作为背光源的液晶显示器厚度更薄、更加节能。

本文基于PandaBoardES1开发板,利用TWL6032的PWM1输出,控制LCD的背光LED, 通过调节PWM的占空比调整背光亮度。

1 TWL6032芯片介绍

TWL6032是由德州仪器生产,集成了电源管理集成电路,具有强大功能的一款芯片,主要有以下功能:

1) 提供五个可配置的、高效降压变换器;

2) 11个一般用途低压差电压,包括在启动顺序控制稳压器(LDO);

3) USB OTG模块;

4) 实时时钟(RTC)定时器和报警唤醒;

5) SIM and SD/MMC Card探测;

6) 2路数字PWM输出。

TWL6032 PWM输出频率只支持256Hz和512Hz,主要通过I2C总线与CPU进行通信,根据Panda Board ES1开发板资料,CPU OMAP4460与TWL6032通讯的是I2C1。

2 TWL6032PWM寄存器说明

TWL6032是TWL6030的升级版,在寄存器地址空间上与TWL6030完全兼容,因此本文以TWL6030为例进行阐述。

TWL6030内部有4个I2C ID地址,分别是0x12(DVS-I2C Registers)和0x48,0x49,0x4A(CTL-I2C),在Panda Board ES1提供的内核源码中,由./include/linux/twl.h和/drivers/mfd/twl-core.c文件对寄存器地址和读写方式进行了定义,具体参阅相关代码。PWM控制寄存器就位于0x49 ID地址空间。TWL有2路PWM输出,本文使用PWM1,主要有3个寄存器需要说明:PWM1ON(图1),PWM1OFF(图2),TOGGLE3(图3)。



图1



图2



图3
从图1中知道,PWM1ON[7]决定了PWM的频率,PWM1ON[6:0]和PWM1OFF[6:0]共同决定了PWM的占空比。这里需要主要:PWM1ON[6:0] 不能大于PWM1OFF[6:0],并且PWM1ON[6:0]不能等于0。具体的时序参见图4。



图4

3 Linux驱动开发

为了配合NOA1305光线传感器,供系统对LCD背光进行调节,将相关驱动代码添加到了NOA1305.c驱动下。

1)添加设置占空比函数

Static ssize_t set_brightness (struct device *dev,structdevice_attribute *attr, char *buf)

{

struct i2c_client *client = to_i2c_client(dev);

struct noa1305_data *data = i2c_get_clientdata(client);

int ret, brightness;

u8 val = 0;

brightness =simple_strtoul(buf, NULL, 10);

if(brightness >= 255)

returnsprintf(buf, "the brightness to set is bigger than 255");

if(brightness <= 0)

returnsprintf(buf, "the brightness to set is not equal 0 or smaller than0");

if (!data->power_state)

return -EBUSY;

mutex_lock(&data->update_lock);

brightness &= (0x7f);

if (twl_i2c_write_u8(TWL4030_MODULE_PWM0, brightness,0))

returnsprintf(buf, "the brightness to set is error");

if (twl_i2c_write_u8(TWL4030_MODULE_PWM0, 0x7F, 1))

returnsprintf(buf, "the brightness to set is error");

if (twl_i2c_write_u8(TWL6030_MODULE_AUX, 0x01, 2))

returnsprintf(buf, "the brightness to set is error");

mdelay(10);

val &= ~PWM1CTL_MASK;

val |= (PWM1S | PWM1EN);

if (twl_i2c_write_u8(TWL6030_MODULE_AUX, val, 2))

returnsprintf(buf, "the brightness to set is error");

mutex_unlock(&data->update_lock);

return sprintf(buf, "the brightness to set isOK");

}

2)添加sysfs文件:

static DEVICE_ATTR(brightness, 0666,NULL, set_brightness);

3)添加TWL6030_MODULE_AUX索引

在./drivers/mfd/twl-core.c文件中,在变量twl_mapping twl6030_map[]添加{ SUB_CHIP_ID1,TWL6030_BASEADD_AUX },同时在./include/linux/twl.h中根据索引添加定义#define TWL6030_MODULE_AUX 0x1A(本文索引)。

4总结

编译内核,下载镜像,重新启动系统后,通过操作sysfs文件系统下brightness文件即可实现对LCD背光亮度的调节了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: