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

📄 lcd_if.c

📁 8032底层驱动部分。因为可以移植 所以单独来拿出来
💻 C
📖 第 1 页 / 共 5 页
字号:
      #endif
      break;
#endif   /* DUAL_LCD */
      default:
         ASSERT(0);
      break;
   }
	lcd_power_down();
}  /* lcd_sleep_in() */

/*************************************************************************
* FUNCTION
*     lcd_sleep_out
*
* DESCRIPTION
*     This function is used to let LCD module leave sleep mode
*
* PARAMETERS
*     lcd_id   : selection MAIN_LCD or SUB_LCD
*
* RETURNS
*     None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void lcd_sleep_out(kal_uint8 lcd_id)
{
	kal_uint32 save_irq_mask;

	lcd_power_up();
   switch (lcd_id)
   {
      case MAIN_LCD:
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
         DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,MAIN_LCD_CMD_ADDR);
         DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,MAIN_LCD_DATA_ADDR);
#endif /* MT6218B, MT6219 */
		#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
			if((main_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)||
			   (main_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE))
			{
   			save_irq_mask=SaveAndSetIRQMask();
				lcd_sleeping_state=KAL_TRUE;
   			RestoreIRQMask(save_irq_mask);
				while (IMGDMA_IBW2_IS_BUSY) {};
				IRQMask(IRQ_LCD_CODE);
         	LCD_WRITE_MEM_AND_LCM;
         	ENABLE_LCD_ROI_CTRL_CMD_FIRST;
         	lcd_hw_trigger_roi_ctrl |= LCD_ROI_CTRL_CMD_ENABLE_BIT;
				save_lcd_register();
				REG_LCD_ROI_HW_CTRL = 0;
         	MainLCD->SleepOut();
         	restore_lcd_register();
         	IRQUnmask(IRQ_LCD_CODE);
   			save_irq_mask=SaveAndSetIRQMask();
				lcd_sleeping_state=KAL_FALSE;
   			RestoreIRQMask(save_irq_mask);				
      		main_lcd_hw_trigger_output_mode=KAL_TRUE;
      		
      		if (main_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)
      		   main_lcd_operation_state=LCD_DC_UPDATE_STATE;
      		else if (main_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)
      		   main_lcd_operation_state=LCD_HW_UPDATE_STATE;      		   
			}
			else
			{
         	MainLCD->SleepOut();
	         main_lcd_operation_state=LCD_STANDBY_STATE;
	      }
		#else
         MainLCD->SleepOut();
         main_lcd_operation_state=LCD_STANDBY_STATE;
      #endif
      break;
#ifdef DUAL_LCD
      case SUB_LCD:
	#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
         DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,SUB_LCD_CMD_ADDR);
         DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,SUB_LCD_DATA_ADDR);
	#endif /* MT6218B, MT6219 */
		#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
			if((sub_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)||
			   (sub_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE))   
			{
   			save_irq_mask=SaveAndSetIRQMask();
				lcd_sleeping_state=KAL_TRUE;
   			RestoreIRQMask(save_irq_mask);
				while (IMGDMA_IBW2_IS_BUSY) {};
         	LCD_WRITE_MEM_AND_LCM;
         	ENABLE_LCD_ROI_CTRL_CMD_FIRST;
         	lcd_hw_trigger_roi_ctrl |= LCD_ROI_CTRL_CMD_ENABLE_BIT;
				save_lcd_register();
				REG_LCD_ROI_HW_CTRL = 0;
         	SubLCD->SleepOut();
         	restore_lcd_register();
   			save_irq_mask=SaveAndSetIRQMask();
				lcd_sleeping_state=KAL_FALSE;
   			RestoreIRQMask(save_irq_mask);				
      		sub_lcd_hw_trigger_output_mode=KAL_TRUE;
      		if (sub_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)
      		   sub_lcd_operation_state=LCD_DC_UPDATE_STATE;
      		else if (sub_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)
      		   sub_lcd_operation_state=LCD_HW_UPDATE_STATE;      		   
			}
			else
			{
            SubLCD->SleepOut();
            sub_lcd_operation_state=LCD_STANDBY_STATE;
	      }
		#else
         SubLCD->SleepOut();
         sub_lcd_operation_state=LCD_STANDBY_STATE;
      #endif
      break;
