MTK LCD+KEYPAD背光驱动

来源:互联网 发布:弱点 知乎 编辑:程序博客网 时间:2024/05/01 17:35

Tango+3G背光电路示意图如下:

 

由于Tango+3G的背光电路没有加上背光芯片,所以上图中的Backlight IC为虚线框。但在硬件电路上是预留出了背光IC的位置,只是没有焊上芯片而已。

由上图可知,Tango+3GLCD背光和KEYPAD背光是由KPLED引脚一起控制的。KPLED实际上是一个外设的引脚,隶属于电源管理模块PMU,而非BB端的GPIO引脚。

KPLED的内部电路如下图所示:

 

 

通过设置KPLED_SEL的值(取值范围:0~7),可依次开启CH0~CH7的通道,如:

 

KPLED_SEL                   开启的通道

0                                    CH0

1                                    CH0~CH1

2                                    CH0~CH2

...                                     ...

 

7                                    CH0~CH7

 

当8路通道都开启时,亮度达到最大,当只开启CH0时,亮度最小。

 

既然KPLED属于外设,则需要通过相应的外设寄存器去控制该引脚。在PMU中,有一个专门的寄存器用来控制KPLED,它叫KPLED_CON0寄存器:

 

该寄存器最常用的字段为KPLED_SELKPLED_MODEKPLED_EN

KPLED_SEL:用于设置开启的通道数;

KPLED_MODE0PWM控制模式;1为寄存器控制模式。

KPLED_ENKPLED模块使能位。

关于该寄存器更详细的描述,请参考MTK6276芯片手册中的PMU章节。

 

这里需要注意:如果KPLED_MODE被设置为0(即默认值),则KPLED引脚直接由PWM1控制,上面的KPLED电路不工作。如果KPLED_MODE被设置为1,则KPLED引脚由上述KPLED电路驱动。

 

所以,在驱动代码中就有了2种方式驱动背光:

第一种:由PWM1控制背光亮度;

第二种:由KPLED寄存器中的KPLED_SEL值控制背光的亮度。

无论哪种方式,首先都要对KPLED控制寄存器中的KPLED_MODE位进行设置。

 

编写驱动代码

 

PWM控制方式:

 

1.      在pmu_custom.c中,修改PMU客制化函数pmu_customization_init():

(1)配置KPLED模块为PWM控制模式;

(2)使能KPLED模块。

 

 

 

2.      在uem_gpio.c中的custom_cfg_gpio_set_level函数中,添加如下代码:

 

当参数gpio_dev_level0时,PWM1停止工作。

 

 

 

寄存器控制方式:

 

1.      在pmu_custom.c中,修改PMU客制化函数pmu_customization_init():

(1)配置KPLED模块为寄存器控制模式;

(2)将亮度调到最低;

(3)使能KPLED模块。

 

 

 

2.      在uem_gpio.c中的custom_cfg_gpio_set_level函数中,添加如下代码:

(1)如果gpio_dev_level为0,即关闭背光,则关闭KPLED模块,使其不工作;

(2)如果gpio_dev_level不为0,则通过改变寄存器中KPLED_SEL的值来调节背光的亮度。

 

 

关键代码免费下载:

点击打开链接 

原创粉丝点击