找回密码
 注册
搜索
查看: 1963|回复: 12

[讨论] 有没有用过hx8347的兄弟,我这里按照厂家给的代码写进去的,一直白屏,不知该怎么弄

[复制链接]
发表于 2008-3-19 11:55:06 | 显示全部楼层 |阅读模式
有没有用过hx8347的兄弟,我这里按照厂家给的代码写进去的,一直白屏,不知该怎么弄,附代码,请指教啊.

#include "drv_comm.h"
#include "reg_base.h"
#include "lcd_sw_inc.h"
#include "lcd_sw.h"
#include "lcd_hw.h"
/*Serial interface*/
#include "lcd_if.h"
#include "lcd_sw_rnd.h"

#define LCD_HX8347

#ifndef __CUST_NEW__
extern void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada);
extern void GPIO_WriteIO(char data, char port);
#endif /* __CUST_NEW__ */
extern void PWM2_level(kal_uint8 level);

kal_bool  lcd_assert_fail=KAL_FALSE;
kal_uint8 lcd_check = 0;
kal_uint8 lcd_reg_index=0;

const lcd_data_struct lcd_check_reg = {
  {
             
              {0x0001,0x011B}, {0x0002,0x0700}, {0x0003,0x1230}, {0x0007,0x0037}, {0x0009,0x0000},
              {0x000B,0x0000}, {0x000C,0x0003}, {0x0010,0x4140}, {0x0011,0x0000}, {0x0012,0x0013},
              {0x0013,0x3611}, {0x0040,0x0000}, {0x0041,0x00EF}, {0x0043,0xDB00},
              {0x0047,0x0000}, {0x0008,0x0202}, {0x0004,0x0000}, {0x0005,0x0000}, {0x0023,0x0000},
              {0x0024,0x0000}, {0x0053,0x0000}
   }      
};

#ifdef DUAL_LCD

        #ifndef COLOR_SUBLCD
                const kal_uint8 SubLCDSetArray[]=
                {
                        0x01,        // 0000 0001
                        0x02,        // 0000 0010
                        0x04,        // 0000 0100
                        0x08,        // 0000 1000
                        0x10,        // 0001 0000
                        0x20,        // 0010 0000
                        0x40,        // 0100 0000
                        0x80        // 1000 0000
                };

                const kal_uint8 SubLCDReSetArray[]=
                {
                        0xFE,        // 1111 1110
                        0xFD,        // 1111 1101
                        0xFB,        // 1111 1011
                        0xF7,        // 1111 0111
                        0xEF,        // 1110 1111
                        0xDF,        // 1101 1111
                        0xBF,        // 1011 1111
                        0x7F        // 0111 1111
                };
        #endif
#endif

void LCD_Delay(kal_uint32 delay_count)
{
        volatile kal_uint32 delay;
        for (delay =0;delay <(delay_count);delay++)        {}
}

void LCD_DelayMs(kal_uint16 time)
{
    volatile kal_uint32 delay;
    while(time)
    {
        for(delay =0;delay <5000;delay++) {} // 1ms
            time--;
     }
}

void spi_ini(void)
{
}

