ARM--LCD控制原理笔记

目录

 

LCD接口介绍:

概念:

2440LCD接口原理图解析: 

LCD显示图像原理:

扫描:

LCD时序:

控制信号:

时序图:

时序图时间参数:

LCD 控制器

 


LCD接口介绍:

概念:

ARM--LCD控制原理笔记_第1张图片

 

ARM--LCD控制原理笔记_第2张图片

 

 

2440LCD接口原理图解析: 

ARM--LCD控制原理笔记_第3张图片

①是时钟信号,每来一个CLK,电子枪就移动一个像素;

②是用来传输颜色数据;

③是垂直方向同步信号,FRAME(帧);

④是水平方向同步信号,LINE(行);

LCD显示图像原理:

扫描:

想象有一个电子枪,一边移动,一边发出各种颜色的光。这里有很多细节问题,我们一个一个的梳理。

 

  • 1. 电子枪是如何移动的?

答:有一条CLK时钟线与LCD相连,每发出一次CLK(高低电平),电子枪就移动一个像素。

  • 2. 颜色如何确定?

答:由连接LCD的三组线:R(Red)、G(Green)、B(Blue)确定。

  • 3. 电子枪如何得知应跳到下一行?

答:有一条HSYNC信号线与LCD相连,每发出一次脉冲(高低电平),电子枪就跳到下一行。

  • 4. 电子枪如何得知应跳到原点?

答:有一条VSYNC信号线与LCD相连,每发出一次脉冲(高低电平),电子枪就跳到原点。

  • 5. RGB线上的数据从何而来?

答:内存里面划分一块显存(FrameBuffer),里面存放了要显示的数据,LCD控制器从里面将数据读出来,通过RGB三组线传给电子枪,电子枪再依次打到显示屏上。

  • 6. 前面的信号由谁发给LCD?

答:有S3C2440里面的LCD控制器来控制发出信号。

 

总结:

1、cpu初始化一块显存显存(FrameBuffer)  ,

2、建立 显存(FrameBuffer)和LCD控制器的关系

3、LCD控制器向LCD驱动器发出控制信号和显示的数据

4、LCD驱动器给显示面板发送模拟信号控制面板在何处显示什么颜色的点

 

LCD时序:

控制信号:

  • Vsync      帧同步信号,一帧数据就是填充一个屏幕画面的数据,相当于一幅图片,Vsync 一个脉冲代表一帧,一帧(一个画面)显示完毕后,接着发出Vsync  同步信号,扫描枪头回到顶端位置,准备显示下一帧数据
  • Hsync     行同步信号,一个Hsync脉冲代表显示一行数据,一行像素显示完毕后发出下一行Hsync控制信号,接着回到下一行开始重新开始扫描
  • CLK          在有效的时钟内,每个像素点就是一个时钟脉冲

时序图:

ARM--LCD控制原理笔记_第4张图片

时序图时间参数:

  • thp  (Horizontal Pulse width ) 水平同步信号脉冲宽度:  这个时间不能太短,太短电子枪可能识别不到
  • thb   HBP(Horizontal Back Porch)水平后沿    在每行或每列的象素数据开始输出时要插入的象 素时钟周期数  也就是说每显示完一行像素点,要插入几个等待周期,等待下一行像素点开始  
  • thd   Horizontal display period   水平显示周期,就是显示一行像素点的时间
  • thf    HFP(Horizontal Front Porch )   水平前沿:在每行或每列的象素结束到LCD 行时钟输出脉冲 之间的象素时钟数, 就是说,一行显示完了,要插入几个等待周期,让枪头回到下一行开始的位置。
  •  
  • tvp   Vertical Pulse width
  • tvb   VBP(Vertical Back Porch)  垂直后沿:在垂直同步周期之后帧开头时的无效行数    一帧开始的准备阶段的等待周期时间
  • tvd  Vertical display period    显示一帧的时间    
  • tvf   VFP(Vertical Front Porch)垂直前沿:本帧数据输出结束到下一帧垂直同步周期开始之 前的无效行数 HPW(HSYNC plus width)行同步脉宽 单位:像素时钟周期

