📄 mv_itv.c
字号:
)
/*EMP=======================================================================*/
{
unsigned long lv_mask;
UInt32 lv_protection_level;
tmosalDisableInterruptsNoSysCall(&lv_protection_level);
/* If an ISR was installed, enable it */
if (LV_MV_ITV_status.isr_table[in_index].isr != LF_dummy_isr)
{
LV_MV_ITV_status.irpt_mask_video |= (0x0001 << in_index);
lv_mask = LV_MV_ITV_status.irpt_mask_video;
#ifdef DV_DEBUG
/* Take also into account the interrupts used for debugging. */
lv_mask |= LV_MV_ITV_status.irpt_debug_mask_video;
#endif
MV_drv_set_video_int_enable ( lv_mask);
}
tmosalEnableInterruptsNoSysCall(lv_protection_level);
}
#ifdef DV_DEBUG
/*MPF=======================================================================*/
/*
FUNCTION NAME: MV_ITV_debug_enable_irpt
DESCRIPTION:
Enable an interrupt source for debugging.
RETURNS:
CALLING SEQUENCE:
*/
void
MV_ITV_debug_enable_irpt(
MV_ITV in_index /* In: Irpt source for isr */
)
/*EMP=======================================================================*/
{
unsigned long lv_mask;
UInt32 lv_protection_level;
tmosalDisableInterruptsNoSysCall(&lv_protection_level);
LV_MV_ITV_status.irpt_debug_mask_video |= (0x0001 << in_index);
lv_mask = LV_MV_ITV_status.irpt_debug_mask_video;
lv_mask |= LV_MV_ITV_status.irpt_mask_video;
MV_drv_set_video_int_enable (lv_mask);
tmosalEnableInterruptsNoSysCall(lv_protection_level);
}
#endif
/*MPF=======================================================================*/
/*
FUNCTION NAME: MV_ITV_disable_irpt
DESCRIPTION:
Disable an interrupt source.
RETURNS:
CALLING SEQUENCE:
*/
void
MV_ITV_disable_irpt(
MV_ITV in_index /* In: Irpt source for isr */
)
/*EMP=======================================================================*/
{
unsigned long lv_mask;
UInt32 lv_protection_level;
tmosalDisableInterruptsNoSysCall(&lv_protection_level);
LV_MV_ITV_status.irpt_mask_video &= ~(0x0001 << in_index);
lv_mask = LV_MV_ITV_status.irpt_mask_video;
#ifdef DV_DEBUG
/* Also enable interrupts used for debugging. */
lv_mask |= LV_MV_ITV_status.irpt_debug_mask_video;
#endif
MV_drv_set_video_int_enable(lv_mask);
tmosalEnableInterruptsNoSysCall(lv_protection_level);
}
/*MPF=======================================================================*/
/*
FUNCTION NAME: MV_ITV_isr_enable_irpt
DESCRIPTION:
Enable an interrupt source.
This function doesn't use enter/leave region.
RETURNS:
CALLING SEQUENCE:
*/
void
MV_ITV_isr_enable_irpt(
MV_ITV in_index /* In: Irpt source for isr */
)
/*EMP=======================================================================*/
{
unsigned long lv_mask;
/* Enable the interrupt source for the IRQ */
LV_MV_ITV_status.irpt_mask_video |= (0x0001 << in_index);
lv_mask = LV_MV_ITV_status.irpt_mask_video;
#ifdef DV_DEBUG
/* Also enable interrupts used for debugging. */
lv_mask |= LV_MV_ITV_status.irpt_debug_mask_video;
#endif
MV_drv_set_video_int_enable(lv_mask);
} /* End MV_ITV_isr_enable_irpt */
/*MPF=======================================================================*/
/*
FUNCTION NAME: MV_ITV_isr_disable_irpt
DESCRIPTION:
Disable an interrupt source from an interrupt service routine.
This function doesn't use enter/leave region.
RETURNS:
CALLING SEQUENCE:
*/
void
MV_ITV_isr_disable_irpt(
MV_ITV in_index /* In: Irpt source for isr */
)
/*EMP=======================================================================*/
{
unsigned long lv_mask;
/* Disable the interrupt source for the IRQ */
LV_MV_ITV_status.irpt_mask_video &= ~(0x0001 << in_index);
lv_mask = LV_MV_ITV_status.irpt_mask_video;
#ifdef DV_DEBUG
/* Also enable interrupts used for debugging. */
lv_mask |= LV_MV_ITV_status.irpt_debug_mask_video;
#endif
MV_drv_set_video_int_enable(lv_mask);
} /* End MV_ITV_isr_disable_irpt */
/*==========================================================================*/
/* L O C A L F U N C T I O N S */
/*==========================================================================*/
/*LPF=======================================================================*/
/*
FUNCTION NAME: LF_dummy_isr
DESCRIPTION:
Dummy Interrupt Service Routine.
CALLING SEQUENCE:
*/
static void
LF_dummy_isr(
void
)
/*EMP=======================================================================*/
{
}
/*LPF=======================================================================*/
/*
FUNCTION NAME: LF_isr
DESCRIPTION:
Interrupt service routine
Determine interrupt source and call corresponding function.
CALLING SEQUENCE:
*/
static void
LF_isr (
void * pData_dummy
)
/*EMP=======================================================================*/
{
unsigned long lv_video_status;
/* Read interrupt status */
GV_itv_video_status = (MV_drv_video_int_status() & MV_drv_video_int_enable());
GV_itv_video_event = (MV_drv_video_event() & MV_drv_video_event_enable());
GV_itv_fbm_event = (MV_drv_fbm_event() & MV_drv_fbm_event_enable());
GV_itv_error_event = (MV_drv_error_event() & MV_drv_error_event_enable());
GV_itv_system_event = (MV_drv_system_event() & MV_drv_system_event_enable());
MV_drv_set_system_event_clear(GV_itv_system_event);
MV_drv_set_video_event_clear(GV_itv_video_event);
MV_drv_set_error_event_clear(GV_itv_error_event);
MV_drv_set_fbm_event_clear(GV_itv_fbm_event);
MV_drv_set_video_int_clear(GV_itv_video_status);
lv_video_status = GV_itv_video_status;
/* Do not handle disabled interrupts. */
lv_video_status = lv_video_status & LV_MV_ITV_status.irpt_mask_video;
if ((lv_video_status & MV_VIDEO_INT_STATUS_NEW_VIDEO_DTS) == MV_VIDEO_INT_STATUS_NEW_VIDEO_DTS)
LV_MV_ITV_status.isr_table[MV_ITV_NEW_VIDEO_DTS].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_NEW_VIDEO_PTS) == MV_VIDEO_INT_STATUS_NEW_VIDEO_PTS)
LV_MV_ITV_status.isr_table[MV_ITV_NEW_VIDEO_PTS].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_RESET_DONE) == MV_VIDEO_INT_STATUS_RESET_DONE)
LV_MV_ITV_status.isr_table[MV_ITV_RESET_DONE].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_VIDEO_EVENT) == MV_VIDEO_INT_STATUS_VIDEO_EVENT)
LV_MV_ITV_status.isr_table[MV_ITV_VIDEO_EVENT].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_ERROR_EVENT) == MV_VIDEO_INT_STATUS_ERROR_EVENT)
LV_MV_ITV_status.isr_table[MV_ITV_ERROR_EVENT].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_FBM_EVENT) == MV_VIDEO_INT_STATUS_FBM_EVENT)
LV_MV_ITV_status.isr_table[MV_ITV_FBM_EVENT].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_END_OF_PICTURE_HEADER) == MV_VIDEO_INT_STATUS_END_OF_PICTURE_HEADER)
LV_MV_ITV_status.isr_table[MV_ITV_END_OF_PICTURE_HEADER].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_END_OF_PICTURE_DECODING) == MV_VIDEO_INT_STATUS_END_OF_PICTURE_DECODING)
LV_MV_ITV_status.isr_table[MV_ITV_END_OF_PICTURE_DECODING].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_SYSTEM_EVENT) == MV_VIDEO_INT_STATUS_SYSTEM_EVENT)
LV_MV_ITV_status.isr_table[MV_ITV_SYSTEM_EVENT].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_VIDEO_INSYNC) == MV_VIDEO_INT_STATUS_VIDEO_INSYNC)
LV_MV_ITV_status.isr_table[MV_ITV_VIDEO_INSYNC].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_NEW_VIDEO_PES) == MV_VIDEO_INT_STATUS_NEW_VIDEO_PES)
LV_MV_ITV_status.isr_table[MV_ITV_NEW_VIDEO_PES].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_VIDEO_FIFO_FULL) == MV_VIDEO_INT_STATUS_VIDEO_FIFO_FULL)
LV_MV_ITV_status.isr_table[MV_ITV_VIDEO_FIFO_FULL].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_VIDEO_FIFO_EMPTY) == MV_VIDEO_INT_STATUS_VIDEO_FIFO_EMPTY)
LV_MV_ITV_status.isr_table[MV_ITV_VIDEO_FIFO_EMPTY].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_VIDEO_FIFO_OVERFLOW) == MV_VIDEO_INT_STATUS_VIDEO_FIFO_OVERFLOW)
LV_MV_ITV_status.isr_table[MV_ITV_VIDEO_FIFO_OVER].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_VIDEO_FIFO_UNDERFLOW) == MV_VIDEO_INT_STATUS_VIDEO_FIFO_UNDERFLOW)
LV_MV_ITV_status.isr_table[MV_ITV_VIDEO_FIFO_UNDER].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_VIDEO_FIFO_PTR_UPDATED) == MV_VIDEO_INT_STATUS_VIDEO_FIFO_PTR_UPDATED)
LV_MV_ITV_status.isr_table[MV_ITV_VIDEO_FIFO_PTR_UPDATED].isr();
if ((lv_video_status & MV_VIDEO_INT_STATUS_STILL_FIFO_READ) == MV_VIDEO_INT_STATUS_STILL_FIFO_READ)
LV_MV_ITV_status.isr_table[MV_ITV_STILL_FIFO_READ].isr();
} /* End LF_isr */
/*==========================================================================*/
/* H I S T O R Y */
/*==========================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -