u-boot 中的lcd驱动是 在 u-boot lcd驱动框架下的 lcd驱动,包括
lcd 框架
lcd 驱动
代码在
https://github.com/lisider/u-boot/tree/ok6410a
提交id: 54c4f9e1ec8017d51234e5909ca39662a257632d
总体概览
初始化的时候 drv_lcd_init
1. 调用 s3cfb 提供的接口函数 做 硬件初始化
2. 将 panel_info 的信息放到 cons 全局变量中
使用的时候 printf
1. 调用 cons 的 函数 处理 cons 的 成员变量 将 字符打印到屏幕上 // 本质上是写内存地址
lcd 框架
什么时候开始着手初始化lcd
init_sequence_f
reserve_video
/* reserve memory for LCD display (always full pages) */
gd->relocaddr = lcd_setmem(gd->relocaddr);
// 后面的代码中 将 该地址 放入 static struct console_t cons; 中的 fbbase
gd->fb_base = gd->relocaddr;
static init_fnc_t init_sequence_r[] = { // common/board_r.c
stdio_init_tables, 745 // common/stdio.c
stdio_add_devices, 822 // common/stdio.c
console_init_r, 827 // common/console.c
initr_net, 871 // common/board_r.c
}
static struct console_t cons; // common/lcd_console.c
stdio_add_devices // common/stdio.c
drv_lcd_init // common/lcd.c
lcd_init // common/lcd.c
lcd_ctrl_init // s3c_fb_init // arch/arm/mach-s3c64xx/include/mach/lcd.h // drivers/video/s3c_fb.c
lcd_get_size // common/lcd.c
panel_info.vl_col // drivers/video/s3c_fb.c
lcd_clear // common/lcd.c
lcd_setcolreg // drivers/video/s3c_fb.c
lcd_init_console // common/lcd_console.c
cons.fbbase = address; // addr 来自于 panel_info(drivers/video/s3c_fb.c)
lcd_enable // drivers/video/s3c_fb.c
lcd_set_col(填充cons) // common/lcd_console.c
lcd_set_row(填充cons) // common/lcd_console.c
lcddev.puts = lcd_stub_puts; // common/lcd.c
stdio_register(&lcddev); // common/stdio.c
console_init_r // common/console.c
gd->flags |= GD_FLG_DEVINIT; // 该句之后就代表 初始化完成,下一句就可以使用printf 打印到屏上
实际上ok6410a uboot-2021.01 在屏上打印的第一句 是 Net: Net Initialization Skipped
lcd console 打印流程
printf // lib/vsprintf.c
puts // common/console.c
fputs // common/console.c
static void console_puts // common/console.c
dev = console_devices[file][i]; // common/console.c
dev->puts(dev, s); // lcd_stub_puts // common/lcd.c
lcd_stub_puts // common/lcd.c
lcd_puts // common/lcd_console.c
lcd_putc // common/lcd_console.c
cons.fp_putc_xy // lcd_putc_xy0 // common/lcd_console.c // cons.fp_putc_xy(&cons, cons.curr_col * VIDEO_FONT_WIDTH, cons.curr_row * VIDEO_FONT_HEIGHT, c);
console_newline // common/lcd_console.c
lcd_putc_xy0 // common/lcd_console.c
fbptr_t *dst = (fbptr_t *)pcons->fbbase + y * pcons->lcdsizex + x; // pcons 就是 static struct console_t cons;
*dst++ = (bits & 0x80) ? fg_color : bg_color;
驱动
框架给驱动准备的接口(驱动的出口函数和出口变量)
驱动给框架提供的接口
A 函数
lcd_enable
lcd_ctrl_init // s3c_fb_init
lcd_setcolreg
B 变量
vidinfo_t panel_info
出口函数被调用流程
stdio_add_devices // common/stdio.c
drv_lcd_init // common/lcd.c
lcd_init // common/lcd.c
lcd_ctrl_init // s3c_fb_init // arch/arm/mach-s3c64xx/include/mach/lcd.h // drivers/video/s3c_fb.c ------------
lcd_get_size // common/lcd.c
panel_info.vl_col // drivers/video/s3c_fb.c ------
lcd_clear // common/lcd.c
lcd_setcolreg // drivers/video/s3c_fb.c ----------------
lcd_init_console // common/lcd_console.c
cons.fbbase = address; // addr 来自于 panel_info(drivers/video/s3c_fb.c) ----
lcd_enable // drivers/video/s3c_fb.c ------------
lcd_set_col(填充cons) // common/lcd_console.c
lcd_set_row(填充cons) // common/lcd_console.c
上一篇:OK6410A 开发板 (四) 2 OK6410A 裸机 ethernet SRAM接口
下一篇:OK6410A 开发板 (四) 1 OK6410A 裸机LCD RGB接口
推荐阅读最新更新时间:2024-11-05 11:08
设计资源 培训 开发板 精华推荐
- 具有 SCSI 有源端接器的 LT1118CS8-2.5 低压差稳压器的典型应用电路
- 5V/20A、有源钳位正激转换器、以太网供电(PoE)-符合IEEE 802.3bt标准的参考设计
- LT3651EUHE-4.2 演示板,4A 高压锂离子电池充电器
- 使用 MaxLinear, Inc 的 SPX1121 的参考设计
- 使用 ROHM Semiconductor 的 BD46385 的参考设计
- 仪表用 3.3V DC 至 DC 单路输出电源
- 用于工业应用的 LT3973EDD 3.3V 降压转换器的典型应用
- AMIS492X0GEVB,现场总线媒体访问单元评估板
- 基于具有蓝牙低功耗和Android应用的STP16CPC26的60 LED(6 x 10)高性价比矩阵显示
- LT3091EFE 低压降工作在极低输出电压下的典型应用