显示在日常生活中必不可少,电视电脑手机这三个屏幕天天都会看。。。

研究一下s3c2440中的LCD CONTROLLER,了解linux下Framebuffer的构成,可以巩固对LDM的学习。而且,进一步可以看一下bmp等格式的解析,可以通过一个很轻量级的gui--ftk了解下嵌入式gui的实现。

好了,了解FB从datasheet开始:

OVERVIEW:

s3c2440A中的LCD控制器包含将LCD数据信息从系统内存中的视频buffer传输到外部LCD驱动器的控制逻辑。

LCD 控制器支持黑白屏LCD的黑白单色(1bpp)/2bpp(四级灰阶)或4bpp(16级灰阶)模式。Time-based Dithering Algorithm(基于时间的抖动算法,用来减少画面闪烁)和FRC(Frame Rate Control)(帧比率控制,用来实现灰度显示)可以用来支持 8bpp(256色)和12bpp(4096色)接上STN LCD。

它可以支持TFT LCD 屏的1bpp,2bpp,4bpp和8bpp,还有16bpp和24bpp的真彩色显示。

LCD控制器可以通过编程支持各种不同的水平垂直像素,数据位宽,接口时序和刷新频率的LCD。

FEATURES:

TFT LCD Displays:

支持1bpp,2bpp,4bpp和8bpp的调色显示TFT屏

支持16bpp和24bpp真彩色TFT屏

支持24bpp模式的最大16万色的彩色TFT屏

支持多个屏的尺寸:

典型的实际分辨率:640×480,320×240,160×160 最大的虚拟分辨率是4M字节。

在64k彩色模式的最大虚拟分辨率是:2048×1024

COMMON FEATURES:

LCD控制器有一个专用的DMA用于支持从系统内存中的视频buffer获取图像数据。其属性如下:

--专用中断功能(INT_FrSyn and INT_FiCnt)

--系统内存用作显存

--支持多种虚拟显示屏(支持硬件的水平垂直滚动)

--可编程时序控制支持多个显示屏

--支持大端小端模式,如WinCE的数据格式

--支持两种SEC TFT LCD屏

(SAMSUNG 3.5” Portrait / 256K Color /Reflective and Transflective a-Si TFT LCD)
LTS350Q1-PD1: TFT LCD panel with touch panel and front light unit (Reflective type)
LTS350Q1-PD2: TFT LCD panel only
LTS350Q1-PE1: TFT LCD panel with touch panel and front light unit (Transflective type)
LTS350Q1-PE2: TFT LCD panel only

 

LCD Controller Block Diagram

image

s3c2440 LCD控制器用来传输视频数据以及产生必须的控制信号,比如VFRAME,VLINE,VCLK,VM等等。除了这些控制信号,s3c2440有专门用来视频数据的数据端口,见上图的VD[23:0]。LCD控制器包含REGBANk,LCDCDMA,VIDPRCSTIMEGEN和LPC3600.REGBANK有17个可编程的寄存器和用来配置LCD控制器的256×16调色板内存。LCDDMA是一个专用的DMA,可以用来自动传输frame memory中的视频数据到LCD驱动器。通过使用这个特殊的DMA,视频数据在不用CPU的干预下可以在屏上显示。VIDPRCS接收从LCDCDMA的视频数据转换成相应的格式(比如4/8单扫描或4位双扫描模式)后将这些视频数据通过VD[23:0]数据接口传输到LCD驱动器。TIMEGEN的可编程逻辑可产生多种时序接口和速率以适合各种LCD驱动。TIMEGEN模块产生VFRAME,VLINE,VCLK,VM等信号。

数据流程描述如下:

LCDCDMA有一个FIFO存储器。当FIFO是空的或者部分空的,LCDCDMA基于突发数据传输模式(连续的取16字节)在每一个突发请求时从frame memory中请求数据,而不需要其他总线主设备的允许。当内存控制器的总线仲裁接收了传输请求,会有四个字的数据成功的从系统内存传输到内部FIFO中。FIFO的总大小是28字:FIFOL12字和FIFOH16字。s3c2440有两个FIFO来支持双扫描显示模式。在单扫描模式下,FIFOH被使用。