#endif   /* DUAL_LCD */
      default:
         ASSERT(0);
      break;
   }
   lcd_power_down();
}  /* lcd_sleep_out() */
/*************************************************************************
* FUNCTION
*     get_lcd_frame_buffer_address
*
* DESCRIPTION
*     This function is to layer buffer address
*
* PARAMETERS
*     none
*
* RETURNS
*     buffer address
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 get_lcd_frame_buffer_address(void)
{
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
	switch (REG_LCD_ROI_CTRL&LCD_LAYER_MASK)
	{
		case LCD_LAYER0_ENABLE:
			lcd_frame_buffer_address=REG_LCD_LAYER0_BUFF_ADDR;
		break;
		case LCD_LAYER1_ENABLE:
			lcd_frame_buffer_address=REG_LCD_LAYER1_BUFF_ADDR;
		break;
		case LCD_LAYER2_ENABLE:
			lcd_frame_buffer_address=REG_LCD_LAYER2_BUFF_ADDR;
		break;
		case LCD_LAYER3_ENABLE:
			lcd_frame_buffer_address=REG_LCD_LAYER3_BUFF_ADDR;
		break;
      #if defined(MT6228)||defined(MT6229)||defined(MT6230)
		case LCD_LAYER4_ENABLE:
			lcd_frame_buffer_address=REG_LCD_LAYER4_BUFF_ADDR;
		break;
		case LCD_LAYER5_ENABLE:
			lcd_frame_buffer_address=REG_LCD_LAYER5_BUFF_ADDR;
		break;
		#endif
	}
#endif /* MT6217, MT6218B, MT6219 */
	return lcd_frame_buffer_address;
} /* get_lcd_frame_buffer_address */
/*************************************************************************
* FUNCTION
*     set_lcd_dc_layer_format
*
* DESCRIPTION
*     This function is to set hw update layer format
*
* PARAMETERS
*     hw_update_layer: hw update layere
*     direct_couple: direct couple or not           
* 
* RETURNS
*     none
*
* GLOBALS AFFECTED
*
*************************************************************************/
void set_lcd_dc_layer_format(kal_uint32 hw_update_layer,kal_bool direct_couple)
{
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
	if (direct_couple==KAL_TRUE)
	{
		switch (hw_update_layer)
		{
			case LCD_LAYER0_ENABLE:
				lcd_dc_color_mode=GET_LCD_LAYER0_COLOR_MODE;
				SET_LCD_LAYER0_ARGB8888_MODE;
			break;
			case LCD_LAYER1_ENABLE:
				lcd_dc_color_mode=GET_LCD_LAYER1_COLOR_MODE;
				SET_LCD_LAYER1_ARGB8888_MODE;
			break;
			case LCD_LAYER2_ENABLE:
				lcd_dc_color_mode=GET_LCD_LAYER2_COLOR_MODE;
				SET_LCD_LAYER2_ARGB8888_MODE;
			break;
			case LCD_LAYER3_ENABLE:
				lcd_dc_color_mode=GET_LCD_LAYER3_COLOR_MODE;
				SET_LCD_LAYER3_ARGB8888_MODE;
			break;
			case LCD_LAYER4_ENABLE:
				lcd_dc_color_mode=GET_LCD_LAYER4_COLOR_MODE;
				SET_LCD_LAYER4_ARGB8888_MODE;
			break;
			case LCD_LAYER5_ENABLE:
				lcd_dc_color_mode=GET_LCD_LAYER5_COLOR_MODE;
				SET_LCD_LAYER5_ARGB8888_MODE;
			break;
		}
	}
	else
	{
		switch (hw_update_layer)
		{
			case LCD_LAYER0_ENABLE:
				switch (lcd_dc_color_mode)
				{
					case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
						SET_LCD_LAYER0_8BPP_INDEX_MODE
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB565:
						SET_LCD_LAYER0_RGB565_MODE;
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB888:
						SET_LCD_LAYER0_RGB888_MODE
					break;
				}
			break;
			case LCD_LAYER1_ENABLE:
				switch (lcd_dc_color_mode)
				{
					case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
						SET_LCD_LAYER1_8BPP_INDEX_MODE
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB565:
						SET_LCD_LAYER1_RGB565_MODE;
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB888:
						SET_LCD_LAYER1_RGB888_MODE
					break;
				}
			break;
			case LCD_LAYER2_ENABLE:
				switch (lcd_dc_color_mode)
				{
					case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
						SET_LCD_LAYER2_8BPP_INDEX_MODE
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB565:
						SET_LCD_LAYER2_RGB565_MODE;
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB888:
						SET_LCD_LAYER2_RGB888_MODE
					break;
				}
			break;
			case LCD_LAYER3_ENABLE:
				switch (lcd_dc_color_mode)
				{
					case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
						SET_LCD_LAYER3_8BPP_INDEX_MODE
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB565:
						SET_LCD_LAYER3_RGB565_MODE;
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB888:
						SET_LCD_LAYER3_RGB888_MODE
					break;
				}
			break;
			case LCD_LAYER4_ENABLE:
				switch (lcd_dc_color_mode)
				{
					case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
						SET_LCD_LAYER4_8BPP_INDEX_MODE
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB565:
						SET_LCD_LAYER4_RGB565_MODE;
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB888:
						SET_LCD_LAYER4_RGB888_MODE
					break;
				}
			break;
			case LCD_LAYER5_ENABLE:
				switch (lcd_dc_color_mode)
				{
					case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
						SET_LCD_LAYER5_8BPP_INDEX_MODE
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB565:
						SET_LCD_LAYER5_RGB565_MODE;
					break;
					case LCD_LAYER_SOURCE_COLOR_RGB888:
						SET_LCD_LAYER5_RGB888_MODE
					break;
				}
			break;
		}
	}
#endif
}	/* set_lcd_dc_layer_format() */