#if (defined(MT6218B)||defined(MT6219)||defined(MT6217)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
void init_lcd_interface(void)
{
        kal_uint32 i;
        REG_LCD_ROI_CTRL=0;
        CLEAR_LCD_CTRL_RESET_PIN;
   #if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
        #if (defined(LCD_HX8347))
        SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)2);                       //range(0~3)
        SET_LCD_PARALLEL_CE2WR_HOLD_TIME(2);                                    //range(0~3)
        SET_LCD_PARALLEL_CE2RD_SETUP_TIME(0);                                   //range(0~15)
        SET_LCD_PARALLEL_WRITE_WAIT_STATE(7);                                   //range(0~31)
        SET_LCD_PARALLEL_READ_LATENCY_TIME(0);                                  //range(0~31)
        SET_LCD_ROI_CTRL_CMD_LATENCY(8);                                        //Avoid refresh LCM Error(Min:8)   //range(0~1023)
        #endif
    #if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
            #if (defined(LCD_18BIT_MODE))
              #ifndef __CUST_NEW__
                    GPIO_ModeSetup(55, 1);
              #endif /* __CUST_NEW__ */
                  *((volatile unsigned short *) 0x801201B0) |= 0x4000;
                  *((volatile unsigned short *) 0x801201D0) |= 0x0001;
                     SET_LCD_PARALLEL_18BIT_DATA_BUS;
            #elif defined(LCD_8BIT_MODE)
                    SET_LCD_PARALLEL_8BIT_DATA_BUS;
            #elif defined(LCD_16BIT_MODE)
                    SET_LCD_PARALLEL_16BIT_DATA_BUS;
            #elif defined(LCD_9BIT_MODE)
                    SET_LCD_PARALLEL_9BIT_DATA_BUS;
               #endif
                for(i=0;i<62;i++)
                        SET_GAMMA_TABLE(LCD_GAMMA_TABLE0, i, i);
                SET_GAMMA_TABLE(LCD_GAMMA_TABLE0, 62, 61);
                SET_GAMMA_TABLE(LCD_GAMMA_TABLE0, 63, 61);
                SET_LCD_PARALLEL_GAMMA_R_TABLE(LCD_PARALLEL_GAMMA_TABLE0);
            SET_LCD_PARALLEL_GAMMA_G_TABLE(LCD_PARALLEL_GAMMA_TABLE0);
               SET_LCD_PARALLEL_GAMMA_B_TABLE(LCD_PARALLEL_GAMMA_TABLE0);
    #endif

    #if (defined(MT6219))
            DISABLE_LCD_PARALLEL_SYNC;
    #endif
   #endif
        SET_LCD_CTRL_RESET_PIN;
}        /* init_lcd_interface() */
#endif /* MT6217, MT6218B, MT6219 */

