嵌入式实践教程--设备树下的LCD驱动开发

简介: 嵌入式实践教程--设备树下的LCD驱动开发

先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下:


①、初始化 I.MX6U 的 eLCDIF 控制器,重点是 LCD 屏幕宽(width)、高(height)、hspw、hbp、hfp、vspw、vbp 和 vfp 等信息。

②、初始化 LCD 像素时钟。

③、设置 RGBLCD 显存。

④、应用程序直接通过操作显存来操作 LCD,实现在 LCD 上显示字符、图片等信息。


使用示例:


设备树里选择pinctrl的引脚,设置LCD的属性和时序信息。


&lcdif {  
2  pinctrl-names = "default";  
3  pinctrl-0 = <&pinctrl_lcdif_dat /* 使用到的 IO */
4      &pinctrl_lcdif_ctrl>;
5
6  display = <&display0>;
7  status = "okay";  
8  
9  display0: display { /* LCD 属性信息 */
10    bits-per-pixel = <24>; /* 一个像素占用几个 bit */
11    bus-width = <24>; /* 总线宽度 */
12
13 display-timings {
14    native-mode = <&timing0>; /* 时序信息 */
15    timing0: timing0 {  
16    clock-frequency = <51200000>; /* LCD 像素时钟,单位 Hz */
17    hactive = <1024>; /* LCD X 轴像素个数 */
18    vactive = <600>; /* LCD Y 轴像素个数 */
19    hfront-porch = <160>; /* LCD hfp 参数 */
20    hback-porch = <140>; /* LCD hbp 参数 */
21    hsync-len = <20>; /* LCD hspw 参数 */
22    vback-porch = <20>; /* LCD vbp 参数 */
23    vfront-porch = <12>; /* LCD vfp 参数 */
24    vsync-len = <3>; /* LCD vspw 参数 */
25
26    hsync-active = <0>; /* hsync 数据线极性 */
27    vsync-active = <0>; /* vsync 数据线极性 */
28    de-active = <1>; /* de 数据线极性 */
29    pixelclk-active = <0>; /* clk 数据线先极性 */
30    };
31    };
32  };
33 };
LCD 屏幕背光节点信息
```c
1 pinctrl_pwm1: pwm1grp {  
2 fsl,pins = <  
3     MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0
4    >;
5 };


如果背光用的其他 pwm 通道,比如 pwm2,那么就需要仿照示例代码 59.3.6 的内容,向pwm2 节点追加相应的内容。pwm 和相关的 IO 已经准备好了,但是 Linux 系统怎么知道PWM1_OUT 就是控制 LCD 背光的呢?因此我们还需要一个节点来将 LCD 背光和 PWM1_OUT连 接 起 来 。 这 个 节 点 就 是 backlight , backlight 节 点 描 述 可 以 参 考Documentation/devicetree/indings/video/backlight/pwm-backlight.txt 这个文档,此文档详细讲解了


backlight 节点该如何去创建,这里大概总结一下:


①、节点名称要为“backlight”。

②、节点的 compatible 属性值要为“pwm-backlight”,因此可以通过在 Linux 内核中搜索 “ pwm-backlight ”来查找 PWM 背 光 控 制 驱 动 程 序 , 这 个 驱 动 程 序 文 件为 drivers/video/backlight/pwm_bl.c,感兴趣的可以去看一下这个驱动程序。

③、pwms属性用于描述背光所使用的PWM以及PWM频率,比如本章我们要使用的pwm1, pwm 频率设置为 5KHz(NXP 官方推荐设置)。

④、brightness-levels 属性描述亮度级别,范围为 0~255,0 表示 PWM 占空比为 0%,也就是亮度最低,255 表示 100%占空比,也就是亮度最高。至于设置几级亮度,大家可以自行填写 此属性。

⑤、default-brightness-level 属性为默认亮度级别。

根据上述 5 点设置 backlight 节点,这个 NXP 已经给我们设置好了,大家在 imx6ull-emmc.dts 文件中找到如下内容:


示例代码 59.3.7 backlight 节点内容


1 backlight {  
2   compatible = "pwm-backlight";
3   pwms = <&pwm1 0 5000000>;
4   brightness-levels = <0 4 8 16 32 64 128 255>;
5   default-brightness-level = <6>;
6   status = "okay";  
7 };


第 3 行,设置背光使用 pwm1,PWM 频率为 5KHz。 第 4 行,设置背 8 级背光(0~7),分别为 0、4、8、16、32、64、128、255,对应占空比为


0%、1.57%、3.13%、6.27%、12.55%、25.1%、50.19%、100%,如果嫌少的话可以自行添加一些其他的背光等级值。


第 5 行,设置默认背光等级为 6,也就是 50.19%的亮度。


修改完设备树即使用自定义的LCD屏幕。

相关文章
|
存储 C语言
向函数传递结构体: C语言中的结构体参数传递详解
向函数传递结构体: C语言中的结构体参数传递详解
1093 0
|
C++
基于Qt的简易PDF阅读器设计与实现
基于Qt的简易PDF阅读器设计与实现
931 3
QT中 QPlainTextEdit自适应高度的问题(防止出现滚动条)
在QT开发过程中,经常使用到QPlainTextEdit来填入大量的文字,一般我们都会设置QPlainText的固定高度或者默认高度,但是随着文字的增多,就会自动出现滚动条,有时候我们可能需要QPlainText的高度随着自动适应文字的高度(即是说不需要出现滚动条)
703 0
|
Ubuntu 虚拟化
Ubuntu鼠标延迟,闪烁,消失
Ubuntu鼠标延迟,闪烁,消失
Ubuntu鼠标延迟,闪烁,消失
|
监控 NoSQL
JLink + GDB 调试方法
本节主要介绍嵌入式开发中常用的JLink+GDB调试方法。 调试所需软件 J-link,可以从https://www.segger.com下载对应操作系统的软件包,然后安装(注意:segger是仿真器的名字,相当常用的一款,仿真器的接口也是固定的,一般开发版上都会带有这个调试接口,如图) 运行JLinkGDBServer 按照上图中的配置,配置GDBServer,然后点击OK,进入下一个界面 注意,如果硬件连接没有问题,那么上图中的J-Link和 Device栏中显示绿色,GDB显示为红色,因为我们还没有运行GDB软件。
8084 46
|
11月前
|
jenkins Java 持续交付
jenkins学习笔记之十六:SonarSQube支持多分支
jenkins学习笔记之十六:SonarSQube支持多分支
|
存储 Cloud Native 关系型数据库
Ganos矢量栅格数据快速入库方法简介
本文介绍了Ganos提供的矢量、栅格数据高效入库方法,帮助用户快速理解云原生数据库空间数据的写入方案,以便更好的使用Ganos矢栅数据的处理能力。
|
XML Java 应用服务中间件
Tomcat服务器Server.xml详解
Tomcat服务器Server.xml详解
|
算法 搜索推荐 开发工具
hello-algo,一个免费的算法学习开源项目
hello-algo,一个免费的算法学习开源项目
1852 0