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

📄 lcd.c

📁 mtk LCD驱动程序文件! 可以了解mtk的lcd驱动程序架构!
💻 C
📖 第 1 页 / 共 4 页
字号:

	LCD_IndexWrite_HX8309A(0xef);

	LCD_IndexWrite_HX8309A(0xb0);

	LCD_IndexWrite_HX8309A(0x49);

	LCD_IndexWrite_HX8309A(0x02);
	
	LCD_IndexWrite_HX8309A(0xef);

	LCD_IndexWrite_HX8309A(0x00);
   
	LCD_IndexWrite_HX8309A(0x7f);

	LCD_IndexWrite_HX8309A(0x01);

	LCD_IndexWrite_HX8309A(0xe1);

	LCD_IndexWrite_HX8309A(0x81);

	LCD_IndexWrite_HX8309A(0xe2);

	LCD_IndexWrite_HX8309A(0x02);

	LCD_IndexWrite_HX8309A(0xe2);

	LCD_IndexWrite_HX8309A(0x76);

	LCD_IndexWrite_HX8309A(0xe1);

	LCD_IndexWrite_HX8309A(0x83);

	LCD_Delay(240);

	LCD_IndexWrite_HX8309A(0x80);

	LCD_IndexWrite_HX8309A(0x01);

	LCD_IndexWrite_HX8309A(0xef);

	LCD_IndexWrite_HX8309A(0x90);
	

	LCD_IndexWrite_HX8309A(0x00);

	LCD_IndexWrite_HX8309A(0x00);

//     LCD_ClearAll_HX8309A(bkground);
 
 
 

}

void LCD_PWRON_HX8309A(kal_bool on)
{
   if(on)
   {
      LCD_ExitSleep_HX8309A();
   }
   else
   {
      LCD_EnterSleep_HX8309A();
   }
}

void LCD_SetContrast_HX8309A(kal_uint8 level)
{

}

void LCD_SetNBlockInv_HX8309A(kal_uint8 level)
{
}

void LCD_ON_HX8309A(kal_bool on)
{

//tony
   if (on)
   {
 
   }
   else
   {
   }


}

void LCD_BlockWrite_HX8309A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
       
   kal_uint16 l_startx=startx, l_starty=starty, l_endx=endx, l_endy=endy;
   kal_uint16 roi_offset_x,roi_offset_y;
   kal_uint16 roi_width,roi_height;
#if 0	
	roi_offset_x=GET_LCD_ROI_WINDOW_OFFSET_X;
	roi_offset_y=GET_LCD_ROI_WINDOW_OFFSET_Y;
	roi_width=GET_LCD_ROI_WINDOW_SIZE_X;
	roi_height=GET_LCD_ROI_WINDOW_SIZE_Y;

//	roi_offset_x -= (startx&0x03);
//	roi_width+= (startx&0x03);
//	roi_width+= (3-(endx&0x03));
	SET_LCD_ROI_WINDOW_SIZE(roi_width,roi_height);
	SET_LCD_ROI_WINDOW_OFFSET(roi_offset_x,roi_offset_y);
//	l_startx -= (startx&0x03);
//	l_endx += (3-(endx&0x03));
#endif
	while (LCD_IS_RUNNING);
   ASSERT(lcd_assert_fail==KAL_FALSE);
   lcd_assert_fail = KAL_TRUE;



#if 1// (defined(MT6218B)||defined(MT6219)||defined(MT6217) ||defined(MT6226)||defined(MT6226M))

//cylin avoids camera preview, video play or video recorder screen display in disorder 20060207
        #ifdef LCD_CMD_DMA_MODE
                SET_LCD_CMD_PARAMETER(0,LCD_CMD,(kal_uint8)0xef);
                SET_LCD_CMD_PARAMETER(1,LCD_CMD,(kal_uint8)0x90);
                SET_LCD_CMD_PARAMETER(2,LCD_CMD,(kal_uint8)0x05);
                SET_LCD_CMD_PARAMETER(3,LCD_CMD,(kal_uint8)0x00);
                SET_LCD_CMD_PARAMETER(4,LCD_CMD,(kal_uint8)0x08);
                SET_LCD_CMD_PARAMETER(5,LCD_CMD,(kal_uint8)startx);
                SET_LCD_CMD_PARAMETER(6,LCD_CMD,(kal_uint8)0x09);
                SET_LCD_CMD_PARAMETER(7,LCD_CMD,(kal_uint8)endx);
                SET_LCD_CMD_PARAMETER(8,LCD_CMD,(kal_uint8)0x0a);
                SET_LCD_CMD_PARAMETER(9,LCD_CMD,(kal_uint8)starty);
				
                SET_LCD_CMD_PARAMETER(10,LCD_CMD,(kal_uint8)0x0b);
                SET_LCD_CMD_PARAMETER(11,LCD_CMD,(kal_uint8)endy);
                SET_LCD_ROI_CTRL_NUMBER_OF_CMD(12);
		 ENABLE_LCD_TRANSFER_COMPLETE_INT;
                ENABLE_LCD_ROI_CTRL_CMD_FIRST;
  //              while (LCD_IS_RUNNING) {};
                START_LCD_TRANSFER;
	#else