image

TFT LCD CONTROLLER OPERATION:

TIMEGEN产生LCD驱动器的控制信号:比如VSYNC,HSYNC,VCLK,VDEN和LEND信号。这些控制信号与REGBANK的LCD1/2/3/4/5寄存器紧密相关。基于REGBANK中LCD控制寄存器的可编程控制,TIMEGEN可编程产生用于支持多种不同类型LCD驱动器的控制信号。

VSYNC信号使LCD的行指针指向显示的顶部。

VSYNC和HSYNC脉冲取决于LCD2/3寄存器中HOZVAL和LINEVAL的配置。HOZVAL和LINEVAL的值值有LCD屏的大小决定,可参见下面的等式:

— HOZVAL = (Horizontal display size) -1
— LINEVAL = (Vertical display size) -1

VCLK信号的速率取决于LCDCON1寄存器中的CLKVAL的配置。下表定义了VCLK和CLKVAL的关系。CLKVAL的最小值是0.

VCLK(Hz) = HCLK/[(CLKVAL+1)x2]

帧的频率就是VSYNC的信号频率。帧频与LCDCON1/2/3/4寄存器中的VSYNC,VBPD,VFPD,LINEVAL,HSYNC,HBPD,HFPD,HOZVAL和CLKVAL值有关。大多数LCD驱动器需要自己合适的帧频才行。帧频的计算如下:

Frame Rate = 1/ [ { (VSPW+1) + (VBPD+1) + (LIINEVAL + 1) + (VFPD+1) } x {(HSPW+1) + (HBPD +1)
+ (HFPD+1) + (HOZVAL + 1) } x { 2 x ( CLKVAL+1 ) / ( HCLK ) } ]

VIDEO OPERATION

s3c2440的TFT LCD控制器支持1,2,4,8bpp调色彩色显示和16或24bpp非调色彩色真彩显示。

256色调色板

s3c2440可以支持多种颜色映射的256色调色板,以便于用户灵活的操作。

MEMORY DATA FORMAT (TFT)

这部分包括每种显示模式的数个例子。

24bpp显示:

16bpp显示:

8bpp显示:

4bpp显示:

2bpp显示:

256色调色板的使用(TFT)

调色板的配置和格式控制

s3c2440为TFT LCD提供256色调色板。

用户可以从两种格式的64k色中选取256色。

256色调色板包括256(深度)×16位 SPSRAM。调色板支持5:6:5(R:G:B)格式和5:5:5:1(R:G:B:I)格式。

当用户使用5:5:5:1格式时,数据(I)用作每个RGB数据的通用LSB位。所以,5:5:5:1格式就等同于R(5+I):G(5+I):B(5+I)格式。

对于5:5:5:1格式,用户可以按表15-5中写调色板,转换VD到TFT  LCD屏如下面:

(R(5+I)=VD[23:19]+VD[18], VD[10] or VD[2],

G(5+I)=VD[15:11]+ VD[18], VD[10] or VD[2],

B(5+I)=VD[7:3]+VD[18], VD[10] or VD[2].)

将LCDCON5寄存器的FRM565设为0.

Palette Read/Write

当用户执行调色板的读写操作,必须检查LCDCON5寄存器的HSTATUS和VSTATUS,当HSTATUS和VSTATUS有效时必须禁止读写操作。

Temporary Palette Configuration

s3c2440允许用户将一帧填充为同一颜色而不用将一种颜色填入frame buffer或调色板的复杂操作。通过将LCD屏上的一个颜色的值写入到TPAL寄存器的TPALVAL值并且使能TPALEN,一帧就可以显示一种颜色。

VIRTUAL DISPLAY (TFT/STN)

s3c2440支持硬件的垂直水平滚动。如果屏滚动,LCDSADDR1/2寄存器的LCDBASEU和LCDBASEL要修改,除了PAGEWIDTH和OFFSIZE的值保持不变。

视频缓冲区存取的图像数据一定要比LCD屏显示的要大。

LCD POWER ENABLE (STN/TFT)

