- 前言
上篇介绍了LCD控制器的基本特性, 接下来谈一下寄存器的配置, lCD的寄存器配置主要涉及到的寄存器有
1.引脚的配置
2.LCDCON1->LCDCON5配置各种信号
3.LCDSADDR1->LCDSADDR3 frameBuffer 地址之类的
由于配置寄存器挺多的内容,所以结合初始化代码来理解寄存器的配置 - 引脚的配置
GPIO与LCD控制器共用了一些信号线,为了让LCD控制器能正常使用这些信号线,所以必须配置一下
GPCUP = 0xffffffff; // 禁止内部上拉
GPCCON = 0xaaaaaaaa; // GPIO管脚用于VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND
GPDUP = 0xffffffff; // 禁止内部上拉
GPDCON = 0xaaaaaaaa; // GPIO管脚用于VD[23:8]
GPBCON &= ~(GPB0_MSK); // Power enable pin
GPBCON |= GPB0_out; //将GPB0设置为输出
GPBDAT &= ~(1<<0); // 输出0,关闭LCD背光(这个试一下就知道了)
- tips: 上面代码要注意一点是,对于GPB0引脚的配置,GPB0从电路图中可以看出对应的是LCD的背光电路供电的引脚,说到这里就要说明一下,使LCD的供电电路一共有3个
1.背光电路
2.LCD内部电源接口
3.LCD外部电源
从原理图可以看出,背光电路连接的GPIO是GPB0, LCD内部电源GPG4(注意这里不用外部电源,用GPIO控制比较方便) - LCDCON1(设置LCD的类型,显示方式)
1.CLKVAL 即通过前一篇可知是配置VCLK时钟频率,一个VCLK产生一个像素点,所以根据datasheet(前篇文章得知) 1/tc的Typ.值为9,所以根据公式: 9 = 100 / (CLKVAL +1)*2,综合得出结果: CLKVAL = 4
2.PNRMODE配置屏幕为TFT屏
3.BPPMODE配置屏幕显示方式为16Bpp,至于具体的比如RGB565还是RGB555需要进一步配置寄存器
4.ENVID: disable LCD控制器信号,让LCD控制器不要控制LCD屏幕,初期化时一般设置为disable - LCDCON2(配置垂直方向的时序参数)
看到上面这几个参数并不陌生,前文已经接近疯狂的讲解,这里不在赘述
VBPD取值: 1
LINEVAL取值: 271
VFPD取值:1
VSPW取值:9 - LCDCON3(水平方向的时序参数)
HBPD:1
HOZVAL:479
HFPD:1 - LCDCON4(水平方向的时序参数)
HSPW= 40 - LCDCON5(极性的初始化)
上一篇文章中提到过,实际的HSYNC,VSYNC信号的有效电平是通过LCD的dataSheet来确定的,通过前文已经分析得出, HSYNC VSYNC两个信号都是低脉冲有效,所以要配置电平的反转
FRM565:LCDCON1中配置了16Bpp的显示方式,此处配置了具体的显示格式RGB565
大白话就是前面配置了16位表示一个像素,此处配置了这16位那几位代表红,绿,蓝
INVVLINE: HSYNC信号需要极性需要反转(默认是高电平有效–>2440手册上记载)
INVVFRAME: VSYNC信号需要极性需要反转(默认是高电平有效–>2440手册上记载)
BSWP:配置大小端的,说明颜色在内存中的存储方式,这个手册上有说明,此处不一定配置正确,如果实验有问题可以修改此参数
PWREN:由于在上面我们提到过,LCD的电源可以是内接,可以是外接,2440内部电路中, GPG4与LCD的LCD_PWREN是共用的引脚,首先让GPG4成为LCD_PWREN,
然后让内部电源控制使能,即PWREN为1
INVPWREN控制电源有效信号是否反转,这个试一下就可以
最后我们打开LCD电源只需要
1.LCDCON1中的ENVID位置1
2.GPB0输出1打开背光电源
LCDCON1 |= 1; // ENVID ON
GPBDAT |= (1<<0); // Power on
- 有人会问, 不是还需要打开LCD电源吗?其实在打开步骤1中,已经打开了LCD电源
上面关于手册有说明,即使能了PWREN后,这个LCD_PWREN电源信号就与ENVID绑定了,ENVID使能后(高电平), 会自动拉高LCD_PWREN引脚(GPG4),即默认电源信号为高电平有效,但是可能实际LCD_PWREN引脚为电平电源开启,所以提供了INVPWREN控制电源控制信号是否反转
对于LCDSADDR1->LCDSADDR3寄存器的配置,比较简单,代码容易看懂, 到此,寄存器重要的配置讲解完毕,裸机部分也告一段落了