void LCD_ClearAll_HX8306A(kal_uint16 data);
static void LcdHwInitialize_HX8306A(kal_uint8 isinitial)
{

  #if defined(LCD_HX8347)   
    //******** Gamma Setting ***********************************
          LCD_SET_REG(0x0046,0x0094); //IDMON=0,INVON=1,NORON=1,PTLON=0
                LCD_DelayMs(5);
        LCD_SET_REG(0x0047,0x0041); //MY=0,MX=0,MV=0,ML=0,BGR=0,TEON=0
                LCD_DelayMs(5);
        LCD_SET_REG(0x0048,0x0000); //N_DC=1001 0101
                LCD_DelayMs(5);
        LCD_SET_REG(0x0049,0x0033); //P_DC=1001 0101
                LCD_DelayMs(5);
        LCD_SET_REG(0x004A,0x0023); //I_DC=1111 1111
                LCD_DelayMs(5);       
        LCD_SET_REG(0x004B,0x0045); //N_BP=0000 0010
                LCD_DelayMs(5);
        LCD_SET_REG(0x004C,0x0044); //N_FP=0000 0010
        LCD_DelayMs(5);
        LCD_SET_REG(0x004D,0x0077); //P_BP=0000 0010
        LCD_DelayMs(5);
        LCD_SET_REG(0x004E,0x0012); //P_FP=0000 0010
        LCD_DelayMs(5);
        LCD_SET_REG(0x004F,0x00CC); //I_BP=0000 0010
        LCD_DelayMs(5);
        LCD_SET_REG(0x0050,0x0046); //I_FP=0000 0010
        LCD_DelayMs(5);
        LCD_SET_REG(0x0051,0x0082);  //N_RTN=0000,N_NW=001
        LCD_DelayMs(5);       
       
        //******** 240X320 Windows Setting **********************
        LCD_SET_REG(0x0002,0x0000);  //Column address start 2
        LCD_DelayMs(5);
        LCD_SET_REG(0x0003,0x0000);  //Column address start 1
        LCD_DelayMs(5);
        LCD_SET_REG(0x0004,0x0000);  //Column address end 2
        LCD_DelayMs(5);
        LCD_SET_REG(0x0005,0x00EF);  // Column address end 1
        LCD_DelayMs(5);
        LCD_SET_REG(0x0006,0x0000);  // Row address start 2
        LCD_DelayMs(5);
        LCD_SET_REG(0x0007,0x0000);  // Row address start 1
        LCD_DelayMs(5);
        LCD_SET_REG(0x0008,0x0001);  // Row address end 2
        LCD_DelayMs(5);
        LCD_SET_REG(0x0009,0x003F);  // Row address end 1
        LCD_DelayMs(5);

        //******** Display setting **********************
        //LCD_SET_REG(0x0001,0x0006);
        //LCD_DelayMs(5);
        LCD_SET_REG(0x0016,0x0008);
        LCD_DelayMs(5);
        LCD_SET_REG(0x0023,0x0095);
        LCD_DelayMs(5);
        LCD_SET_REG(0x0024,0x0095);
        LCD_DelayMs(5);
        LCD_SET_REG(0x0025,0x00FF);
        LCD_DelayMs(5);
        LCD_SET_REG(0x0027,0x0002);
        LCD_DelayMs(5);
        LCD_SET_REG(0x0028,0x0002);
        LCD_DelayMs(5);
        LCD_SET_REG(0x0029,0x0002);
        LCD_DelayMs(5);
        LCD_SET_REG(0x002A,0x0002);
        LCD_DelayMs(5);
        LCD_SET_REG(0x002C,0x0002);
        LCD_DelayMs(5);
        LCD_SET_REG(0x002D,0x0002);
        LCD_DelayMs(5);

        LCD_SET_REG(0x003A,0x0001);
        LCD_DelayMs(5);
        LCD_SET_REG(0x003B,0x0001);
        LCD_DelayMs(5);

        LCD_SET_REG(0x003C,0x00F0);
        LCD_DelayMs(5);
        LCD_SET_REG(0x003D,0x0000);
        LCD_DelayMs(5);

                LCD_DelayMs(20);
                LCD_SET_REG(0x0035,0x0038);
        LCD_DelayMs(5);
        LCD_SET_REG(0x0036,0x0078);
        LCD_DelayMs(5);
        LCD_SET_REG(0x003E,0x0038);
        LCD_DelayMs(5);
        LCD_SET_REG(0x0040,0x000F);
        LCD_DelayMs(5);
        LCD_SET_REG(0x0041,0x00F0);
        LCD_DelayMs(5);
       
               //******** Power supply Setting ***********************************
        LCD_SET_REG(0x0019,0x0049); //OSCADJ=10 1000  OSD_EN=1
        LCD_DelayMs(5);
        LCD_SET_REG(0x0093,0x000F);
        LCD_DelayMs(5);
        LCD_DelayMs(10);
        LCD_SET_REG(0x0020,0x0030); //BT=0100            
        LCD_DelayMs(5);

                LCD_SET_REG(0x001D,0x0007); //VC2=100,VC1=100     DDVDH=VBGP*5.47   =4.6625
                LCD_DelayMs(5);
                LCD_SET_REG(0x001E,0x0000); //VC3=000             VREG3=DDVDH,
                LCD_DelayMs(5);
        LCD_SET_REG(0x001F,0x0007); //VRH=0110            VREG1=VBGP*2.8    =3.5
        LCD_DelayMs(5);
  
                //******** Vcom Setting for CMO 3.2"Panel ***********************************
                LCD_SET_REG(0x0044,0x0036); //VCM=101 1010   5A
                LCD_DelayMs(5);
                LCD_SET_REG(0x0045,0x000A); //VDV=1 0001
                LCD_DelayMs(5);
                LCD_DelayMs(10);
  
                LCD_SET_REG(0x001C,0x0004); //AP=100
                LCD_DelayMs(5);
                LCD_DelayMs(20);
                LCD_SET_REG(0x0070,0x0066);
                LCD_DelayMs(20);
                LCD_SET_REG(0x0043,0x0080); //VCOMG=1
                LCD_DelayMs(5);
                LCD_DelayMs(5);
                LCD_SET_REG(0x001B,0x0008); //GASENB=0,PON=1,DK=1,XDK=0,DDVDH_TRI=0,STB=0
                LCD_DelayMs(5);
                LCD_DelayMs(40);
                LCD_SET_REG(0x001B,0x0010); //GASENB=0,PON=1,DK=0,XDK=0,DDVDH_TRI=0,STB=0
                LCD_DelayMs(5);
                LCD_DelayMs(40);

        //******** Display on  Setting ***********************************
                LCD_SET_REG(0x0090,0x007F);
                LCD_DelayMs(5);
                LCD_SET_REG(0x0026,0x0004); //SAPS1=1000
                LCD_DelayMs(5);
                LCD_DelayMs(40);  
                LCD_SET_REG(0x0026,0x0024); //GON=1,DTE=0,D=01
                LCD_DelayMs(5);
                LCD_SET_REG(0x0026,0x002C); //GON=0,DTE=0,D=11
                LCD_DelayMs(5);
                LCD_DelayMs(40);
        LCD_SET_REG(0x0026,0x003C); //GON=1,DTE=1,D=11
                LCD_DelayMs(5);

        LCD_SET_REG(0x0001,0x0006);
                LCD_DelayMs(5);
       
                //******** Set internal VDDD voltage ***********************************
                LCD_SET_REG(0x0057,0x0002);
                LCD_DelayMs(5);
                LCD_SET_REG(0x0055,0x0000);
                LCD_DelayMs(5);
                LCD_SET_REG(0x0057,0x0000);
                LCD_DelayMs(5);
    #endif
  
    if(isinitial)               
       LCD_ClearAll_HX8306A(0x0000);     
}

