Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381132
  • 博文数量: 87
  • 博客积分: 983
  • 博客等级: 准尉
  • 技术积分: 685
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-25 07:20
文章分类

全部博文(87)

文章存档

2016年(1)

2015年(3)

2014年(55)

2013年(13)

2012年(15)

分类: 嵌入式

2013-07-16 21:17:55

LCD 控制器

(图片以后添加)
LCD特殊控制寄存器
(LCDCON1) LCD Control 1 Register
 
 
1LINECNT6位,记录行数状态,计数从LINEVAL降至0
2CLKVAL10位,用于决定VCLK的值,(TSN)(TFT)公式如上图;
3MMODE1位,用于决定VM的切换速率,0表示每帧,1表示由MVAL确定;
4PNRMODE2位,决定显示模式;
5BPPMODE4位,决定BPP模式;
6ENVID1位,LCD图像输出与LCD控制信号使能开关。
 

(LCDCON2) LCD Control 2 Register

 
 
1VBPD8位,TFTVertical back porch),决定垂直同步周期之后,新帧开始时无效行数;
2LINEVAL10位,表示LCD面板的垂直尺寸,如320*240,对应值为240-1
3VFPD8位,(TFT)垂直前沿行(),决定旧帧结束时,垂直同步之前的无效行数;
4VSPW6位,(TFT)垂直同步脉冲宽度(Vertical sync pulse width),决定垂直同步信号(VSYNC)脉冲高电平宽度(可通过计算无效行数得到)。
 

(LCDCON3) LCD Control 3 Register

 
 
