📄 isr.c
字号:
#include "types.h"
#include "board.h"
#include "global.h"
#include "power.h"
#include "DEBUG.h"
#include "ir.h"
#include "DevVd.h"
#include "msvd.h"
#include "mcu.h"
#include "panel.h"
#include "M2_VD_AGC_Lib.h"
#include "M2_VD_Std_Lib.h"
#include "ms_rwreg.h"
#include "msddc2bi.h"
#include "reg52.h"
#include "mstar.h"
#if(ENABLE_VD_DSP)
#include "Maria2_dsp_lib.h"
#endif
#define ReSyncTick 255
void EXT0Interrupt(void) interrupt 0
{
#if VGA_ENABLE
if( !g_bDebugProgStopFlag ) // Program pause
{
if( IsVGAInUse() )
{
if(IsSrcHasSignal())
{
hw_ClrBlacklit(); // Back light off by int
g_bInputTimingChangeFlag= 1;
}
}
}
#endif
#if ENABLE_DDC2BI
{
// BYTE ucStatus;
g_ucDDC2BI_ucStates = MCUXFR_11_DDC2BI_FLAG;
if(g_ucDDC2BI_ucStates & DATW_INT)
{
if(g_ucDDC2BI_ucStates & WORDADR)
g_ucDDC2BIBuffIndex = 0;
if(g_ucDDC2BIBuffIndex < _DDC2BI_CMD_LENGTH_)
g_ucDDC2BI_Buff[g_ucDDC2BIBuffIndex++] = MCUXFR_12_DDC2BI_W_BUF;
}
else if (g_ucDDC2BI_ucStates & DATR_INT)
{
MCUXFR_13_DDC2BI_R_BUF = SI2CHKSUMValue;
}
else if(g_ucDDC2BI_ucStates & STOP_INT)
{
if(g_ucDDC2BIBuffIndex!=0)
{
g_bDDC2BICommandFlag= 1;
g_ucDDC2BIBuffIndex = 0;
}
}
MCUXFR_11_DDC2BI_FLAG = 0;
}
#endif
}
void Time0Interrupt(void) interrupt 1
{
// Reset timer0
#if ENABLE_MCU_USE_INTERNAL_CLOCK
if( g_bMcuUseNewClock )
{
TH0 = HIBYTE(NEW_ISR_TIMER0_COUNTER);
TL0 = LOBYTE(NEW_ISR_TIMER0_COUNTER);
}
else
#endif
{
TH0 = HIBYTE(ISR_TIMER0_COUNTER);
TL0 = LOBYTE(ISR_TIMER0_COUNTER);
}
#if IRSEND_ENABLE
IRSendHandle();
#endif
irDetectTimer0(); // Ir detecting
#if VGA_ENABLE
if( IsVGAInUse())
{
// mode detect counter
if(g_ucModeDetectCounter)
g_ucModeDetectCounter--;
}
else // DigitalPort
#endif
{
// video mode detect counter
if (g_VdInfo.ucVideoPollingCounter)
g_VdInfo.ucVideoPollingCounter--;
if( IsVideoPortInUse()) // MStar VD
{
switch((g_ucmSCounter&0x7))
{
case 0:
#if( ENABLE_VD_DSP&&( DSP_RUN_MODE == DSP_RUN_MODE_TIMER_AND_POLLING ) )
//if( g_ucmsVDCtl&MSVD_CTL_FLAG_VSYNC )
VD_DSP_Int();
#endif
break;
case 2:
case 6:
//if( g_ucmsVDCtl&MSVD_CTL_FLAG_DSP_STD ) // For debug
msDSP_Std_Processor();
break;
case 1:
case 3:
case 5:
case 7:
if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_AGC_MONITOR )
VD_AGC_MonitorStatus();
#if( ENABLE_SW_DETECT_COLOR_STD )
if( VD_Type >= MARIA2_E )
msVDDetectColorStd();
#endif
break;
default:
break;
}
#if( ENABLE_SECAM )
if( g_ucVDSecamHandlerTimer )
g_ucVDSecamHandlerTimer --;
#endif
#if( ENABLE_HSYNC_HANDLER )
if( g_ucVDHSyncHandler_Timer )
g_ucVDHSyncHandler_Timer --;
#endif
#if( ENABLE_MONITOR_SIGNAL )
if( g_wMonitorSignal_Timer )
g_wMonitorSignal_Timer --;
#endif
#ifdef VD_PATCH_005
if( g_msVD_Patch005_Timer )
g_msVD_Patch005_Timer --;
#endif
#if( ENABLE_PAL_SWITCH_HANDLER )
if( g_ucPalSwitchHandler_Timer )
g_ucPalSwitchHandler_Timer --;
#endif
if( g_wVDColorBurstHandlerTimer )
g_wVDColorBurstHandlerTimer --;
if( g_ucMSVDNoiseHandlerTimer )
g_ucMSVDNoiseHandlerTimer --;
}
}
if((--g_ucmSCounter)==0)
{
g_b100mSArrival = 1;
g_ucmSCounter = T100MsTick;
}
if(ReSyncCounter)
ReSyncCounter--;
#if GAME_ENABLE
if(g_uwGameMsCounter != 0)
g_uwGameMsCounter--;
if(g_uwGameMsCounter==0)
{
if(!GameBlockFastDownFlag)
g_uwGameMsCounter=GameTick;
else
g_uwGameMsCounter=GameFastTick;
Set_GameBlockDownFlag();
}
#endif
}
void EXT1Interrupt(void) interrupt 2
{
if (!g_bDebugProgStopFlag)
{
#if( ENABLE_MCU_USE_INTERNAL_CLOCK && IR_FORMAT != IR_RC5)
if(g_bMcuUseNewClock)
irInterruptProcess_NewClk();
else
#endif
irInterruptProcess();
}
}
void Time1Interrupt(void) interrupt 3
{
#if (IR_TIMER_SEL == IR_USE_TIMER1)
// EA = 0; // disable all interrupt
irDetectTimer1(); // tiemr1 for IR
// EA = 1; // release EA bit
#endif
}
///////////////////////////////////////
// Uart Interrupt
///////////////////////////////////////
void uartInterrupt(void) interrupt 4
{
// EA = 0; // disable all interrupt
#if _DEBUG_EXTDEV_EN_
if (!_testbit_(TI)) // check translate interrupt
{
ucUartCheckTick = 2;
RI = 0; // clear recieve interrupt
g_UartCommand.Buffer[g_UartCommand.Index] = SBUF; // recieve byte
// check command buffer index
if (UART_EXT)
{
if (g_UartCommand.Index == 0) // check 1st data
g_UartCommand.Index++; // for get UART_CMD_EXT_LENGTH
else
{
if (g_UartCommand.Index < UART_CMD_EXT_LENGTH) // still read command
g_UartCommand.Index++; // next index of command buffer
if (g_UartCommand.Index >= UART_CMD_EXT_LENGTH) // read command ok
{
g_bUartDetected = TRUE; // command buffer recieve ok
g_UartCommand.Index = 0; // reset index of command buffer
ucUartCheckTick = 0;
}
}
}
else
{
if (g_UartCommand.Index < UART_CMD_LENGTH) // still read command
g_UartCommand.Index++; // next index of command buffer
if (g_UartCommand.Index >= UART_CMD_LENGTH) // read command ok
{
g_bUartDetected = TRUE; // command buffer recieve ok
g_UartCommand.Index = 0; // reset index of command buffer
ucUartCheckTick = 0;
}
}
} // if TI
#endif
// EA = 1; // release EA bit
}
void isrTimer2_S(void) interrupt 5
{
#if (IR_TIMER_SEL == IR_USE_TIMER2)
// EA = 0; // disable all interrupt
irDetectTimer1(); // tiemr1 for IR
// EA = 1; // release EA bit
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -