显示在日常生活中必不可少,电视电脑手机这三个屏幕天天都会看。。。
研究一下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
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被使用。
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 ) } ]
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
看完了这些,对关键的做个总结:
从原理图来看:
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]:图像的数据信号
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.
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