基于嵌入式Linux的LCD背光调节及驱动的实现
3.1 背光驱动的初始化和退出函数
在加载驱动时,内核调用初始化函数s3c_bl_pwm_init()。首先初始化LCD背光亮度,设置按键中断触发方式,注册中断。然后初始化定时器,设置按键初始状态为抬起(KEY_UP)。最后使用misc_register()向内核注册混杂设备,混杂设备是字符设备的抽象。背光驱动中混杂设备的定义如下:

在卸载驱动时,内核调用退出函数s3c_bl_pwm_exit(),注销中断和混杂设备,完成和初始化函数相反的行为。
3.2 按键中断和定时器处理程序
当按键被按下后,将发生快速中断,触发中断处理程序buttons_interrupt()。在中断处理程序中,当按键初始状态为抬起(KEY_UP)时,把按键状态设置为不确定(KEY_DOWNX),然后启动定时器延时去抖,进入定时器处理函数。如果当前按键初始状态不是抬起则退出中断处理程序。在定时器处理程序中,读取按键GPIO端口电平,查询按键是否仍然被按下。如果按键仍被按下且按键状态是不确定(KEY_DOWNX),则标识当前按键状态为按下(KEY_DOWN)。同时延时一个相对去抖更长的时间,启动一个新的定时器,每次定时器到期后,查询按键是否仍然被按下且按键状态为按下(KEY_DOWN),如果是,则重新启动新的定时器;若查询到已经没有按下,则标识按键状态为抬起,这时候应该等待新的按键中断。每次标识按键状态为按下(KEY_DOWN)时,应该调用背光调节函数bl_handler()依据传入的按键编号调节背光亮度。按键中断和定时器处理函数的流程如图4所示。本文引用地址:https://www.eepw.com.cn/article/149184.htm
3.3 PWM设置函数
PWM定时器中有2个寄存器TCNTBn和TCMPBn,分别为定时器计数缓存寄存器和定时器比较缓存寄存器。TCNTBn用来设置PWM输出脉冲频率,TCMPBn的值用于设置PWM信号占空比。因此通过写入不同的TCMPBn的数值,就可以调节输出信号占空比,实现PWM功能,即:要减小PWM的脉宽,则要减小TCMPBn值,相反要增大PWM的脉宽,则要增大TCMPBn。如果使用了反相器,则增大和减小的结果相反,双缓冲特性允许定时器在工作时改写TCMPBn的值。
PWM设置函数pwm_set_duty()根据传入参数改写TCMPBn的值,可以实时地改变输出波形。PWM设置函数设置定耐器TOUT1端口GPB1的PWM功
能操作步骤如下:
(1)使能系统PCLK时钟源,获取总线时钟频率值。设置定时器TOUT1的时钟预分频值和分频值,分别写入定时器配置寄存器TCFG0和TCF G1;
(2)写入初始值到比较缓存寄存器TCMPB1和计数缓存寄存器TCNTB1;
(3)设置定时器控制寄存器TCON。使能定时器TOUT1的自动重载位,关闭反相器,开启手动更新位,启动定时器TOUT1。在定时器延时等待一定时间后定时器的下降计数器开始计数;
(4)清除定时器TOUT1的手动更新位,手动更新位必须在下次写前被清除。
LCD显示屏相关文章:lcd显示屏原理
lcd相关文章:lcd原理
评论