1HBPD7位,TFT)水平后沿行(Horizontal back porch),决定HSYNC(水平同步信号)下降沿与有效数据开始之间的VCLKLCD时钟信号)
WDLY7位,(STN[1:0]决定VLINEVCLK之间的HCLK数,[7:2]保留位
2HOZVAL11位,决定LCD面板的水平尺寸,1行的点数必须设定为x,满足(x/8)4的倍数;
3HFPD8位,(TFT)水平前沿行(Horizontal front porch),决定有效数据结束和HSYNC上升沿之间的VCLK时钟周期数;
LINEBLANK8位,(STN)决定一个水平线持续时间的空白时间,用于调整VLINE的最终速率。
 
注意:对于STN LCD(LINEBLANK + WLH + WDLY)的值必须大于(14+12Tmax)
其中(14+12Tmax)=(14+ 8Tmax1 + 4Tmax2)
//保证LCD扫描的周期大于读取数据的周期
(1) 14SDRAM Auto refresh bus acquisition cycles   //SDRAM的刷新周期
(2) 8x Tmax1Cache fill cycle × the Slowest Memory access time(Ex, ROM)
(3) 4x Tmax20xC~0xE address Frame memory Access time
 

(LCDCON4) LCD Control 4 Register

 
 
1MVAL8位,(STN)决定VM信号的转变速率(MMODE位为1时,才会转变);
2HSPW8位,(TFT)水平同步脉冲宽度(Horizontal sync pulse width),决定水平同步信号(HSYNC)脉冲高电平宽度(可通过计算VCLK时钟数得到);
   WLH8位,([1:0]决定VLINE脉冲高电平宽度(用HCLK时钟数表示),[7:2]保留位。
 

(LCDCON5) LCD Control 5 Register

 
 
1.保留位:15位,且必须为0
2VSTATUS2位,(TFT)记录垂直状态,只读;//表示垂直扫描现处在什么状态
3HSTATUS2位,(TFT)记录水平状态,只读;
4BPP24BL1位,(TFT)决定24bpp图像数据在32位空间所处的位置,0表示32位中低24位有效,1表示32位中高24位有效;
5FRM5651位,(TFT)决定16bpp图像数据格式,0表示5:5:5:11表示5:6:5
6INVVCLK1位,决定在VLCK的哪个活动沿获取图像数据,0表示在VCLK的下降沿时获得,1表示在上升沿时获得;
7INVVLINE1位,决定VLINE/HSYNC0表示一般,1表示反向;
8INVVFRAME1位,决定VFRAME/VSYNC脉冲方向,0表示一般,1表示反向;
9INVVD1位,决定VD (video data)脉冲方向,0表示一般,1表示VD是反向的;
10INVVDEN1位,TFT)决定VDE(数据使能)信号方向,0表示一般,1表示反向;
11INVPWREN1位,决定PWREN信号方向,0表示一般,1表示反向;
12INVLEND1位,(TFT)决定LEND信号方向,0表示一般,1表示反向;
13PWREN1位,决定输出信号使能,表示信号关闭,1表示信号开启;
14ENLEND1位,(TFT)决定LEND输出信号使能,0表示信号关闭,1表示信号开启;
15BSWP1位,字节/半字节交换控制位,决定84BPP模式下大小端,0表示每32位数据中1表示高位为高像素;
16HWSWP1位,半字(2Bytes)交换控制位,决定16BPP模式下大小端,0表示每32位数据中高位为低像素,1表示高位为高像素。
 

(LCDSADDR1) Frame Buffer Start Address 1 Register

 
 
1LCDBANK9位,决定主存中帧起始地址右移22位后的值(段地址),在画面滚动时,其值不变,帧缓冲区必须有4MB的空间,以保证该值能不变,因此在使用malloc()函数时要留心;
2LCDBASEU21位,决定显示界面的起始地址右移1位后的值。
 

(LCDSADDR2) Frame Buffer Start Address 2 Register

 
 
1LCDBASEL21位,决定显示界面的结束地址右移1位后的值,同时,其值还可以由公式得到,LCDBASEL =LCDBASEU + (PAGEWIDTH+OFFSIZE)×(LINEVAL+1)
 
注意:当LCD控制器开启时,如果想滚动,用户可以通过改变LCDBASEULCDBASEL值实现。但是用户不能在帧结束时通过查LCDCON1寄存器中LINECNT的值来改变LCDBASEULCDBASEL的值。因为LCDFIFO取下一帧的数据优先级高于改变LCDBASEULCDBASEL值的优先级。
所以,如果改变了帧,那么预取的FIFO数据就不是最新的了,导致LCD的显示不正确。查询LINECNT前,中断要屏蔽掉。如果在读取了LINECNT之后就发生任何中断,则因执行中断服务程序而消耗的时间会导致读取的LINECNT值不是最新的。
 

(LCDSADDR3) Frame Buffer Start Address 3 Register

 
 
1OFFSIZE11位,虚拟屏幕的offsize值(用半字长表示),决定虚拟屏幕未显示部分的横向线长;
2PAGEWIDTH11位,虚拟屏幕显示部分宽度(用半字长表示),决定显示帧的宽度。
 
注意:当ENVID位(LCDCON1中)的为0时,PAGEWIDTHOFFSIZE的值必须改变。
 
Example 1.  LCD panel = 320×240, 16gray, single scan
Frame start address = 0x0c500000
Offset dot number = 2048 dots ( 512 half words )  //1 word=4 bytes
 
LINEVAL = 240-1 = 0xef   //垂直线长
PAGEWIDTH = 3204 / 16 = 0x50   //16灰阶,需4
OFFSIZE = 512 = 0x200
LCDBANK = 0x0c500000 >> 22 = 0x31
LCDBASEU = 0x100000 >> 1 = 0x80000   //不知道为什么从0x100000开始
LCDBASEL = 0x80000 + ( 0x50 + 0x200 ) x ( 0xef + 1 ) = 0xa2b00
 
Example 2.  LCD panel = 320×240, 16gray, dual scan
Frame start address = 0x0c500000
Offset dot number = 2048 dots ( 512 half words )
 
LINEVAL = 120-1 = 0x77      //双线扫描,需240/2
PAGEWIDTH = 320×4 / 16 = 0x50
OFFSIZE = 512 = 0x200
LCDBANK = 0x0c500000 >> 22 = 0x31
LCDBASEU = 0x100000 >> 1 = 0x80000
LCDBASEL = 0x80000 + ( 0x50 + 0x200 ) x ( 0x77 + 1 ) = 0x91580
 
Example 3.  LCD panel = 320×240, color, single scan
Frame start address = 0x0c500000
Offset dot number = 1024 dots ( 512 half words )
 
LINEVAL = 240-1 = 0xef
PAGEWIDTH = 320×8 / 16 = 0xa0
OFFSIZE = 512 = 0x200
LCDBANK = 0x0c500000 >> 22 = 0x31
LCDBASEU = 0x100000 >> 1 = 0x80000
LCDBASEL = 0x80000 + ( 0xa0 + 0x200 ) x ( 0xef + 1 ) = 0xa7600
 

(REDLUT) RED Lookup Table Register

 
 
1REDVAL32位,(STN8类红色组合,每类红色又各自分不同的16种。
 

(GREENLUT) GREEN Lookup Table Register

 
 
1GREENVAL32位,(STN8类绿色组合,每类绿色又各自分不同的16种。
 

(BLUELUT) BLUE Lookup Table Register

 
 
1BLUEVAL32位,(STN4类蓝色组合,每类蓝色又各自分不同的16种。
 
注意:0x14A0002C0x14A00048这段地址空间不能使用,是给测试模式使用的。
 

(DITHMODE) Dithering Mode Register

 
 
抖动模型寄存器,For STN,复位值为0,用户使用时,可设0x12210(可从样本程序库中查找该寄存器的最新值)
 
 
1DITHMODE19位,使用0x000000x12210其中一个值。
 

(TPAL) Temp Palette Register

 
 
    临时调色板寄存器,For TFT,此寄存器的值将是下一帧所有的图像数据。
 
 
1TPALEN1位,临时调色板寄存器使能开关,0表示关闭,1表示开启;
2TPALVAL24位,决定临时调色板颜色值,[23:16]红色,[15:8]绿色,[7:0]蓝色。
 

(LCDINTPND) LCD Interrupt Pending Register

 
 
    中断未决寄存器。
 
 
1.INT_FrSynLCD帧同步中断未决位,
2.INT_FiCnt:1位,LCD FIFO中断未决位,0表示没中断请求,1表示有(当FIFO达到触发电平时)
 

(LCDSRCPND) LCD Source Pending Register

 
 
    中断源未决寄存器
 
 
1.INT_FrSyn:1位,LCD帧同步中断源未决位,0表示没中断请求,1表示有;
2.INT_FiCnt:1位,LCD FIFO中断源未决位,0表示没中断请求,1表示有(当FIFO达到触发电平时)
 

(LCDINTMSK) LCD Interrupt Mask Register
 

    中断屏蔽寄存器。
 
 
1.FIWSEL:1位,决定LCD FIFO触发电平,0表示4 words,1表示8 words;
2.INT_FrSyn:1位,
3.INT_FiCnt:1位,决定LCD FIFO中断是否屏蔽,0表示不屏蔽,1表示屏蔽;
 

(TCONSEL) TCON Control Register
 

    用于控制LPC3600.LCC3600模块。
 
 
1.LCC_TEST2
2.LCC_TEST1:1位,LCC3600测试模式1(只读);
3.LCC_SEL5:1位,选择STV的两种状态;
4.LCC_SEL4:1位,
5.LCC_SEL3:1位,选择CPV信号引脚1;
6.LCC_SEL2:1位,选择 线/点(line/dot)转化;
7.LCC_SEL1:1位,选择DG/Normal模式;
8.LCC_EN:1位,决定LCC3600使能,0表示关闭,1表示开启;
9.CPV_SEL:1位,选择CPV脉冲低宽度;
10.MODE_SEL:1位,选择DE/Sync模式,0表示,1表示DE模式;
11.RES_SEL:1位,选择输出决定类型,0表示320*240,1表示240*320;
12.LPC_EN:1位,决定LPC3600使能,0表示关闭,1表示开启。
 
注意:1.如果不是使用三星LPC3600/LCC3600 LCD,必须禁止LPC3600/LCC3600模式;
      2. LPC_EN 和 LCC_EN不能同时使能,在同一时刻,只能打开一个。
 
 

STN寄存器设置

CLKVAL值决定了VCLK的频率,且该值必须比数据传输速率大。通过以LCD控制器的VD端口的数据传输速率来确定CLKVAL寄存器的值。
数据传输速率计算公式:
Data transmission rate = HS VS × FR × MV
— HS: Horizontal LCD size   //LCD水平长度
— VS: Vertical LCD size     //LCD垂直长度
— FR: Frame rate            //帧频率
— MV: Mode dependent value  //由模式确定的值,见下图
MV Value for Each Display Mode
 
 
Example 1:
160160,4-level gray,80 frame/sec,4-bit single scan display,
HCLK frequency is 60 MHz WLH = 1,WDLY = 1。
 
Data transmission rate = 160×160×80×1/4 = 512 kHz
CLKVAL = 58,VCLK = 517KHz
HOZVAL = 39,LINEVAL = 159
 
LINEBLANK =10
 
LCDBASEL = LCDBASEU + 3200
 
 
注意:系统负荷越大,CPU运行得越少。
 
Example 2 (Virtual screen register): //虚拟显示的寄存器
4-level gray,Virtual screen size = 1024×1024,LCD size = 320×240,
LCDBASEU = 0x64,4-bit dual scan。
 
1 halfword = 8 pixels (4-level gray),
Virtual screen 1 line = 128 halfword = 1024 pixels,
LCD 1 line = 320 pixels = 40 halfword,
OFFSIZE = 128 - 40 = 88 = 0x58,
PAGEWIDTH = 40 = 0x28
 
LCDBASEL = LCDBASEU + (PAGEWIDTH + OFFSIZE) × (LINEVAL +1)
= 100 + (40 +88) ×120 = 0x3C64
 
 

灰阶选择

本芯片LCD控制器通过使用FRC(帧速率控制)产生16灰阶,FRC的不同参数会引起意想不到的灰阶模式。一些不希望产生的灰阶模式可能会在高响应速度或低帧速率的LCD上。
因为LCD自身的参数决定了灰阶质量,用户必须在使用的LCD上观察所有的灰阶来选择合适的灰阶。
通过以下过程,选择优质的灰阶:
1.从三星那里获得最新抖动模式寄存器(dithering pattern register)的值;
2.在LCD上显示16灰度条;
3.改变一个最优的帧速率值;
4.改变VM的交替时间已达到最优;
5.通过显示在使用的LCD上的16灰度条,选择一个最佳的灰阶;
6.使用最优灰阶。
 
 

LCD 刷新总线带宽的计算

    为了达到LCD无闪烁效果,必须考虑LCD显示尺寸、bpp、帧速率、内存总线宽度、内存类型等因素,最终得到LCD刷新总线带宽。
LCD Data Rate(Byte/s)=                     //LCD数据传输速率
bpp×(Horizontal display size)(Vertical display size)×(Frame rate)/8
LCD Count(Times/s)=              //LCD DMA 突发传输频率,单位Hz
 LCD Data Rate(Byte/s)/16(Byte);  LCD DMA using 4words(16Byte) burst
 
 
    数据包(Pdma)是指LCD DMA分段获取数据,也就是说数据包的值为图像数据的4次突发的值(4字长),因此数据包由内存类型和内存设置决定。
因此,LCD系统的负荷由LCD DMA突发传输频率(LCD DMA Burst Count)和数据包(Pdma)决定。即:
LCD System Load = LCD DMA Burst Count Pdma
 
 
Example 3:
640×480, 8bpp, 60 frame/sec, 16-bit data bus width,
SDRAM (Trp=2HCLK / Trcd=2HCLK / CL=2HCLK) and HCLK frequency is 60 MHz
 
LCD Data Rate = 8×640×480×60 / 8 = 18.432Mbyte/s
LCD DMA Burst Count = 18.432 / 16 = 1.152M/s
Pdma = (Trp+Trcd+CL+(2×4)+1) ×(1/60MHz) = 0.250ms
LCD System Load = 1.152×250 = 0.288
 
System Bus Occupation Rate = (0.288/1)×100 = 28.8%
 
 

TFT寄存器设置

    寄存器CLKVAL的值决定了VCLK频率和帧速率。
Frame Rate = 1 / {   [  (VSPW+1) + (VBPD+1) + (LIINEVAL+1) + (VFPD+1)  ]
× [  (HSPW+1) + (HBPD+1) + (HFPD+1) + (HOZVAL+1)  ]
[  2 × ( CLKVAL+1 ) / ( HCLK )  ]  }
 
应用时,系统时序应避免由内存带宽竞争引起LCD控制器的FIFO出现欠载运行的状况。
 
Example 4:
TFT Resolution: 240×240,
VSPW =2, VBPD =14, LINEVAL = 239, VFPD =4
HSPW =25, HBPD =15, HOZVAL = 239, HFPD =1
CLKVAL = 5
HCLK = 60 M (hz)
 
以下参数必须参考LCD尺寸和驱动规格:
VSPW, VBPD, LINEVAL, VFPD, HSPW, HBPD, HOZVAL, and HFPD
如果目标帧速率在60-70Hz,那么CLKVAL必须是5。
因此帧速率为67Hz。
阅读(1017) | 评论(0) | 转发(0) |
0

上一篇:Linux/stat.h 读写权限

下一篇:proc函数

给主人留下些什么吧!~~