www.pudn.com > bu1566.rar > W_Driver.c


#define _W_DRIVER_C_ 
 
#include "W_Driver.h" 
 
#if defined _LCD_INDIRECT_WRITE_ 
static void LcdIndirectWriteData(UINT16 u16Param) 
{ 
    data_write(MLCDCMD1, u16Param); 
    data_write(MLCDCNT, 0x0093); 
    wait(10); 
//    aDSC_GIO_Write(BU15xx_GIO6, HIGH); 
//    aDSC_GIO_Write(BU15xx_GIO6, LOW); 
} 
static void LcdIndirectWriteCmd(UINT16 u16Param) 
{ 
    data_write(MLCDCMD1, u16Param); 
    data_write(MLCDCNT, 0x0091); 
    wait(10); 
//    aDSC_GIO_Write(BU15xx_GIO6, HIGH); 
//    aDSC_GIO_Write(BU15xx_GIO6, LOW); 
} 
#endif                          //#if defined _LCD_INDIRECT_WRITE_ 
 
void BU15xx_GIO_Write(UINT8 u8GioIndex, UINT8 u8Bit) 
{ 
    bit_write(GIOCNT, 0x1<>9); 
        reg_write(tLcd[i].u16DataType, tLcd[i].u16Data&0x01FF); 
        wait(tLcd[i].u16WaitTime); 
    } 
 
    reg_write(CMD, (0x21&0xFE00)>>9); 
    reg_write(CMD, 0x21&0x01FF); 
    reg_write(PDAT, 0x0); 
    reg_write(PDAT, 0x0); 
    reg_write(CMD, (0x16&0xFE00)>>9); 
    reg_write(CMD, 0x16&0x01FF); 
    reg_write(PDAT, (((M_LCD_WSIZE - 1) << 8)&0xFE00)>>9); 
    reg_write(PDAT, ((M_LCD_WSIZE - 1) << 8)&0x01FF); 
    reg_write(CMD, (0x17&0xFE00)>>9); 
    reg_write(CMD, 0x17&0x01FF); 
    reg_write(PDAT, (((M_LCD_HSIZE - 1) << 8)&0xFE00)>>9); 
    reg_write(PDAT, ((M_LCD_HSIZE - 1) << 8)&0x01FF); 
 
    reg_write(CMD, (0x0022&0xFE00)>>9); 
    reg_write(CMD, 0x0022&0x01FF); 
 
    for (i = 0; i < M_LCD_WSIZE * M_LCD_HSIZE/2; i++) 
    { 
        reg_write(PDAT, (0xf000&0xFE00)>>9); 
        reg_write(PDAT, 0xf000&0x01FF); 
    } 
    for (i = 0; i < M_LCD_WSIZE * M_LCD_HSIZE/2; i++) 
    { 
        reg_write(PDAT, (0x00f&0xFE00)>>9); 
        reg_write(PDAT, 0x00f&0x01FF); 
    } 
     
#else  //defined LCDBUS_9BIT 
 
    for (i = 0; i < u16NumSequence; i++) 
    { 
        reg_write(tLcd[i].u16DataType, tLcd[i].u16Data); 
        wait(tLcd[i].u16WaitTime); 
    } 
 
   column_page_set(0, M_LCD_WSIZE - 1, 0, M_LCD_HSIZE - 1); 
    reg_write(CMD, M_CMD_DATA1);        //Display RAM write command 
    for (i = 0; i < M_LCD_WSIZE * M_LCD_HSIZE/2; i++) 
    { 
        reg_write(PDAT, 0xf000); 
    } 
    for (i = 0; i < M_LCD_WSIZE * M_LCD_HSIZE/2; i++) 
    { 
        reg_write(PDAT, 0x00f); 
    } 
     
#endif //defined LCDBUS_9BIT 
 
#endif                          //defined _LCD_INDIRECT_WRITE_ 
 
} 
 
