⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 s3c2410中的lcd驱动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
        LCD_DCLK_Hi;        // CLOCK = High
        LCD_DSERI_Hi;       // data = High
        udelay(DELAY);
        if(flag==0)
        {
            //start a new communication for write command data.
            LCD_DEN_Lo;         //  EN = Low  CS Low
            udelay(DELAY);

            //send start byte first for command data write.
            start_byte = LDIC_STARTBYTE_CMDWRITE;
            spi_sendbyte(start_byte);
            spi_sendbyte((UINT8)(conf_data>> 8));
            spi_sendbyte((UINT8)conf_data);

            LCD_DEN_Hi;         // EN = High  CS high
            LCD_DCLK_Hi;        // CLOCK = High
            LCD_DSERI_Hi;       // data = High
        }
    }

#else
#error "ERROR: Unknown project define." __FILE__
#endif
    else
    {
        DELAY = conf_data * LCD_DELAY_1MS;
        udelay(DELAY);
    }   
     
}


/*********************************************************************
;* Project Name : s3c2443x
;*
;* Copyright 2007.05.25 by amoi Electronics, Inc.
;* All rights reserved.
;* Init LCD Panel for QVGA

;**********************************************************************/ 

void Init_LCDPanel(void)
{
    s8 i=0;
    if(g_s2440IOP==NULL)
    {
        g_s2440IOP = (S3C24X0_GPIO *)S3C24X0_GetBase_GPIO();
    }
    
    printf("Init_LCDPanel start \r\n");

    //LCD Power ON and Reset
    CLRREG32(&g_s2440IOP->GPCCON,(3<<(LCD_RESET_C0IO*2))); 
    SETREG32(&g_s2440IOP->GPCCON,(1<<(LCD_RESET_C0IO*2))); 

    //LCD module poweron sequence.
    #if defined(LCD_TM240320LNFWUGWA5)
    CLRREG32(&g_s2440IOP->GPDCON,(3<<(LCD_SD_D10IO*2))); 
    SETREG32(&g_s2440IOP->GPDCON,(1<<(LCD_SD_D10IO*2))); 
    
    SETREG32(&g_s2440IOP->GPDDAT,LCD_SD);
    udelay(50);
    CLRREG32(&g_s2440IOP->GPDDAT,LCD_SD);
    udelay(50);
    
    #elif defined(LCD_L4F00242T05)
    CLRREG32(&g_s2440IOP->GPDCON,(3<<(LCD_SD_D10IO*2))); 
    SETREG32(&g_s2440IOP->GPDCON,(1<<(LCD_SD_D10IO*2))); 
    SETREG32(&g_s2440IOP->GPDUP,LCD_SD);

    CLRREG32(&g_s2440IOP->GPDDAT,LCD_SD);
    udelay(50);
    #endif
    
    CLRREG32(&g_s2440IOP->GPCDAT, LCD_RESET);
    udelay(100);
    SETREG32(&g_s2440IOP->GPCDAT, LCD_RESET);
    udelay(1000*100);
    
    initspi();
    
     ///////////////////////////////////////////////////////////////////
     // Init Lcd panel Function
    //////////////////////////////////////////////////////////////////
     while(i<dimof(Conf_data))
     {
          spi_write_config(&Conf_data[i]);
          i++;
     }

    udelay(LCD_DELAY_1MS*10);
}



