经过两个星期的努力,终于初步搞定了位开发板的uboot增加开机logo,此中酸甜苦辣,最终转化为调通那一刻的巨大喜悦,废话不多少,转入正题。
uboot增加开机logo的思路其实很简单,写好lcd控制器的底层代码,然后填充一个叫GraphicDevice的结构体,并在/include/configs/am3517_evm.h中增加与显示logo相关的宏。
在/drivers/video目录下增加两个文件:omap3Lcd.h和omap3Lcd.c,并在该层Makefile加上编译该文件。文件内容分别如下:
/******************omap3Lcd.c*******************/
#include <common.h>
#include <asm/io.h>
#include <asm/arch/mem.h>
#include <asm/arch/mux.h>
#include <asm/arch/sys_proto.h>
#include <asm/mach-types.h>
#include <video_fb.h>
#include "omap3Lcd.h"
GraphicDevice glcd_dev;
static int lcd_static_mem[640*480];
int lcd_ctrl_init(void )
{
u32 l = clkctrl_read_reg(CM_CLKSEL2_PLL);
printf("CLKSEL2_PLL is %d\n",l);
u32 m = clkctrl_read_reg(CM_CLKEN_PLL);
printf("CM_CLLEN_PLL is %d\n",m);
m &= 0xffffff;
m |= (0x7 << 16);//|(0x0f<<20);
clkctrl_write_reg(CM_CLKEN_PLL,m);
// printf("CM_CLLEN_PLL is %d\n",m);
dss_clk_write_reg(CM_CLKSEL_DSS,0x10009);
dss_clk_write_reg(CM_FCLKEN_DSS, 5);
dss_clk_write_reg(CM_ICLKEN_DSS, 1);
dss_clk_write_reg(CM_AUTOIDLE_DSS, 0);
dss_clk_write_reg(CM_SLEEPDEP_DSS,0);
dss_clk_write_reg(CM_CLKSTCTRL_DSS,0);
dss_write_reg(DSS_SYSCONFIG,0x0002);
while(! dss_read_reg(DSS_SYSSTATUS));
dispc_write_reg(DISPC_CONTROL, 0x00018108 );//change 18309 to 18109 for 16bit per pix
dispc_write_reg(DISPC_SIZE_LCD, 0x01df027f); //size:640*480
dispc_write_reg(DISPC_CONFIG,0x4);
dispc_write_reg(DISPC_TIMING_H, 0x0720101e); //LCD Timing params
dispc_write_reg(DISPC_TIMING_V, 0x02100a03);
dispc_write_reg(DISPC_POL_FREQ, 0x00);
dispc_write_reg(DISPC_DIVISOR, 0x00010009); //maybe need change
dispc_write_reg(DISPC_GFX_SIZE, 0x01df027f);
dispc_write_reg(DISPC_GFX_FIFO_THRESHOLD, 0x03ff0300);
dispc_write_reg(DISPC_GFX_ROW_INC, 0x01);
dispc_write_reg(DISPC_GFX_PIXEL_INC, 0x0

本文介绍了在基于TI AM3517 ARM芯片的开发板上为u-boot添加开机logo的详细过程。涉及LCD控制器底层代码编写, GraphicDevice结构体填充,配置文件修改以及时钟设置等关键步骤。在调试过程中,时钟配置的重要性被强调,特别是涉及时钟源的寄存器修改需谨慎。流程包括stdio_init、drv_video_init、video_init及lcd底层初始化等阶段。

959

被折叠的 条评论
为什么被折叠?