void sublcd_init(void) 
{ 
    UINT16 i; 
    UINT16 u16NumSequence = sizeof(tLcd) / sizeof(t_LcdInitParam); 
 
    aDSC_lcdaccess_set(sSUB_ACS); 
 
#if defined _LCD_INDIRECT_WRITE_ 
    { 
        UINT16 u16RegBack1, u16RegBack2, u16RegBack3; 
 
        u16RegBack1 = data_read(HWMODE); 
        u16RegBack2 = data_read(MLCDCNT); 
        u16RegBack3 = data_read(MLCDCMD1); 
 
	 hostcnt_write(sBU15XX_ACS | sDIRECT_DISABLE | HOST_TYPE); 
        mode_change(sREADY); 
        mode_change(sLCDMANUAL); 
 
        for (i = 0; i < u16NumSequence; i++) 
        { 
            if (tLcd[i].u16DataType == CMD) 
                LcdIndirectWriteCmd(tLcd[i].u16Data); 
            else if (tLcd[i].u16DataType == PDAT) 
                LcdIndirectWriteData(tLcd[i].u16Data); 
            wait(tLcd[i].u16WaitTime); 
        } 
 
        column_page_set(0, S_LCD_WSIZE - 1, 0, S_LCD_HSIZE - 1); 
        LcdIndirectWriteCmd(S_CMD_DATA1); 
        data_write(MLCDCMD1, 0xe07f); 
 
        clk_cnt_set(sGIO6_ENABLE | sVDEDG_UP | sVD | sLCDFR_ENABLE | sSCK_ENABLE | sCMCK_ENABLE);       //LCDFR,SCLK,CAMCKO Enable 
        aDSC_GIO_Write(BU15xx_GIO6, LOW); 
        for (i = 0; i < S_LCD_WSIZE * S_LCD_HSIZE; i++) 
        { 
            //LcdIndirectWriteData(0xe07f); 
            data_write(MLCDCNT, 0x0093); 
            bit_write(GIOOUT, 0x1 << BU15xx_GIO6, HIGH); 
            bit_write(GIOOUT, 0x1 << BU15xx_GIO6, LOW); 
        } 
 
        mode_change(sREADY); 
        data_write(HWMODE, u16RegBack1); 
        data_write(MLCDCNT, u16RegBack2); 
        data_write(MLCDCMD1, u16RegBack3); 
    } 
#else                           //defined _LCD_INDIRECT_WRITE_ 
 
    for (i = 0; i < u16NumSequence; i++) 
    { 
        reg_write(tLcd[i].u16DataType, tLcd[i].u16Data); 
        wait(tLcd[i].u16WaitTime); 
    } 
 
    column_page_set(0, S_LCD_WSIZE - 1, 0, S_LCD_HSIZE - 1); 
    reg_write(CMD, S_CMD_DATA1);        //Display RAM write command 
    for (i = 0; i < S_LCD_WSIZE * S_LCD_HSIZE; i++) 
    { 
        reg_write(PDAT, 0x0000); 
    } 
 
#endif                          //defined _LCD_INDIRECT_WRITE_ 
 
} 
 
