zoukankan      html  css  js  c++  java
  • lcd 控制器

    1. 使用lcd 一般需要一个控制器和驱动器,控制器需要初始化以产生正确的时序,驱动器一般是和lcd基板制作在一起

     LCD 控制器结构图:

     

      REGBANK 表示调色板

       LCDDMA 表示DMA通道

    2. lcd控制器相关时序图如下

     

     VSPW 表示 VSYNC 的脉冲宽度为 (VSPW+1) 个 HSYNC 信号。

     VBPD  表示经过 (VBPD+1) 个 HSYNC 信号,数据行有效

     VFPD  表示(VFPD + 1) 个无效行

     HSPW 表示 HSYNC 的脉冲宽度为 (HSPW+1) 个 VCLK 信号。

     HBPD 表示经过 (HBPD+1) 个 VCLK 信号,像素数据有效

     HFPD 表示(HFPD + 1) 个无效像素

    3. lcd 显示芯片时序图

     

    4. VCLK 的获得

     设置时钟来源为 HCLK=133MHz ,又由计算公式

     

     而从 3 中可以得到VCLK的典型值为 9MHz ,HCLK = 133 MHz ,所以 CLKVAL_F =  13.77 约为 14。

    5. lcd 接口信号设置,以上时序图可总结如下:

     

    6. 初始化代码:

     S3C6410 手册上的初始化流程如下所示:

     代码:

    /*lcd 信号计算分配*/
    #define  VSPW         9
    #define  VBPD          1
    #define  LINEVAL     271
    #define  VFPD          1
    
    
    #define  HSPW         40    
    #define  HBPD          1
    #define  HOZVAL      479
    #define  HFPD          1
    
    /*计算分配视口数据*/
    #define LeftTopX     0
    #define LeftTopY     0
    
    #define RightBotX   479
    #define RightBotY   271
    
    /*分配帧缓存地址*/
    #define FRAME_BUFFER
    
    void lcd_init(void)
    {
        /* 1. 查阅硬件电路原理图,设置相关GPIO引脚用于LCD */
        GPICON = 0xaaaaaaaa;  /* gpi0~gpi15用作lcd_vd[0~15] */
        GPJCON = 0xaaaaaa;   /* gpj0~gpi11用作lcd_vd[16~23]和VDEN/VSYNC/HSYNC/VCLK */
        
        
        GPFCON &= ~(0x3<<28);
        GPFCON |=  (1<<28);    /* GPF14 output用作背光使能信号 CLKOUT*/
        
        
    //    GPECON &= ~(0xf);
    //    GPECON |= (0x1);          /* GPE0用作LCD的on/off信号 */
        
        /* 2. 初始化6410的display controller 
         * 2.1 hsync,vsync,vclk,vden的极性和时间参数
         * 2.2 行数、列数(分辨率),象素颜色的格式
         * 2.3 分配显存(frame buffer),写入display controller
         */
    
        MIFPCON &= ~(1<<3);   /* Normal mode SEL_BYPASS[3]=0*/
    
        SPCON    &= ~(0x3);    /**/
        SPCON    |= 0x1;            /*LCD_SEL = 01 设置为RGB I/F style */
    
    
        VIDCON0 &= ~((3<<26) | (3<<17) | (0xff<<6)  | (3<<2));     /* RGB I/F, RGB Parallel format,  */
        VIDCON0 |= ((14<<6) | (1<<4) );      /* vclk== HCLK / (CLKVAL+1) = 133/15 = 9MHz */
    
    
    
    
        VIDCON1 &= ~((1<<7) | (1<<4));   /* 在vclk的下降沿获取数据 ,VDEN 高电平*/
        VIDCON1 |= ((1<<6) | (1<<5));  /* HSYNC高电平有效, VSYNC高电平有效 */
    
        VIDTCON0 = (VBPD << 16) | (VFPD << 8) | (VSPW << 0); /*设置LCD信号的值*/
        VIDTCON1 = (HBPD << 16) | (HFPD << 8) | (HSPW << 0);
        VIDTCON2 = (LINEVAL << 11) | (HOZVAL << 0);
    
    
    
    
        WINCON0 &= ~(0xf << 2);
        WINCON0 |= (0xb<<2);    /* unpacked 24 BPP (non-palletized R:8-G:8-B:8 ) */
    
    
    
        VIDOSD0A = (LeftTopX<<11) | (LeftTopY << 0);/*视口位置设置*/
        VIDOSD0B = (RightBotX<<11) | (RightBotY << 0);
        VIDOSD0C = (LINEVAL + 1) * (HOZVAL + 1);  /* WINDOWS'0 size is 272 * 480 (word)*/
    
        VIDW00ADD0B0 = FRAME_BUFFER; /*帧缓存起始地址*/
        VIDW00ADD1B0 =  (((HOZVAL + 1)*4 + 0) * (LINEVAL + 1)) & (0xffffff);/*帧缓存大小*/
        
                                        /* 帧缓存与视口设置
                                        *VBASEL = VBASEU + (LINEWIDTH+OFFSIZE) x (LINEVAL+1) 
                                       *        = 0 + (480*4 + 0) * 272
                                         *        = 
                                         * 4 表示一个像素32位,即 4 个字节
                                     */
        
        
    }
    View Code
  • 相关阅读:
    Linux下查看文件和文件夹大小
    linux sort 命令详解
    Linux基础入门之网络属性配置
    Change SSH Welcome Banner on Ubuntu
    怎样修复grub开机引导(grub rescue)
    SSH内网穿透 Reverse SSH Tunneling
    安装 Zsh 及 Oh-my-zsh
    change grayscale to pseudo colouring using colormap in Matlab
    How to block a specific IP Address using UFW
    Linux下查看文件和文件夹大小
  • 原文地址:https://www.cnblogs.com/youngvoice/p/4859414.html
Copyright © 2011-2022 走看看