微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AM335x(TQ335x)学习笔记——LCD驱动移植

AM335x(TQ335x)学习笔记——LCD驱动移植

时间:11-28 来源:互联网 点击:

  1. 容改为:0x19cMUX_MODE4。

最后修改后的DTS相关部分如下:

  1. backlight{
  2. compatible="pwm-backlight";
  3. pwms=<&ecap20500000>;
  4. brightness-levels=<05153566275101152255>;
  5. default-brightness-level=<8>;
  6. };
  7. &epwmss2{
  8. status="okay";
  9. ecap2:ecap@48304100{
  10. status="okay";
  11. pinctrl-names="default";
  12. pinctrl-0=<&ecap2_pins>;
  13. };
  14. };
  15. ecap2_pins:backlight_pins{
  16. pinctrl-single,pins=
  17. 0x19cMUX_MODE4/*MCASP0_AHCLKR.eCAP2_in_PWM2_outMODE4*/
  18. >;
  19. };

这样就完成了背光功能的DTS配置。

(4)配置内核驱动

由于evm开发板的代码是使用ATAGS方式启动的,没有配置pwm-backlight和基于TI LCD控制器的通用panel驱动,需要通过menuconfig开启相应的配置项。通过DTS中的compatible属性可以找到pwm-backlight驱动是在drivers/video/backlight/pwm-bl.c中实现的,而panel驱动则是在drivers/gpu/drm/tilcdc/tilcdc_panel.c中实现的,阅读相应目录下的Makefile和Kconfig就可以确定出如何配置menuconfig。Makefile和Kconfig的分析过程很简单,我就不多写了,下面是通过menuconfig开启相应功能的步骤。

Step1. 执行menuconfig指令:

  1. makeARCH=armmenuconfig

Step2. 开启通用pwm-backlight驱动和基于TI LCD控制器的通用panel驱动,配置内容如下:

  1. Graphicssupport--->
  2. [*]Pulse-WidthModulation(PWM)Support--->
  3. <*>ECAPPWMsupport
  4. <*>EHRPWMPWMsupport
  5. -*-Backlight&LCDdevicesupport--->
  6. <*>GenericPWMbasedBacklightDriver
  7. Graphicssupport--->
  8. DirectRenderingManager--->
  9. <*>DirectRenderingManager(XFree864.1.0andhigherDRIsupport)--->
  10. <*>DRMSupportforTILCDCDisplayController

(5)编译DTB和内核

执行DTB编译指令:

  1. makeARCH=armCROSS_COMPILE=arm-linux-gnueabi-tq335x.dtb

执行内核编译指令:

  1. makeARCH=armCROSS_COMPILE=arm-linux-gnueabi--j8

(6)用新内核启动开发板
将新编译好的tq335x.dtb和zImage拷贝到SD卡的boot目录下,然后用SD启动开发板到u-boot命令行模式,通过u-boot指令启动内核(每次都这样启动会比较麻烦,可以通过设置u-boot的bootcmd环境变量并保存来简化此动作),启动内核的指令与前一篇文章的命令是相同的:

  1. loadmmc00x88000000/boot/tq335x.dtb
  2. loadmmc00x82000000/boot/zImage
  3. loadmmc00x88080000/boot/ramdisk.img
  4. bootz0x820000000x880800000x88000000

这时,可以看到开发板正常启动并且能看到熟悉的Linux小企鹅Logo,至此,就完成了am335x的LCD驱动移植,实际上是不需要我们写代码的,但需要了解内核的组织方式和DTS配置的方法。

(7)pinmux配置参数的确定方法

相信有些人看完这几篇文章之后有个疑问,就是配置pinmux的时候offset是如何确定的。配置GPIO管脚复用功能时经常用到pinctrl-single,pins = 属性,内核解析该属性后根据offset和function配置对应的寄存器,是GPIO管脚配置为指定的复用功能。

讲offset的确定方法之前需要指出的是,TI的GPIO控制与三星的芯片不同,三星的芯片管脚复用功能是放在GPIO寄存器中的,而TI的芯片则有个专门的控制模块叫Control Module,该模块可以控制所有的GPIO管脚功能复用;另外,与三星芯片的另外一个不同是TI的芯片分为技术参考手册和数据手册,技术参考手册非常详细的讲述同family的芯片功能及使用方法,数据手册则用来讲述同family中不同芯片特有的属性。因此,调试TI芯片时需要结合技术参考手册和数据手册,而配置GPIO则需要阅读技术手册的GPIO、Control Module两章和数据手册中相关的部分。

从am33xx.dtsi中可以看到pinmux的基地址是0x44e10800,我们先来看这个地址是怎么来的。从技术参考手册的内存映射表可以确定该地址位于L4_WKUP段内,如下图:

点击L4_WKUP超链接,可以切换到L4_WKUP的地址映射表,从该表中可以确定,该地址位于Control Module,如下图:

点击Control Module的超链接,可以切换到Control Module的地址映射表,从该表中可以找到0x44e10800地址,实际上就是conf_gpmc_ad0控制寄存器的地址,也就是说,pinmux配置时的offset都基于这个地址的。

以PWM背光控制为例。该功能引脚是接在ECAP2_IN_PWM_OUT上的,实际上就是AM335x的MCASP0_AHCLKR管脚,该管脚的地址也可以在Control Module的地址映射表中找到,该管脚的地址是0x44e1099c(表中是基于Control Module的offset,这个值是计算之后的),因此,在pinmux中配置该引脚时使用的offset应该是0x19c,这样就确定出了offset。

pinctrl-single,pins的第二项是function,用来指定GPIO管脚是输入还是输出,当前处于哪种模式。输入输出很容易配置,但是AM335x技术参考手册中只

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top