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

📄 lcd.c

📁 MTK常用LCD驱动,[HX8312 SSD1289 TL1763 ILI9320 HX8346 S6D01390] LGDP4531
💻 C
📖 第 1 页 / 共 5 页
字号:

void LCD_BlockWrite_HX8306A(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;

#ifdef LCD_CMD_DMA_MODE

if(lcd_id==_LGDP4531_240x320)
{
	//l_startx=l_startx+1;
	//l_endx=l_endx+1;
	//l_starty=l_starty+1;
	//l_endy=l_endy+1;
	SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0020); //x start ram
	SET_LCD_CMD_PARAMETER(1,LCD_DATA,l_startx);
	SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0021); //y start ram 
	SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_starty);
	SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0050);  //x start of windowse
	SET_LCD_CMD_PARAMETER(5,LCD_DATA,l_startx);
	SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0051); //x end of windowse
	SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_endx);
	SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0052);  //y start of windows
	SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_starty);
	SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0053);  //y  end of window
	SET_LCD_CMD_PARAMETER(11,LCD_DATA,l_endy);	
	SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0022);
	ENABLE_LCD_TRANSFER_COMPLETE_INT;
	SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13);

	 ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	while (LCD_IS_RUNNING) {}; 
	START_LCD_TRANSFER; 
	return;
}
if(lcd_id==_ILI9320_240x320)
{
      // #ifdef _ILI9320_240x320
	SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0050); //x start ram
	SET_LCD_CMD_PARAMETER(1,LCD_DATA,l_startx&0xff);
	
	SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0051); //x end ram 
	SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_endx&0x00ff);

	SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0052);  //y start  ram
	SET_LCD_CMD_PARAMETER(5,LCD_DATA,l_starty&0x1ff);
	
		
	SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0053); //y  end ram
	SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_endy&0x1ff);

	   
       SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0020); //x start for window
        SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_startx&0xff);
   
        SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0021); //y start for window
        SET_LCD_CMD_PARAMETER(11,LCD_DATA,l_starty&0x1ff);
   
       SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0022);
	   ENABLE_LCD_TRANSFER_COMPLETE_INT;
             SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13);
	 ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	while (LCD_IS_RUNNING) {}; 
	START_LCD_TRANSFER; 
      // #endif
    return;  
}


if(lcd_id==_HX8346_240x320_) 
 {
	//		-----window setting-------

	SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0002);
	SET_LCD_CMD_PARAMETER(1,LCD_DATA,0);
	SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0003);
	SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_startx&0XFF);

	SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0004);
	SET_LCD_CMD_PARAMETER(5,LCD_DATA,0);
	SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0005);
	SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_endx&0XFF)

	SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0006);
	SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_starty>>8);
	SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0007);
	SET_LCD_CMD_PARAMETER(11,LCD_DATA,l_starty&0XFF);

	SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0008);
	SET_LCD_CMD_PARAMETER(13,LCD_DATA,l_endy>>8);
	SET_LCD_CMD_PARAMETER(14,LCD_CMD,0x0009);
	SET_LCD_CMD_PARAMETER(15,LCD_DATA,l_endy&0XFF);	

	SET_LCD_CMD_PARAMETER(16,LCD_CMD,0x0022);
	ENABLE_LCD_TRANSFER_COMPLETE_INT;
	SET_LCD_ROI_CTRL_NUMBER_OF_CMD(17);
	ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	while (LCD_IS_RUNNING) {}; 
	START_LCD_TRANSFER; 
	return;
//#endif
	   }

 if(lcd_id==_TL1763_240x320)
{
   //#ifdef  _TL1763_240x320

   
   SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0046);  //x start and end	for windows
   SET_LCD_CMD_PARAMETER(1,LCD_DATA,((l_endx&0xff)<<8)|(l_startx&0xff));
   
   SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0048);  //y  start for window
   SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_starty&0x1ff);
   SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0047); //y  end for window
   SET_LCD_CMD_PARAMETER(5,LCD_DATA,l_endy&0x1ff);
   
   
      SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0020); //x start ram
   SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_startx&0xff);
   
   SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0021); //y start ram high 8bit
   SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_starty&0x1ff);
   
   SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0022);
   ENABLE_LCD_TRANSFER_COMPLETE_INT;
   SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);

       ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	while (LCD_IS_RUNNING) {}; 
	START_LCD_TRANSFER; 
//#endif
return;
 	}

if(lcd_id==_SSD1289_240X320)
{ 
  //#ifdef _SSD1289_240X320

	SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x004e); //x start ram
	SET_LCD_CMD_PARAMETER(1,LCD_DATA,l_startx);
	
	SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x004f); //y start ram high 8bit
	SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_starty);
	
	SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0044);  //x start and end  for windows
	SET_LCD_CMD_PARAMETER(5,LCD_DATA,(l_endx<<8|l_startx));
	
	SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0045);  //y  start for window
	SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_starty);
	SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0046); //y  end for window
	SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_endy);
	
	SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0022);
	ENABLE_LCD_TRANSFER_COMPLETE_INT;
	SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);
 	ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	while (LCD_IS_RUNNING) {}; 
	START_LCD_TRANSFER; 
   //#endif
   return;
}