s3c2440支持电源使能功能(PWREN)。当PWREN管脚设置使得PWREN信号使能,LCD_PWREN的输出值由ENVID控制。换句话说,如果LCD_PWREN管脚连接着LCD屏的电源开关控制管脚,LCD屏的电源自动由ENVID控制。

s3c2449提供INVPWREN位来反转PWREN信号的极性。仅当LCD屏有自己的电源控制端口以及端口与LCD_PWREN管脚相连时,该功能才有效。

 

LCD CONTROLLER SPECIAL REGISTERS
LCD Control 1 Register

LCDCON1                    Bit                                                     Description

LINECNT(只读)             [27:18]                                              提供行计数的状态。从LINEVAL递减到0.

CLKVAL                       [17:8]                                                用于决定VCLK的值 

                                                                                            TFT:VCLK = HCLK / [(CLKVAL+1) x 2] ( CLKVAL >= 0 )

MMODE                       [7]                                                     决定VM的切换速率(0表示每帧,1表示有MVAL决定)

PNRMODE                   [6:5]                                                  选择显示模式      11=TFT LCD

BPPMODE                   [4:1]                                                  选择BPP模式

ENVID                        [0]                                                      LCD视频输出使能控制(0关闭视频输出和控制信号)

 

LCD Control 2 Register

VBPD                         [31:24]                                                 TFT:

LINEVAL                    [23:14]                                                 TFT/STN:决定LCD屏的垂直尺寸

VFPD                         [13:6]

VSPW                        [5:0]

LCD Control 3 Register

HBPD(TFT)                 [25:19]

HOZVAL                     [18:8]                                                  TFT/STN:决定LCD屏的水平尺寸。每一行的字节数必须是4n个字节。比如在mono模式下,LCD是120个点,120不支持因为每一行是120/8=15个字节。如果是128,就支持(128/8=16=2n)。LCD屏驱动必须抛弃额外的8个点。

HFPD(TFT)              [7:0] 

LCD Control 4 Register

HSPW(TFT)                [7:0]                                                       

LCD Control 5 Register

VSTATUS                    [16:15]                                                  TFT:记录垂直状态(只读)

HSTATUS                    [14:13]                                                  TFT:记录水平状态(只读)

BPP24BL                    [12]                                                        决定24bpp图像数据在32位空间所处的位置,0表示32位中低24位有效,1表示32位中高24位有效;

FRM565                     [11]                                                         决定16bpp输出图像数据格式0 = 5:5:5:1 1 = 5:6:5

INVVCLK                    [10]                                                        决定在VLCK的哪个活动沿获取图像数据,0表示在VCLK的下降沿时获得,1表示在上升沿时获得

INVVLINE                   [9]                                                          决定VLINE/HSYNC脉冲极性0表示一般,1表示反向

INVVFRAME                [8]                                                          决定VFRAME/VSYNC脉冲极性

INVVD                        [7]                                                          决定VD(videodata)的脉冲极性

INVVDEN                   [6]                                                           决定VDEN的信号极性

INVPWREN                [5]                                                           决定PWREN的信号极性

INVLEND                   [4]                                                            决定LEND的信号极性

PWREN                     [3]                                                            LCD_PWREN输出信号使能控制

ENLEND                    [2]                                                            TFT:LEND输出信号使能控制

BSWP                        [1]

HWSWP                     [0]

FRAME BUFFER START ADDRESS 1 REGISTER

LCDBANK                   [29:21]                                                   这些位标明了系统内存中视频帧地址的A[30:22],当画面滚动时,LCDBANK的值仍保持不变。LCD 帧缓冲必须有对准的4MB区域,所以要求画面移动时LCDBANK的值不能修改。(4M就要22bit) 所以,使用malloc()函数时要小心。

LCDBASEU                 [20:0]                                                      对于单扫描的LCD:这些位标明LCD帧缓冲的开始地址的A[21:1]

FRAME Buffer Start Address 2 Register

LCDBASEL                 [20:0]                                                      对于单扫描的LCD:这些位标明LCD帧缓冲结束地址的A[21:1]