//        #else
          //tony esd 0123
          LCD_IndexWrite_HX8309A(0x0000);
          LCD_DataWrite_HX8309A(0x00ff);	 
          LCD_IndexWrite_HX8309A(0x0000);
          LCD_IndexWrite_HX8309A(0x0000);
          LCD_IndexWrite_HX8309A(0x0000);
          LCD_IndexWrite_HX8309A(0x0000);         
          //tony esd 0123			  
           	  LCD_Set_X_Addr_HX8309A(l_startx,l_endx);
           	  LCD_Set_Y_Addr_HX8309A(l_starty, l_endy);
         //tony esd 0123
          LCD_IndexWrite_HX8309A(0x0000);
          LCD_DataWrite_HX8309A(0x00ff);	 
          LCD_IndexWrite_HX8309A(0x0000);
          LCD_IndexWrite_HX8309A(0x0000);
          LCD_IndexWrite_HX8309A(0x0000);
          LCD_IndexWrite_HX8309A(0x0000);         
          //tony esd 0123			   
                LCD_IndexWrite_HX8309A(0x21);
                LCD_DataWrite_HX8309A((kal_uint16)(((l_starty*0x100) + l_startx)));
                LCD_IndexWrite_HX8309A(0x22);

                ENABLE_LCD_TRANSFER_COMPLETE_INT;
                DISABLE_LCD_ROI_CTRL_CMD_FIRST; 
                while (LCD_IS_RUNNING) {};
                START_LCD_TRANSFER;
			}
        #endif
#endif


   lcd_assert_fail = KAL_FALSE;
}

void LCD_Size_HX8309A(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_HX8309A(lcd_func_type type)
{
   switch(type)
   {
      case lcd_Bais_func:
         return 1;
      case lcd_Contrast_func:
         return 1;
      case lcd_LineRate_func:
         return 1;
      case lcd_Temperature_Compensation_func:
         return 1;
      default:
         ASSERT(0);
         return 100;
   }
}

void LCD_SetBias_HX8309A(kal_uint8 *bias)
{


}

void LCD_Contrast_HX8309A(kal_uint8 *contrast)
{
}

void LCD_LineRate_HX8309A(kal_uint8 *linerate)
{
}

void LCD_Temp_Compensate_HX8309A(kal_uint8 *compensate)
{
}


kal_uint16 readreg_HX8309A(kal_uint16 addr)
{
#ifdef LCD_16BIT_MODE
    kal_uint16 return_data;
    kal_uint32 read_data;
    volatile kal_uint8 read_data1, read_data2;

    while (LCD_IS_RUNNING);
    LCD_CtrlWrite_HX8309A_ESD(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;	
#elif (defined(LCD_8BIT_MODE))
    kal_uint16 return_data;
    kal_uint8 iDataH, iDataL;

    while (LCD_IS_RUNNING);
    LCD_CtrlWrite_HX8306A_ESD(addr);
    iDataH = *(volatile kal_uint8 *) MAIN_LCD_DATA_ADDR;
    iDataL = *(volatile kal_uint8 *) MAIN_LCD_DATA_ADDR;
    return_data = (iDataH << 8) | iDataL;
    while (LCD_IS_RUNNING);

    return return_data;	
#endif
}

kal_bool LCD_ESD_check_HX8309A()
{
    volatile  kal_uint16 data_value = 0;
    kal_uint16 data_addr = 0;
	kal_uint8 i, reg_start_idx, reg_end_idx;
	return;
	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[i].addr;
            data_value = readreg_HX8309A(data_addr);	   
            kal_prompt_trace(MOD_ENG, "--read %x as %x", data_addr, data_value);
            if (data_value != lcd_check_reg.reg[i].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_HX8309A = {
   LCD_Init_HX8309A,
   LCD_PWRON_HX8309A,
   LCD_SetContrast_HX8309A,
   LCD_ON_HX8309A,
   LCD_BlockWrite_HX8309A,
   LCD_Size_HX8309A,
   LCD_EnterSleep_HX8309A,
   LCD_ExitSleep_HX8309A,
   LCD_Partial_On_HX8309A,
   LCD_Partial_Off_HX8309A,
   LCD_Partial_line_HX8309A,
   /*Engineering mode*/
   LCD_GetParm_HX8309A,
   LCD_SetBias_HX8309A,
   LCD_Contrast_HX8309A,
   LCD_LineRate_HX8309A,
   LCD_Temp_Compensate_HX8309A
      #ifdef __LCD_ESD_RECOVERY__   
   ,LCD_ESD_check_HX8309A
   #endif 

};


void LCD_FunConfig(void)
{
	MainLCD = &LCD_func_HX8309A;
}


#endif

⌨️ 快捷键说明

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