Tango+3G背光电路示意图如下:
由于Tango+3G的背光电路没有加上背光芯片,所以上图中的Backlight IC为虚线框。但在硬件电路上是预留出了背光IC的位置,只是没有焊上芯片而已。
由上图可知,Tango+3G的LCD背光和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_SEL,KPLED_MODE和KPLED_EN。
KPLED_SEL:用于设置开启的通道数;
KPLED_MODE:0为PWM控制模式;1为寄存器控制模式。
KPLED_EN:KPLED模块使能位。
关于该寄存器更详细的描述,请参考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_level为0时,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的值来调节背光的亮度。
关键代码免费下载: