深入理解LCD之寄存器配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mxgsgtc/article/details/72871767
  • 前言
    上篇介绍了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寄存器的配置,比较简单,代码容易看懂, 到此,寄存器重要的配置讲解完毕,裸机部分也告一段落了

猜你喜欢

转载自blog.csdn.net/mxgsgtc/article/details/72871767
今日推荐