#ifdef LCM_MMI_TYPE_QUERY      
kal_uint8   get_lcm_type()
{
        return LCM_TRANSMISSIVE_TYPE;
}
#endif      

kal_uint16 readreg_HX8306A(kal_uint16 addr)
{
  kal_uint16 return_data;
  kal_uint32 read_data;
  volatile kal_uint8  read_data1,read_data2;
   kal_uint32 savedMask;   
   
   while (LCD_IS_RUNNING) {};
   LCD_CtrlWrite_HX8306A(addr);
   read_data = *(volatile kal_uint32 *)MAIN_LCD_DATA_ADDR;
   read_data1= ((read_data >>10)&0x000000ff);
   read_data2= ((read_data>>1)&0x000000ff);   
   return_data=(read_data1<<8)|read_data2;
   while (LCD_IS_RUNNING) {};
   return return_data;       
}

kal_uint32 readreg_HX8306A_RAM(kal_uint16 addr)
{
  kal_uint16 return_data;
  kal_uint32 read_data;
  volatile kal_uint8  read_data1,read_data2;
  kal_uint32 savedMask;      
  while (LCD_IS_RUNNING) {};
  LCD_CtrlWrite_HX8306A(0x0022);
  read_data = *(volatile kal_uint32 *)LCD_HX8306A_DATA_ADDR;
  while (LCD_IS_RUNNING) {};
  return read_data;       
}

void LCD_EnterSleep_HX8306A(void)
{  
}

void LCD_ExitSleep_HX8306A(void)
{
}

void LCD_Partial_On_HX8306A(kal_uint16 start_page,kal_uint16 end_page)
{       
}

void LCD_Partial_Off_HX8306A(void)
{
}

kal_uint8 LCD_Partial_line_HX8306A(void)
{
        return 1;                /* partial display in 1 line alignment */
}

void LCD_Init_HX8306A(kal_uint32 bkground, void **buf_addr)
{
        kal_uint16 background = (kal_uint16)bkground;

        CLEAR_LCD_CTRL_RESET_PIN;
        LCD_DelayMs(10);
        SET_LCD_CTRL_RESET_PIN;
        LCD_DelayMs(10);
        LcdHwInitialize_HX8306A(1);
}

void LCD_PWRON_HX8306A(kal_bool on)
{
}

void LCD_SetContrast_HX8306A(kal_uint8 level)
{
}

