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

📄 lcd.c

📁 LGDP4531在mtk手机平台上的驱动源代码 mtk平台lcd驱动典型例子
💻 C
📖 第 1 页 / 共 2 页
字号:
	SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x00);
	SET_LCD_CMD_PARAMETER(1,LCD_CMD,0x50);
	SET_LCD_CMD_PARAMETER(2,LCD_DATA,(startx&0xff00)>>8);
	SET_LCD_CMD_PARAMETER(3,LCD_DATA,startx&0xff);
	SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x00);
	SET_LCD_CMD_PARAMETER(5,LCD_CMD,0x51);
	SET_LCD_CMD_PARAMETER(6,LCD_DATA,endx&0xff00>>8);
	SET_LCD_CMD_PARAMETER(7,LCD_DATA,endx&0xff);

	SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x00);
	SET_LCD_CMD_PARAMETER(9,LCD_CMD,0x52);
	SET_LCD_CMD_PARAMETER(10,LCD_DATA,(starty&0xff00)>>8);
	SET_LCD_CMD_PARAMETER(11,LCD_DATA,starty&0x00ff);
	SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x00);
	SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x53);
	SET_LCD_CMD_PARAMETER(14,LCD_DATA,(endy&0xff00)>>8);
	SET_LCD_CMD_PARAMETER(15,LCD_DATA,endy&0x00ff);

	SET_LCD_CMD_PARAMETER(16,LCD_CMD,0x00);
	SET_LCD_CMD_PARAMETER(17,LCD_CMD,0x20);
	SET_LCD_CMD_PARAMETER(18,LCD_DATA,(startx&0xff00)>>8);
	SET_LCD_CMD_PARAMETER(19,LCD_DATA,startx&0xff);
	SET_LCD_CMD_PARAMETER(20,LCD_CMD,0x00);
	SET_LCD_CMD_PARAMETER(21,LCD_CMD,0x21);
	SET_LCD_CMD_PARAMETER(22,LCD_DATA,(starty&0xff00)>>8);
	SET_LCD_CMD_PARAMETER(23,LCD_DATA,starty&0xff);

	SET_LCD_CMD_PARAMETER(24,LCD_CMD,0x00);
	SET_LCD_CMD_PARAMETER(25,LCD_CMD,0x22);

	ENABLE_LCD_TRANSFER_COMPLETE_INT;
	SET_LCD_ROI_CTRL_NUMBER_OF_CMD(26);
	ENABLE_LCD_ROI_CTRL_CMD_FIRST;
	while (LCD_IS_RUNNING) {};
	START_LCD_TRANSFER;

	lcd_assert_fail = KAL_FALSE;
}

