📄 lcd_isr_handler.c
字号:
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 + -