Am335x U-boot LCD简易驱动
参考此文档说明,自行添加相关代码:
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)
- RasterClkConfig(SOC_LCDC_0_REGS, , );
- RasterTiming2Configure(SOC_LCDC_0_REGS, RASTER_FRAME_CLOCK_HIGH |
- RASTER_LINE_CLOCK_HIGH |
- RASTER_PIXEL_CLOCK_HIGH|
- RASTER_SYNC_EDGE_RISING|
- RASTER_SYNC_CTRL_ACTIVE|
- RASTER_AC_BIAS_HIGH , , );
- RasterHparamConfig(SOC_LCDC_0_REGS, , , , );
- 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
- /*
- + * DATE 2017.6
- + * writer:ZYR
- + * Uboot LCD
- + */
- #include <common.h>
- #include <config.h>
- #include <command.h>
- #include <asm/io.h>
- #include "../drivers/lcd/rasterDisplay.h"
- #include "../board/ti/am335x/board.h"
- int get_int(char *num)
- {
- int len = strlen(num);
- int i, result = ;
- for(i=; i<len; i++)
- {
- result = result * + ( num[i] - '' );
- }
- return result;
- }
- int get_lcd_cmd(char *var)
- {
- if ( strcmp(var, "off") == )
- return ;
- if ( strcmp(var, "on") == )
- return ;
- if ( strcmp(var, "reset") == )
- return ;
- if ( strcmp(var, "set") == )
- return ;
- return -;
- }
- static int do_lcd( cmd_tbl_t*cmdtp, int flag, int argc, char *const argv[] )
- {
- int cmd;
- /*Validate arguments */
- if( ( argc<)||(argc>) )
- return CMD_RET_USAGE;
- cmd = get_lcd_cmd( argv[] ); //
- if( cmd < )
- {
- return CMD_RET_USAGE;
- }
- #ifdef CONFIG_CMDLINE
- if( cmd== )
- {
- printf("lcd off\n");
- lcdbacklight_off(*+);
- }
- else if( cmd== )
- {
- printf("lcd on \n");
- lcdbacklight_on(*+);
- }
- else if( cmd== )
- {
- printf(" lcd reset\n");
- board_lcd_reset(*+);
- }
- return ;
- #else
- return ;
- #endif
- }
- U_BOOT_CMD(
- ULCD, , , do_lcd,
- "lcd open or close or reset \n",
- "ULCD [on|off|reset]\n"
- );
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简易驱动的更多相关文章
- linux lcd设备驱动剖析四
在"linux lcd设备驱动剖析二"文章中,我们详细分析了s3c24xxfb_probe函数. 文章链接:http://blog.csdn.net/lwj103862095/ar ...
- linux lcd设备驱动剖析一
s3c2440 lcd驱动源码文件是:drivers/video/s3c2410fb.c 看驱动源码首先当然是先看入口函数,这里是s3c2410fb_init函数 [cpp] view plain? ...
- [STM8L]基于STM8L152的TAB段式LCD液晶驱动的分析 - 单片机干货 - 中国电子技术论坛 - 最好最受欢迎电子论坛!
[STM8L]基于STM8L152的TAB段式LCD液晶驱动的分析 - 单片机干货 - 中国电子技术论坛 - 最好最受欢迎电子论坛!.md 主控芯片为STM8L152C4T6自带LCD控制器,低功耗系 ...
- LCD底层驱动分析
根据分析的框架,自己写一个LCD驱动程序 1分析LCD硬件原理图 Von和Voff接的是一个电源电路,通过LCD_POWER接的是GPG4来控制LCD电源,高电平表示开启LCD电源 VM接的是CPU的 ...
- MSP430常见问题之LCD 显示驱动类
Q1:晶体一般都是接32768,然后使用液晶很正常.我打算将晶体接6M的替换32768,那么液晶还能正常显示吗A1:看你所用的LCM 模块时序极限是多少HZ,然后看6M情况下,MSP430去驱动LCM ...
- LCD framebuffer驱动设计文档
内容提要:1. android display相关的名词2. 调试LCD驱动需要注意的步骤3. 关于帧缓冲区及I/O内存---------------------------------------- ...
- LPC1788的LCD接口驱动真彩屏
#ifndef __LCD_H_ #define __LCD_H_ #include "common.h" #include "debugserial.h" # ...
- AM335x(TQ335x)学习笔记——USB驱动移植
对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能.废话少说,直接动手开启AM335x的USB驱动配置项. Step1. ...
- AM335x(TQ335x)学习笔记——触摸屏驱动编写
前面几篇文章已经通过配置DTS的方式完成了多个驱动的移植,接下来我们解决TQ335x的触摸驱动问题.由于种种原因,TQ335x的触摸屏驱动是以模块方式提供的,且Linux官方内核中也没有带该触摸屏的驱 ...
随机推荐
- laravel中form表单,ajax传值没反应
laravel中form表单,ajax传值没反应时,可能是令牌有问题. form中添加: {{csrf_token()}} ajax中添加: data: {'page': page, '_token' ...
- laravel前台html代码不显示
后天向前台传输变量,如果能取到变量数据,还有代码,但是不显示图片 可以把{{}}换成{!! !!}试试.
- Verilog笔记.1.基本语法
0.前 抽象模型分级: • 系统级(system):用高级语言结构实现设计模块的外部性能的模型.• 算法级(algorithm):用高级语言结构实现设计算法的模型.• RTL级(Register Tr ...
- Ajax+innerHTML+Dgls=好的用户体验+高性能+高效率
为了引入Dgls,我们从创建Dom节点说起. 用JS创建Dom节点 var div = document.createElement('div'); div.className = 'gdls'; v ...
- 树的直径(两个bfs)
题目链接:https://cn.vjudge.net/problem/POJ-2631 树的直径:树中的最长链 具体思路:随便找一个点bfs,然后找到最长的链,然后再以找到的点作为起点进行bfs,然后 ...
- sar命令使用【转】
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情 ...
- python常用运维脚本实例【转】
file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先 ...
- python使用unittest模块selenium访问斗鱼获取直播信息
import unittest from selenium import webdriver from bs4 import BeautifulSoup as bs class douyu(unitt ...
- Linux时间结构体和获得时间函数
关于Linux下时间编程的问题: 1. Linux下与时间有关的结构体 struct timeval { int tv_sec; int tv_usec; }; 其中tv_sec是由凌晨开始算起的秒数 ...
- 一键去除网页BOM属性【解决乱码,头部空白,问题】
几个常出现的问题: 1.网站打开空白 2.页面头部出现多余的空白 3.网站出现乱码,如“锘�” 解决方法可以是: 1.选用专业的编辑器,例如notepad++,sublime,editplus这样不会 ...