6410背光

来源:互联网 发布:python 顶贴 编辑:程序博客网 时间:2024/05/29 11:43

本文由 @lonelyrains 出品,转载请注明出处。 
文章链接: http://blog.csdn.net/lonelyrains/article/details/7087433


        背光真是一个简单又能理解系统结构拿来开刀的一个小知识点。原来写背光控制是通过先写驱动程序,和linux的src一起编译,生成ko文件。加载驱动后生成设备文件,然后利用文件操作写入开关量,即可控制背光在6410上的寄存器的高低电位,从而屏亮或者灭。

       后来,又需要调节屏的亮度,而不是简单的开关。按照6410的说明,是通过占空比来控制屏的亮度的,而且推荐刷新频率是100Hz到2KHz。占空比简单地理解就是高低电位分别占用的时间的比值。而最容易想到的方式是设定一个应用层的定时器来定时向背光驱动映射的设备写高或者低。

       实践发现,设置定时器间隔时间1ms时,实际示波器显示的方波并不符合这个频率。几经确认应用层的小程序没写错定时器之后,发现中间出现耗时的地方有:每次定时器操作驱动里面有设定延时,每次写都是打开、写、关闭。不确定是否会影响的是调试输出打印和qt的定时器。谈到调试输出打印,是考虑之前有发现debugview打开时,截获调试输出,会对程序本身的定时器有一定的时延,这个的深层次原因尚未发现。说到定时器,因为应用层的定时器实在有点让人捉摸不透,特别是和多线程搅在一起的时候。一开始决定用定时器的原因是想动态地改变这个占空比和频率。现在一横心,用了while(1),然后里面加usleep来精确定时。顿时感觉usleep真是个搞东西,能达到微妙经的定时效果,不知道怎么实现的,估计是汇编加精确的硬件定时器吧。当然,为了调试方便,占空比和频率两个参数是通过命令行参数传入的。

       再用示波器观察,达到了想要的亮度渐变的效果,然而,还不能令人满意,这种应用层控制背光是不科学的,需要消耗的资源可想而知。领导出手了,说这种背光控制是需要直接利用现成的背光管理的,而这些东西在linux内核与6410相关的代码中有讲到。第一步是make menuconfig源代码,找到PVM和backlight相关的内容,设置成打开。然后到源代码中找到生成的宏,再跟踪这些宏找到相关的6410硬件定时器和PVM设置。我觉得这个手法相当巧妙,基本不需要依靠茫茫的文档指导,直接追根溯源。领导到底是高手啊。

       但是依然存在问题,每个四五分钟之后,屏幕自动灭了。发现是休眠了。通过网上查阅,定义环境变量term_***,忘了具体名字是什么了,是可以控制休眠的,不过还没有看到相应的效果。

       领导分享他参阅的链接:http://blog.csdn.net/zhangqingsup/article/details/5325039,我也一并贴出。

原创粉丝点击