void LCD_Size_LGDP4531(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_LGDP4531(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_LGDP4531(kal_uint8 *bias)
{

}

void LCD_Contrast_LGDP4531(kal_uint8 *contrast)
{
	LCD_set_reg_LGDP4531(0x0013,(0x86<<8)|(*contrast));
}

void LCD_LineRate_LGDP4531(kal_uint8 *linerate)
{
}

void LCD_Temp_Compensate_LGDP4531(kal_uint8 *compensate)
{
}
kal_bool LCD_ESD_check_LGDP4531()
{
	return KAL_TRUE;
}

/***********************SSD1773********************************/
#if (defined(DUAL_LCD))
void LCD_EnterSleep_SSD1773(void)
{
	LCD_CtrlWrite_SSD1773(LCD_SLEEP_MODE_IN_SSD1773|0x01);
}

void LCD_ExitSleep_SSD1773(void)
{
	LCD_CtrlWrite_SSD1773(LCD_SLEEP_MODE_OUT_SSD1773);
	LCD_CtrlWrite_SSD1773(LCD_DISPLAY_ON_SSD1773|0x01);
}

void LCD_Partial_On_SSD1773(kal_uint16 start_page,kal_uint16 end_page)
{
	LCD_CtrlWrite_SSD1773(LCD_ENTER_PARTIAL_SSD1773);
	LCD_DataWrite_SSD1773(start_page);
	LCD_DataWrite_SSD1773(end_page);
}

void LCD_Partial_Off_SSD1773(void)
{
	LCD_CtrlWrite_SSD1773(LCD_EXIT_PARTIAL_SSD1773);
}

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

void LCD_Set_Y_Addr_SSD1773(kal_uint16 start_row, kal_uint16 end_row)
{
	//Set Page Address
	LCD_CtrlWrite_SSD1773(LCD_SET_PAGE_ADDR_SSD1773);
	LCD_DataWrite_SSD1773(start_row+0x04); //Start Pos   qs zhang
	LCD_DataWrite_SSD1773(end_row+0x04); //End Pos      qs zhang
	
} 

void LCD_Set_X_Addr_SSD1773(kal_uint16 start_column, kal_uint16 end_column)
{
 	//Set Column Address
	LCD_CtrlWrite_SSD1773(LCD_SET_COLUMN_ADDR_SSD1773);
	LCD_DataWrite_SSD1773(start_column); //Start Pos
	LCD_DataWrite_SSD1773(end_column); //End Pos
}

void LCD_blockClear_SSD1773(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data)
{
	kal_uint16 LCD_x, LCD_y;
	volatile kal_uint16 delay;

	LCD_Set_Y_Addr_SSD1773(y1, y2);
	LCD_Set_X_Addr_SSD1773(x1, x2);

	LCD_CtrlWrite_SSD1773(LCD_WRITE_DATA_SSD1773);

	for(LCD_y=y1;LCD_y<=y2;LCD_y++)
	{
		for(LCD_x=x1;LCD_x<=x2;LCD_x++)
		{
			LCD_RAMWrite_SSD1773(data);
		}
	}
}

void LCD_ClearAll_SSD1773(kal_uint16 data)
{
   LCD_blockClear_SSD1773(0,0,SUBLCD_WIDTH-1,SUBLCD_HEIGHT-1,data);
}

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

	//Soft Reset 
	LCD_CtrlWrite_SSD1773(0x24);    //set temperature compensation
	LCD_CtrlWrite_SSD1773(0xA2);    //set line rate
	LCD_CtrlWrite_SSD1773(0xC2);   //0xc0 //set LCD mapping control
	LCD_CtrlWrite_SSD1773(0x2F);    //set pump control
	LCD_CtrlWrite_SSD1773(0x2B);    //set panel loading
	LCD_CtrlWrite_SSD1773(0xD6);    //set color mode   //262k
	LCD_CtrlWrite_SSD1773(0xEB);    //set LCD bias ratio

	LCD_CtrlWrite_SSD1773(0x81);    //REFERENCE VOLTAGE PARAMETER:255
	LCD_CtrlWrite_SSD1773(0x8f);    //SET REFERENCE VOLTAGE //zhang qs

	LCD_CtrlWrite_SSD1773(0xF1);  //set LCD_CtrlWrite_R61505 end
	LCD_CtrlWrite_SSD1773(0x3F);

	LCD_CtrlWrite_SSD1773(0x6f);   //LSB    0x60--0x6F
	LCD_CtrlWrite_SSD1773(0x73);   // Set Page Address MSB  0x70-0x77

	LCD_CtrlWrite_SSD1773(0x08);  // Set Column Address MSB  0x10-0x17
	LCD_CtrlWrite_SSD1773(0x10);  //LSB   0x00-0x0F

	LCD_CtrlWrite_SSD1773(0x8f); // 89);  //set ram address control//zhang qs

	LCD_CtrlWrite_SSD1773(0x84);  //set partial display control

	LCD_CtrlWrite_SSD1773(0xF9);  //enable window program

	LCD_CtrlWrite_SSD1773(0xF4);  //set Window Programming Starting Column Adddress
	LCD_CtrlWrite_SSD1773(0x08);

	LCD_CtrlWrite_SSD1773(0xF5);//set Window Programming Starting Row Adddress
	LCD_CtrlWrite_SSD1773(0x00);

	LCD_CtrlWrite_SSD1773(0xF6);//set Window Programming Ending Column Adddress
	LCD_CtrlWrite_SSD1773(0x67);

	LCD_CtrlWrite_SSD1773(0xF7);//set Window Programming Ending Row Adddress
	LCD_CtrlWrite_SSD1773(0x3F);

	LCD_CtrlWrite_SSD1773(0xAF);  //set display enable
}

void LCD_PWRON_SSD1773(kal_bool on)
{
	if(on)
	{
		LCD_ExitSleep_SSD1773();
	}
	else
	{
		LCD_EnterSleep_SSD1773();
	}
}

void LCD_SetContrast_SSD1773(kal_uint8 level)
{
	LCD_CtrlWrite_SSD1773(0x81);
	LCD_DataWrite_SSD1773(level);       //qs zhang
}

void LCD_SetNBlockInv_SSD1773(kal_uint8 level)
{
	LCD_CtrlWrite_SSD1773(LCD_SET_FRAME_NLINE_SSD1773);
	LCD_DataWrite_SSD1773(8); //F3~F0 Frame rate
	LCD_DataWrite_SSD1773(level); //N6|N4~N0 N Line
}

void LCD_ON_SSD1773(kal_bool on)
{
	if (on)
	{
		LCD_CtrlWrite_SSD1773(LCD_DISPLAY_ON_SSD1773|0x01);
	}
	else
	{
		LCD_CtrlWrite_SSD1773(LCD_DISPLAY_ON_SSD1773);
	}
}

void LCD_BlockWrite_SSD1773(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
	ASSERT(lcd_assert_fail==KAL_FALSE);
	lcd_assert_fail = KAL_TRUE;

	#if (defined(MT6218B) || defined(MT6219)|| defined(MT6217))
		LCD_Set_X_Addr_SSD1773(startx,endx);
		LCD_Set_Y_Addr_SSD1773(starty, endy);
		LCD_CtrlWrite_SSD1773(LCD_WRITE_DATA_SSD1773);

		ENABLE_LCD_TRANSFER_COMPLETE_INT;
		DISABLE_LCD_ROI_CTRL_CMD_FIRST;
		while (LCD_IS_RUNNING) {};
		START_LCD_TRANSFER;
	#endif /* MT6218B, MT6219 */

	lcd_assert_fail = KAL_FALSE;
}

void LCD_Size_SSD1773(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
	*out_LCD_width = SUBLCD_WIDTH;
	*out_LCD_height = SUBLCD_HEIGHT;
}

/*Engineering mode*/
kal_uint8 LCD_GetParm_SSD1773(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_SSD1773(kal_uint8 *bias)
{
	//Set bias ratio
	LCD_CtrlWrite_SSD1773(LCD_SET_BIAS_SSD1773);
	LCD_DataWrite_SSD1773(*bias);    // 1/7
}

void LCD_Contrast_SSD1773(kal_uint8 *contrast)
{
	LCD_CtrlWrite_SSD1773(0x81);
	LCD_DataWrite_SSD1773(*contrast);
}

void LCD_LineRate_SSD1773(kal_uint8 *linerate)
{
	LCD_CtrlWrite_SSD1773(LCD_SET_FRAME_NLINE_SSD1773);
	LCD_DataWrite_SSD1773(*linerate); //F3~F0 Frame rate
	LCD_DataWrite_SSD1773(16); //N6|N4~N0 N Line
}

void LCD_Temp_Compensate_SSD1773(kal_uint8 *compensate)
{
	LCD_CtrlWrite_SSD1773(LCD_TC_SSD1773);
	LCD_DataWrite_SSD1773(*compensate);
}
#endif	/*DUAL_LCD*/

/*===================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_LGDP4531 = {
   LCD_Init_LGDP4531,
   LCD_PWRON_LGDP4531,
   LCD_SetContrast_LGDP4531,
   LCD_ON_LGDP4531,
   LCD_BlockWrite_LGDP4531,
   LCD_Size_LGDP4531,
   LCD_EnterSleep_LGDP4531,
   LCD_ExitSleep_LGDP4531,
   LCD_Partial_On_LGDP4531,
   LCD_Partial_Off_LGDP4531,
   LCD_Partial_line_LGDP4531,
   /*Engineering mode*/
   LCD_GetParm_LGDP4531,
   LCD_SetBias_LGDP4531,
   LCD_Contrast_LGDP4531,
   LCD_LineRate_LGDP4531,
   LCD_Temp_Compensate_LGDP4531
   #ifdef __LCD_ESD_RECOVERY__   
   ,LCD_ESD_check_LGDP4531
   #endif 
};

#ifdef DUAL_LCD
LCD_Funcs LCD_func_SSD1773 = {
	LCD_Init_SSD1773,
	LCD_PWRON_SSD1773,
	LCD_SetContrast_SSD1773,
	LCD_ON_SSD1773,
	LCD_BlockWrite_SSD1773,
	LCD_Size_SSD1773,
	LCD_EnterSleep_SSD1773,
	LCD_ExitSleep_SSD1773,
	LCD_Partial_On_SSD1773,
	LCD_Partial_Off_SSD1773,
	LCD_Partial_line_SSD1773,
	/*Engineering mode*/
	LCD_GetParm_SSD1773,
	LCD_SetBias_SSD1773,
	LCD_Contrast_SSD1773,
	LCD_LineRate_SSD1773,
	LCD_Temp_Compensate_SSD1773
};
#endif

void LCD_FunConfig(void)
{

	MainLCD = &LCD_func_LGDP4531;


#ifdef DUAL_LCD
	SubLCD = &LCD_func_SSD1773;
#endif
}

⌨️ 快捷键说明

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