ARM--LCD控制原理笔记_第5张图片

当发出一个HSYNC信号后,电子枪就会从最右边花费HBP时长移动到最左边,等到了最右边后,等待HFP时长HSYNC信号才回来。因此,HBP和HFP分别决定了左边和右边的黑框。

同理,当发出一个VSYNC信号后,电子枪就会从最下边花费VBP时长移动到最上边,等到了最下边后,等待VFP时长VSYNC信号才回来。因此,VBP和VFP分别决定了上边和下边的黑框。 中间灰色区域才是有效显示区域。


再来解决最后一个问题:每个像素再FrameBuffer中,占据多少位BPP(Bits Per Pixels)? 前面的LCD引脚功能图里,R0-R7、G0-G7、B0-B7,每个像素是占据3*8=24位的,即硬件上LCD的BPP是确定的。

虽然LCD上的引脚是固定的,但我们使用的时候,可以根据实际情况进行取舍,比如我们的JZ2440使用的是16BPP,因此LCD只需要R0-R4、G0-G5、B0-B4与SOC相连,5+6+5=16BPP,每个像素就只占据16位数据

 

LCD 控制器

ARM--LCD控制原理笔记_第6张图片

[27:18]为只读数据位,不需要设置;

[17:8]用于设置CLKVAL(像素时钟频率),我们使用的是TFT屏,因此采用的公式是VCLK = HCLK / [(CLKVAL+1) x 2],其中HCLK为100M。LCD手册里面Clock cycle的要求范围为5-12MHz即可,即假设VCLK=9,根据公式9=100/[(CLKVAL+1)x2],算出CLKVAL≈4.5=5。VCLK为plcdparams->time_seq.vclk,则clkval = HCLK/plcdparams->time_seq.vclk/2-1+0.5;

[7]不用管,默认即可;

[6:5]TFT lcd配置为0b11;

[4:1]设置bpp模式,根据传入的plcdparams->bpp配置为相应的数值;

[0]LCD输出使能,先暂时关闭不输出;

	/* [17:8]: clkval, vclk = HCLK / [(CLKVAL+1) x 2]
	 *                   9   = 100M /[(CLKVAL+1) x 2], clkval = 4.5 = 5
	 *                 CLKVAL = 100/vclk/2-1
	 * [6:5]: 0b11, tft lcd
	 * [4:1]: bpp mode
	 * [0]  : LCD video output and the logic enable/disable
	 */
	int clkval = (float)HCLK/plcdparams->time_seq.vclk/2-1+0.5;
	//int clkval = 5;
	int bppmode = plcdparams->bpp == 8  ? 0xb :\
				  plcdparams->bpp == 16 ? 0xc :\
				  0xd;  /* 0xd: 24,32bpp */
	LCDCON1 = (clkval<<8) | (3<<5) | (bppmode<<1) ;

ARM--LCD控制原理笔记_第7张图片

注意:  VBPD    = tvb - 1 这个要对比两个数据手册

ARM--LCD控制原理笔记_第8张图片

对比2440LCD部分时序图和LCD时序图,得出两者之间关系,以后就可通过plcdparams传参数进来设置相关寄存器。

[31:24] : VBPD = tvb - 1

[23:14] : LINEVAL = line - 1

[13:6]  : VFPD = tvf - 1

[5:0]  : VSPW = tvp - 1

	/* [31:24] : VBPD    = tvb - 1
	 * [23:14] : LINEVAL = line - 1
	 * [13:6]  : VFPD    = tvf - 1
	 * [5:0]   : VSPW    = tvp - 1
	 */
	LCDCON2 = 	((plcdparams->time_seq.tvb - 1)<<24) | \
	            ((plcdparams->yres - 1)<<14)         | \
				((plcdparams->time_seq.tvf - 1)<<6)  | \
				((plcdparams->time_seq.tvp - 1)<<0);