void LCD_ON_HX8306A(kal_bool on)
{
}

void LCD_blockClear_HX8306A(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data)
{
        register kal_uint32  i = 0, j = 0;
  #if( (defined(LCD_18BIT_MODE)) || (defined(LCD_9BIT_MODE)) )
        kal_uint8 r_color,g_color,b_color;
        r_color=(data&0xF800)>>10;        //transfer to RGB666
        g_color=(data>>5)&0x3F;
        b_color=((data)&0x1F)<<1;
  #endif

  #if defined(LCD_HX8347)
         LCD_SET_REG(0x02,(kal_uint8)(x1>>8));   
     LCD_SET_REG(0x03,(kal_uint8)x1);     
     LCD_SET_REG(0x06,(kal_uint8)(y1>>8));   
     LCD_SET_REG(0x07,(kal_uint8)y1);  

     LCD_SET_REG(0x04,(kal_uint8)(x2>>8));   
     LCD_SET_REG(0x05,(kal_uint8)x2);   
     LCD_SET_REG(0x08,(kal_uint8)(y2>>8));   
     LCD_SET_REG(0x09,(kal_uint8)y2);   
     LCD_CtrlWrite_HX8306A(0x22);
  #endif         
  
  for(i=y1; i<=y2; i++)
        for(j=x1; j<=x2; j++)
        {
          #if (defined(LCD_8BIT_MODE))
                 *((volatile unsigned char *) LCD_HX8306A_DATA_ADDR)=(kal_uint8)(data>>8);
             LCD_delay_HX8306A();          
             *((volatile unsigned char *) LCD_HX8306A_DATA_ADDR)=(kal_uint8)(data);
             LCD_delay_HX8306A();
          #elif (defined(LCD_16BIT_MODE))
         *((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=data;
      #elif (defined(LCD_18BIT_MODE))
         *((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(r_color<<12)|(g_color<<6)|b_color;
      #elif (defined(LCD_9BIT_MODE))
         *((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=(r_color<<6)|(g_color>>3);
         LCD_delay_HX8306A();
         *((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=((g_color&0x07)<<6)|b_color;
          LCD_delay_HX8306A();                       
      #endif
        }
}

void LCD_ClearAll_HX8306A(kal_uint16 data)
{
   LCD_blockClear_HX8306A(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,data);
}

void LCD_BlockWrite_HX8306A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
  while (LCD_IS_RUNNING){};
     lcd_assert_fail = KAL_TRUE;
  #if defined(LCD_HX8347)
      LCD_SET_REG(0x02,(kal_uint8)(startx>>8));   
      LCD_SET_REG(0x03,(kal_uint8)startx);     
      LCD_SET_REG(0x06,(kal_uint8)(starty>>8));   
      LCD_SET_REG(0x07,(kal_uint8)starty);  

      LCD_SET_REG(0x04,(kal_uint8)(endx>>8));   
      LCD_SET_REG(0x05,(kal_uint8)endx);   
      LCD_SET_REG(0x08,(kal_uint8)(endy>>8));   
      LCD_SET_REG(0x09,(kal_uint8)endy);   
      LCD_CtrlWrite_HX8306A(0x22);

      DISABLE_LCD_TRANSFER_COMPLETE_INT;
      DISABLE_LCD_ROI_CTRL_CMD_FIRST;
      while (LCD_IS_RUNNING) {};       
      START_LCD_TRANSFER;
#endif  
     lcd_assert_fail = KAL_FALSE;
}

void LCD_Size_HX8306A(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
           *out_LCD_width = LCD_WIDTH;
           *out_LCD_height = LCD_HEIGHT;
}

/*Engineering mode*/
kal_uint8 LCD_GetParm_HX8306A(lcd_func_type type)
{
   switch(type)
   {
      case lcd_Bais_func:
         return 1;
      case lcd_Contrast_func:
         return 1;
      case lcd_LineRate_func:
         return 4;
      case lcd_Temperature_Compensation_func:
         return 4;
      default:
         ASSERT(0);
         return 100;
   }
}

void LCD_SetBias_HX8306A(kal_uint8 *bias)
{
   volatile  kal_uint16 data_value = 0;
           kal_uint16 data_addr = 0;
       
        lcd_power_up();
              data_addr = *bias;
              data_value = readreg_HX8306A(data_addr);          
              kal_prompt_trace(MOD_ENG,"ENG read %x as %x",data_addr,data_value);
           lcd_power_down();

}

void LCD_Contrast_HX8306A(kal_uint8 *contrast)
{
}

void LCD_LineRate_HX8306A(kal_uint8 *linerate)
{
}

void LCD_Temp_Compensate_HX8306A(kal_uint8 *compensate)
{
}

kal_bool LCD_ESD_check_HX8306A(){
     volatile  kal_uint16 data_value = 0;
     volatile  kal_uint32 ram_data_value = 0;
        kal_uint16 data_addr = 0;
        kal_uint32 lcd_draw_data;
        kal_uint8 i,reg_start_idx, reg_end_idx;
        kal_uint16 x1,x2,y1,y2;
        kal_uint32 temp_r, temp_g, temp_b;
       
        if (lcd_reg_index > 2)
           lcd_reg_index=0;

   
        while (LCD_IS_RUNNING) {};   
   
   if (lcd_reg_index==0){
      reg_start_idx = 0;
      reg_end_idx = 7;
   }else if (lcd_reg_index==1){
      reg_start_idx = 8;
      reg_end_idx = 14;
   }else{
      reg_start_idx = 15;
      reg_end_idx = N_lcd_reg-1;   
   }   
   
   for(i=reg_start_idx; i<=reg_end_idx; i++){
      if  (lcd_check==1){
         data_addr = lcd_check_reg.reg.addr;
         data_value = readreg_HX8306A(data_addr);          
         kal_prompt_trace(MOD_ENG,"--read %x as %x",data_addr,data_value);
         if (data_value!=lcd_check_reg.reg.para) {
                     
               kal_prompt_trace(MOD_ENG,"ESD FAIL read %x as %x",data_addr,data_value);
               return KAL_FALSE;
         }
           }
   }          
          
   lcd_reg_index++;
   while (LCD_IS_RUNNING) {};

          
return KAL_TRUE;

}


/*===================The above is LCD dependent==========*/
#if ( (defined(MT6205B)) || (defined(MT6218)) )
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size)
{
   #ifdef LCD_DMAENABLE
      kal_uint32 srcaddr=(kal_uint32)src;
      kal_uint32 dstaddr=(kal_uint32)dst;
      kal_uint16 size_MSB = (kal_uint16)(size >> 9);
      kal_uint16 size_LSB = (kal_uint16)(size & 0x01ff);

      ASSERT(lcd_assert_fail==KAL_FALSE);
      lcd_assert_fail = KAL_TRUE;
      ASSERT(DRV_Reg(LCD_REFR)==0x00);
      if(size_MSB)
      {
         DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16));
         DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr);

         DRV_WriteReg(LCD_REFR,0x0000);
         DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16));
         DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr));

         DRV_WriteReg(LCD_CADDRSET,512);
         DRV_WriteReg(LCD_PADDRSET,size_MSB);
         DRV_WriteReg(LCD_CHOP,0);

         DRV_WriteReg(LCD_PCON,LCD_PCON_DINC);

         DRV_WriteReg(LCD_START,LCD_START_BIT);
         while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN);
         DRV_WriteReg(LCD_START,LCD_STOP_BIT);
      }

      if (size_LSB)
      {
         srcaddr = (srcaddr + size - size_LSB);
         dstaddr = (dstaddr + size - size_LSB);

         DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16));
         DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr);

         DRV_WriteReg(LCD_REFR,0x0000);
         DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16));
         DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr));

         DRV_WriteReg(LCD_CADDRSET,size_LSB);
         DRV_WriteReg(LCD_PADDRSET,1);
         DRV_WriteReg(LCD_CHOP,0);

         DRV_WriteReg(LCD_PCON,LCD_PCON_DINC);

         DRV_WriteReg(LCD_START,LCD_START_BIT);
         while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN);
         DRV_WriteReg(LCD_START,LCD_STOP_BIT);
      }

      lcd_assert_fail = KAL_FALSE;
   #else /*!LCD_DMAENABLE*/
      kal_mem_cpy(dst,src,size);
   #endif   /*LCD_DMAENABLE*/
}
#else /*!(MT6205B,MT6218)*/
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size)
{
   kal_mem_cpy(dst,src,size);
}
#endif   /*(MT6205B,MT6218)*/


