1.     概述

S3C2440对LCD的支持还是很强大的,有广度有深度,这里只简单学一种,后续有精力再实践各种模式。

本篇从显示模式、显示时序、硬件连接、控制器寄存器设置等几个方面进行展开。

2.     LCD显示模式

如前面所述,S3C2440支持多种灰度和彩色显示模式。这里只介绍16BPP(bit per pixel),即每个像素点用16bit,即占用2个字节。16BPP又有2种显示格式:5:6:5格式和5:5:5:1格式。

这里只以565格式为例。从上图可清楚的明白RGB三色对应的各位的对应关系。

3.     LCD显示时序

LCD采用”之”字扫描,从左上角开始,将显示像素数据一行一行的显示到屏幕上,对于4.3寸屏,分辨率为480*272,所以需要扫描272行,每行480个像素数据,并且是在每一个VCLK像素时钟内读取这个像素数据。实践硬件扫描时,需要有VSYNC垂直同步信号,HSYNC水平同步信号,(可能还有消隐信号),所以实际扫描数要大于480*272。见下图:

水平同步信号的脉宽。(单位:VCLK个)

HSPW+1: 是HSYNC水平同步信号的脉宽。(单位:VCLK个)
HBPD+1: 是HSYNC之后还要经过(HBPD+1)个VCKL才是有效数据。(单位:VCLK个)
HOZVAL+1: 是有效数据,对于4.3寸屏就是480。(单位:VCLK个)
HFPD+1: 是一行末的(HFPD+1)个无效数据。(单位:VCLK个)VSPW+1: 是VSYNC垂直同步信号的脉宽。(单位:1行扫描周期)
VBPD+1: 是VSYNC之后还要经过(VBPD+1)个行扫描周期才是有效数据。(单位:1行扫描周期)
1Line: 是有效数据,对于4.3寸屏就是272行。(单位:1行扫描周期)
VFPD+1: 是一帧末的(VFPD+1)个无效数据。(单位:1行扫描周期)

4.     硬件连接

S3C2440数据手册中LCD控制器结构描述如下图所示。

TQ2440的40Pin的LCD接口如下图所示。

TQ2440学习板上的4.3寸LCD屏是国显4.3寸数字液晶屏 KD43G18-40NB-A1,但是配套资料给出的LCD资料是” WXCAT43-TG6#001_V1.0.pdf”,在网上也没有找到KD43G18-40NB-A1的datasheet。” WXCAT43-TG6#001_V1.0.pdf”中接口规范如下图。

结合上面3个图,40个引脚说明如下:

VLED – Pin1, Pin2 接背光源
GPC[8:15] – VD[0:7]  Pin3_Pin10
GPD[0:15] – VD[8:23]  Pin12_Pin19, Pin21_Pin28
GPG4 – LCD_POWER  Pin30
GPE15 – I2CSDA  Pin31
GPE14 – I2CSCL  Pin32
GPC4 – VM(VDEN)  Pin33
GPC3 – VFRAME(VSYNC)  Pin34
GPC2 – VLINE(HYSNC)  Pin35
GPC1 – VCLK  Pin36
AIN6 – TSXM  Pin37
AIN7 – TSXP  Pin38
AIN4 – TSYM  Pin39
AIN5 – TSYP  Pin40
GND – Pin11, Pin20, Pin29

说明:

a.关于LCD供电

这里GPG4接LCD_POWER,可以控制LCD的开关,低电平将关闭LCD。

b.AIN4567,是与ADC功能共用的引脚,用于控制触摸功能。

c.GPIO的引脚功能。如下图。

d.关于GPC0,即LEND,行结束信号。查遍了TQ2440_V2核心板原理图和TQ2440底板原理图,没有看到这个引脚,所以确认这个引脚根本没有引出。实际编程也用不要这个引脚。

5.     控制器寄存器设置

简单编程只需要设置8个寄存器:

LCDCON1 – LCDCON5 : 功能模式的选择和设置
LCDADDR1 – LCDADDR3 : 设置图像帧数据地址的。

下面均已4.3寸屏, 480*272分辨率进行说明设置,先给出” WXCAT43-TG6#001_V1.0.pdf”中的相关数据如下。

由datasheet时序关系图可知,各参数对应关系如下:

