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

📄 lcd_isr_handler.c

📁 8032底层驱动部分。因为可以移植 所以单独来拿出来
💻 C
📖 第 1 页 / 共 2 页
字号:
void lcd_HISR(void)
{
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
   kal_uint32 save_irq_mask;
	#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
	kal_uint8 i;
	volatile kal_uint16 j;
	#endif

	#if (defined(MT6217)||defined(MT6218B))
   kal_set_eg_events(lcd_event_id,LCD_TRANSFER_COMPLETE_EVENT,KAL_OR);
   save_irq_mask=SaveAndSetIRQMask();
   lcd_transfer_complete=KAL_FALSE;
   if (wait_lcd_update_flag==KAL_TRUE)
   {	/* for software udpate only */
   	wait_lcd_update_flag=KAL_FALSE;
   	if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
   		main_lcd_operation_state=LCD_STANDBY_STATE;
   #ifdef DUAL_LCD
   	if (sub_lcd_operation_state==LCD_SW_UPDATE_STATE)
   		sub_lcd_operation_state=LCD_STANDBY_STATE;
   #endif
   	config_lcd_layer_window_queue();
   	if (lcd_block_cb!=NULL)
   		lcd_block_cb();
   }
   RestoreIRQMask(save_irq_mask);
	IRQUnmask(IRQ_LCD_CODE);
	#elif (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
   if (current_update_lcd==MAIN_LCD)
   {
      if (lcd_transfer_complete==KAL_TRUE)
      {
         if ((main_lcd_operation_state==LCD_SW_UPDATE_STATE)||
             (main_lcd_operation_state==LCD_WAIT_LAST_UPDATE_STATE)||
             (main_lcd_operation_state==LCD_MEM_UPDATE_STATE))
         {    
            kal_set_eg_events(lcd_event_id,LCD_TRANSFER_COMPLETE_EVENT,KAL_OR);
         }   
         save_irq_mask=SaveAndSetIRQMask();
         lcd_transfer_complete=KAL_FALSE;
         RestoreIRQMask(save_irq_mask);
		   if (wait_lcd_update_flag==KAL_TRUE)
		   {	/* for software udpate only */
		   	wait_lcd_update_flag=KAL_FALSE;
   	   	if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
		  	   	main_lcd_operation_state=LCD_STANDBY_STATE;
		   	config_lcd_layer_window_queue();
		   	if (lcd_block_cb!=NULL)
		   		lcd_block_cb();
		   }
      }

      if (lcd_cmd_latch_complete==KAL_TRUE)/*set TRUE in LCD_LISR*/
      {
         if (lcd_hw_trigger_flag==KAL_TRUE)
         {
        		#if ((defined(MT6228)||defined(MT6229))&& (!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))
				if ((tv_output_owner == TV_OUT_OWNER_LCD) && (tv_output_buffer_count<2))
				{
				   IRQUnmask(IRQ_LCD_CODE);
					return;
				}
        		#endif
         	lcd_hw_trigger_flag=KAL_FALSE;
	         if ((main_lcd_operation_state==LCD_HW_CMD_QUEUE_STATE)||
	             (main_lcd_operation_state==LCD_DC_CMD_QUEUE_STATE)||
	             (main_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)||
	             (main_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)||
	             (main_lcd_operation_state==LCD_HW_SLEEP_CMD_QUEUE_STATE)||
	             (main_lcd_operation_state==LCD_DC_SLEEP_CMD_QUEUE_STATE))
				{
	         	for (j=0;j<50;j++);
        		#if ((defined(MT6228)||defined(MT6229))&& (!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))
	        		if (tv_output_owner == TV_OUT_OWNER_LCD)
	        		{
	  		      	if (tv_out_current_fb==0)
							lcd_mem_out_address_shadow1=main_lcd_fb_update_para.tv_output_frame_buffer1_address;
						else
							lcd_mem_out_address_shadow1=main_lcd_fb_update_para.tv_output_frame_buffer2_address;
	        		}
        		#endif
		         save_irq_mask=SaveAndSetIRQMask();
					DRV_WriteReg32(LCD_ROI_CTRL_REG,lcd_hw_trigger_roi_ctrl);
					DRV_WriteReg32(LCD_ROI_OFFSET_REG,lcd_hw_trigger_roi_offset);
					DRV_WriteReg32(LCD_ROI_SIZE_REG,lcd_hw_trigger_roi_size);
				#if ((defined(MT6228)||defined(MT6229)||defined(MT6230))&& (!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))					
					DRV_WriteReg32(LCD_ROI_WMEM_ADDR_REG,lcd_mem_out_address_shadow1);
				#endif
					for (i=0;i<LCD_CMD_QUEUE_LENGTH;i++)
						*((volatile unsigned int *) (LCD_CMD_PARAMETER_ADDR+(i<<2)))=lcd_hw_trigger_para[i];
		         RestoreIRQMask(save_irq_mask);
	         	START_LCD_TRANSFER;
	         	for (j=0;j<30;j++);
	         }
	         else
	         	kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
	         	
	         #if ((defined(MT6228)||defined(MT6229))&& (!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))
        	   if (tv_output_owner!=TV_OUT_OWNER_LCD)
					DISABLE_LCD_TRANSFER_COMPLETE_INT;
	         #else
         	DISABLE_LCD_TRANSFER_COMPLETE_INT;
         	#endif
         }
         else/*lcd_hw_trigger_flag==KAL_FALSE*/
	      {
	         if ((main_lcd_operation_state==LCD_HW_CMD_QUEUE_STATE)||
	             (main_lcd_operation_state==LCD_DC_CMD_QUEUE_STATE)||
	             (main_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)||
	             (main_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)||
	             (main_lcd_operation_state==LCD_HW_SLEEP_CMD_QUEUE_STATE)||
	             (main_lcd_operation_state==LCD_DC_SLEEP_CMD_QUEUE_STATE))
	         {
	            kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
	         }   
	         save_irq_mask=SaveAndSetIRQMask();
	         lcd_cmd_latch_complete=KAL_FALSE;
	         RestoreIRQMask(save_irq_mask);
	      }
	   }
   }
	#if ((defined(MT6228)||defined(MT6229))&& (!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))
  	if (tv_output_buffer_rotate==1)
  	{
  		g2d_tv_output_src_buff.base_address=tv_output_buffer_base_address1;
   	g2d_bitblt1(G2D_OWNER_LCD, &g2d_tv_output_bitblt);
   	tv_output_buffer_rotate=0;
   }
   else if (tv_output_buffer_rotate==2)
   {
   	g2d_tv_output_src_buff.base_address=tv_output_buffer_base_address2;
   	g2d_bitblt1(G2D_OWNER_LCD,&g2d_tv_output_bitblt);
   	tv_output_buffer_rotate=0;
   }
   #endif
   #ifdef DUAL_LCD/*almost the same as the main LCD part, except TVout.*/
   else if (current_update_lcd==SUB_LCD)
   {
      if (lcd_transfer_complete==KAL_TRUE)
      {
         if ((sub_lcd_operation_state==LCD_SW_UPDATE_STATE)||
             (sub_lcd_operation_state==LCD_WAIT_LAST_UPDATE_STATE))
            kal_set_eg_events(lcd_event_id,LCD_TRANSFER_COMPLETE_EVENT,KAL_OR);
         save_irq_mask=SaveAndSetIRQMask();
         lcd_transfer_complete=KAL_FALSE;
         RestoreIRQMask(save_irq_mask);

		   if (wait_lcd_update_flag==KAL_TRUE)
		   {	/* for software udpate only */
		   	wait_lcd_update_flag=KAL_FALSE;
	  	   	if (sub_lcd_operation_state==LCD_SW_UPDATE_STATE)
	   	   	sub_lcd_operation_state=LCD_STANDBY_STATE;
		   	config_lcd_layer_window_queue();
		   	if (lcd_block_cb!=NULL)
		   		lcd_block_cb();
		   }
      }

      if (lcd_cmd_latch_complete==KAL_TRUE)
      {
         if (lcd_hw_trigger_flag==KAL_TRUE)
         {
         	lcd_hw_trigger_flag=KAL_FALSE;
	         if ((sub_lcd_operation_state==LCD_HW_CMD_QUEUE_STATE)||
	             (sub_lcd_operation_state==LCD_DC_CMD_QUEUE_STATE)||
	             (sub_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)||
	             (sub_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)||
	             (sub_lcd_operation_state==LCD_HW_SLEEP_CMD_QUEUE_STATE)||
	             (sub_lcd_operation_state==LCD_DC_SLEEP_CMD_QUEUE_STATE))
				{
	         	for (j=0;j<100;j++);
					DRV_WriteReg32(LCD_ROI_CTRL_REG,lcd_hw_trigger_roi_ctrl);
					DRV_WriteReg32(LCD_ROI_OFFSET_REG,lcd_hw_trigger_roi_offset);
					DRV_WriteReg32(LCD_ROI_SIZE_REG,lcd_hw_trigger_roi_size);
					for (i=0;i<LCD_CMD_QUEUE_LENGTH;i++)
						DRV_WriteReg32(LCD_CMD_PARAMETER_ADDR+(i<<2),lcd_hw_trigger_para[i]);
	         	START_LCD_TRANSFER;
	         }
	         else
            	kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
	         #if ((defined(MT6228)||defined(MT6229)||defined(MT6230))&& (!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))
        	   if (tv_output_owner!=TV_OUT_OWNER_LCD)
         		DISABLE_LCD_TRANSFER_COMPLETE_INT;
	         #else
         	DISABLE_LCD_TRANSFER_COMPLETE_INT;
         	#endif
         }
         else
      	{
	         if ((sub_lcd_operation_state==LCD_HW_CMD_QUEUE_STATE)||
	             (sub_lcd_operation_state==LCD_DC_CMD_QUEUE_STATE)||
	             (sub_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)||
	             (sub_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)||
	             (sub_lcd_operation_state==LCD_HW_SLEEP_CMD_QUEUE_STATE)||
	             (sub_lcd_operation_state==LCD_DC_SLEEP_CMD_QUEUE_STATE))
	            kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
	         save_irq_mask=SaveAndSetIRQMask();
	         lcd_cmd_latch_complete=KAL_FALSE;
	         RestoreIRQMask(save_irq_mask);
	      }
	   }
   }
   #endif   /* DUAL_LCD */
   IRQUnmask(IRQ_LCD_CODE);
	#endif   /* MT6219 */
#endif /*MT6218B, MT6219 */
}  /* lcd_HISR() */

⌨️ 快捷键说明

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