LCD_Funcs LCD_func_HX8306A = {
   LCD_Init_HX8306A,
   LCD_PWRON_HX8306A,
   LCD_SetContrast_HX8306A,
   LCD_ON_HX8306A,
   LCD_BlockWrite_HX8306A,
   LCD_Size_HX8306A,
   LCD_EnterSleep_HX8306A,
   LCD_ExitSleep_HX8306A,
   LCD_Partial_On_HX8306A,
   LCD_Partial_Off_HX8306A,
   LCD_Partial_line_HX8306A,
   /*Engineering mode*/
   LCD_GetParm_HX8306A,
   LCD_SetBias_HX8306A,
   LCD_Contrast_HX8306A,
   LCD_LineRate_HX8306A,
   LCD_Temp_Compensate_HX8306A
   #ifdef __LCD_ESD_RECOVERY__   
   ,LCD_ESD_check_HX8306A
   #endif
};

void LCD_FunConfig(void)
{
   MainLCD = &LCD_func_HX8306A;
}
发表于 2008-3-19 17:28:01 | 显示全部楼层
给我你的MSN,或许我可以帮你处理
点评回复

使用道具 举报

发表于 2008-3-24 17:13:56 | 显示全部楼层
楼上是高人?
小弟最近也在研究手机LCD驱动
能否加我MSN指点一二:G.C_Dong@hotmail.com
点评回复

