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

📄 lcd_update_if.c

📁 8032底层驱动部分。因为可以移植 所以单独来拿出来
💻 C
📖 第 1 页 / 共 5 页
字号:
			else if (current_update_lcd==SUB_LCD)
			{
#ifndef CAMERA_MODULE_WITH_LCD	/* do not check while LCD is mount on external camera */
				if (lcd_para->lcd_id==MAIN_LCD)
				ASSERT(0);
#endif
	  			sub_lcd_fb_update_para.lcd_id=SUB_LCD;
				sub_lcd_fb_update_para.module_id=lcd_para->module_id;
				sub_lcd_fb_update_para.fb_update_mode=lcd_para->fb_update_mode;
				sub_lcd_fb_update_para.lcm_start_x=lcd_para->lcm_start_x;
				sub_lcd_fb_update_para.lcm_start_y=lcd_para->lcm_start_y;
				sub_lcd_fb_update_para.lcm_end_x=lcd_para->lcm_end_x;
				sub_lcd_fb_update_para.lcm_end_y=lcd_para->lcm_end_y;
				sub_lcd_fb_update_para.roi_offset_x=lcd_para->roi_offset_x;
				sub_lcd_fb_update_para.roi_offset_y=lcd_para->roi_offset_y;
				sub_lcd_fb_update_para.update_layer=lcd_para->update_layer;
				sub_lcd_operation_state=LCD_CAMERA_CMD_QUEUE_STATE;
			}
	#endif	/* DUAL_LCD */
  			RestoreIRQMask(save_irq_mask);
		   kal_retrieve_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR_CONSUME,
      		                    &event_group,KAL_SUSPEND);
			if ((current_update_lcd==MAIN_LCD)&&(main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
				 &&(main_lcd_operation_state!=LCD_STANDBY_STATE))
				main_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
		#ifdef DUAL_LCD
			else if ((current_update_lcd==SUB_LCD)&&(sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
						&&(sub_lcd_operation_state!=LCD_STANDBY_STATE))
				sub_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
		#endif
			return;
		}
		else
		{
			RestoreIRQMask(save_irq_mask);
		}
	}
