概述:

 

方框图

S3C2440 之LCD控制器_字段

LCD控制器是用于传输视频数据信号VD[0..23]和产生必要的控制信号,如VFRAM、VLINE、VCLK、VM等等。LCD控制器包括REGBANK、LCDCDMA、VIDPRCS、TIMGEN、LPC3600。

REGBANK:有17个可编程寄存器和用于配置LCD控制器的256 * 16调色存储器。

LCDCDMA:专用于DMA,它可以自动从帧存储器到LCD视屏存储器传输数据,屏幕显示数据无需CPU的参与。

VIDPRCS:接受来自LCDCDMA的视屏数据,将其转化为适当的格式,然后通过VD[0..23]数据输出

TIMGEN:可由可编程逻辑组成来支持发现不同LCD驱动器的一般接口时序和速率的变化需要,产生VFRAM、VLINE、VCLK

VM:帮助LCD驱动器交替用于开启和关闭像素的行、列电压的极性

数据流描述:

S3C2440 之LCD控制器_字段_02


STN LCD控制器操作

时序发生器(TIMEGEN):产生LCD驱动器的控制信号,VFRAM,VLINE, VCLK, VM,这些信号的配置与REGBANK中的LCDCON1\2\3\4\5寄存器配置有着紧密关系。

VM信号的触发率取决与LCDCON1寄存器的MMODE位和LCDCON4寄存器的MVAL[7...0]字段,如果MMODE=0,配置为每帧触发;如果MMODE=1,则由MVAL[7...0]触发。

VM频率 = VLINE频率/(2 * MVAL)

VFRAM、VLINE脉冲发生取决于LCDCON2\3寄存器中的HOZVAL和LINEVAL字段配置,每个字段又与LCD大小和像素显示模式有关

HOZVAL = (水平显示大小 /  有效VD像素)- 1(彩色模式中:水平显示大小 = 3 * 水平像素数)

LINEVAL = (虚拟显示大小) -  1 (单扫描显示模式),LINE = (虚拟显示大小 / 2)   - 1(双扫描模式)

VCLK信号速率 取决于LCDCON1寄存器中的CLKVAL字段的配置,CLKVAL最小字段为2

VCLK(HZ) = HCLK /(CLKVAL * 2)

帧频VFRAM

S3C2440 之LCD控制器_灰度_03

 

视频操作

 S3C2440 LCD控制器支持8位色模式(256色模式),12为色模式(4096色模式),4阶灰度模式,16阶灰度模式和单色模式。

查找表

 S3C2440能支持查找表给彩色和灰色映射的各种选择

灰度模式选择

S3C2440 LCD控制器支持2种灰度模式:2位每像素灰度(4阶灰度)和四位每像素灰度(16阶灰度),两种像素都是查找表BLUELUT(搞不清楚阶灰度是什么意思?)

256色模式操作

S3C2440控制器能支持8位每像素256色模式,编码8位分别为 3为给红色,3位给绿色,2为给蓝色,每个查找表是使用REDLUT寄存器的REDVAL[31...0],GREENLUT寄存器的GREENVAL[31...0],BLUELUT寄存器的BLUEVAL[15...0]

S3C2440 之LCD控制器_寄存器_04

 

4096级色模式

12位每像素被编码为4位给红色,4位给绿色,4位给蓝色

抖动和帧频控制

S3C2440 之LCD控制器_字段_05

显示类型

LCD控制支持支持3种LCD驱动器类型:

4位双扫描,

S3C2440 之LCD控制器_灰度_06

4位单扫描,8位单扫描显示模式

S3C2440 之LCD控制器_灰度_07

时序要求:

S3C2440 之LCD控制器_灰度_08

 

TFT LCD 日后在分析...

 

TFT LCD寄存器配置

void Lcd_Init(void)
{
rGPCUP = 0x00000000;
rGPCCON = 0xaaaa02a9;

rGPDUP = 0x00000000;
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8] rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;
// TFT LCD panel,12bpp TFT,ENVID=off
rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
rLCDCON4=(MVAL<<8)|(HSPW);
rLCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3) |(BSWP<<1) | (HWSWP); rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );
rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);
rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
rTCONSEL &= (~7) ; // Disable LPC3480
rTPAL=0; // Disable Temp Palette
}