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

📄 lcd.c

📁 mtk 6226 平台 液晶驱动程序源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	else if(g_CurLcdID == LCD_JINGYUAN_D9320)
	{

	}else if(g_CurLcdID == LCD_SUONA_D0154)
	{

	}else if(g_CurLcdID == LCD_SUONA_HX8437)
	{

	}else if(g_CurLcdID == LCD_XIANYU_D5408)
	{

	}
	*/
}

void LCD_BlockWrite_R61505U(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
        kal_uint8 counter = 0 ,cnt = 0 ;
	while (LCD_IS_RUNNING);

//   ASSERT(lcd_assert_fail==KAL_FALSE);
    lcd_assert_fail = KAL_TRUE;
	#ifdef LCD_CMD_DMA_MODE
		#if (defined(LCD_8BIT_MODE))
		   SET_LCD_CMD_PARAMETER(0,LCD_CMD,((kal_uint8)(0x0016&0xFF00)>>8)); 
	          SET_LCD_CMD_PARAMETER(1,LCD_CMD,(kal_uint8)(0x0016&0xFF)); 
	          SET_LCD_CMD_PARAMETER(2,LCD_DATA,(kal_uint8) endx); 
	          SET_LCD_CMD_PARAMETER(3,LCD_DATA,(kal_uint8) startx); 
	          SET_LCD_CMD_PARAMETER(4,LCD_CMD,((kal_uint8)(0x0017&0xFF00)>>8)); 
	          SET_LCD_CMD_PARAMETER(5,LCD_CMD,(kal_uint8)(0x0017&0xFF)); 
	          SET_LCD_CMD_PARAMETER(6,LCD_DATA,(kal_uint8) endy); 
	          SET_LCD_CMD_PARAMETER(7,LCD_DATA,(kal_uint8) starty); 
	          SET_LCD_CMD_PARAMETER(8,LCD_CMD,((kal_uint8)(0x0021&0xFF00)>>8)); 
	          SET_LCD_CMD_PARAMETER(9,LCD_CMD,(kal_uint8)(0x0021&0xFF)); 
	          SET_LCD_CMD_PARAMETER(10,LCD_DATA,(kal_uint8) starty); 
	          SET_LCD_CMD_PARAMETER(11,LCD_DATA,(kal_uint8) startx); 
	          SET_LCD_CMD_PARAMETER(12,LCD_CMD,((kal_uint8)(0x0022&0xFF00)>>8)); 
	          SET_LCD_CMD_PARAMETER(13,LCD_CMD,(kal_uint8)(0x0022&0xFF)); 
	          SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14); 
		#elif (defined(LCD_9BIT_MODE))
       	#elif (defined(LCD_16BIT_MODE))
			if(g_CurLcdID == LCD_GEHUA_D0139)	
			{
				kal_prompt_trace(MOD_ENG,"LCD_BlockWrite_R61505U");	
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0046);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,(endx&0x00FF)<<8|(startx&0x00FF));

				SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0047);
				SET_LCD_CMD_PARAMETER(3,LCD_DATA,endy&0x01ff);
				SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0048);
				SET_LCD_CMD_PARAMETER(5,LCD_DATA,starty&0x01ff);

				SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0020);
				SET_LCD_CMD_PARAMETER(7,LCD_DATA,startx);
				SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0021);
				SET_LCD_CMD_PARAMETER(9,LCD_DATA,starty);
				SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0022);
				SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);

  
			}
			else if(g_CurLcdID == LCD_SUONA)
			{
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x02));
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,((startx)&0xFF00)>>8);
				SET_LCD_CMD_PARAMETER(2,LCD_CMD,(0x03));
				SET_LCD_CMD_PARAMETER(3,LCD_DATA,((startx)&0xFF));
				SET_LCD_CMD_PARAMETER(4,LCD_CMD,(0x04));
				SET_LCD_CMD_PARAMETER(5,LCD_DATA,((endx)&0xFF00)>>8);
				SET_LCD_CMD_PARAMETER(6,LCD_CMD,(0x05));
				SET_LCD_CMD_PARAMETER(7,LCD_DATA,((endx)&0xFF));
				SET_LCD_CMD_PARAMETER(8,LCD_CMD,(0x06));
				SET_LCD_CMD_PARAMETER(9,LCD_DATA,((starty)&0xFF00)>>8);

				SET_LCD_CMD_PARAMETER(10,LCD_CMD,(0x07));
				SET_LCD_CMD_PARAMETER(11,LCD_DATA,((starty)&0xFF));
				SET_LCD_CMD_PARAMETER(12,LCD_CMD,(0x08));
				SET_LCD_CMD_PARAMETER(13,LCD_DATA,((endy)&0xFF00)>>8);

				SET_LCD_CMD_PARAMETER(14,LCD_CMD,(0x09));
				SET_LCD_CMD_PARAMETER(15,LCD_DATA,((endy)&0xFF));
				SET_LCD_CMD_PARAMETER(16,LCD_CMD,(0x22));
		
			}
			#if 1
			else if(g_CurLcdID == LCD_SHENGDA_D9320)
			{
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0051);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,endx);
				SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0050);
				SET_LCD_CMD_PARAMETER(3,LCD_DATA,startx);
				SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0053);
				SET_LCD_CMD_PARAMETER(5,LCD_DATA,endy);
				SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0052);
				SET_LCD_CMD_PARAMETER(7,LCD_DATA,starty);
				SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0020);
				SET_LCD_CMD_PARAMETER(9,LCD_DATA,startx);
				SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0021);
				SET_LCD_CMD_PARAMETER(11,LCD_DATA,starty);
				SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0022);
				SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13);	
			}
			else if(g_CurLcdID == LCD_TIANMA_X)
			{
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0051);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,endx);
				SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0050);
				SET_LCD_CMD_PARAMETER(3,LCD_DATA,startx);
				SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0053);
				SET_LCD_CMD_PARAMETER(5,LCD_DATA,endy);
				SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0052);
				SET_LCD_CMD_PARAMETER(7,LCD_DATA,starty);
				SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0020);
				SET_LCD_CMD_PARAMETER(9,LCD_DATA,startx);
				SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0021);
				SET_LCD_CMD_PARAMETER(11,LCD_DATA,starty);
				SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0022);
				SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13);
			}
			else if(g_CurLcdID == LCD_JINGYUAN_D9320)
			{
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0051);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,endx);
				SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0050);
				SET_LCD_CMD_PARAMETER(3,LCD_DATA,startx);
				SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0053);
				SET_LCD_CMD_PARAMETER(5,LCD_DATA,endy);
				SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0052);
				SET_LCD_CMD_PARAMETER(7,LCD_DATA,starty);
				SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0020);
				SET_LCD_CMD_PARAMETER(9,LCD_DATA,startx);
				SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0021);
				SET_LCD_CMD_PARAMETER(11,LCD_DATA,starty);
				SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0022);
				SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13);
			}else if(g_CurLcdID == LCD_SUONA_D0154)
			{

			}else if(g_CurLcdID == LCD_SUONA_HX8437)
			{
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x02));
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,((startx)&0xFF00)>>8);
				SET_LCD_CMD_PARAMETER(2,LCD_CMD,(0x03));
				SET_LCD_CMD_PARAMETER(3,LCD_DATA,((startx)&0xFF));
				SET_LCD_CMD_PARAMETER(4,LCD_CMD,(0x04));
				SET_LCD_CMD_PARAMETER(5,LCD_DATA,((endx)&0xFF00)>>8);
				SET_LCD_CMD_PARAMETER(6,LCD_CMD,(0x05));
				SET_LCD_CMD_PARAMETER(7,LCD_DATA,((endx)&0xFF));
				SET_LCD_CMD_PARAMETER(8,LCD_CMD,(0x06));
				SET_LCD_CMD_PARAMETER(9,LCD_DATA,((starty)&0xFF00)>>8);
				SET_LCD_CMD_PARAMETER(10,LCD_CMD,(0x07));
				SET_LCD_CMD_PARAMETER(11,LCD_DATA,((starty)&0xFF));
				SET_LCD_CMD_PARAMETER(12,LCD_CMD,(0x08));
				SET_LCD_CMD_PARAMETER(13,LCD_DATA,((endy)&0xFF00)>>8);
				SET_LCD_CMD_PARAMETER(14,LCD_CMD,(0x09));
				SET_LCD_CMD_PARAMETER(15,LCD_DATA,((endy)&0xFF));
				SET_LCD_CMD_PARAMETER(16,LCD_CMD,(0x22));
				SET_LCD_ROI_CTRL_NUMBER_OF_CMD(17);
			}
			else if(g_CurLcdID == LCD_XIANYU_D5408)
			{
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0050);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,startx);
				SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0051);
				SET_LCD_CMD_PARAMETER(3,LCD_DATA,endx);
				SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0052);
				SET_LCD_CMD_PARAMETER(5,LCD_DATA,starty);
				SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0053);
				SET_LCD_CMD_PARAMETER(7,LCD_DATA,endy);
				SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0020);
				SET_LCD_CMD_PARAMETER(9,LCD_DATA,startx);
				SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0021);
				SET_LCD_CMD_PARAMETER(11,LCD_DATA,starty);
				SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0022);
				SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13);
			}
			#endif
		#elif (defined(LCD_18BIT_MODE))
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00)<<2)|((0x0044&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((endx&0xFF)<<10)|((startx&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00)<<2)|((0x0045&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(3,LCD_DATA,((endy&0xFF)<<10)|((starty&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00)<<2)|((0x0021&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(5,LCD_DATA,((starty&0xFF)<<10)|((startx&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00)<<2)|((0x0022&0xFF)<<1));
    			SET_LCD_ROI_CTRL_NUMBER_OF_CMD(7);
		#endif
		ENABLE_LCD_TRANSFER_COMPLETE_INT; 
		ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
		if(g_CurLcdID == LCD_SUONA)
		{
			SET_LCD_ROI_CTRL_NUMBER_OF_CMD(17);
		}
		while (LCD_IS_RUNNING) {}; 
		START_LCD_TRANSFER;
	#else   /* LCD_CMD_DMA_MODE */
		LCD_CtrlWrite_R61505U(0x0044);
		LCD_DataWrite_R61505U((((endx&0xFF)<<8)|(startx&0xFF)));
		LCD_CtrlWrite_R61505U(0x0045);
		LCD_DataWrite_R61505U((((endy&0xFF)<<8)|(starty&0xFF)));
		LCD_CtrlWrite_R61505U(0x0021);
		LCD_DataWrite_R61505U((((starty&0xFF)<<8)|(startx&0xFF)));
		LCD_CtrlWrite_R61505U(0x0022);

		DISABLE_LCD_TRANSFER_COMPLETE_INT;
		DISABLE_LCD_ROI_CTRL_CMD_FIRST;
		START_LCD_TRANSFER;
    	#endif /* LCD_CMD_DMA_MODE */
    lcd_assert_fail = KAL_FALSE;
}

void LCD_Size_R61505U(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_R61505U(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_R61505U(kal_uint8 *bias)
{
}

void LCD_Contrast_R61505U(kal_uint8 *contrast)
{
}

void LCD_LineRate_R61505U(kal_uint8 *linerate)
{
}

void LCD_Temp_Compensate_R61505U(kal_uint8 *compensate)
{
}

kal_bool LCD_ESD_check_R61505U()
{
  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_R61505U(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_R61505U = {
   LCD_Init_R61505U,
   LCD_PWRON_R61505U,
   LCD_SetContrast_R61505U,
   LCD_ON_R61505U,
   LCD_BlockWrite_R61505U,
   LCD_Size_R61505U,
   LCD_EnterSleep_R61505U,
   LCD_ExitSleep_R61505U,
   LCD_Partial_On_R61505U,
   LCD_Partial_Off_R61505U,
   LCD_Partial_line_R61505U,
   /*Engineering mode*/
   LCD_GetParm_R61505U,
   LCD_SetBias_R61505U,
   LCD_Contrast_R61505U,
   LCD_LineRate_R61505U,
   LCD_Temp_Compensate_R61505U
   #ifdef __LCD_ESD_RECOVERY__   
   ,LCD_ESD_check_R61505U
   #endif 
};

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

⌨️ 快捷键说明

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