#endif /* CAMERA_MODULE */
   ASSERT(!LCD_IS_RUNNING);

	lcd_power_up();
	ENABLE_LCD_TRANSFER_COMPLETE_INT;
   lcd_transfer_complete = KAL_FALSE;

   SET_LCD_ROI_WINDOW_OFFSET(lcd_para->roi_offset_x,lcd_para->roi_offset_y);
   SET_LCD_ROI_WINDOW_SIZE(lcd_para->lcm_end_x-lcd_para->lcm_start_x+1,
                           lcd_para->lcm_end_y-lcd_para->lcm_start_y+1);
   SET_LCD_ENABLE_LAYER(lcd_para->update_layer);
   DISABLE_LCD_ROI_CTRL_W2MEM;

   switch (lcd_para->lcd_id)
   {
      case MAIN_LCD:
	      if (main_lcd_operation_state==LCD_SLEEP_STATE)
	      {
	      	lcd_power_down();
   	      return;
   	   }
		#if (defined(CAMERA_MODULE))
   	   if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
   	   {
				config_lcd_layer_window_queue();
				main_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
			}
		#endif
   	   if (main_lcd_operation_state==LCD_JPEG_VIDEO_CMD_QUEUE_STATE)
   	   {
				config_lcd_layer_window_queue();
				main_lcd_operation_state=LCD_JPEG_VIDEO_UPDATE_STATE;
			}

			SET_LCD_ROI_CTRL_OUTPUT_FORMAT(MAIN_LCD_OUTPUT_FORMAT);
         DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,MAIN_LCD_CMD_ADDR);
         DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,MAIN_LCD_DATA_ADDR);
         MainLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
                             lcd_para->lcm_end_x,lcd_para->lcm_end_y);
			for (j=0;j<100;j++);
		#if (defined(CAMERA_MODULE))
			if ((main_lcd_operation_state!=LCD_CAMERA_UPDATE_STATE)&&
				 (main_lcd_operation_state!=LCD_JPEG_VIDEO_UPDATE_STATE))
				main_lcd_operation_state=LCD_SW_UPDATE_STATE;
		#else
			if (main_lcd_operation_state!=LCD_JPEG_VIDEO_UPDATE_STATE)
			   main_lcd_operation_state=LCD_SW_UPDATE_STATE;
		#endif	/* CAMERA_MODULE */
      break;
   #ifdef DUAL_LCD
      case SUB_LCD:
         if (sub_lcd_operation_state==LCD_SLEEP_STATE)
         {
         	lcd_power_down();
            return;
         }
		#if (defined(CAMERA_MODULE))
   	   if (sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
   	   {
				config_lcd_layer_window_queue();
				sub_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
			}
		#endif	/* CAMERA_MODULE */
   	   if (sub_lcd_operation_state==LCD_JPEG_VIDEO_CMD_QUEUE_STATE)
   	   {
				config_lcd_layer_window_queue();
				sub_lcd_operation_state=LCD_JPEG_VIDEO_UPDATE_STATE;
			}
			SET_LCD_ROI_CTRL_OUTPUT_FORMAT(SUB_LCD_OUTPUT_FORMAT);
         DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,SUB_LCD_CMD_ADDR);
         DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,SUB_LCD_DATA_ADDR);
         SubLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
                            lcd_para->lcm_end_x,lcd_para->lcm_end_y);
			for (j=0;j<10;j++);
		#if (defined(CAMERA_MODULE))
			if ((sub_lcd_operation_state!=LCD_CAMERA_UPDATE_STATE)&&
				 (sub_lcd_operation_state!=LCD_JPEG_VIDEO_UPDATE_STATE))
				sub_lcd_operation_state=LCD_SW_UPDATE_STATE;
		#else
			if (sub_lcd_operation_state!=LCD_JPEG_VIDEO_UPDATE_STATE)
			   sub_lcd_operation_state=LCD_SW_UPDATE_STATE;
		#endif	/* CAMERA_MODULE */
      break;
   #endif   /* DUAL_LCD */
      default:
         ASSERT(0);
      break;
   }
	current_update_lcd=lcd_para->lcd_id;

	if (lcd_para->block_mode_flag==KAL_TRUE)
	{
		IRQMask(IRQ_LCD_CODE);
		wait_lcd_update_flag=KAL_FALSE;
		IRQUnmask(IRQ_LCD_CODE);
      
      while (LCD_IS_RUNNING) {};
      temp_reg=DRV_Reg(LCD_INT_STATUS_REG);
      
   #ifndef DUAL_LCD
   	if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
   		main_lcd_operation_state=LCD_STANDBY_STATE;
   #else
   	if (current_update_lcd==MAIN_LCD)
   	{
   		if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
   			main_lcd_operation_state=LCD_STANDBY_STATE;
   	}
   	else
   	{
   		if (sub_lcd_operation_state==LCD_SW_UPDATE_STATE)
   			sub_lcd_operation_state=LCD_STANDBY_STATE;
   	}
   	#endif	/* DUAL_LCD */
	}
	else
	{
		lcd_block_cb=lcd_para->lcd_block_mode_cb;
		IRQMask(IRQ_LCD_CODE);
		wait_lcd_update_flag=KAL_TRUE;
		IRQUnmask(IRQ_LCD_CODE);
	}
	lcd_power_down();
