我在uboot阶段自己添加Lcd驱动,步骤如下:
1.lcd端口配置,(board/ti/mux.c)
static struct module_pin_mux lcd_pin_mux[] = {
{OFFSET(lcd_data0), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data1), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data2), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data3), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data4), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data5), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data6), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data7), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data8), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data9), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data10), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data11), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data12), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data13), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data14), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_data15), (MODE(0) | PULLUDDIS)},
{OFFSET(lcd_vsync), (MODE(0))},
{OFFSET(lcd_hsync), (MODE(0))},
{OFFSET(lcd_pclk), (MODE(0))},
{OFFSET(lcd_ac_bias_en), (MODE(0))},
{-1},
};
configure_module_pin_mux(lcd_pin_mux);
2.am335x_evm.h里面添加关于LCD驱动的宏
#define CONFIG_VIDEO
#define CONFIG_VIDEO_DA8XX
#define CONFIG_CFB_CONSOLE
#define CONFIG_CMD_BMP
#define DAVINCI_LCD_CNTL_BASE 0x4830E000
#define CONFIG_SYS_CONSOLE_IS_IN_ENV
#define VIDEO_TSTC_FCT serial_tstc
#define VIDEO_GETC_FCT serial_getc
#define VIDEO_KBD_INIT_FCT 0
#define CONFIG_VIDEO_LOGO
3.修改LCD屏参数(drivers/video/da8xx-fb.c)
static const struct display_panel disp_panel = {
WVGA,
32,
8,
COLOR_ACTIVE,
};
static const struct lcd_ctrl_config lcd_cfg = {
&disp_panel,
.ac_bias = 255,
.ac_bias_intrpt = 0,
.dma_burst_sz = 16,
.bpp = 16,
.fdd = 255,
.tft_alt_mode = 0,
.stn_565_mode = 0,
.mono_8bit_mode = 0,
.invert_line_clock = 1,
.invert_frm_clock = 1,
.sync_edge = 0,
.sync_ctrl = 1,
.raster_order = 0,
};
4.编译uboot,
5.烧写运行,打印调试查看,运行卡死下面语句
static inline void lcd_disable_raster(void)
{
u32 reg;
printf("debug test1!\n")
reg = lcdc_read(&da8xx_fb_reg_base->raster_ctrl);//在该语句卡死,没有下条打印,所有的 lcdc_read()与lcdc_write()均卡住,
printf("debug test2!\n")
if (reg & LCD_RASTER_ENABLE)
lcdc_write(reg & ~LCD_RASTER_ENABLE,
&da8xx_fb_reg_base->raster_ctrl);
}
我怀疑是
video_hw_init初始化时, da8xx_fb_reg_base = (struct da8xx_lcd_regs *)DAVINCI_LCD_CNTL_BASE;的DAVINCI_LCD_CNTL_BASE地址我查看am335x的芯片手册为0x4830E000),请问是什么原因导致调用lcdc_read()时,芯片就再也没有网下打印出调试信息,是卡死了还是什么其他原因?