/*************************************************************************
* FUNCTION
*     reset_lcd_if
*
* DESCRIPTION
*     This function is to disable hw trigger and write to memory
*
* PARAMETERS
*     none
*
* RETURNS
*     none
*
* GLOBALS AFFECTED
*
*************************************************************************/
void reset_lcd_if(void)
{
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
	lcd_power_up();
	while (LCD_IS_RUNNING)
	{};
	DISABLE_LCD_ROI_CTRL_W2MEM;
	#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
   DISABLE_LCD_HW_TRIGGER_UPDATE;
	#endif
#endif /* MT6217, MT6218B, MT6219 */
}	/* reset_lcd_if() */

/*************************************************************************
* FUNCTION
*     lcd_dma_slow_down
*
* DESCRIPTION
*     This function will change the lcd DMA transfer rate to slowest rate
*
* PARAMETERS

*
* RETURNS
*     none
*
* GLOBALS AFFECTED
*
*************************************************************************/
void lcd_dma_slow_down(kal_uint8 level)
{
#if (defined(MT6217)||defined(MT6218B))
	kal_uint32 save_irq_mask;
	kal_bool internal_ram=KAL_TRUE;

	if ((lcd_update_internal_ram==KAL_FALSE)||(internal_ram==KAL_FALSE))
	{
	   save_irq_mask=SaveAndSetIRQMask();
		if (DRV_Reg(DRVPDN_CON1)&DRVPDN_CON1_LCD)
		{	/* lcd power off */
			lcd_power_up();
			switch (level)
			{
				case 4:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x3F);
				break;
				case 3:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x2F);
				break;
				case 2:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x1F);
				break;
				case 1:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x18);
				break;
				case 0:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x10);
				break;
			}
			lcd_power_down();
		}
		else
		{	/* lcd power on */
			switch (level)
			{
				case 4:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x3F);
				break;
				case 3:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x2F);
				break;
				case 2:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x1F);
				break;
				case 1:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x18);
				break;
				case 0:
					SET_LCD_ROI_CTRL_CMD_LATENCY(0x10);
				break;
			}
		}
	   RestoreIRQMask(save_irq_mask);
	}
#elif (defined(MT6205B)||defined(MT6218))
	if (DRV_Reg(DRVPDN_CON1)&DRVPDN_CON1_LCD)
	{	/* lcd power off */
		lcd_power_up();
		DRV_WriteReg(LCD_REFR,0x0fff);   /*LCD DMA*/
		lcd_power_down();
	}
	else
	{	/* lcd power on */
		DRV_WriteReg(LCD_REFR,0x0fff);   /*LCD DMA*/
	}
#endif
}	/* lcd_dma_slow_down() */

/*************************************************************************
* FUNCTION
*     lcd_dma_recovery
*
* DESCRIPTION
*     This function will change the lcd DMA transfer rate to normal rate
*
* PARAMETERS

*
* RETURNS
*     none
*
* GLOBALS AFFECTED
*
*************************************************************************/
void lcd_dma_recovery(void)
{
#if (defined(MT6217)||defined(MT6218B))
	kal_ui

⌨️ 快捷键说明

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