S3C6410LCD控制器

S3C6410     LCD 控制器


1、LCD的种类。 LCD(Liquid Crystal Display),即液晶显示器,是一种采用了液晶控制透光度技术来实现的彩色的显示器。LCD有多种类型,如STN、TFT、LTPS TFT、OLED等。

  • STN(Super Twisted Nematic,超扭曲向列)
  • TFT(Thin Film Transistor,薄膜晶体管)
  • LTPS(Low Temperature Polycrystalline Silicon,低温多晶硅)由TFT衍生的新一代技术产品,可以获得更高的分辨率和更丰富的色彩。
  • OLED(Organic Light Emitting Diode,有机发光二极管)

2、LCD的接口

CPU或显卡发出的图像数据是TTL信号。LCD本身接收的也是TTL信号。由于TTL信号在高速率的长距离传输时性能不佳,抗干扰能力也比较差,后来又提出了多种接口,比如LVDS,TDMS,DVI,和DEP等。他们实际上只是将CPU或显卡发出的TTL信号编码成各种信号以便传输,在LCD那边将接收到的信号经行解码得到TTL信号。

TFT LCD的TTL信号 有24跟数据线,对应像素值中的每一位。
  • VSYNC: 垂直同步信号
  • HSYNC: 水平同步信号
  • HCLK: 像素时钟信号
  • VD[0:23]: 数据信号
  • LEND: 行结束信号(这个不是必须的)
  • PWREN: 电源开关信号

3、S3C6410 LCD控制器

结构框图:

                                     

DISPLAY controller supports 4 types of display device. 

  • One type is the conventional RGB-interface, which uses RGB data, Vertical/horizontal sync, data valid signal and data sync clock. 
  • The Second type is I80 Interface which uses address, data, chip select, read/write control and register/status indicating signal. In this type of LCD driver it has a frame buffer and has the function of self-refresh, therefore DISPLAY controller updates one still image by writing only one time to the LCD. 
  • The Third type is ITU-R BT.601 interface. ITU-R BT.601 interface uses YUV data, Vertical/horizontal sync, optional Field signal, data valid signal and data sync clock.
  • The fourth type is FIFO interface with TV Encoder.

4、显示数据的组织格式

    对于屏幕上的一整幅图像,它的数据格式是如何组织的呢?无论是CRT显示器还是LCD显示器,他们都有相同的概念。

    一副图像被称为一帧,每帧有多行组成,每行由多个像素组成,每个像素的颜色使用若干位的数据来表示。对于单色显示器,每个像素使用1位来表示,称为1BPP;对于256色显示器,每个像素使用8位来表示,称为8BPP;

    显示器从屏幕的左上方开始,一行一行地取出每个像素的数据并显示出来,当显示到一行的最右边时,跳到下一行的最左边开始显示下一行;当显示完所有行后,跳到左上方开始下一帧。显示器沿着“Z”字行的路线经行扫描,使用HSYNC,VSYNC信号来控制扫描路线的跳转,HSYNC表示“是跳到最左边的时候了”,VSYNC表示“是跳到最上边的时候了”。

    注:在工作中的显示器上,可以在四周看见黑色的边框。上方的黑框是因为当发出 VSYNC信号时,需要经过若干行之后第一行数据才有效;下方的黑框是因为现实完所有行的数据时,显示器还没有扫描到最下边,这是数据已经无效;左边的黑框是因为当发出HSYNC信号时,需要经过若干像素之后第一列数据才有效;右边的黑框是因为现实完一行的数据时,显示器还没扫描到最右边,这时数据已经无效。

                                                              

                        有效数据的行数、列数,它与VSYNC,HSYNC信号之间的距离等 都是可以设置的,这有显卡来完成。

    

    5、LCD控制器的操作


                                                         

    时序图中各信号的时间参考都可以在LCD控制寄存器中设置,VCLK作为时序图的基准信号,它的频率可以如下计算:


    将VSYNC、HSYNC、VCLK等信号的时间参数设置好之后,并将帧内存地址告诉LCD控制器,它既可自动地发起DMA传输从帧内存中得到图像数据,最终在上述信号的控制下出现在数据总线上。


The following registers are used to configure DISPLAY controller:
1. MOFPCON: SEL_BYPASS[3] value @ 0x7410800C must be set as ‘0’(normal mode) instead of ‘1’(by-pass mode).


2. SPCON: LCD_SEL[1:0] value @ 0x7F0081A0 must be set as ‘00’ to use Host I/F Style or as ‘01’ to use RGB I/F Style

