LCD驱动控制mini2449arm9.docx
《LCD驱动控制mini2449arm9.docx》由会员分享,可在线阅读,更多相关《LCD驱动控制mini2449arm9.docx(29页珍藏版)》请在冰豆网上搜索。
LCD驱动控制mini2449arm9
s3c2440-lcd控制器参数如何设定
具体设置需参照CPU文档中LCD控制器部分或显示芯片的硬件手册,我的是cpu是s3c2440,屏是三星横屏—LTV350QV-F04(带触摸屏),分辨率是320*240. 该液晶模块的显示格式为320(×3)×240。
即显示屏每行具有320个像素点,共240行;每个像素点由RGB(红、绿、蓝)三种颜色组成。
S3C2410LCD控制器的特性:
STN屏
-支持3种扫描方式:
4bit单扫、4位双扫和8位单扫
-支持单色、4级灰度和16级灰度屏
-支持256色和4096色彩色STN屏(CSTN)
-支持分辩率为640*480、320*240、160*160以及其它规格的多种LCD
TFT屏
-支持单色、4级灰度、256色的调色板显示模式
-支持64K和16M色非调色板显示模式
-支持分辩率为640*480,320*240及其它多种规格的LCD
对于控制TFT屏来说,除了要给它送视频资料(VD[23:
0])以外,还有以下一些信号是必不可少的,分别是:
VSYNC(VFRAME):
帧同步信号
HSYNC(VLINE):
行同步信号
VCLK :
像数时钟信号
VDEN(VM):
数据有效标志信号
先看看我的触摸屏提供的驱动参数:
主要是要设置lcdcon1,lcdcon2,lcdcon3,lcdcon4,lcdcon5寄存器里的参数:
CLKVAL,VBPD,LINEVAL,VFPD,VSPW,HBPD,HOZVAL,HFPD,MVAL,HSPW,INVVLINE,INVVFRAME,HWSWP(下面将会详细介绍这些参数是如何计算出来的)
#elif defined(CONFIG_FB_S3C2410_S320240)
staticstructs3c2410fb_mach_infosbc2440_lcdcfg__initdata={
.regs ={
.lcdcon1= S3C2410_LCDCON1_TFT16BPP|\
S3C2410_LCDCON1_TFT|\
S3C2410_LCDCON1_CLKVAL(0x03),
.lcdcon2= S3C2410_LCDCON2_VBPD(3)|\
S3C2410_LCDCON2_LINEVAL(239)|\
S3C2410_LCDCON2_VFPD(5)|\
S3C2410_LCDCON2_VSPW(15),
.lcdcon3= S3C2410_LCDCON3_HBPD(5)|\
S3C2410_LCDCON3_HOZVAL(319)|\
S3C2410_LCDCON3_HFPD(15),
.lcdcon4= S3C2410_LCDCON4_MVAL(13)|\
S3C2410_LCDCON4_HSPW(8),
.lcdcon5= S3C2410_LCDCON5_FRM565|
S3C2410_LCDCON5_INVVLINE|
S3C2410_LCDCON5_INVVFRAME|
S3C2410_LCDCON5_PWREN|
S3C2410_LCDCON5_HWSWP,
},
.lpcsel= 0xf82,
.gpccon= 0xaa955699,
.gpccon_mask= 0xffc003cc,
.gpcup= 0x0000ffff,
.gpcup_mask= 0xffffffff,
.gpdcon= 0xaa95aaa1,
.gpdcon_mask= 0xffc0fff0,
.gpdup= 0x0000faff,
.gpdup_mask= 0xffffffff,
.fixed_syncs= 1,
.width = 320,
.height= 240,
.xres ={
.min= 320,
.max= 320,
.defval= 320,
},
.yres ={
.max= 240,
.min= 240,
.defval= 240,
},
.bpp ={
.min= 16,
.max= 16,
.defval= 16,
},
};
Lcd提供的外围接口如下图:
注意:
TSXM,TSYM,TSXP,TSYP等引脚是用于触摸屏的,一会详细介绍。
S3c2440的lcd控制器电路
在s3c2440的触摸屏信号引脚:
Lcd控制器的内部结构:
Lcd控制器的引脚功能:
一. LCD控制器的外部接口信号
◎ VFRAME:
LCD控制器和LCD驱动器之间的帧同步信号。
该信号告诉LCD屏的新的一帧开始了。
LCD控制器在一个完整帧显示完成后立即插入一个VFRAME信号,开始新一帧的显示;该信号与LCD模块接口的VFRAME信号相对应。
◎VLINE:
LCD控制器和LCD驱动器之间的线同步脉冲信号,该信号用于LCD驱动器将水平线(行)移位寄存器的内容传送给LCD屏显示。
LCD控制器在整个水平线(整行)数据移入LCD驱动器后,插入一个VLINE信号;该信号与LCD模块的VLINE信号相对应。
◎VCLK:
LCD控制器和LCD驱动器之间的像素时钟信号,由LCD控制器送出的数据在VCLK的上升沿处送出,在VCLK的下降沿处被LCD驱动器采样;该信号与LCD模块的VCLK信号相对应。
◎VM:
LCD驱动器的AC信号。
VM信号被LCD驱动器用于改变行和列的电压极性,从而控制像素点的显示或熄灭。
VM信号可以与每个帧同步,也可以与可变数量的VLINE信号同步;
◎VD[23:
0]:
LCD像素点数据输出端口。
与LCD模块的VD[23:
0]相对应。
TFT时序例子:
VSPW:
TFT:
VerticalsyncpulsewidthdeterminestheVSYNCpulse'shighlevelwidthbycountingthenumberofinactivelines.
HSPW:
TFT:
HorizontalsyncpulsewidthdeterminestheHSYNCpulse'shighlevelwidthbycountingthenumberoftheVCLK.
VSPW指的是VSYNC处于高电平时的线的数目。
HSPW指的是HSYNC处于高电平时的VCLK的数目。
VBPD 列开始等待周期 7r#Kqf7PC (VBPD 是指LCD显示每帧开始时有这么多个周期是没有图像信号输出的,目的是为了同步.取值范围与所使用的LCD屏参数有关)
VSPW 列有效脉冲宽度 AmLWq^^0
VFPD 列结束等待周期 <(Z?
:
q
X4
HBPD 行开始等待周期 7r#Kqf7PC
HSPW 行有效脉冲宽度 AmLWq^^0
HFPD 行结束等待周期 <(Z?
:
q
X4
从上面的时序图可以看出VBPD,VSPW,VFPD,HBPD,HSPW,HFPD的作用.
几个参数的设置方法:
HSPW:
行同步肪冲宽度(4.8us左右(4.8/点时钟(1.6.4)))
HBPD:
行可视范围前肩
HFPD:
行可视范围后肩 (这两个要慢慢调,确定图像的左右位置)
行频(14.9~22.35)=1/((HSPW+1)+(HBPD+1)+(HFPD+1)+320)*(点时钟1/6.4)
只要行频在这个范围都可以。
VSPW:
场同步脉冲宽度(N/P制好象有点不同,一般是2.5行,取3-1就可以了)
VBPD:
帧可视前肩
VFPD:
帧可视后肩
这两个用来调整帧画面在靠上/靠下位置,如果场频取60的话,一帧时间是1/60=16.67ms,假如行频取15.75,由一行时间为1/15.75=0.064ms,则一帧总行数为
16.67/0.064=262行,262=((VSPW+1)+(VFPD+1)+(VBPD+1)
所以,只要确定了行频,就可以推算出点时钟及其他参数,只要行场同步对了,图像肯定可以出来,只需微调位置就可以了。
另,如果你的clkval_calc=9话,HCLK=133,点时钟应该是133/20,应该在6.65M.
Virtualdisplay图:
我的三星屏的特性:
Lcd屏的一些重要参数(注意――framefrequency――dotclock)
Framefrequency不能大过90hz
Dotclock不能大过30Mhz
Lcd屏的硬件电路:
Lcd屏各引脚的定义:
TFT控制器介绍
通过对REGBANK 寄存器组中的LCDCON1/2/3/4/5进行配置,TIMEGEN产生可编程控制信号来支持不同类型的LCD驱动器。
VSYNC和HSYNC脉冲与LCDCON2/3的HOZVAL和LINEVAL设置相关,HOZVAL和LINEVAL的值由LCD屏的分辨率决定,如下公式:
HOZVAL=(Horizontaldisplaysize)-1
(1)
LINEVAL=(Verticaldisplaysize)-1
(2)
VCLK的频率取决于LCDCON1中CLKVAL的设置,在LCDCON1中配置,VCLK和CLKVAL的关系如下(CLKVAL的最小值是0):
VCLK(Hz)=HCLK/[(CLKVAL+1)×2] (3)
HCLK为S3C2440A 中PLL时钟发生器产生的时钟信号。
VSYNC的频率即为帧频,它与LCDCON1/2/3/4均有关,计算公式如下:
FrameRate=1/{[(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)]×[(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)]×[2×(CLKVAL+1)/(HCLK)]}(4)
S3c2440时序计算公式
像素频率VCLK:
要作的工作就是修改相应的点频、帧频、场频、屏的长宽、及色彩位数
现在我们来对比LTV350QV-F04的时序和lcd控制器的时序:
1)LTV350QV-F04的时序
2)lcd控制器的时序
TFT屏的典型时序。
其中VSYNC是帧同步信号,VSYNC每发出1个脉冲,都意味着新的1屏视频资料开始发送。
而HSYNC为行同步信号,每个 HSYNC脉冲都表明新的1行视频资料开始发送。
而VDEN则用来标明视频资料的有效,VCLK是用来锁存视频资料的像数时钟。
并且在帧同步以及行同步的头尾都必须留有回扫时间,例如对于VSYNC来说前回扫时间就是(VSPW+1)+(VBPD+1),后回扫时间就是(VFPD+1);HSYNC亦类同。
这样的时序要求是当初CRT显示器由于电子枪偏转需要时间,但后来成了实际上的工业标准,乃至于后来出现的TFT屏为了在时序上于CRT兼容,也采用了这样的控制时序。
比较可以得出
(前回扫时间) VBP=(VBPD+1)+(VSPW+1)=0x0A =》VBPD=0x06 //0x0a为估值
(VSYNC处于高电平时的线的数目)VLW=VSPW+1=0x03 =》VSPW=0x02 //行为单位垂直同步宽度图中为2H这里取的3
( 后回扫时间)VFP=VFPD+1=0x04 =》VFPD=0x03 //图中为>=3H,这里取的4
HBP=(HBPD+1)+(HSPW+1)=0x21 =》HBPD=0x0D
HLW=(HSPW+1)=0x13 =》HSPW=0x12 //图中可见为19clk
HFP=HFPD+1=0x04 =》HFPD=0x03 //图中并没有给出值,这里可能取的估值
其中,VBP、VLW、VFP、HBP、HLW、HFP是LTV350QV手册中的术语
VBPD、VSPW、VFPD、HBPD、HSPW、HFPD是S3C2440手册中需要设置的寄存器
DOTCLK=Fframe×(240+VBP+VFP)×(320+HBP+HFP)
=75Hz×(240+VBP+VFP)×(320+HBP+HFP)
Fframe手册规定60-90Hz,上边VBP等以手册中的术语,取值要换算成手册为准
====èbyzfh
上边的0x0A,0x03,等值为依据屏手册图估量值,垂直以行为单位,水平以像素为单位.若程序验证得到的图像有偏移可以调整VBPD 水平调HBPD
最后调整后clkval=8
VBPD=20,VFPD=3VSPW=2
HBPD=4,HFPD=3, HSPW="18"
VBP=(20+1)+(2+1)=24
VFP=VFPD+1=4
HBP=(HBPD+1)+(HSPW+1)=4+1+18+1=24
HFP=HFPD+1=4
DOTCLK=Fframe×(240+VBP+VFP)×(320+HBP+HFP)
=Fframe*(240+24+4)*(320+24+4)
若取2410HCLK=101MHz(clkval=8) 则据2410手册LCD部分DOTCLK=101/(8+1)*2=5.6MHz 则可算出Fframe=60Hz 可以满足应用。
LTV350QV调试记要:
网址:
http:
//www.mivi.name/blog/index_en.php?
itemid=278&catid=3
◎spi接口的配置是很重要的配置成了才会有反映、M和VCOM才看得到
◎spi接口的片选信号是不可以少的,如果用2440的spi模块,片选信号要记的加延时,因为spi模块输出数据需要时间
◎ 延时函数要写好,手册要求的延时都要满足,足够长
◎2440的lcd模块配置,三个主要信号都应该用反向、上升沿取数、Half-Word换序
◎ 电源的纹波、VCOM的幅度会明显影响显示的效果和颜色
◎LTV350QV的手册描述时序和S3C2440的时序手册要对照看:
LTV350手册上的时序
S3C2440手册上的时序
比较可以得出
VBP=(VBPD+1)+(VSPW+1)=0x0A =》VBPD=0x06
VLW=VSPW+1=0x03 =》VSPW=0x02
VFP=VFPD+1=0x04 =》VFPD=0x03
HBP=(HBPD+1)+(HSPW+1)=0x21 =》HBPD=0x0D
HLW=(HSPW+1)=0x13 =》HSPW=0x12
HFP=HFPD+1=0x04 =》HFPD=0x03
其中,VBP、VLW、VFP、HBP、HLW、HFP是LTV350QV手册中的术语
VBPD、VSPW、VFPD、HBPD、HSPW、HFPD是S3C2440手册中需要设置的寄存器
调LCD屏LTV350QV的心得
网址:
note:
LTV350QV-F0E
因为没经验, 整了我近半个月,晕死
(1) vertical_syn_lenth第一重要,需要反复调试,计算不了;若在屏上得不到正确的纵坐标,八成是它的问题
(2) horizontal_syn_lenth 第二重要,若能在屏上正确表示横轴坐标,八成它错不了
其中
(1),
(2)参数设置正确,就一定能显示图像;没图像,绝对是它们的问题
(3)left_margin,right_margin,upper_margin,lower_margin参数影响不大,看到图像调就OK (我之前就是没正确图像,纵坐标错误,把这四个参数瞎调了一通,浪费了巨多时间)
(4)像素时钟,dotclk,给个datasheet计算值或参考值,影响也不大
其次硬件设计问题:
(1)vcom是个方波,低在0.4,高为3.68,datasheet没说得很清楚,不了解还以为它只要在0.4-3.68范围波动就OK了呢;
一般若初始化LCD成功,LCDM引脚就会送出0-4V的方波用以产生VCOM信号,电路设计可反向或运放一下都可以;
这个信号影响图像的色彩亮度和分辨率,设计时最好弄2个可调电阻以方便对着图像调色彩;
(2)VGH (17-19v),VGL(-11~-9v)设计要达标,我们的参数是VGH17.4,VGL-10.4
(3)数模电源AVDD,DVDD正确再次,LCD的初始化问题:
整了1周 LTV350QV采用的是SPI三根线延时要给够,因为只需要在linux的初始化阶段发送少量的数据,最方便的做法就是采用GPIO口模拟SPI发数据,简单、高效。
初始化正确后,LCD一般都有色彩显示,不管再少,看到星点儿彩色,基本就能肯定初始化正确了
我们根据数据手册来描述一下这个集成在S3C2440内部的LCD控制器:
a:
LCD控制器由REGBANK、LCDCDMA、TIMEGEN、VIDPRCS寄存器组成;
b:
REGBANK由17个可编程的寄存器组和一块256*16的调色板内存组成,它们用来配置LCD控制器的;
c:
LCDCDMA是一个专用的DMA,它能自动地把在侦内存中的视频数据传送到LCD驱动器,通过使用这个DMA通道,视频数据在不需要CPU的干预的情况下显示在LCD屏上;
d:
VIDPRCS接收来自LCDCDMA的数据,将数据转换为合适的数据格式,比如说4/8位单扫,4位双扫显示模式,然后通过数据端口VD[23:
0]传送视频数据到LCD驱动器;
e:
TIMEGEN由可编程的逻辑组成,他生成LCD驱动器需要的控制信号,比如VSYNC、HSYNC、VCLK和LEND等等,而这些控制信号又与REGBANK寄存器组中的LCDCON1/2/3/4/5的配置密切相关,通过不同的配置,TIMEGEN就能产生这些信号的不同形态,从而支持不同的LCD驱动器(即不同的STN/TFT屏)。
VSYNC/VFRAME/STV:
垂直同步信号(TFT)/帧同步信号(STN)/SECTFT信号;
HSYNC/VLINE/CPV:
水平同步信号(TFT)/行同步脉冲信号(STN)/SECTFT信号;
VCLK/LCD_HCLK:
象素时钟信号(TFT/STN)/SECTFT信号;
VD[23:
0]:
LCD像素数据输出端口(TFT/STN/SECTFT);
VDEN/VM/TP:
数据使能信号(TFT)/LCD驱动交流偏置信号(STN)/SECTFT信号;
LEND/STH:
行结束信号(TFT)/SECTFT信号;
LCD_LPCOE:
SECTFTOE信号;
LCD_LPCREV:
SECTFTREV信号;
LCD_LPCREVB:
SECTFTREVB信号。
A:
显示指针从矩形左上角的第一行第一个点开始,一个点一个点的在LCD上显示,在上面的时序图上用时间线表示就为VCLK,我们称之为像素时钟信号;
B:
当显示指针一直显示到矩形的右边就结束这一行,那么这一行的动作在上面的时序图中就称之为1Line;
C:
接下来显示指针又回到矩形的左边从第二行开始显示,注意,显示指针在从第一行的右边回到第二行的左边是需要一定的时间的,我们称之为行切换;
D:
如此类推,显示指针就这样一行一行的显示至矩形的右下角才把一副图显示完成。
因此,这一行一行的显示在时间线上看,就是时序图上的HSYNC;
E:
然而,LCD的显示并不是对一副图像快速的显示一下,为了持续和稳定的在LCD上显示,就需要切换到另一幅图上(另一幅图可以和上一副图一样或者不一样,目的只是为了将图像持续的显示在LCD上)。
那么这一副一副的图像就称之为帧,在时序图上就表示为1Frame,因此从时序图上可以看出1Line只是1Frame中的一行;
F:
同样的,在帧与帧切换之间也是需要一定的时间的,我们称之为帧切换,那么LCD整个显示的过程在时