参考此文档说明,自行添加相关代码:

https://pan.baidu.com/s/1i5gLE89

相关代码:

https://pan.baidu.com/s/1qXL8Bne

在文档说明第四步1中,需要手动添加rasterDisplay.h文件,主要是定义rasterDisplay.c中的函数,方便在xxx/board/ti/board.c中调用。

修改rasterDisplay.c中对应于自己的LCD屏的参数(NHD-4.3-480272)

由NHD-4.3-480272数据手册获得LCD参数

hactive---480

hsw-----41

hfp------2

hbp-----2

vactive-----272

vsw-----10

vfp------2

vbp------2

pclk=9000000Hz(pix-clk)

  1. RasterClkConfig(SOC_LCDC_0_REGS, , );
  2. RasterTiming2Configure(SOC_LCDC_0_REGS, RASTER_FRAME_CLOCK_HIGH |
  3. RASTER_LINE_CLOCK_HIGH |
  4. RASTER_PIXEL_CLOCK_HIGH|
  5. RASTER_SYNC_EDGE_RISING|
  6. RASTER_SYNC_CTRL_ACTIVE|
  7. RASTER_AC_BIAS_HIGH , , );
  8. RasterHparamConfig(SOC_LCDC_0_REGS, , , , );
  9. RasterVparamConfig(SOC_LCDC_0_REGS, , , , );

第四步2中添加相关宏,除了添加CONFIG_LCD_UBOOT还要添加CONFIG_CMDLINE(第五步中控制LCD用),。

第四步3中添加lcdblacklight时要根据自己的板子看一看是哪个GPIO控制的LCD背光,还要确定是该电平背光开还是低电平背光开。

第五步3中在配置文件中添加复位LCD时,若按源文档说明,在RESET_LCD出老报错,所以直接将run RESET_LCD修改为run ULCD reset\0

第三步中获得自己的image.h:在第7小步中再生成自己的image.h中命令的最后需为RGB ./a.out 480 272 ./图片名称.bmp ./image.h 24 RGB,要不然生成的image.h在LCD上显示时黄色显示非标准色。

相关代码修改处:

xxxx/drivers/makefile

obj-$(CONFIG_SPL_WATCHDOG_SUPPORT) += watchdog/
obj-$(CONFIG_SPL_USB_HOST_SUPPORT) += usb/host/
obj-$(CONFIG_OMAP_USB_PHY) += usb/phy/
obj-$(CONFIG_SPL_SATA_SUPPORT) += block/

obj-$(CONFIG_LCD_UBOOT) += lcd/

else

obj-y += adc/
obj-$(CONFIG_DM_DEMO) += demo/
obj-$(CONFIG_BIOSEMU) += bios_emulator/
obj-y += block/
obj-$(CONFIG_BOOTCOUNT_LIMIT) += bootcount/
obj-$(CONFIG_CPU) += cpu/
obj-y += crypto/
obj-$(CONFIG_FPGA) += fpga/
obj-y += hwmon/
obj-y += misc/
obj-y += pcmcia/
obj-y += dfu/
obj-$(CONFIG_X86) += pch/
obj-y += rtc/
obj-y += sound/
obj-y += timer/
obj-y += tpm/
obj-y += twserial/
obj-y += video/
obj-y += lcd/
obj-y += watchdog/

xxxx/drivers/lcd/rasterDisplay

#include "soc_AM335x.h"
#include "evmAM335x.h"
#include "raster.h"
#include "image2.h"
#include "rasterDisplay.h"

xxx/board/ti/board.c

#include "../../../drivers/lcd/rasterDisplay.h"

int board_init(void)
{
#if defined(CONFIG_HW_WATCHDOG)
hw_watchdog_init();
#endif

gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
#if defined(CONFIG_NOR) || defined(CONFIG_NAND)
gpmc_init();
#endif

#if !defined(CONFIG_SPL_BUILD)
#if defined(CONFIG_LCD_UBOOT)
Lcd_Init();
lcdbacklight((3*32+17),"lcdbacklight",0);
#endif
#endif

#if defined(CONFIG_LCD)
am335xfb_init( &lcd_panel_NHD480272 );
gpio_request( (3*32+17), "led_light" );
gpio_direction_output( (3*32+17), 0 );
#endif

#if defined(CONFIG_LCDB)
board_video_init();
//configure_module_pin_mux(bld_pin_mux);
gpio_request( (3*32+17), "led_light" );
gpio_direction_output( (3*32+17), 0 );
//board_video_init();
#endif

return 0;
}

xxxx/cmd

添加lcd_cmd.c

  1. /*
  2. + * DATE 2017.6
  3. + * writer:ZYR
  4. + * Uboot LCD
  5. + */
  6.  
  7. #include <common.h>
  8. #include <config.h>
  9. #include <command.h>
  10. #include <asm/io.h>
  11. #include "../drivers/lcd/rasterDisplay.h"
  12. #include "../board/ti/am335x/board.h"
  13.  
  14. int get_int(char *num)
  15. {
  16. int len = strlen(num);
  17. int i, result = ;
  18. for(i=; i<len; i++)
  19. {
  20. result = result * + ( num[i] - '' );
  21. }
  22. return result;
  23. }
  24.  
  25. int get_lcd_cmd(char *var)
  26. {
  27. if ( strcmp(var, "off") == )
  28. return ;
  29.  
  30. if ( strcmp(var, "on") == )
  31. return ;
  32.  
  33. if ( strcmp(var, "reset") == )
  34. return ;
  35.  
  36. if ( strcmp(var, "set") == )
  37. return ;
  38.  
  39. return -;
  40.  
  41. }
  42.  
  43. static int do_lcd( cmd_tbl_t*cmdtp, int flag, int argc, char *const argv[] )
  44. {
  45. int cmd;
  46. /*Validate arguments */
  47. if( ( argc<)||(argc>) )
  48. return CMD_RET_USAGE;
  49.  
  50. cmd = get_lcd_cmd( argv[] ); //
  51. if( cmd < )
  52. {
  53. return CMD_RET_USAGE;
  54. }
  55. #ifdef CONFIG_CMDLINE
  56. if( cmd== )
  57. {
  58. printf("lcd off\n");
  59. lcdbacklight_off(*+);
  60. }
  61. else if( cmd== )
  62. {
  63. printf("lcd on \n");
  64. lcdbacklight_on(*+);
  65. }
  66. else if( cmd== )
  67. {
  68. printf(" lcd reset\n");
  69. board_lcd_reset(*+);
  70. }
  71.  
  72. return ;
  73. #else
  74. return ;
  75. #endif
  76. }
  77.  
  78. U_BOOT_CMD(
  79. ULCD, , , do_lcd,
  80. "lcd open or close or reset \n",
  81. "ULCD [on|off|reset]\n"
  82. );

xxxx/cmd/makefile

obj-y += help.o
obj-y += version.o
obj-y += lcd_cmd.o

# command
obj-$(CONFIG_LCD_UBOOT) += lcd_cmd.o
obj-$(CONFIG_CMD_AES) += aes.o
obj-$(CONFIG_CMD_AMBAPP) += ambapp.o

xxx/include/configs/am335x_evm.h

#define CONFIG_BOOTCOMMAND \
"run findfdt; " \
"run ULCD reset\0; " \
"run distro_bootcmd"

