//----------------------------------------------------------------------------------------------------
// ID Code      : Int.c No.0002
// Update Note  :
//
//----------------------------------------------------------------------------------------------------

#include "Core\Header\Include.h"

#if  0
void VBI_GetData();
#else
#define	VBI_GetData();
#endif
//--------------------------------------------------
// Timer0 Interrupt (375 us)
//--------------------------------------------------
void IntProcTimer0(void) interrupt 1
{
	static BYTE data ucTimer0Cnt = 0x00;
	static BYTE data ucTimerCnt = 0x0a;
	static UINT16 data ucSystemCnt = 3910;
	

	//EA = 0;
	TR0 = _ON;
#if(_FAST_READ == _ON)
	if(GET_POWERSTATUS())
	{
		TL0 = _TIMER0_COUNT_LBYTE;	
		TH0 = _TIMER0_COUNT_HBYTE;	
	}
	else
	{		
		TL0 = _TIMER0_COUNT_LBYTE_PD;	
		TH0 = _TIMER0_COUNT_HBYTE_PD;	
	}
#else
	TL0 = _TIMER0_COUNT_LBYTE;	
	TH0 = _TIMER0_COUNT_HBYTE;	
#endif	

#if (_IR_HANDLER_MODE==_SW_MODE)

	if (IrHandlerEnable==1)	
		CIrHandler();
	
#endif	//#if (_IR_HANDLER_MODE==_SW_MODE)


	if(!(--ucSystemCnt))
	{
#if(_FAST_READ == _ON)
		if(GET_POWERSTATUS())
			ucSystemCnt = 3910;
		else
			ucSystemCnt = 3850;
#else		
		ucSystemCnt = 3910;
#endif

		//second task:
		bTimeSecTicker = 1;

		//task: system timer
		ucSecSystem++;
		if(ucSecSystem == 60)
		{
			ucSecSystem = 0;
			ucMinSystem++;
			if(ucMinSystem == 60)
			{
				ucMinSystem = 0;
				ucHourSystem++;
				if(ucHourSystem == 24)
					ucHourSystem = 0;
			}
		}
	}
	
	if((++ucTimer0Cnt) >= _EVENT_PERIOD)
	{
		// 1ms task
		ucTimer0Cnt = 0;
		
		bNotifyTimer0Int = _TRUE;
		
		if(ucTimerCnt)
			ucTimerCnt--;
		else if(bTimer0Ctrl == _FALSE) 
		{
			// 10ms task
			CTimerDecreaseTimerCnt();
			ucTimerCnt = 0x0a; 	//including the above 1.125ms, 
			
#if _TV_AFC_SUPPORT
			if (ucTimerAfcMs++>=50)
			{
				ucTimerAfcMs=0;
				bTimerAfcms = 1;
			}
#endif	//#if _TV_AFC_SUPPORT
		}
		

	}
	
	EA = 1;

}

#if(1/*_DEBUG_TOOL == _RS232*/) //fjyang
//-------------------------------------------------------------------------------------------------------------------
// UART interrupt function (4)
//-------------------------------------------------------------------------------------------------------------------
void IntProcUart(void)  interrupt 4
{
	ES = 0; // disable uart interrupt.
	//EA = 0;

	if (TI) {
		TI = 0;
	}
	else if (RI) {
		if (fUartStart == 0) {
			//m_RXBuffer[UartNum] = SBUF;
			pUartData[0] = SBUF;
			//MCU_THRESHOLD_VALUE_FF0F = pUartData[0];
			switch(pUartData[0])
			{
				case UartCMD_DebugModeEnter:  	// Enter debug mode
				case UartCMD_DebugModeExit:  	// Exit debug mode
			#if(_EXTERNAL_FLASH_TABLE == _ON)
				case UartCMD_FlashRead: // Read Flash
			#endif
					//MCU_THRESHOLD_VALUE_FF0F = 0xA0;
					UartCount = 4;
					break;
				case UartCMD_CScalerRead:  			// Read RTD2553V
				case UartCMD_I2CRead:  				// Read I2C
				case UartCMD_I2CWrite:  				// Write I2C
				case UartCMD_24C32Read:				// Read 24C32
				case UartCMD_24C32Write:			// Write 24C32
				#if _HDCP_WR_BY_RS232
 				case UartCMD_FlashHdcpRead:			// Read 24C04
					   	UartCount = 3;			//tatal 4 bytes
						break;
				case UartCMD_FlashHdcpWrite:			// Write 24C04
					   	UartCount = 11;			//total 12 bytes
						break;
			#endif

			/*
			#if(_EXTERNAL_FLASH_TABLE == _ON)
				case UartCMD_FlashEraseSector: // Flash Erase one sector
			#endif
			*/
					//MCU_THRESHOLD_VALUE_FF0F = 0xA1;

			/*
			#if(_EXTERNAL_FLASH_TABLE == _ON)
				case UartCMD_FlashWrite: // Write Flash
					UartCount = 52;
					break;
			#endif
			*/
				case UartCMD_CScalerWrite:  			// Write RTD2553V
					//MCU_THRESHOLD_VALUE_FF0F = 0xA2;
					UartCount = 2;
					break;
			#if _RS232_TUNER//Read/Write Philip_Tuner
				case UartCMD_TunerWrite:  			// Write Philips Tuner
					//MCU_THRESHOLD_VALUE_FF0F = 0xA3;
					UartCount = 5;
					break;
				case UartCMD_TunerRead:  			// Read Philips Tuner
					//MCU_THRESHOLD_VALUE_FF0F = 0xA4;
					UartCount = 1;
					break;
			#endif

				default:
					//MCU_THRESHOLD_VALUE_FF0F = 0xA5;	
					UartCount = 0;
					fUartStart = 0;
					break;
			}
			if(UartCount != 0){
				UartNum = 1;
				fUartStart = 1;
			}
		}
		else {
			if (UartNum <= UartCount) {
				pUartData[UartNum] = SBUF;
				UartNum++;
				if (UartNum > UartCount) {
					fTest = 1;
					fUartStart = 0;
					UartCount = 0;
				}
			}
		}
		RI = 0;
	}
	//EA = 1;
	ES = 1;

}
#endif  // End of #if(_DEBUG_TOOL == _RS232)

#if(_DEBUG_TOOL == _ISP_FOR_MYSON)
//-------------------------------------------------------------------------------------------------------------------
// UART interrupt function (2)
//-------------------------------------------------------------------------------------------------------------------
void IntProcDdcci(void)  interrupt 2
{
    BYTE tempbuf;

    EA = 0;

    tempbuf = MCU_INTFLG_F03;

    if(tempbuf & 0x20)
        ucDdcciCommandNumber = 0;

    if(!bRunCommand)
    {
        if(tempbuf & 0x40)
        {
            if(MCU_IICSTUS_F01 & 0x80)
                ucDdcciData[ucDdcciCommandNumber] =  MCU_RCTXBBUF_F08;
            else
                ucDdcciData[ucDdcciCommandNumber] =  MCU_RCTXBBUF_F08;

            ucDdcciCommandNumber++;

            if(ucDdcciCommandNumber>=2)
            {
                bRunCommand=_TRUE;
                //ucDdcciCommandNumber=0;
            }
        }
    }

    if((tempbuf & 0x80)==0x80)
    {
        MCU_RCTXBBUF_F08 = TxBUF;
    }

    MCU_INTFLG_F03 =0;
    EA = 1;
}
#endif  // End of #if(_DEBUG_TOOL == _ISP_FOR_MYSON)

#if(1 /*_DEBUG_TOOL == _ISP_FOR_RTD2662_EMCU*/) //fjyang
void IntProcDdcci(void)  interrupt 2
{
    BYTE tempbuf;
    
   // EA=0;
    MCU_I2C_IRQ_CTRL2_FF2A  &= 0xDF; //host write/read enable
    if(!bRunCommand)
    {
        tempbuf = MCU_I2C_STATUS_FF27;   

        if(tempbuf & 0x08)
            MCU_I2C_DATA_OUT_FF26 = TxBUF;       

        if(tempbuf & 0x01) 
            ucDdcciCommandNumber = 0;

        if(tempbuf & 0x02) 
            ucDdcciCommandNumber=0;
        		
        if(tempbuf & 0x04)
        {
            if(ucDdcciCommandNumber==0)
                ucDdcciData[ucDdcciCommandNumber] = MCU_I2C_SUB_IN_FF24;

            ucDdcciCommandNumber++;
            ucDdcciData[ucDdcciCommandNumber] = MCU_I2C_DATA_IN_FF25;
            bRunCommand=_TRUE; 
        }

        MCU_I2C_STATUS_FF27 = tempbuf & 0xc0;
    }

    EA=1;
}
#endif  // #if(_DEBUG_TOOL == _ISP_FOR_RTD2662_EMCU)

#if  0

void IntProc_Timer1(void) interrupt 3
{
	ET1 = 0;  	// Disable Timer 1 interrupt
	VBI_GetData();
	TL1 = _TIMER1_COUNT_LBYTE;  // (for 1ms)
	TH1 = _TIMER1_COUNT_HBYTE;  // Load Timer1 hifh-byte  (for 1ms)
	TR1 = 1;    // Start Timer1
	ET1 = 1;	// Enable Timer 1 interrupt
}

/**
 * The VBI interrupt service routine.
 */
void VBI_GetData(void) //VBI INTERRUPT handler
{
	//bVBI_INT_Enable = 0;
	ClearVerLineCompSts();
	//bVchip_CanRead = 1;
	//bVBI_INT_Enable = 1;
}

#endif