使用道具 举报

发表于 2008-3-27 19:26:07 | 显示全部楼层
白屏应该是你的初始化代码没有被执行,否则一般不会是白屏,建议查查代码有没有走进去!!!
点评回复

使用道具 举报

发表于 2008-3-28 14:22:57 | 显示全部楼层
汗  代码没问题啊
你不会是把代码搁桌面上了吧........
自己跟跟代码
点评回复

使用道具 举报

发表于 2008-3-30 18:45:06 | 显示全部楼层
在初始化之前怎么没有reset一下?
先拉高再拉低
点评回复

使用道具 举报

发表于 2008-4-25 16:11:48 | 显示全部楼层
你好,请问解决了吗,我最近也再移植HX8347在MTK6226平台的驱动,16bits,请问能否传我一份,谢谢,邮箱yp6060@126.com
点评回复

使用道具 举报

发表于 2008-4-28 18:42:57 | 显示全部楼层
复位延时不够,在复位加个10MS延时看看
点评回复

使用道具 举报

发表于 2008-4-28 23:55:50 | 显示全部楼层
初始化代码不太对,确认一个,跟我的8347的有点出入,我的能点亮!
点评回复

使用道具 举报

发表于 2008-4-29 16:12:21 | 显示全部楼层
初始化代码跟用的屏不同而有所不同吧
点评回复

使用道具 举报

发表于 2008-5-7 17:40:09 | 显示全部楼层
楼主的LCD code是18bit的
点评回复

使用道具 举报

发表于 2008-12-18 12:08:40 | 显示全部楼层
狂感谢这些牛人,互相论剑共同提高
点评回复

使用道具 举报

发表于 2008-12-18 15:20:35 | 显示全部楼层
read_data = *(volatile kal_uint32 *)MAIN_LCD_DATA_ADDR;
   read_data1= ((read_data >>10)&0x000000ff);
   read_data2= ((read_data>>1)&0x000000ff);   
   return_data=(read_data1<<8)|read_data2;

不知道这里读寄存器 为什么要右移10位和右移1位啊 谁能解释一下
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-6 06:40 , Processed in 0.050449 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表