參考此文檔說明,自行添加相關代碼:
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, 9000000, 100000000); 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 , 0, 255); RasterHparamConfig(SOC_LCDC_0_REGS, 480, 41, 2, 2); RasterVparamConfig(SOC_LCDC_0_REGS, 272, 10, 2, 2);
第四步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 = 0; for(i=0; i<len; i++) { result = result * 10 + ( num[i] - '0' ); } return result; } int get_lcd_cmd(char *var) { if ( strcmp(var, "off") == 0 ) return 0; if ( strcmp(var, "on") == 0 ) return 1; if ( strcmp(var, "reset") == 0 ) return 2; if ( strcmp(var, "set") == 0 ) return 3; return -1; } static int do_lcd( cmd_tbl_t*cmdtp, int flag, int argc, char *const argv[] ) { int cmd; /*Validate arguments */ if( ( argc<1)||(argc>2) ) return CMD_RET_USAGE; cmd = get_lcd_cmd( argv[1] ); // if( cmd < 0 ) { return CMD_RET_USAGE; } #ifdef CONFIG_CMDLINE if( cmd==0 ) { printf("lcd off\n"); lcdbacklight_off(3*32+17); } else if( cmd==1 ) { printf("lcd on \n"); lcdbacklight_on(3*32+17); } else if( cmd==2 ) { printf(" lcd reset\n"); board_lcd_reset(3*32+17); } return 0; #else return 1; #endif } U_BOOT_CMD( ULCD, 2, 1, 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"