static void Init_LCDController(void)
{
    unsigned int clkval_calc;  // 040507
    u32 regdata;

    printf("Init_LCDController \r\n");
    
    if(g_s2440LCD==NULL)
    {
        g_s2440LCD = (S3C24X0_LCD*)S3C24X0_GetBase_LCD();
    }
    
    //init lcd controller for vga
    clkval_calc = (s16)(get_HCLK()/(2*LCD_VCLK))-1;

    printf("\n clkval_calc = %d \n", clkval_calc);
    
    regdata   =  (clkval_calc           <<  8) |       /* VCLK = HCLK / ((CLKVAL + 1) * 2) -> About 5.48 Mhz  */
                           (0<<  7)  |       /* 0 : Each Frame                                   */
                           (LCD_TYPE<<  5) |       /* TFT LCD Pannel                                   */
                           (LCD_TYPE_TFT16BPP<<  1) |       /* 16bpp Mode                                       */
                           (0           <<  0) ;       /* Disable LCD Output                               */

    OUTREG32(&g_s2440LCD->LCDCON1, regdata);
    
    regdata   =  (LCD_VBPD        << 24) |   /* VBPD          :   2                              */
                           (LCD_LINEVAL_TFT << 14) |   /* Vertical Size : 640 - 1                          */
                           (LCD_VFPD        <<  6) |   /* VFPD          :   16                              */
                           (LCD_VSPW        <<  0) ;   /* VSPW          :   2                              */
    OUTREG32(&g_s2440LCD->LCDCON2, regdata);
    
    regdata   =  (LCD_HBPD        << 19) |   /* HBPD          :   8                              */
                           (LCD_HOZVAL_TFT  <<  8) |   /* HOZVAL_TFT    : 480 - 1                          */
                           (LCD_HFPD        <<  0) ;   /* HFPD          :   104                              */
    
    OUTREG32(&g_s2440LCD->LCDCON3, regdata);
    
    regdata   =  (LCD_MVAL        <<  8) |   /* MVAL          :  13                              */
                           (LCD_HSPW        <<  0) ;   /* HSPW          :  8                               */   
    OUTREG32(&g_s2440LCD->LCDCON4, regdata);
    
    regdata   =  (0           << 12) |       /* BPP24BL       : LSB valid                        */
                           (1           << 11) |       /* FRM565 MODE   : 5:6:5 Format                     */
                           (1           << 10) |       /* INVVCLK       : VCLK Falling Edge                */
                           #if defined(LCD_L4F00242T05) 
                           (1           <<  9) |       /* INVVLINE      : Inverted Polarity                */
                           (1           <<  8) |       /* INVVFRAME     : Inverted Polarity                */
                           #else
                           (0           <<  9) |       /* INVVLINE      : Inverted Polarity                */
                           (0           <<  8) |       /* INVVFRAME     : Inverted Polarity                */
                           #endif
                           (0           <<  7) |       /* INVVD         : Normal                           */
                           (0           <<  6) |       /* INVVDEN       : Normal                           */
                           (0           <<  5) |       /* INVPWREN      : Normal                           */
                           (0           <<  4) |       /* INVENDLINE    : Normal                           */
                           (1           <<  3) |       /* PWREN         : Disable PWREN                    */
                           (0           <<  2) |       /* ENLEND        : Disable LEND signal              */
                           (0           <<  1) |       /* BSWP          : Swap Disable                     */
                           (1           <<  0) ;       /* HWSWP         : Swap Enable                      */
    SETREG32(&g_s2440LCD->LCDCON5, regdata);

    printf("\n panel_info.s3c.screen = %x  \n", panel_info.s3c.screen);

    regdata = (((panel_info.s3c.screen - VAR_MAP_OFF) >> 22)     << 21) | 
                             ((M5D((panel_info.s3c.screen - VAR_MAP_OFF) >> 1)) <<  0);
    OUTREG32(&g_s2440LCD->LCDSADDR1,regdata);
    
    regdata = M5D(((panel_info.s3c.screen - VAR_MAP_OFF) + (LCD_XSIZE_TFT * LCD_YSIZE_TFT * 2)) >> 1);
    OUTREG32(&g_s2440LCD->LCDSADDR2, regdata);
    
    regdata = (((LCD_XSIZE_TFT - LCD_XSIZE_TFT) / 1) << 11) | (LCD_XSIZE_TFT / 1);
    OUTREG32(&g_s2440LCD->LCDSADDR3, regdata);
    
    CLRREG32(&g_s2440LCD->LPCSEL, 0x17);
    OUTREG32(&g_s2440LCD->TPAL, 0x0);    

}



