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

📄 isr.c

📁 主要用于液晶电视解码,内置51单片机,全部代码用C编写,编译环境为KEILC
💻 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 + -