#elif (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
	lcd_power_up();
	lcd_roi_offset_shadow=DRV_Reg32(LCD_ROI_OFFSET_REG);
	lcd_roi_ctrl_shadow=DRV_Reg32(LCD_ROI_CTRL_REG);
	lcd_roi_ctrl_shadow |= LCD_ROI_CTRL_CMD_ENABLE_BIT;
	lcd_roi_size_shadow=DRV_Reg32(LCD_ROI_SIZE_REG);
	#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
	lcd_mem_out_address_shadow=DRV_Reg32(LCD_ROI_WMEM_ADDR_REG);
	lcd_mem_out_ctrl_shadow=DRV_Reg32(LCD_ROI_WMEM_CTRL_REG);
	#endif
   if (lcd_para->module_id==LCD_UPDATE_MODULE_MMI)
   {  /* only SW trigger mode is permitted for MMI task */
      if (lcd_para->fb_update_mode!=LCD_SW_TRIGGER_MODE)
         ASSERT(0);
   }

   if ((lcd_para->fb_update_mode==LCD_HW_TRIGGER_MODE)||
       (lcd_para->fb_update_mode==LCD_DIRECT_COUPLE_MODE))
   {  /* only accept when both MAIN_LCD and SUB_LCD in LCD_STANDBY_STATE for
         LCD_HW_TRIGGER_MODE and LCD_DIRECT_COUPLE_MODE */
		#ifndef DUAL_LCD
		if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
		{
			do
			{
				kal_sleep_task(1);
			} while (main_lcd_operation_state != LCD_STANDBY_STATE);
		}
		#else
		if ((main_lcd_operation_state==LCD_SW_UPDATE_STATE)||
			 (sub_lcd_operation_state==LCD_SW_UPDATE_STATE))
		{
			do
			{
				kal_sleep_task(1);
			} while ((main_lcd_operation_state != LCD_STANDBY_STATE)||
						(sub_lcd_operation_state != LCD_STANDBY_STATE));
		}
		#endif
   #if ((defined(MT6228)||defined(MT6229)||defined(MT6230))&&((!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__))))
   	#ifndef DUAL_LCD
      if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
          (main_lcd_operation_state!=LCD_SLEEP_STATE))
         ASSERT(0);
   	#else
      if (((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
           (main_lcd_operation_state!=LCD_SLEEP_STATE))||
			 ((sub_lcd_operation_state!=LCD_STANDBY_STATE)&&
           (sub_lcd_operation_state!=LCD_SLEEP_STATE)))
         ASSERT(0);
   	#endif   /* DUAL_LCD */
   #else
   	#ifndef DUAL_LCD
      if (main_lcd_operation_state!=LCD_STANDBY_STATE)
         ASSERT(0);
   	#else
      if ((main_lcd_operation_state!=LCD_STANDBY_STATE)||
          (sub_lcd_operation_state!=LCD_STANDBY_STATE))
         ASSERT(0);
   	#endif   /* DUAL_LCD */
   #endif
   }
   else if (lcd_para->fb_update_mode==LCD_SW_TRIGGER_MODE)
   {
   #ifndef DUAL_LCD
   	#if (defined(MT6219))
      if (main_lcd_operation_state==LCD_SLEEP_STATE)
      #else
      if ((main_lcd_operation_state==LCD_SLEEP_STATE)&&(lcd_para->memory_output==KAL_FALSE))
      #endif
      {
      	lcd_power_down();
         return;
      }            		
      if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
      	 (main_lcd_operation_state!=LCD_SLEEP_STATE)&&
          (main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&          
          #if (defined(MT6228)||defined(MT6229)||defined(MT6230))            
          (main_lcd_operation_state!=LCD_HW_UPDATE_SLEEP_STATE)&&
          (main_lcd_operation_state!=LCD_DC_UPDATE_SLEEP_STATE)&&
          #endif
          (main_lcd_operation_state!=LCD_DC_UPDATE_STATE))
          ASSERT(0);
      
   #else
      if (lcd_para->lcd_id==MAIN_LCD)
      {
      #if (defined(MT6219))
         if (main_lcd_operation_state==LCD_SLEEP_STATE)
      #else
	      if ((main_lcd_operation_state==LCD_SLEEP_STATE)&&(lcd_para->memory_output==KAL_FALSE))
	   #endif      
         {
         	lcd_power_down();
            return;
         }      	      
         if ((sub_lcd_operation_state!=LCD_STANDBY_STATE) &&
         	 (sub_lcd_operation_state!=LCD_SLEEP_STATE))
            ASSERT(0);
		
         if ((main_lcd_operation_state!=LCD_SLEEP_STATE)&&
             (main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
             (main_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
             #if (defined(MT6228)||defined(MT6229)||defined(MT6230))
          	 (main_lcd_operation_state!=LCD_HW_UPDATE_SLEEP_STATE)&&
          	 (main_lcd_operation_state!=LCD_DC_UPDATE_SLEEP_STATE)&&
          	 #endif
          	 (main_lcd_operation_state!=LCD_STANDBY_STATE))
               ASSERT(0);		
      }
      else if (lcd_para->lcd_id==SUB_LCD)
      {
      #if (defined(MT6219))
         if (sub_lcd_operation_state==LCD_SLEEP_STATE)
      #else
	      if ((sub_lcd_operation_state==LCD_SLEEP_STATE)&&(lcd_para->memory_output==KAL_FALSE))
	   #endif   
         {
         	lcd_power_down();
            return;
         }      	            
         if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
         	 (main_lcd_operation_state!=LCD_SLEEP_STATE))
            ASSERT(0);
		
         if ((sub_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
             (sub_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
             #if (defined(MT6228)||defined(MT6229)||defined(MT6230))            
          	 (sub_lcd_operation_state!=LCD_HW_UPDATE_SLEEP_STATE)&&
          	 (sub_lcd_operation_state!=LCD_DC_UPDATE_SLEEP_STATE)&&
          	 #endif
          	 (sub_lcd_operation_state!=LCD_STANDBY_STATE))
                 ASSERT(0);		         		
      }
      else
         ASSERT(0);
   #endif /* DUAL_LCD */
	}

	kal_set_eg_events(lcd_event_id,0,KAL_AND);
	ENABLE_LCD_TRANSFER_COMPLETE_INT;
   lcd_transfer_complete = KAL_FALSE;
   /*Begin of check lcm start/end, roi offset*/
	if (lcd_para->lcd_id==MAIN_LCD)
	{
		if ((main_lcd_operation_state==LCD_HW_UPDATE_STATE)||
			 (main_lcd_operation_state==LCD_DC_UPDATE_STATE))
		{
			if (main_lcd_fb_update_para.lcm_start_x<lcd_para->lcm_start_x)			
				lcd_para->lcm_start_x=main_lcd_fb_update_para.lcm_start_x;	
						
			if (main_lcd_fb_update_para.lcm_start_y<lcd_para->lcm_start_y)			
				lcd_para->lcm_start_y=main_lcd_fb_update_para.lcm_start_y;			
				
			if (main_lcd_fb_update_para.lcm_end_x>lcd_para->lcm_end_x)			
				lcd_para->lcm_end_x=main_lcd_fb_update_para.lcm_end_x;
			
			if (main_lcd_fb_update_para.lcm_end_y>lcd_para->lcm_end_y)			
				lcd_para->lcm_end_y=main_lcd_fb_update_para.lcm_end_y;
			
			if (main_lcd_fb_update_para.roi_offset_x<lcd_para->roi_offset_x)			
				lcd_para->roi_offset_x=main_lcd_fb_update_para.roi_offset_x;
							
			if (main_lcd_fb_update_para.roi_offset_y<lcd_para->roi_offset_y)			
				lcd_para->roi_offset_y=main_lcd_fb_update_para.roi_offset_y;			
		}
	}
#ifdef DUAL_LCD
	else
	{
		if ((sub_lcd_operation_state==LCD_HW_UPDATE_STATE)||
			 (sub_lcd_operation_state==LCD_DC_UPDATE_STATE))
		{
			if (sub_lcd_fb_update_para.lcm_start_x<lcd_para->lcm_start_x)			
				lcd_para->lcm_start_x=sub_lcd_fb_update_para.lcm_start_x;
			
			if (sub_lcd_fb_update_para.lcm_start_y<lcd_para->lcm_start_y)			
				lcd_para->lcm_start_y=sub_lcd_fb_update_para.lcm_start_y;
			
			if (sub_lcd_fb_update_para.lcm_end_x>lcd_para->lcm_end_x)			
				lcd_para->lcm_end_x=sub_lcd_fb_update_para.lcm_end_x;
			
			if (sub_lcd_fb_update_para.lcm_end_y>lcd_para->lcm_end_y)			

⌨️ 快捷键说明

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