thf = HFPD+1 , => HFPD=1
thp = HSPW+1, => HSPW=40
thb = HBPD+1, => HBPD=1  注意: thp+thb=43
tvf = VFPD+1, => VFPD=1
tvp = VSPW+1, => VSPW=9
tvb = VBPD+1, => VBPD=1  注意:tvp+tvb=12

LCDCON1控制寄存器1

CLKVAL: 由datasheet可知VCLK的典型值为9MHz,HCLK在这里启动程序中设置为100MHz,因此:  9=100/[(CLKVAL+1)*2]=>CLKVAL=4.55555,取4 。

PNRMODE: 取值3,TFT LCD面板

BPPMODE: 取值12,16BPP

ENVID: 使能信号,取值1。

其它取默认值即可。因此, LCDCON1 = (4<<8)|(3<<5)|(12<<1)|(1<<0)

LINEVAL: (LINEVAL+1)即是LCD屏的垂直像素数,因此LINEVAL取值272-1=271

由上面计数可知,VBPD=1 , VFPD=1, VSPW=9

即: LCDCON2 = (1<<24)|(271<<14)|(1<<6)|(9<<0)

HOZVAL : (HOZVAL+1)即是LCD屏的水平像素数,因此HOZVAL取值480-1=479

由上面计数可知,HBPD=1 , HFPD=1

即: LCDCON3 = (1<<19)|(479<<8)|(1<<0)

LCDCON4 = (HSPW)

LCDCON5

FRM565 : 取值1

INVVCLK : VCLK有效的极性,还得上datasheet图,如下。所以,应该取0.

8位和9位,取值1

3位:LCD的电源信号是否有效,这个值最后再设置为1.

BSWP和HWSWP取值含义如下:

根据帧数据实际存储情况取值。本程序取值为 BSWP=0,HWSWP=1

按照如下设置:

#define LOW21BITS(n)     ((n) & 0x1fffff)  // To get lower 21bits

volatile unsigned short LCD_BUFFER[272][480];

#define LCD_XSIZE_TFT          (480)

#define LCD_YSIZE_TFT          (272)

rLCDSADDR1 = (((unsigned int)LCD_BUFFER >> 22) << 21) | LOW21BITS((unsigned int)LCD_BUFFER >> 1);

rLCDSADDR2 = LOW21BITS( ((unsigned int)LCD_BUFFER + (LCD_YSIZE_TFT * LCD_XSIZE_TFT *2) ) >> 1 );

rLCDSADDR3 = (0 << 11) | (LCD_XSIZE_TFT / 1);

这样,向LCD_BUFFER数组中写入颜色数据,就可以自动显示到TFT屏上了。

从上面可知,数据端口VD[0:23],共24个,推理可知正好可以传送RGB的24位像素数据。但是,我们这里的颜色数据是565模式,共16位,怎么传送的呢?S3C2440的datasheet中有说明,见下图:

这样我们就明白了,并且空余的GPIO引脚还可以用做其它用途,呵呵

6.     LCD显示程序

向帧数据数组中写入数据,LCD控制器将自动向显示屏显示,因此主程序只要向LCD_BUFFER中放置RGB数据即可。

本例,通过串口交互,按下字母n时,将分别循环显示绿,蓝,红。

可以向清屏函数参数代入不同颜色值即可。

00000 000000 11111 = 31     纯蓝
00000 111111 00000 = 2016   纯绿
11111 000000 00000 = 63488  纯红

清屏函数:

void Lcd_ClearScr( unsigned int c)
{unsigned int x,y ;for( y = 0 ; y < 272 ; y++ ){for( x = 0 ; x < 480 ; x++ ){LCD_BUFFER[y][x] = c ;}}
}

上述程序的完整代码:点击打开链接

