zoukankan      html  css  js  c++  java
  • [国嵌攻略][061][2440LCD驱动设计]

    LCD初始化

    1.引脚初始化

    2.时序初始化

    VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数

    VFBD(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数

    VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算

    HBPD(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数

    HFPD(horizontal front porth):表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数

    HSPW(horizontal sync pulse width):表示水平同步信号的宽度,用VCLK计算

    LCDCON1:

    CLKVAL=7   VCLK=HCLK/((CLKVAL+1)*2) VCLK=6.0-7.1MHz HCLK=100MHz

    PNRMODE 11

    BPPMODE 1100

    ENVID

    LCDCON2:

    VSPW(pulse width) 4

    VBPD(back proch) 4

    VFPD(front proch) 4

    LINEVAL 319   LINEVAL+1=320

    LCDCON3:

    HBPD(back proch) 1

    HFPD(front proch) 14

    HOZVAL 239   HOZVAL+1=240

    LCDCON4:

    HSPW -14 (左边边界)

    LCDCON5

    FRM560 1

    INVVLINE 1

    INVVFRAME 1

    HWSWP 1

    3.帧缓冲初始化

    每个像素点用2个字节 16bpp,帧缓冲大小240*320*2

    1.分配帧缓冲空间

    2.告知帧缓冲地址给LCD控制器

    4.杂项初始化

    /********************************************************************
    *名称:lcd
    *作者:D
    *时间:2015.11.18
    *功能:液晶显示屏驱动
    ********************************************************************/
    
    /********************************************************************
    *							 宏定义
    ********************************************************************/
    #define GPCCON ( (*(volatile unsigned long *)0x56000020) )   //GPC组控制寄存器
    #define GPDCON ( (*(volatile unsigned long *)0x56000030) )   //GPD组控制寄存器
    #define GPGCON ( (*(volatile unsigned long *)0x56000060) )   //GPG组控制寄存器
    
    #define LCDCON1 ( (*(volatile unsigned long *)0X4D000000) )   //LCD控制1寄存器
    #define LCDCON2 ( (*(volatile unsigned long *)0X4D000004) )   //LCD控制2寄存器
    #define LCDCON3 ( (*(volatile unsigned long *)0X4D000008) )   //LCD控制3寄存器
    #define LCDCON4 ( (*(volatile unsigned long *)0X4D00000C) )   //LCD控制4寄存器
    #define LCDCON5 ( (*(volatile unsigned long *)0X4D000010) )   //LCD控制5寄存器
    
    #define LCDSADDR1 ( (*(volatile unsigned long *)0X4D000014) )   //帧缓冲起始地址1寄存器
    #define LCDSADDR2 ( (*(volatile unsigned long *)0X4D000018) )   //帧缓冲起始地址2寄存器
    #define LCDSADDR3 ( (*(volatile unsigned long *)0X4D00001C) )   //帧缓冲起始地址3寄存器
    
    #define TPAL ( (*(volatile unsigned long *)0X4D000050) )   //临时调色板寄存器
    
    #define HIGHT 320   //屏高,vertical
    #define WIDTH 240   //屏宽,horizontal
    
    //LCDCON1配置
    #define CLKVAL 7      //CLKVAL[17:8]:4 VCLK=HCLK/((CLKVAL+1)*2) VCLK=6.0-7.1MHz HCLK=100MHz
    #define PNRMODE 0x3   //PNRMODE[6:5]:11 TFT LCD
    #define BPPMODE 0xC   //BPPMODE[4:1]:1100 16 bpp for TFT
    #define ENVID_ON 1    //ENVID[0]:0 打开LCD输出
    #define ENVID_OFF 0   //ENVID[0]:0 关闭LCD输出
    
    //LCDCON2配置
    #define VBPD 1              //VBPD[31:24]:2-1 垂直后肩
    #define LINEVAL (HIGHT-1)   //LINEVAL[23:14]:240-1 屏高,对应于Vertical Display Active
    #define VFPD 1              //VFPD[13:6]:2-1 垂直前肩
    #define VSPW 12             //VSPW[5:0]:13-1 垂直脉宽,对应于Vertical Blank Time
    
    //LCDCON3配置
    #define HBPD 1            //HBPD[25:19]:2-1 水平后肩
    #define HOZVAL (WIDTH-1)  //HOZVAL[18:8]:240-1 屏宽,对应于Horizontal Display Active
    #define HFPD 1            //HFPD[7:0]:2-1 水平前肩
    
    //LCDCON4配置
    #define HSPW 79   //HSPW[7:0]:80-1 水平脉宽,对应于Horizontal Blank Time
    
    //LCDCON5配置
    #define FRM565 1      //FRM565[11]:1 5:6:5 Format
    #define INVVLINE 1    //INVVLINE[9]:1 HSYNC Inverted
    #define INVVFRAME 1   //INVVFRAME[8]:1 VSYNC Inverted
    #define PWREN_ON 1    //PWREN[3]:1 打开LCD电源
    #define PWREN_OFF 1   //PWREN[3]:0 关闭LCD电源
    #define HWSWP 1       //HWSWP[0]:1 Swap Enable
    
    //TPAL配置
    #define TPALEN_ON 1        //TPALEN[24]:1 Enable
    #define TPALEN_OFF 0       //TPALEN[24]:0 Disable
    #define TPALVAL 0xFF0000   //TPALVAL[23:16]:RED, TPALVAL[15:8], GREEN,TPALVAL[7:0]:BLUE
    
    /********************************************************************
    *							 全局变量
    ********************************************************************/
    unsigned short LCDBUFFER[HIGHT][WIDTH];   //帧缓冲320*240*2字节
    
    /********************************************************************
    *名称:init_lcd
    *功能:初始化液晶显示屏
    *********************************************************************/
    void init_lcd(){
    	unsigned long LCDBANK;     //LCDSADDR1[29:21] 帧缓冲起始地址30:22位
    	unsigned long LCDBASEU;    //LCDSADDR2[20:0]  帧缓冲起始地址21:1位
    	unsigned long LCDBASEL;    //LCDSADDR2[20:0]  帧缓冲结束地址21:1位
    	unsigned long OFFSIZE;     //LCDSADDR3[21:11] 每行偏移的半字
    	unsigned long PAGEWIDTH;   //LCDSADDR3[10:0]  每行字节的半字
    
    	//初始化引脚
    	GPCCON = 0xAAAAAAAA;   //GPC15-GPC8:10 VD[7-0], GPC7:10 LCD_LPCREVB, GPC6:10 LCD_LPCREV, GPC5:10 LCD_LPCOE, GPC4:10 VM, GPC3:10 VFRAME, GPC2:10 VLINE, GPC1:10 VCLK, GPC0:10 LEND
    	GPDCON = 0xAAAAAAAA;   //GPD15-GPD0:10 VD[23-8]
    	GPGCON |= (0x3<<8);    //GPG4[9:8]:11 LCD_PWRDN
    	
    	//初始化时序
    	LCDCON1 = (CLKVAL<<8)|(PNRMODE<<5)|(BPPMODE<<1)|(ENVID_OFF<<0);
    	LCDCON2 = (VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW<<0);
    	LCDCON3 = (HBPD<<19)|(HOZVAL<<8)|(HFPD<<0);
    	LCDCON4 = (HSPW<<0);
    	LCDCON5 = (FRM565<<11)|(INVVLINE<<9)|(INVVFRAME<<8)|(TPALEN_OFF<<3)|(HWSWP<<0);
    	
    	//初始化帧缓冲
    	LCDBANK = ((unsigned long)LCDBUFFER>>22)&0x1FF;      //取出帧缓冲地址的30:22位
    	LCDBASEU = ((unsigned long)LCDBUFFER>>1)&0x1FFFFF;   //取出帧缓冲起始地址的21:1位
    	LCDSADDR1 = (LCDBANK<<21)|(LCDBASEU<<0);
    	
    	LCDBASEL = ( (((unsigned long)LCDBUFFER + WIDTH*HIGHT*2)>>1) )&0x1FFFFF;   //取出帧缓冲结束地址的21:1位
    	LCDSADDR2 = (LCDBASEL<<0);
    	
    	OFFSIZE = 0;
    	PAGEWIDTH = WIDTH*2/2;   //页宽一个字是2个字节,所以乘以2,又因为该值是半字,所以除以2
    	LCDSADDR3 = (OFFSIZE<<11)|(PAGEWIDTH<<0);
    	
    	//关闭临时调色板
    	TPAL = (TPALEN_OFF<<24);
    	
    	//打开液晶显示屏
    	LCDCON5 |= (PWREN_ON<<3);
    	LCDCON1 |= (ENVID_ON<<0);
    }
    
    /********************************************************************
    *名称:clear_lcd
    *参数:
    *	none
    *返回:
    *	none
    *功能:清屏
    *********************************************************************/
    void clear_lcd(){
    	//打开临时调色板
    	TPAL = (TPALEN_ON<<24)|(TPALVAL<<0);
    }
    
  • 相关阅读:
    eclipse中的项目的JRE换成JDK
    Eclipse中maven项目的创建和运行
    git 发布命令
    vbox中虚拟ubuntu增加新的虚拟硬盘
    MyServer
    java常用的中间件
    高并发解决方案
    浅谈SpringMVC
    浅谈HIbernate
    javaweb笔记七
  • 原文地址:https://www.cnblogs.com/d442130165/p/4978805.html
Copyright © 2011-2022 走看看