Am335x U-boot LCD简易驱动的更多相关文章

  1. linux lcd设备驱动剖析四

    在"linux lcd设备驱动剖析二"文章中,我们详细分析了s3c24xxfb_probe函数. 文章链接:http://blog.csdn.net/lwj103862095/ar ...

  2. linux lcd设备驱动剖析一

    s3c2440 lcd驱动源码文件是:drivers/video/s3c2410fb.c 看驱动源码首先当然是先看入口函数,这里是s3c2410fb_init函数 [cpp] view plain? ...

  3. [STM8L]基于STM8L152的TAB段式LCD液晶驱动的分析 - 单片机干货 - 中国电子技术论坛 - 最好最受欢迎电子论坛!

    [STM8L]基于STM8L152的TAB段式LCD液晶驱动的分析 - 单片机干货 - 中国电子技术论坛 - 最好最受欢迎电子论坛!.md 主控芯片为STM8L152C4T6自带LCD控制器,低功耗系 ...

  4. LCD底层驱动分析

    根据分析的框架,自己写一个LCD驱动程序 1分析LCD硬件原理图 Von和Voff接的是一个电源电路,通过LCD_POWER接的是GPG4来控制LCD电源,高电平表示开启LCD电源 VM接的是CPU的 ...

  5. MSP430常见问题之LCD 显示驱动类

    Q1:晶体一般都是接32768,然后使用液晶很正常.我打算将晶体接6M的替换32768,那么液晶还能正常显示吗A1:看你所用的LCM 模块时序极限是多少HZ,然后看6M情况下,MSP430去驱动LCM ...

  6. LCD framebuffer驱动设计文档

    内容提要:1. android display相关的名词2. 调试LCD驱动需要注意的步骤3. 关于帧缓冲区及I/O内存---------------------------------------- ...

  7. LPC1788的LCD接口驱动真彩屏

    #ifndef __LCD_H_ #define __LCD_H_ #include "common.h" #include "debugserial.h" # ...

  8. AM335x(TQ335x)学习笔记——USB驱动移植

    对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能.废话少说,直接动手开启AM335x的USB驱动配置项. Step1. ...

  9. AM335x(TQ335x)学习笔记——触摸屏驱动编写

    前面几篇文章已经通过配置DTS的方式完成了多个驱动的移植,接下来我们解决TQ335x的触摸驱动问题.由于种种原因,TQ335x的触摸屏驱动是以模块方式提供的,且Linux官方内核中也没有带该触摸屏的驱 ...

随机推荐

  1. laravel中form表单,ajax传值没反应

    laravel中form表单,ajax传值没反应时,可能是令牌有问题. form中添加: {{csrf_token()}} ajax中添加: data: {'page': page, '_token' ...

  2. laravel前台html代码不显示

    后天向前台传输变量,如果能取到变量数据,还有代码,但是不显示图片 可以把{{}}换成{!!     !!}试试.

  3. Verilog笔记.1.基本语法

    0.前 抽象模型分级: • 系统级(system):用高级语言结构实现设计模块的外部性能的模型.• 算法级(algorithm):用高级语言结构实现设计算法的模型.• RTL级(Register Tr ...

  4. Ajax+innerHTML+Dgls=好的用户体验+高性能+高效率

    为了引入Dgls,我们从创建Dom节点说起. 用JS创建Dom节点 var div = document.createElement('div'); div.className = 'gdls'; v ...

  5. 树的直径(两个bfs)

    题目链接:https://cn.vjudge.net/problem/POJ-2631 树的直径:树中的最长链 具体思路:随便找一个点bfs,然后找到最长的链,然后再以找到的点作为起点进行bfs,然后 ...

  6. sar命令使用【转】

    sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情 ...

  7. python常用运维脚本实例【转】

    file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先 ...

  8. python使用unittest模块selenium访问斗鱼获取直播信息

    import unittest from selenium import webdriver from bs4 import BeautifulSoup as bs class douyu(unitt ...

  9. Linux时间结构体和获得时间函数

    关于Linux下时间编程的问题: 1. Linux下与时间有关的结构体 struct timeval { int tv_sec; int tv_usec; }; 其中tv_sec是由凌晨开始算起的秒数 ...

  10. 一键去除网页BOM属性【解决乱码,头部空白,&#65279问题】

    几个常出现的问题: 1.网站打开空白 2.页面头部出现多余的空白 3.网站出现乱码,如“锘�” 解决方法可以是: 1.选用专业的编辑器,例如notepad++,sublime,editplus这样不会 ...