LCDBASEL = ((the frame end address) >>1) + 1
= LCDBASEU +
(PAGEWIDTH+OFFSIZE) x (LINEVAL+1)

FRAME Buffer Start Address 3 Register

OFFSIZE                   [21:11]                                                        虚拟屏幕的offsize值(用半字的个数表示)这个值定义了显示在前一LCD行的最后一个半字的地址和显示在新的LCD行的第一个半字的地址的区别。

PAGEWIDTH             [10:0]                                                           虚拟屏幕的页宽(用半字的个数表示)这个值定义了帧的宽度。

注意:PAGEWIDTH 和    OFFSIZE   的值只有当ENVID位为0时才可以被修改。

Dithering Mode Register

DITHMODE              [18:0]                                                             可以使用下面的值:0x00000或0x12210

Temp Palette Register

TPALEN                     [24]                                                               临时调色板寄存器的使能位

TPALVAL                  [23:0]                                                            临时调色板的值

 

Register Setting Guide (TFT LCD)

CLKVAL的值决定VCLK和帧频的值。

Frame Rate = 1/ [ { (VSPW+1) + (VBPD+1) + (LIINEVAL + 1) + (VFPD+1) } x {(HSPW+1) + (HBPD +1)
+ (HFPD+1) + (HOZVAL + 1) } x { 2 x ( CLKVAL+1 ) / ( HCLK ) } ]

 

Example 4:
TFT Resolution: 240 x 240,
VSPW =2, VBPD =14, LINEVAL = 239, VFPD =4
HSPW =25, HBPD =15, HOZVAL = 239, HFPD =1
CLKVAL = 5
HCLK = 60 M (hz)
The parameters below must be referenced by LCD size and driver specifications:
VSPW, VBPD, LINEVAL, VFPD, HSPW, HBPD, HOZVAL, and HFPD
If target frame rate is 60–70Hz, then CLKVAL should be 5.
So, Frame Rate = 67Hz

看完了这些,对关键的做个总结:

从原理图来看:

image

LEND:(LEND)

VCLK:(VCLK) 像素时钟信号 用于锁存图像数据的像素时钟

VLINE:(HSYNC) 行同步信号

VFRAME:(VSYNC) 帧同步信号

VM:(VDEN)   数据有效标志信号

LCD_PWR:(LCD_PWREN)

LCDVF2:(LCD_PRCREVB)

LCDVF1:(LCD_LPCREV)

LCDVF0:(LCD_LPCOE)

VD[23:0]:图像的数据信号

image

VSPW:

TFT: Vertical sync pulse width determines the VSYNC pulse's high
level width by counting the number of inactive lines.

垂直同步脉冲宽度决定VSYNC脉冲的高电平宽度通过计量inactive lines的数目。

VBPD:

TFT: Vertical back porch is the number of inactive lines at the start of
a frame, after vertical synchronization period.

VBPD是在垂直同步时间后每一帧开始时inactive lines的数目。

VFPD:

TFT: Vertical front porch is the number of inactive lines at the end of a
frame, before vertical synchronization period.

VFPD是在垂直同步时间之前在每一帧的后部的inactive lines的数目。

LINEVAL:

TFT/STN: These bits determine the vertical size of LCD panel.

LINEVAL决定了LCD屏的垂直大小。有多少line。

HSPW:

TFT: Horizontal sync pulse width determines the HSYNC pulse's high
level width by counting the number of the VCLK.

水平同步脉冲宽度决定HSYNC脉冲的高电平宽度通过计量VCLK的数目。

HBPD:

TFT: Horizontal back porch is the number of VCLK periods between
the falling edge of HSYNC and the start of active data.

HPBD是在HSYNC下降沿和有效数据开始时之间的VCLK的数目。

HFPD:

TFT: Horizontal front porch is the number of VCLK periods between
the end of active data and the rising edge of HSYNC.

HFPD是在有效数据结束和HSYNC上升沿之间的的VCLK的数目。

HOZVAL:

TFT/STN: These bits determine the horizontal size of LCD panel.

HOZVAL决定了LCD屏的水平大小。

LCDBANK

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