void MainLcdAreaPosSet(UINT16 u16HoriStart, UINT16 u16HoriEnd, 
                       UINT16 u16VertStart, UINT16 u16VertEnd) 
{ 
#if defined _LCD_INDIRECT_WRITE_ 
    UINT16 u16RegBack1, u16RegBack2, u16RegBack3; 
    u16RegBack1 = data_read(HWMODE); 
    u16RegBack2 = data_read(MLCDCNT); 
    u16RegBack3 = data_read(MLCDCMD1); 
    hostcnt_write(sBU15XX_ACS | sDIRECT_DISABLE | HOST_TYPE); 
    mode_change(sREADY); 
    mode_change(sLCDMANUAL); 
 
#if (defined TMD_LTM022A05D) || (defined TMD_LTM018A02A) 
    LcdIndirectWriteCmd(0x0200 | u16HoriStart); 
    LcdIndirectWriteCmd(0x0300 | u16VertStart); 
    LcdIndirectWriteCmd(0x0400 | u16HoriEnd); 
    LcdIndirectWriteCmd(0x0500 | u16VertEnd); 
#elif defined NEC_502i 
    LcdIndirectWriteCmd(0x21); 
    LcdIndirectWriteData((u16VertStart << 8) | (u16HoriStart + MLCD_START_H)); 
    LcdIndirectWriteCmd(0x34); 
    LcdIndirectWriteData(((u16HoriEnd + MLCD_START_H) << 8) | (u16HoriStart + MLCD_START_H)); 
    LcdIndirectWriteCmd(0x35); 
    LcdIndirectWriteData((u16VertEnd << 8) | u16VertStart); 
#elif defined HD66777_LCD 
    LcdIndirectWriteCmd(0x0050); 
    LcdIndirectWriteData(u16HoriStart); 
    LcdIndirectWriteCmd(0x0051); 
    LcdIndirectWriteData(u16HoriEnd); 
    LcdIndirectWriteCmd(0x0052); 
    LcdIndirectWriteData(u16VertStart); 
    LcdIndirectWriteCmd(0x0053); 
    LcdIndirectWriteData(u16VertEnd); 
 
    LcdIndirectWriteCmd(0x0020); 
    LcdIndirectWriteData(u16HoriEnd); 
    LcdIndirectWriteCmd(0x0021); 
    LcdIndirectWriteData(u16VertStart); 
#elif defined HD66773_LCD 
 
#elif (defined S6B33B3A) || (defined S6B33B2) 
 
#endif                          //select LCD 
 
    mode_change(sREADY); 
    data_write(HWMODE, u16RegBack1); 
    data_write(MLCDCNT, u16RegBack2); 
    data_write(MLCDCMD1, u16RegBack3); 
 
#else                           //defined _LCD_INDIRECT_WRITE_ 
 
#if (defined TMD_LTM022A05D) || (defined TMD_LTM018A02A) 
    reg_write(CMD, 0x0200 | u16HoriStart); 
    reg_write(CMD, 0x0300 | u16VertStart); 
    reg_write(CMD, 0x0400 | u16HoriEnd); 
    reg_write(CMD, 0x0500 | u16VertEnd); 
#elif defined NEC_502i 
    reg_write(CMD, 0x21); 
    reg_write(PDAT, (u16VertStart << 8) | (u16HoriStart + MLCD_START_H)); 
    reg_write(CMD, 0x34); 
    reg_write(PDAT, ((u16HoriEnd + MLCD_START_H) << 8) | (u16HoriStart + MLCD_START_H)); 
    reg_write(CMD, 0x35); 
    reg_write(PDAT, (u16VertEnd << 8) | u16VertStart); 
#elif defined HD66777_LCD 
    reg_write(CMD, 0x0050); 
    reg_write(PDAT, u16HoriStart); 
    reg_write(CMD, 0x0051); 
    reg_write(PDAT, u16HoriEnd); 
    reg_write(CMD, 0x0052); 
    reg_write(PDAT, u16VertStart); 
    reg_write(CMD, 0x0053); 
    reg_write(PDAT, u16VertEnd); 
 
    reg_write(CMD, 0x0020); 
    reg_write(PDAT, u16HoriEnd); 
    reg_write(CMD, 0x0021); 
    reg_write(PDAT, u16VertStart); 
#elif defined HD66773_LCD 
    reg_write(CMD, 0x21); 
    reg_write(PDAT, (u16VertStart << 8) | (u16HoriStart + MLCD_START_H)); 
    reg_write(CMD, 0x16); 
    reg_write(PDAT, ((u16HoriEnd + MLCD_START_H) << 8) | (u16HoriStart + MLCD_START_H)); 
    reg_write(CMD, 0x17); 
    reg_write(PDAT, (u16VertEnd << 8) | u16VertStart); 
#elif (defined S6B33B3A) || (defined S6B33B2) 
    reg_write(CMD, 0x43); 
    reg_write(CMD, u16HoriStart+MLCD_START_H); 
    reg_write(CMD, u16HoriEnd+MLCD_START_H); 
    reg_write(CMD, 0x42); 
    reg_write(CMD, u16VertStart+MLCD_START_V); 
    reg_write(CMD, u16VertEnd+MLCD_START_V); 
#endif                          //select LCD 
 
#endif                          //defined _LCD_INDIRECT_WRITE_ 
 
} 
 
void SubLcdAreaPosSet(UINT16 u16HoriStart, UINT16 u16HoriEnd, 
                      UINT16 u16VertStart, UINT16 u16VertEnd) 
{ 
#if (defined TMD_LTM022A05D) || (defined TMD_LTM018A02A) 
    reg_write(CMD, 0x0200 | u16HoriStart); 
    reg_write(CMD, 0x0300 | u16VertStart); 
    reg_write(CMD, 0x0400 | u16HoriEnd); 
    reg_write(CMD, 0x0500 | u16VertEnd); 
#elif defined NEC_502i 
    reg_write(CMD, 0x21); 
    reg_write(PDAT, (u16VertStart << 8) | (u16HoriStart + MLCD_START_H)); 
    reg_write(CMD, 0x34);       // ***** SD_CSET *****  
    reg_write(PDAT, ((u16HoriEnd + MLCD_START_H) << 8) | (u16HoriStart + MLCD_START_H)); 
    reg_write(CMD, 0x35);       // ***** SD_PSET *****  
    reg_write(PDAT, (u16VertEnd << 8) | u16VertStart);  // P1L 
#elif defined HD66777_LCD 
    reg_write(CMD, 0x0050); 
    reg_write(PDAT, u16HoriStart); 
    reg_write(CMD, 0x0051); 
    reg_write(PDAT, u16HoriEnd); 
    reg_write(CMD, 0x0052); 
    reg_write(PDAT, u16VertStart); 
    reg_write(CMD, 0x0053); 
    reg_write(PDAT, u16VertEnd); 
 
    reg_write(CMD, 0x0020); 
    reg_write(PDAT, u16HoriEnd); 
    reg_write(CMD, 0x0021); 
    reg_write(PDAT, u16VertStart); 
#elif defined HD66773_LCD 
#elif (defined S6B33B3A) || (defined S6B33B2) 
#endif                          //select LCD 
} 
 
#undef _W_DRIVER_C_