void BootInitDisplay(void)
{
    u32 regdata;
    
    if(g_s2440IOP==NULL)
    {
        g_s2440IOP = (S3C24X0_GPIO *)S3C24X0_GetBase_GPIO();
    }
    if(g_s2440LCD==NULL)
    {
        g_s2440LCD = (S3C24X0_LCD *)S3C24X0_GetBase_LCD();
    }
    
    if(g_sCLKPWRReg == NULL)
    {
        g_sCLKPWRReg = (S3C24X0_CLOCK_POWER *)S3C24X0_GetBase_CLOCK_POWER();
    }
    
    // Turn on LCD device clock
    if(!(INREG32(&g_sCLKPWRReg->CLKCON) & LCD_CTL_CLK_ON))
    {
        SETREG32(&g_sCLKPWRReg->CLKCON, LCD_CTL_CLK_ON);
    }
    
    printf("BootInitDisplay start \r\n"); 
    //FrenzWang Pause

    //configr the hardware pins for lcd
    regdata=((3<<(LCD_PCLK_C1IO*2))|
                          (3<<(LCD_HCLK_C2IO*2))|
                          (3<<(LCD_VCLK_C3IO*2))|
                          (3<<(LCD_DEN_C4IO*2))|
                          (3<<(LCD_BLUE0_C11IO*2))|
                          (3<<(LCD_BLUE1_C12IO*2))|
                          (3<<(LCD_BLUE2_C13IO*2))|
                          (3<<(LCD_BLUE3_C14IO*2))|
                          (3<<(LCD_BLUE4_C15IO*2))
                          );
    CLRREG32(&g_s2440IOP->GPCCON, regdata);
    
    regdata = ((2<<(LCD_PCLK_C1IO*2))|
                          (2<<(LCD_HCLK_C2IO*2))|
                          (2<<(LCD_VCLK_C3IO*2))|
                          (2<<(LCD_DEN_C4IO*2))|
                          (2<<(LCD_BLUE0_C11IO*2))|
                          (2<<(LCD_BLUE1_C12IO*2))|
                          (2<<(LCD_BLUE2_C13IO*2))|
                          (2<<(LCD_BLUE3_C14IO*2))|
                          (2<<(LCD_BLUE4_C15IO*2))
                          );
    SETREG32(&g_s2440IOP->GPCCON, regdata);
    
    regdata = ((1<<(LCD_PCLK_C1IO))|
                          (1<<(LCD_HCLK_C2IO))|
                          (1<<(LCD_VCLK_C3IO))|
                          (1<<(LCD_DEN_C4IO))|
                          (1<<(LCD_BLUE0_C11IO))|
                          (1<<(LCD_BLUE1_C12IO))|
                          (1<<(LCD_BLUE2_C13IO))|
                          (1<<(LCD_BLUE3_C14IO))|
                          (1<<(LCD_BLUE4_C15IO))
                          );
    SETREG32(&g_s2440IOP->GPCUP, regdata);

   regdata = ((3<<(LCD_GREEN0_D2IO*2))|
                          (3<<(LCD_GREEN1_D3IO*2))|
                          (3<<(LCD_GREEN2_D4IO*2))|
                          (3<<(LCD_GREEN3_D5IO*2))|
                          (3<<(LCD_GREEN4_D6IO*2))|
                          (3<<(LCD_GREEN5_D7IO*2))|
                          (3<<(LCD_RED0_D11IO*2))|
                          (3<<(LCD_RED1_D12IO*2))|
                          (3<<(LCD_RED2_D13IO*2))|
                          (3<<(LCD_RED3_D14IO*2))|
                          (3<<(LCD_RED4_D15IO*2))
                          );
    CLRREG32(&g_s2440IOP->GPDCON, regdata);
    
    regdata = ((2<<(LCD_GREEN0_D2IO*2))|
                          (2<<(LCD_GREEN1_D3IO*2))|
                          (2<<(LCD_GREEN2_D4IO*2))|
                          (2<<(LCD_GREEN3_D5IO*2))|
                          (2<<(LCD_GREEN4_D6IO*2))|
                          (2<<(LCD_GREEN5_D7IO*2))|
                          (2<<(LCD_RED0_D11IO*2))|
                          (2<<(LCD_RED1_D12IO*2))|
                          (2<<(LCD_RED2_D13IO*2))|
                          (2<<(LCD_RED3_D14IO*2))|
                          (2<<(LCD_RED4_D15IO*2))
                          );
     SETREG32(&g_s2440IOP->GPDCON, regdata);
    
    regdata = ((1<<(LCD_GREEN0_D2IO))|
                          (1<<(LCD_GREEN1_D3IO))|
                          (1<<(LCD_GREEN2_D4IO))|
                          (1<<(LCD_GREEN3_D5IO))|
                          (1<<(LCD_GREEN4_D6IO))|
                          (1<<(LCD_GREEN5_D7IO))|
                          (1<<(LCD_RED0_D11IO))|
                          (1<<(LCD_RED1_D12IO))|
                          (1<<(LCD_RED2_D13IO))|
                          (1<<(LCD_RED3_D14IO))|
                          (1<<(LCD_RED4_D15IO))
                          );
    SETREG32(&g_s2440IOP->GPDUP, regdata);

    Init_LCDPanel();      
    Init_LCDController();    
}

void BootStartDisplay(void    )   
{
    s8 i=0;
            
    printf("BootStartDisplay start \r\n"); 

    //Enable lcd  controller.
    SETREG32(&g_s2440LCD->LCDCON1, 1);
    
    // Display a bitmap image on the LCD...
    memcpy((void *)panel_info.s3c.screen, newplus_logo, sizeof(newplus_logo)); 
    
    //Enable panel display.
    while(i<dimof(Conf_data_PnlOn))
    {
        spi_write_config(&Conf_data_PnlOn[i]);
        i++;
    }

}

void BootStopDisplay(void    )   
{
    CLRREG32(&g_s2440LCD->LCDCON1, 1);
}

void BootDeinitDisplay(void)
{
    g_s2440LCD->LCDCON1   = 0;
    g_s2440LCD->LCDCON2   = 0;
    g_s2440LCD->LCDCON3   = 0;
    g_s2440LCD->LCDCON4   = 0;
    g_s2440LCD->LCDCON5   = 0;
    g_s2440LCD->LCDSADDR1 = 0;
    g_s2440LCD->LCDSADDR2 = 0;
    g_s2440LCD->LCDSADDR3 = 0;
    g_s2440LCD->LPCSEL    = 0;
    g_s2440LCD->TPAL      = 0; 

    g_s2440IOP=NULL;
    g_s2440LCD=NULL;
    
    if(INREG32(&g_sCLKPWRReg->CLKCON) & LCD_CTL_CLK_ON)
    {
        CLRREG32(&g_sCLKPWRReg->CLKCON, LCD_CTL_CLK_ON);
    }
    g_sCLKPWRReg = NULL;
    
    return;
}


void lcd_ctrl_init (void *lcdbase)
{
	//reset_lcd( );
	//init_lcd_register( );
	s3cfb_init_mem(lcdbase, &panel_info);
    BootInitDisplay();
    BootStartDisplay();
}




#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -