15.eLcdIF驱动

一、LCD液晶屏

​ 由玻璃板夹液晶盒,外加偏光片,滤光片等组成。液晶本是不会发光的,所以还要加一个背光灯,通过层层材料处理最后得到图像。

​ RGB888液晶屏,每个像素点是三个小灯,红绿蓝三原色可以组合很多颜色。其像素格式是8bit,那么三个灯就是24bit。2^24=1677w种颜色。现在还有10bit的HDR10的屏幕。

二、eLCDIF

​ 时钟信号,RGB信号线,水平同步信号,垂直同步信号,数据线。

​ VSYNC是垂直同步信号,当HSYNC信号出现时表示一帧像素点信号传输结束。

​ HSYNC是水平同步信号,当出现HSYNC信号时表示一行的像素点传输开始。

查询LCD的手册看时序图了解LCD的各个时间参数。

2.显存

​ 显示存储空间,存储一帧的图像空间。

三、寄存器

​ 我们使用DOTCLK接口,也就是VSYNC、HSYNC、ENABLE、DOTCLK接口

​ 1、LCDIF_CTRLn寄存器,操作液晶屏bit0必须要置1,bit1设置数据格式24位全部有效,bit5设置工作在主机模式下,bit9:8设置输入像素格式位24比特位0x3 ,bit11:10设置数据传输宽度为24写0x3,bit13:12设置数据交换设置为0,bit15:14输入数据交换为0,bit17设置为DOTCLK模式下。bi19必须置1在运行,bit30必须置0,bit31必徐置0

​ 2.LCDIF_CTRL1的bit19-16必须设置为0x7。24位的格式。

​ 3.LCDIF_TRASFER_COUNT寄存器:bit15:0是LCD一行的像素数,1024。

​ 4.LCDIF_VDCTRL0n寄存器,根据屏幕设置。bit17:0为vspw参数。bit20设置VSYNC信号的宽度单位。bit21设置VSYNC的周期单位。bit24设置ENABLE信号极性,bit25设置DOTCLK信号极性,bit26设置HSYNC信号极性,bit27设置VSYNC信号极性。bit28设置使能DOTCLK模式。bit29设置VSYNC输出置0。

​ 5.LCDIF_VDCTRL1寄存器:为VSYNC两个下降沿信号之间的长度。

​ 6.LCDIF_VDCTRL2寄存器:bit17:0设置两个HYSNC信号之间的长度,bit31:18设置HSPW信号的宽度。

​ 7.LCDIF_VDCTRL3寄存器:bit15:0是vbp+vspw , bit27:16是hbp+hspw

​ 8:LCDIF_VDCTRL4寄存器:bit17:0是一行有多少个像素点。1024

​ 9.LCDIF_CUR_BUF寄存器:当前缓存显存首地址。

​ 10.LCDIF_NEXT_BUF寄存器:LCD下一帧数据首地址。

四、LCD时钟配置

​ LCDIF_CLK_ROOT=51.2MHz配置,设置VIDEO_PLL为时钟源。

​ 频率设置公式:PLL output frequency = Fref * (DIV_SELECT + NUM/DENOM),根据CCM_ANALOG_PLL_VIDEO寄存器设置。6:0bit 设置DIV_SELECT (27~54)。PLL_VIDEOn寄存器bit20:19,为2表示1分频。CCM_ANALOG_MISC2寄存器的31:30位。CCM_ANALOG_PLL_VIDEO_NUM分子寄存器不设置,设置为0。接下来直接看时钟树图,就不在此详细说明了。

在这里插入图片描述

​ CCM_CSCDR2的寄存17:15设置LCDIF1_PRE_CLK_SEL模式0x2。CSCDR2[LCDIF1_PRED]分频bit14:12,CBCMR[LCDIF1_PODF]分频bit25:23设置二级分频,也为1-8分频。CSCDR2[LCDIF1_CLK_SEL]的多路选择器置为0,作为之前配置的那一路时钟源。

在这里插入图片描述

五、LCD程序

1.elcdif初始化

​ 初始化配置DATA00-DATA23位。

​ 初始化配置LCD_HSYNC,LCD_VSYNC,LCD_ENABLE,LCD_CLK引脚,包括复用和电气配置(0xb9)。

2.lcd控制器接口

​ 创建lcd接口相关的结构体,写入一些LCD必须的信息。

bsp_lcd.h
/*LCD frame address*/
#define LCD_FRAMEBUF_ADDR = (0x89000000)
#define LCD_BLACK		  0x00000000
#define LCD_WHITE		  0x00ffffff
/* LCD屏幕信息结构体 */
struct tftlcd_typedef{
   
    unsigned short height;  /* 屏幕高度 */
    unsigned short width;   /* 屏幕宽度 */
    unsigned char pixsize;  /* 每个像素所占用的字节数 */
    unsigned short vspw;    
    unsigned short vbpd;
    unsigned short vfpd;
    unsigned short hspw;
    unsigned short hbpd;
    unsigned short hfpd;
    unsigned int framebuffer;   /* 屏幕显存起始地址 */
    unsigned int forecolor;     /* 前景色 */
    unsigned int backcolor;     /* 背景色 */
};
void Lcd_Init(void);
void LcdGpio_Init(void);

void Lcdif_reset();
void Lcdif_noreset();
void Lcd_Enabel(void);
void Lcd_ClkInit(unsigned char loopDiv ,unsigned char prediv , unsigned char div);
bsp_lcd.c
void Lcd_Init(void)
{
   
    LcdGpio_Init();
    Lcdif_reset();      /*Reset*/
    delay_ms(10);
    Lcdif_noreset();    /*Stop Reset*/
	//根据屏幕设置
    tftlcd_dev.height = 0;
    tftlcd_dev.width = 0;
    tftlcd_dev.vspw = 0;
    tftlcd_dev.vfpd = 0;
    tftlcd_dev.vbpd = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值