3. VIDCON0(Video control 0 register): configure Video output format and display enable/disable.

4. VIDCON1(Video control 1 register): RGB I/F control signal.

5. I80IFCONx: i80-system I/F control signal.

6. ITUIFCON0 : ITU (BT.601) Interface Control

7. VIDTCONx(Video time control 0 register): configure Video output Timing and determine the size of display.

8. WINCONx(Window control 0 register): each window format setting

9. VIDOSDxA, VIDOSDxB(Video Window 0’s position control register): Window position setting

10. VIDOSDxC(Video Window 0’s size control register): alpha value setting

11. VIDWxxADDx(Window 2’s buffer start address register): source image address setting

12. WxKEYCONx(Color key control register): Color key value register

13. WINxMAP(Window color control): window color control

14. WPALCON(Window Palette control register): Palette controls register

15. WxPDATAxx: Window Palette Data of the each Index.


#include "common.h"
#include "regs.h"

/*定义三个初始化函数
	1.初始化GPI和GPJ为LCD作用
	2.初始化window0
		每个液晶屏支持五层的window*/
void gpio_init(void);
void common_init(void);
void window0_init(void);	

void lcd_init(void)
{
	gpio_init();
	common_init();
	window0_init();	
}

void gpio_init(void)
{
	GPICON = 0xaaaaaaaa;
	GPJCON = 0xaaaaaa;
	/*给LCD上电,把背光灯打开*/
	/*参考S3C6410手册和母版电路图*/
	GPFCON &= ~(3 << 28);
	GPFCON |= 1 << 28;
	GPFDAT |= 1 << 14;
	GPECON &= ~(0xf);
	GPECON |= 1;
	GPEDAT |= 1;
}

void common_init(void)
{
	/*配置方法参考S3C6410手册P491*/
	MIFPCON &= ~(1 << 3);
	SPCON &= ~3;
	SPCON |= 1;

	/*配置发送数据时钟,并打开DISPLAYC,参考S3C6410手册P495*/
	VIDCON0 = (14 << 6) | (1 << 4) | (3 << 0);
	
	/*配置时钟是否翻转,参考S3C6410手册P495*/
	/*参考S3C6410手册P485*/
	/*参考日立LCD手册P14*/
	/* HSYNC高电平有效, VSYNC高电平有效, */
	VIDCON1 = (1 << 6) | (1 << 5);
	
	/*配置时序,参考S3C6410手册P497和P485,日立LCD手册P14*/
	VIDTCON0 = (1 << 16) | (1 << 8) | (9 << 0);
	VIDTCON1 = (1 << 16) | (1 << 8) | (40 << 0);
	
	/*配置LCD的分辨率大小,参考S3C6410手册P498*/
	VIDTCON2 = (271 << 11) | (479);
}

void window0_init(void)
{
#ifdef BPP565
	/*注意:这两个寄存器与图片格式相关*/
	/*配置输出数据格式和传送方法以并使能数据发送*/
	/*参考S3C6410手册P499*/
	WINCON0 = (1 << 16) | (5 << 2) | (1 << 0);

	/*设置一屏的数据量,参考S3C6410手册P506*/
	VIDOSD0C = (480 * 272) >> 1;
#else
	WINCON0 = (0xb << 2) | (1 << 0);
	VIDOSD0C = 480 * 272;
#endif
	/*设置LCD的最大和最小坐标,参考S3C6410手册P506*/
	VIDOSD0A = 0;
	VIDOSD0B = (479 << 11) | (271 << 0);

	/*设置frambuf的首地址*/
	VIDW00ADD0B0 = FRAM_BUFF;
}

/*画点函数:
 	在LCD上画一个点其实就是在这个坐标对应的frambuf内存空间中
	写入一个合适的值,x代表横坐标,y代表列坐标,后三个参数代表
	RGB三原色,可根据需要进行配置*/
void draw_point(int x, int y, int red, int green, int blue)
{
	/*注意:
 		565格式和888格式的区别:
			一个word的空间可以存放两个565格式的像素点数据
			一个word的空间可以存放一个888格式的像素点数据*/
#ifdef BPP565
	short *buf = (void *)FRAM_BUFF;
	*(buf + y * 480 + x) = (red << 11) | (green << 5) | (blue << 0);
#else
	int *buf = (void *)FRAM_BUFF;
	*(buf + y * 480 + x) = (red << 16) | (green << 8) | (blue << 0);
#endif
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值