S3C2440开发板裸机程序系列06—LCD控制器相关推荐

  1. S3C2440开发板裸机程序系列04—串口通信

    1.  S3C244串口概述 串口通讯一般要增加电平转换电路,原因是TTL/CMOS电平与RS232电平不一致: TTL/CMOS电平: CMOS电平: 常用的电平转换芯片是MAX3232. S3C2 ...

  2. 移植根文件系统到linux内核 s3c2440,u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统...

    三.根文件系统的制作 我们利用busybox来制作根文件系统 1.在下列网站下载busybox-1.15.0.tar.bz2 在当前目录下解压busybox tar -jxvf busybox-1.1 ...

  3. S3C2440 开发板实战(8):中断驱动

    中断驱动 一.查询方式 1.驱动程序 2.应用程序 3.结果测试 二.中断方式 1.中断内部函数实现方式(理论框架) 1.1. 异常处理结构 (1)设置异常向量表 (2)异常服务函数调用 1.2. 中 ...

  4. Linux系统中用DNW向ARM开发板下载程序

    在Linux下通过dnw来给开发板发送程序.包括驱动程序代码:secbulk.c,应用程序代码:dnw.c.只能运行在32位系统上,在64位系统上提示错误:DNW download Data size ...

  5. 联盛德W806-KIT开发板试用评测系列之二:ADC 功能使用与测试

    联盛德W806-KIT开发板试用评测系列 之二:ADC 功能使用与测试 作者:大信<QQ8125036> 今天着手对W806开发板ADC功能做测试,都知道ADC在物联网应用场景中常需要用到 ...

  6. 如何使用ST-LINK/V2给stm32开发板下载程序

    使用ST-LINK/V2给32开发板下载程序 链接:https://pan.baidu.com/s/1y_3q4Gf_mwOTM4Y_7lhSUg 提取码:1hyi 这个下载不是传送hex文件 而是 ...

  7. [ESP32/ESP8266专题笔记-2]ubuntu下 编写第一个 ESP32开发板-Micropython程序

    ESP32开发板-Micropython程序-亮灯 Micropython 操作ESP32 GPIO 点亮 LED 1 编写代码 前提条件,已知ESP32 GPIO引脚图 , 我这里是GPIO22 连 ...

  8. JZ2440 S3C2440 开发板开发步骤 之 uboot烧录 参数设置 裸机烧录 kernel烧录(openJTAG oflash usb 串口 dnw tftp nfs )

    刚接触JZ2440开发板的通过看视频就知道怎么下载程序和各个开发步骤,但是已经过了好几年,至少快三年了,有些东西也忘记得差不多了,今天稍用很快的速度快进方式看了下视频,回忆起了一点,但不全部看完,此处 ...

  9. u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统

    http://www.linuxidc.com/Linux/2012-09/70510.htm  来源:Linux社区  作者:赵春江 uboot最主要的功能就是能够引导内核启动.本文就介绍如何实现该 ...

最新文章

  1. Smali插桩打日志
  2. abap submit 的使用方法
  3. python声明编码作用_Python源代码中的编码声明字符串的作用
  4. Matlab神经网络十讲(8): 归一化、权重读取、(非)线性网络设计
  5. AC自动机模板(摘自刘汝佳紫书,无指针)
  6. 从 Demo 中学习 Solidity
  7. java学习(26):switch
  8. Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解...
  9. 浅析PCIe链路LTSSM状态机
  10. DW集训营数据库Mysql梳理[五]
  11. Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)
  12. excel表用office2007一保存就闪退
  13. wifi频率和zigbee干扰_设置Zigbee和wifi信道避免干扰的方法
  14. 61家第三方收单机构、247家商业银行、70家农商银行及119家村镇银行收单机构号
  15. 2.14 Whisper和Swarm
  16. 我和谷歌共同成长----Andriod(安卓)开发(持续更新)
  17. RFT学习--适用范围
  18. OBIEE接受外部参数
  19. Windows Server 2012R2 启用网络发现失败
  20. 每日新闻 | 人造肉销售火爆全食超市CEO却吐槽:不健康

热门文章

  1. Linux 通配符与三种引号
  2. A Gentle Introduction to Deep Learning for Graphs 图深度学习的温和介绍
  3. 关于linear-gradient在不同浏览器下的兼容差异
  4. 2020年烟花爆竹经营单位安全管理人员多少钱及烟花爆竹经营单位安全管理人员考试申请表
  5. 网络编程——分配给套接字的IP地址与端口号
  6. 给vue的页面添加背景图片
  7. python中数字怎么加冒号_Python数据类型中的“冒号“[::]——分片与步长操作示例...
  8. Win10 任务栏卡死问题解决
  9. The Infinity Fabric
  10. 宋劲彬《从C到C++》视频