ARM--LCD控制原理笔记_第9张图片

[25:19] : HBPD = thb - 1

[18:8]  : HOZVAL = 列 - 1

[7:0]  : HFPD = thf - 1

/* [25:19] : HBPD	 = thb - 1
	 * [18:8]  : HOZVAL  = 列 - 1
	 * [7:0]   : HFPD	 = thf - 1
	 */
	LCDCON3 =	((plcdparams->time_seq.thb - 1)<<19) | \
				((plcdparams->xres - 1)<<8)		      | \
				((plcdparams->time_seq.thf - 1)<<0);

ARM--LCD控制原理笔记_第10张图片

HSPW = thp - 1


	/* 
	 * [7:0]   : HSPW	 = thp - 1
	 */
	LCDCON4 =	((plcdparams->time_seq.thp - 1)<<0);

ARM--LCD控制原理笔记_第11张图片

脚极性, 设置16bpp, 设置内存中象素存放的格式

[12] : BPP24BL

[11] : FRM565, 1-565

[10] : INVVCLK, 0 = The video data is fetched at VCLK falling edge

[9]  : HSYNC是否反转

[8]  : VSYNC是否反转

[7]  : INVVD, rgb是否反转

[6]  : INVVDEN

[5]  : INVPWREN

[4]  : INVLEND

[3]  : PWREN, LCD_PWREN output signal enable/disable

[2]  : ENLEND

[1]  : BSWP

[0]  : HWSWP

    /* 用来设置引脚极性, 设置16bpp, 设置内存中象素存放的格式
     * [12] : BPP24BL
	 * [11] : FRM565, 1-565
	 * [10] : INVVCLK, 0 = The video data is fetched at VCLK falling edge
	 * [9]  : HSYNC是否反转
	 * [8]  : VSYNC是否反转
	 * [7]  : INVVD, rgb是否反转
	 * [6]  : INVVDEN
	 * [5]  : INVPWREN
	 * [4]  : INVLEND
	 * [3]  : PWREN, LCD_PWREN output signal enable/disable
	 * [2]  : ENLEND
	 * [1]  : BSWP
	 * [0]  : HWSWP
	 */

	pixelplace = plcdparams->bpp == 32 ? (0) : \
	             plcdparams->bpp == 16 ? (1) : \
	             (1<<1);  /* 8bpp */
	
	LCDCON5 = (plcdparams->pins_pol.vclk<<10) |\
	          (plcdparams->pins_pol.rgb<<7)   |\
	          (plcdparams->pins_pol.hsync<<9) |\
	          (plcdparams->pins_pol.vsync<<8) |\
 			  (plcdparams->pins_pol.de<<6)    |\
			  (plcdparams->pins_pol.pwren<<5) |\
			  (1<<11) | pixelplace;

ARM--LCD控制原理笔记_第12张图片

ARM--LCD控制原理笔记_第13张图片

[29:21] : LCDBANK, A[30:22] of fb

[20:0]  : LCDBASEU, A[21:1] of fb

即用[29:0]表示起始地址的[30:1]。

[20:0] : LCDBASEL, A[21:1] of end addr

即framebuffer的结束地址。

专业术语(英文解释):

 

horizontal                         水平

vertical                             垂直

pixels                               像素

 panel                                面板

 pallet                              调色

 non-palletized                  无调色

dedicated                        专用的

 generate                        发生

register sets                     寄存器组

intervention.                   干涉,介入

 data flow                          数据流

 is present in                 存在于

 partially                          部分

arbitrator                           仲裁

successive                      连续的

 In case of                       万一,假如

burst memory transfer mode       突发传输模式

without allowing                不允许

mastership                         控制权

Dummy Bit                           无效位

 toggle rate                           反转效率

indicate                            保存,指示表明           

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux驱动开发,stm32和ARM)