if(lcd_id==_S6D0139_240x320)
{ 
 //#ifdef _S6D0139_240x320
   SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0046);  //x start and end	for windows
   SET_LCD_CMD_PARAMETER(1,LCD_DATA,((l_endx&0xff)<<8)|(l_startx&0xff));
   
   SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0048);  //y  start for window
   SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_starty&0x1ff);
   SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0047); //y  end for window
   SET_LCD_CMD_PARAMETER(5,LCD_DATA,l_endy&0x1ff);
   
   
      SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0020); //x start ram
   SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_startx&0xff);
   
   SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0021); //y start ram high 8bit
   SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_starty&0x1ff);
   
   SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0022);
   ENABLE_LCD_TRANSFER_COMPLETE_INT;
   SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);

       ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	while (LCD_IS_RUNNING) {}; 
	START_LCD_TRANSFER; 
//#endif
 return;
}
   
	#ifdef _HX8312_240x320_
	SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x4200|l_startx));//x start ram
	SET_LCD_CMD_PARAMETER(1,LCD_CMD,(0x4300|l_starty>>8));//y start ram high 8bit
	SET_LCD_CMD_PARAMETER(2,LCD_CMD,(0x4400|(l_starty&0Xff)));//y start ram low 8 bit

	
	SET_LCD_CMD_PARAMETER(3,LCD_CMD,(0x4500|l_startx));//x start  for windows
	SET_LCD_CMD_PARAMETER(4,LCD_CMD,(0x4600|l_endx));//x  end for window 

	
	SET_LCD_CMD_PARAMETER(5,LCD_CMD,(0x4700|l_starty>>8));//y  start for window  high 8bit 
	SET_LCD_CMD_PARAMETER(6,LCD_CMD,(0x4800|(l_starty&0Xff)));//y start  for window  low 8bit
	
	SET_LCD_CMD_PARAMETER(7,LCD_CMD,(0x4900|l_endy>>8));//y  end for window  high 8bit 
	SET_LCD_CMD_PARAMETER(8,LCD_CMD,(0x4a00|(l_endy&0Xff)));//y  end for window low 8bit
	
	SET_LCD_CMD_PARAMETER(9,LCD_CMD,0x3b01);
	ENABLE_LCD_TRANSFER_COMPLETE_INT;
	SET_LCD_ROI_CTRL_NUMBER_OF_CMD(10);

	#endif

	ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	while (LCD_IS_RUNNING) {}; 
	START_LCD_TRANSFER; 
#else
	#ifdef _HX8312_240x320_
	LCD_CtrlWrite_HX8306A(0x4200|l_startx);//x start ram
	LCD_CtrlWrite_HX8306A(0x4300|l_starty>>8);//y start ram high 8bit
	LCD_CtrlWrite_HX8306A(0x4400|(l_starty&0Xff));//y start ram low 8 bit

	
	LCD_CtrlWrite_HX8306A(0x4500|l_startx);//x start  for windows
	LCD_CtrlWrite_HX8306A(0x4600|l_endx);//x  end for window 

	
	LCD_CtrlWrite_HX8306A(0x4700|l_starty>>8);//y  start for window  high 8bit 
	LCD_CtrlWrite_HX8306A(0x4800|(l_starty&0Xff));//y start  for window  low 8bit	
	LCD_CtrlWrite_HX8306A(0x4900|l_endy>>8);//y  end for window  high 8bit 
	LCD_CtrlWrite_HX8306A(0x4a00|(l_endy&0Xff));//y  end for window low 8bit
	
	LCD_CtrlWrite_HX8306A(0x3b01);
	#endif
	#ifdef _SSD1289_240X320
	Init_data(0x004e,l_startx);//  x  start ram adress
	Init_data(0x004f,l_starty);//y start  ram adress
	Init_data(0x0044,(l_endx<<8)|l_startx);  //x start and end  for windows
	Init_data(0x0045,l_starty);       //y  start for window
	Init_data(0x0046,l_endy);      //y  end for window
	LCD_CtrlWrite_HX8306A(0x0022);

	
	#endif
	   #ifdef  _TL1763_240x320
	
	Init_data(0x0046,(l_endx<<8)|l_startx);  //x start and end  for windows
	Init_data(0x0048,l_starty);       //y  start for window
	Init_data(0x0047,l_endy);      //y  end for window
	
		Init_data(0x0020,l_startx);//  x  start ram adress
	Init_data(0x0021,l_starty);//y start  ram adress
	LCD_CtrlWrite_HX8306A(0x0022);
	#endif
	DISABLE_LCD_TRANSFER_COMPLETE_INT;
	DISABLE_LCD_ROI_CTRL_CMD_FIRST;
	while (LCD_IS_RUNNING) {}; 
	START_LCD_TRANSFER;
#endif
} 


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 1; 
      case lcd_Temperature_Compensation_func: 
         return 1; 
      default: 
         ASSERT(0); 
         return 100; 
   } 
} 

void LCD_SetBias_HX8306A(kal_uint8 *bias)
{
}

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;
    kal_uint16 data_addr = 0;
	kal_uint8 i, reg_start_idx, reg_end_idx;
	
	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_HX8306A(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;
}


#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;
}

⌨️ 快捷键说明

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