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官方内核中也没有带该触摸屏的驱 ...
随机推荐
- node.js的安装配置——前端的配置
最近琢磨了以下node.js的安装,npm的配置,使用gulp watch监听index.html文件的修改,利用服务器打开网页. 打开自己写的网页不要本地双击打开,这样打开的网址是file:///E ...
- LightOJ1214 Large Division 基础数论+同余定理
Given two integers, a and b, you should check whether a is divisible by b or not. We know that an in ...
- 搭建Elasticsearch5.6.8 分布式集群
集群搭建 1.master[192.168.101.175] 配置elasticsearch.yml #集群名称 所有节点要相同 cluster.name: my-application #本节点名称 ...
- 【BZOJ】4753: [Jsoi2016]最佳团体 01分数规划+树上背包
[题意]n个人,每个人有价值ai和代价bi和一个依赖对象ri<i,选择 i 时 ri 也必须选择(ri=0时不依赖),求选择k个人使得Σai/Σbi最大.n<=2500,ai,bi< ...
- 【LibreOJ】#6298. 「CodePlus 2018 3 月赛」华尔兹 BFS
[题意]给定n*m的网格,起点和终点位置,一些格指定下一步的方向,一些格任意.要求为方向任意的格确定方向,使起点可以走到终点.n,m<=50. [算法]BFS [题解]这道题最好用BFS,因为D ...
- hash(2018年CSUST省赛选拔赛第一场B题+hash+字典树)
题目链接:http://csustacm.com:4803/problem/1006 题目: 思路:正如题目一样,本题是一个hash,比赛的时候用的字典树,但是不知道为什么一直RE(听学长说要动态开点 ...
- Javascript装饰器的妙用
最近新开了一个Node项目,采用TypeScript来开发,在数据库及路由管理方面用了不少的装饰器,发觉这的确是一个好东西.装饰器是一个还处于草案中的特性,目前木有直接支持该语法的环境,但是可以通过 ...
- $.when()方法翻译2
mac不知道为何,文章字数一多,浏览器就重启.只好分开写了. In the event a Deferred was resolved with no value, the corresponding ...
- TCP 传输控制协议(转)
开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...
- 对Feign的请求url 重写
需求:对当前请求的 url 重新构建 debug feign 的执行可知,重写 LoadBalancerFeignClient 类中的 execute 方法即可控制当前请求的url 代码分析 当引入 ...