micro2440 LCD裸机测试

最近几天在弄micro2440的LCD,遇到了诸多问题,今天将其记下来,顺便给想要写的同行们做个参考,少走写弯路。

首先说明一下我用的环境:ubuntu12.04 ,micro2440(可以用于mini2440)。

一.  准备工作

                 我们在写测试程序之前首先应该先了解一下s3c2440里面对于LCD这部分需要设置哪些寄存器。如果我们光看datasheet可能会不怎么看的懂,我在学的时候结合了伟东山的《嵌入式linux应用开发》和他的关于LCD的看控制的那个视频。其中还会涉及到一些关键词,可以结合lcd的资料来了解这些词语的意思。

                下面将涉及的关键词语列出来。               

                VSYNC: 帧同步信号,表示扫描1帧的开始,一帧也就是LCD显示的一个画面。

                HSYNC: 行同步信号,表示扫描1行的开始。

               VDEN:数据使能信号。

               VD[23:0] : LCD像素数据输出端口。

               VCLK:像素时钟信号。

               寄存器参数:

              VSPW:帧同步信号的脉宽,单位为1行(Line)的时间。

              VFPD: 帧同步信号的前肩,单位为1行(Line)的时间。

              VBPD: 帧同步信号的后肩,单位为1行(Line)的时间。

           HOZVAL: 屏宽,在micro2440中设置为320

           LINEVAL: 屏高,在micro2440中设置为240

              HBPD:行同步信号的后肩,单位为1VCLK的时间。

              HFPD:行同步信号的前肩,单位为1VCLK的时间。

              HSPW:行同步信号的脉宽,单位为1VCLK的时间

其中还有三个重要的东西,FCLK,HCLK,PCLK,这三个百度后知道的,

           FCLK为CPU核供给时钟信号,我们所说的cpu主频为200MHz,就是指的这个时钟信号,相应的,1/Fclk即为cpu时钟周期       

           HCLK为AHB的总线时钟,包括USB时钟

           PCLK:外部IO接口时钟,比如串口的时钟设置就是从PCLK来的,

我们在设置时,他们有这么个关系:PCLK:HCLK:FCLK=1:4:8,即如果FCLK(CPU主频)为400M,则HCLK=100M,PCLK=50M,当然他们还有其他的关系,比如还有1:3:6的,我们一般用前面那个

          在LCD扫描时,数据不是一开始就有效,而是要经过几个无效行后才到有效数据,这就是屏幕上出现黑边框的原因。

这是伟东山老师根据s3c的时序图分析出来的结果,可能不大看的清,可以去看看他的视频。之前我也是对那几个寄存器参数一直高不清楚。一直纠结要怎么取的问题。其实知道原理后,LCD的数据手册里面写清楚了。

知道这个基本知识后看看s3c2440中LCD的寄存器:

控制:



功能模块:

REGBANK 是LCD控制器的寄存器组

LCDCDMA 则是LCD控制器专用的DMA信道

TIMEGEN 和 LPC3600 负责产生 LCD屏所需要的控制时序

图像信息经VIDPRCS 从VD[23:0]发送给LCD屏

          每个寄存器的详细说明请看s3c2440的说明文档,http://download.csdn.net/download/zhangjun1992/7062227

          其中VSPW、VFPD、VBPD、HBPD、HFPD、HSPW、HOZVAL、LINEVAL可以看LCD数据手册中说明:


其对应的典型值是TYP一项,据图可以知道每一个的典型值为:

VSPW=2、VFPD=2、VBPD=2、HBPD=20、HFPD=10、HSPW=10;这个值是LCD数据手册推荐的值,但是在实际测试中最后没有用这个值,我是根据别人写的资料更改的:最后为:

                                       


程序设计步骤:

一、首先要看看我们板子上的LCD的接口电路图,看看是否需要设置电源使能这些。例如在mirco2440中lcd是没有电源使能控制的,它有lcd上自带的stc12e的51内核单片机完成了。这些在相应的电路图中能够看的出来。

二、初始化IO管脚,

IO管脚的设置请参考2440数据手册中GPIO部分。

三、设置LCD的频率

LCDDatasheet上一般会写有一个推荐的频率,比如我使用的屏幕推荐频率为6.4M,我需要通过一些计算选择一个合适的CLKVAL以产生这个频率:

对于TFT LCDS3C2440提供的VCLK的计算公式为:
VCLK = HCLK / ((CLKVAL+1)*2)

可以得出:
CLKVAL = HCLK / (VCLK * 2) - 1

我的HCLK100Mhz(CPU运行在400Mhz,CLKDIV_VAL设置为5PCLK:HCLK:FCLK = 1:4:8)VCLK使用屏幕推荐的6.4M,得到:
CLKVAL = 100000000 / (6400000 * 2) - 1 = 6.8

选择最接近的整数值7,写入LCDCON1:17-8

(VCLK其实就是根据每秒帧数*帧行数*行像素  计算出来的,帧行数和行像素需要包含空白数和同步数)

四、lcd寄存器的初始化:


其中的每个参数的意思,我会在程序中备注,可以看我上传的附件中的程序,在设置VCLKVLINEVFRAME等信号的极性(上升沿有效还是下降沿有效)时,需要对照LCDDatasheet一一确认,因为有的时候2440默认的是下降沿有效,但是有的lcd却是上升沿有效。在mirco2440中就是这样的。

五、禁止LPC3600/LCC3600模式!

如果不是使用三星LPC3600/LCC3600LCD,必须禁止LPC3600/LCC3600模式(写入0TCONSEL)

六、打开视频输出

ENVID设为1 (LCDCON1:0写入1)



这样大概就知道了lcd怎么写了。我把我写的程序做成在我的资源中,里面有一个“cankao”目录,是在arm之家论坛的好人共享的https://github.com/kangear/MINI2440-NO_OS/tree/master/14.lcd/debug_release。但是他的程序是在eclipse下编译的,而我的程序是linux下编写的,总共有两个,程序在实现数据显示有点不大一样,有一个是直接给出了显存的地址,而另外一个则是定义一个二维数组,将二维数组的首地址赋给显存首地址。boot.bin是我已经编译好的文件,将它下载到nor中运行,不要下载到nand中。下载程序

参考:http://blog.chinaunix.net/uid-21410064-id-167700.html

http://blog.csdn.net/wzw12315/article/details/6223189



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值