PL111 RGB LCD时序配置详解

PL111 RGB LCD 时序说明

1)文档范围

本文从两个维度整理 PL111 时序:

  • 通俗理解(面向调试与沟通)
  • 硬件寄存器映射(面向实现与定位问题)

内容与 bsp/qemu-vexpress-a9/drivers/drv_clcd.c 的实现保持一致。


2)核心概念

2.1 水平方向时序(单行)

  • HSW(Horizontal Sync Width,行同步宽度)
    • HSYNC 脉冲持续的像素时钟个数
    • 用于标记"换行",帮助屏端锁定采样相位
  • HBP(Horizontal Back Porch,水平后肩)
    • HSYNC 结束后到有效像素开始前的空白区
  • HPP(有效像素宽度)
    • 一行中真正显示的像素数量
  • HFP(Horizontal Front Porch,水平前肩)
    • 有效像素结束后到下一次 HSYNC 前的空白区

单行时序顺序:

HSW -> HBP -> HPP(有效像素) -> HFP

2.2 垂直方向时序(单帧)

  • VSW(Vertical Sync Width,场同步宽度)
    • VSYNC 脉冲持续的行数
  • VBP(Vertical Back Porch,垂直后肩)
    • VSYNC 后到有效显示区前的空白行
  • LPP(有效显示高度)
    • 一帧中真正显示的有效行数
  • VFP(Vertical Front Porch,垂直前肩)
    • 有效显示结束后到下一帧 VSYNC 前的空白行

单帧时序顺序:

VSW -> VBP -> LPP(有效行) -> VFP


3)PL111 寄存器位定义

3.1 LCDTiming0(水平时序)

PL111 常用位定义如下:

  • bits[7:2]PPL = (pixels_per_line / 16) - 1
  • bits[15:8]HSW - 1
  • bits[23:16]HFP - 1
  • bits[31:24]HBP - 1

反解公式:

  • active_width = (PPL + 1) * 16
  • HSW = ((tim0 >> 8) & 0xFF) + 1
  • HFP = ((tim0 >> 16) & 0xFF) + 1
  • HBP = ((tim0 >> 24) & 0xFF) + 1

3.2 LCDTiming1(垂直时序)

PL111 常用位定义如下:

  • bits[9:0]LPP = lines_per_panel - 1
  • bits[15:10]VSW - 1
  • bits[23:16]VFP - 1
  • bits[31:24]VBP - 1

反解公式:

  • active_height = LPP + 1
  • VSW = ((tim1 >> 10) & 0x3F) + 1
  • VFP = ((tim1 >> 16) & 0xFF) + 1
  • VBP = ((tim1 >> 24) & 0xFF) + 1

4)本 BSP 驱动中的实际赋值

drv_clcd.c 中:

c 复制代码
plio->tim0 = 0x3F1F3C00 | ((CLCD_WIDTH / 16 - 1) << 2);
plio->tim1 = 0x080B6000 | (CLCD_HEIGHT - 1);

解释:

  • tim0 的常量 0x3F1F3C00 固定了 HBP/HFP/HSW
  • tim0 的低位字段用 CLCD_WIDTH 动态计算 PPL
  • tim1 的常量 0x080B6000 固定了 VBP/VFP/VSW
  • tim1 的低位字段用 CLCD_HEIGHT 动态计算 LPP

以 480 行为例:

  • LPP = 480 - 1 = 479
  • VSW = 25
  • VFP = 12
  • VBP = 9

5)HSW/VSW 为什么关键

5.1 通俗理解

  • 屏幕按"从左到右、逐行、逐帧"方式刷新。
  • 每一行/每一帧开始前,需要一个同步脉冲告诉屏端"边界到了"。
  • HSW/VSW 就是这个同步脉冲的长度。

5.2 硬件原理

  • 同步脉冲用于 LCD 驱动电路锁定像素采样时序。
  • 宽度不合理会导致锁相不稳,常见表现:
    • 闪屏
    • 滚屏
    • 画面抖动或撕裂感
    • 无显示

6)水平与垂直的镜像关系

  • HSW <-> VSW:同步脉冲宽度
  • HBP <-> VBP:同步后的稳定等待区
  • HPP(有效宽) <-> LPP(有效高):可见画面
  • HFP <-> VFP:周期结束前的尾部空白区

本质相同,只是作用轴不同:

  • 水平参数控制"每一行"
  • 垂直参数控制"每一帧"

7)工程调参建议流程

  1. 以屏厂 datasheet 为唯一时序基准。
  2. 先确认有效分辨率:CLCD_WIDTHCLCD_HEIGHT
  3. 按位编码:
    • 水平参数写入 tim0
    • 垂直参数写入 tim1
  4. 同步检查像素格式与时钟配置(control、平台时钟树)。
  5. 若显示不稳定,按以下顺序排查:
    • 同步极性与同步宽度
    • 前后肩参数
    • 像素时钟频率
    • framebuffer 地址与对齐

8)常见故障与症状

  • HSW 过小:行边界不稳,画面错位/抖动
  • HSW 过大:行周期变长,帧率下降
  • VSW 不匹配:滚屏、帧周期性不稳定
  • Porch 不匹配:边缘裁切、偏移、部分面板无法锁定

9)一句话总结

HSW/VSW 定义了行/帧同步脉冲长度,用于告诉屏幕何时换行/换帧;HBP/HFP 与 VBP/VFP 提供消隐缓冲;HPP/LPP 定义有效显示区域。

相关推荐
xzl041 天前
LVGL 启动流程全解析:RT-Thread 下的界面渲染链路
rt-thread·lvgl
xzl041 天前
LVGL Coffee UI 接入实战:问题解决全记录
ui·rt-thread·lvgl
神一样的老师7 天前
【兆易创新GD32VW553开发板试用】 BSP 从 GitHub 下载与编译指南
单片机·github·rt-thread
xzl047 天前
【Menuconfig】RT-Thread配置菜单第一级
rt-thread
xzl048 天前
瑞萨 FSP 和 STM32 HAL 库的启动流程核心差异
stm32·单片机·嵌入式硬件·rt-thread
xzl048 天前
RT-Thread 5.2.2内核模块
开发语言·rt-thread
fox08152 个月前
RTThread-Studio中,使用5.2.0版本默认配置生成工程,进行编译报警告的部分解决方法。
mcu·rt-thread·rtthread-studio
混分巨兽龙某某3 个月前
基于STM32的嵌入式操作系统RT-Thread移植教学(HAL库版本)
stm32·嵌入式硬件·rt-thread·rtos
张世争3 个月前
RT-Thread 5.3 windows bsp simulator scons --target=vs 生成的工程编译失败问题
windows·rt-thread·simulator