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

📄 mst705Ȧ

📁 MST705源代码
💻
📖 第 1 页 / 共 2 页
字号:
BOOL msGetInterlaceBit(void)
{
    BOOL bInterlace = 0;
    BYTE ucBank = msReadByte( BK0_00_REGBK);

    msWriteByte( BK0_00_REGBK, REG_BANK_SCALER );
    if( msReadByte( BK0_EF_STATUS2)&_BIT3 )
        bInterlace = 1;

    msWriteByte( BK0_00_REGBK, ucBank );
    return bInterlace;
}


void msFieldDetectCtl(void)
{
    BYTE ucBank;

    ucBank = msReadByte( BK0_00_REGBK);
    msWriteByte(BK0_00_REGBK, REG_BANK_SCALER );

 #if (VGA_ENABLE || YPBPR_ENABLE)
    if( IsVGAInUse()||IsYPbPrInUse()) // PC/YPBPR
    {
        /*
        if(StandardModeFlag&bInterlaceMode)
            msWriteByte(BK0_E4_ISOVRD, 0x03);
        else
        */
        if(IsYPbPrInUse())
        {
            if(g_ucSrcModeIndex==MD_720x576_50I||g_ucSrcModeIndex==MD_1920x1080_50I)    //for 576i and 1080i 50Hz flick
            {
			  #if(PANEL_TYPE==PanelHSD07_D)
                msWriteByte(BK0_E4_ISOVRD, 0x00);
			    if(g_ucSrcModeIndex==MD_1920x1080_50I)
	                msWriteByte(BK0_E5_MDCTRL, 0x02);
				else
	                msWriteByte(BK0_E5_MDCTRL, 0x01);
			  #else
                msWriteByte(BK0_E4_ISOVRD, 0x00);
                msWriteByte(BK0_E5_MDCTRL, 0x01);
			  #endif
            }
            else
            {
                msWriteByte(BK0_E4_ISOVRD, 0x00);
                msWriteByte(BK0_E5_MDCTRL, 0x00);
            }
        }
        else
        {
            msWriteByte(BK0_E4_ISOVRD, 0x00);
            msWriteByte(BK0_E5_MDCTRL, 0x00);
        }
    }
    else
#endif
    {
        msWriteByte(BK0_E4_ISOVRD, 0x03);
#if (ENABLE_VD_DSP)
        msWriteByte(BK0_E5_MDCTRL, 0x04); // 20051114
#elif(ENABLE_SW_FILED)
        msWriteByte(BK0_E5_MDCTRL, 0x04); // 20060116
#else
        msWriteByte(BK0_E5_MDCTRL, 0x00);
#endif
    }

    msWriteByte( BK0_00_REGBK, ucBank );
}

void msLPFCtl( BYTE ucLPFParaIdx )
{
    BYTE ucBank;
    BYTE code tLPFPara[][5] = {
        {   0x7F,   0x03,   0x3C,   0x05,   0x1A    }, // VD 443
        {   0x7E,   0x04,   0x3C,   0x04,   0x1C    }, // VD 358
        {   0x7F,   0x03,   0x3B,   0x06,   0x1A    }, // PC, YPbPr
        {   0x42,   0x01,   0x3C,   0x07,   0x14    }, // TV, Strong
        {   0x3F,   0x03,   0x3C,   0x05,   0x1A    }, // TV, Normal
        {   0x7F,   0x04,   0x3C,   0x04,   0x1A    }, // AV
    };

    BYTE i;

    ucBank = msReadByte( BK0_00_REGBK);
    msWriteByte( BK0_00_REGBK, 1 );

    if( ucLPFParaIdx == LPF_CTL_TURN_OFF )
        msWriteBit(BK1_55_LPF_CTL, 0, _BIT6);
    else
    {
        for( i = 0; i < 5; ++ i )
           msWriteByte( BK1_50_LPF_TAP1+i, tLPFPara[ucLPFParaIdx][i]);

        if( ucLPFParaIdx == LPF_CTL_TV_STRONG)
             msWriteBit(BK1_55_LPF_CTL, 1, _BIT6);
        else
             msWriteBit(BK1_55_LPF_CTL, 0, _BIT6);
    }

    msWriteByte( BK0_00_REGBK, ucBank );
}


BYTE code tFreeRunColor[][2] =
{   // BK0_5C,  BK0_5D
    { 0x00      , 0x00, }, // FREE_RUN_COLOR_BLACK
    { 0xFE|_BIT0, 0xFF, }, // FREE_RUN_COLOR_WHITE
    { 0x3E|_BIT0, 0x00, }, // FREE_RUN_COLOR_BLUE
};

void msSetBlueScreen( BOOL bEnable, BYTE ucColor )
{
    BYTE ucBank;
    ucBank=msReadByte(BK0_00_REGBK);
    msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
    if( bEnable )
    {
        //msFPLLCtl( FPLL_STOP );
        msWriteBit(BK0_02_ISELECT, _ENABLE, _BIT7);
        msSetupFreeRunMode(DEFAULT_OUTPUT_V_FREQ);

        // Set screen color
        msWriteByte( BK0_5C_FRAME_COLOR_1, tFreeRunColor[ucColor][0] );
        msWriteByte( BK0_5D_FRAME_COLOR_2, tFreeRunColor[ucColor][1] );

        #if (VGA_ENABLE || YPBPR_ENABLE)
        if( IsVGAInUse()||IsYPbPrInUse()) // PC/YPBPR
        {
            msADCSelfMismatchCal_RGB_YCbCr();
            msADCGainOffsetMismatchCal_RGB_YCbCr();
        }
        #endif//#if (VGA_ENABLE || YPBPR_ENABLE)

        if( IsVideoPortInUse() )
        {
            if(IsCVBSInUse())
                msADCSelfMismatchCal_CVBS_SVIDEO_Y();
            else if(IsSVideoInUse())
            {
                msADCSelfMismatchCal_CVBS_SVIDEO_Y();
                msADCSelfMismatchCal_SVIDEO_C();
            }
        }


    }
    else // Disable blue screen
    {
        #if (VGA_ENABLE || YPBPR_ENABLE)
        if( IsVGAInUse()||IsYPbPrInUse() ) // PC/YPBPR
        {
            msADCSelfMismatchCal_RGB_YCbCr();
            msADCGainOffsetMismatchCal_RGB_YCbCr();
        }
        #endif//#if (VGA_ENABLE || YPBPR_ENABLE)

        if( IsVideoPortInUse() )
        {
            if(IsCVBSInUse())
                msADCSelfMismatchCal_CVBS_SVIDEO_Y();
            else if(IsSVideoInUse())
            {
                msADCSelfMismatchCal_CVBS_SVIDEO_Y();
                msADCSelfMismatchCal_SVIDEO_C();
            }
        }

        #if (VGA_ENABLE || YPBPR_ENABLE)
        if( IsVGAInUse()||IsYPbPrInUse()) // PC/YPBPR
        {
            msWriteBit(BK0_5E_PATTERN, 1, _BIT1); // Let screen black
            msWriteBit(BK0_02_ISELECT, _DISABLE, _BIT7); // Disable freerun
            Delay1ms(300);
            msWriteBit(BK0_5E_PATTERN, 0, _BIT1); // Disable screen black
        }
        else
        #endif
            msWriteBit(BK0_02_ISELECT, _DISABLE, _BIT7); // Disable freerun

    }
    msWriteByte(BK0_00_REGBK, ucBank);
}

#if( ENABLE_MONITOR_SIGNAL )
XDATA BYTE g_ucMonitorSignal_ChangeCounter;
void msMonitorSignal(BYTE ucFlag)
{
    XDATA WORD wInHP;
    XDATA WORD wInVT;
    XDATA DWORD dwInHF;

    bit bHSyncChange = 0;
    bit bVTotalChange = 0;


    if( ucFlag&MONITOR_SIGNAL_INIT )
    {
        g_ucMonitorSignal_ChangeCounter = 0;
        return;
    }

    if( g_wMonitorSignal_Timer )
        return;

    g_wMonitorSignal_Timer = 100;


    wInHP = msGetVideoHPeriod(0);
    if( wInHP == 0 ) // H invalid
        return;

    dwInHF = MST_CLOCK_HZ/wInHP;

    wInVT = msVDGetVTotal();
    if( abs(g_InOutCtl.inHPeriod - wInHP)>=20 )  // Nelson Modify 2006-05-15
    {
        bHSyncChange = 1;
        bVTotalChange = 1;
    }
    else if( ( abs(g_InOutCtl.inVTotal - wInVT)>=50))  // Nelson Modify 2006-05-15
    {
        bVTotalChange = 1;
    }


    if( bHSyncChange || bVTotalChange )
    {
        ++ g_ucMonitorSignal_ChangeCounter;
        if( g_ucMonitorSignal_ChangeCounter >= 10 )
        {
            g_ucMonitorSignal_ChangeCounter = 0;
        }
        else
        {
            bHSyncChange = 0;
            bVTotalChange = 0;
        }
    }
    else
    {
        g_ucMonitorSignal_ChangeCounter = 0;
    }

    if( bHSyncChange || bVTotalChange )
    {
        if( bHSyncChange )
        {
            g_InOutCtl.inHPeriod = wInHP;
            g_InOutCtl.inHFreq = dwInHF;
        }
        g_InOutCtl.inVTotal = wInVT;

        msProgWindow(OUTPUT_FREERUN);
        SetOutputClock(OUTPUT_FREERUN);
    }
}
#endif

#if TV_ENABLE
BOOL msVDGetSyncStable( BYTE ucStableCount, BYTE wMaxTime )
{
    WORD wCurrentStatus;
    BYTE ucStatusCount = 0;
    BYTE ucUnstableCount = wMaxTime - ucStableCount;

    do
    {
    	VD_DSP();
        wCurrentStatus = msVDGetSyncStatus(); //& (VD_HSYNC_LOCKED | VD_COLOR_LOCKED )//| VD_INTERLACED | VD_VSYNC_50HZ | VD_RESET_ON ); // check status
        if( wCurrentStatus & VD_HSYNC_LOCKED ) // check stable
        {
            ucStatusCount ++;

            if( ucStatusCount >= ucStableCount ) // stable counter
            {
            	g_VdInfo.wVideoStatus=wCurrentStatus;
                return TRUE;
            }
        }
        else
            ucUnstableCount--;

        Delay1ms(3);
    }while((wMaxTime --)&&ucUnstableCount); // while

    return FALSE;
}

#endif

#if CCIR656_ENABLE
BYTE msSyncDetect(void)
{
    WORD uwHFreq, uwVFreq;
    BYTE ucSyncStatus, ucSyncTemp;
    BYTE ucBank;

    ucSyncStatus = 0;

    ucBank = msReadByte( BK0_00_REGBK);
    msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);

    uwHFreq = msReadWord(BK0_EB_HSPRD_H) & 0x1FFF;	// Get H Period count
    if ((uwHFreq == 0x1FFF) || (uwHFreq < 10))
    {
        ucSyncStatus |= NO_HSYNC_B;
    }
    Delay1ms(50);
    uwVFreq = msReadWord(BK0_ED_VTOTAL_H) & 0x7FF;		// Get V period count
    if ((uwVFreq == 0x7FF) || (uwVFreq < 10))
    {
        ucSyncStatus |= NO_VSYNC_B;
    }
    ucSyncTemp = msReadByte(BK0_EF_STATUS2);		// Get SYNC status
    //printf("\r\nucSyncTemp111=%x", ucSyncTemp);
    ucSyncStatus |= (ucSyncTemp & (PAL_MODE_B+CSYNC_MODE_B+INTERLANCE_MODE_B+HSYNC_NEGATIVE_B+VSYNC_NEGATIVE_B));

    Delay1ms(30);

    ucSyncTemp = msReadByte(BK0_EF_STATUS2);

    if ((ucSyncStatus&(HSYNC_NEGATIVE_B+VSYNC_NEGATIVE_B)) != (ucSyncTemp&(HSYNC_NEGATIVE_B+VSYNC_NEGATIVE_B)))
    ucSyncStatus |= SYNC_LOSS_MASK;

    msWriteByte(BK0_00_REGBK, ucBank);

    return ucSyncStatus;
}
void msCCIR656Detect(void)
{
    BYTE Bank,ucTemp,ucSyncStatus;
    WORD hFreq,vFreq;
    Bank=msReadByte(BK0_00_REGBK);

    if(!PowerOnFlag)
        return;

    if(g_bInputTimingChangeFlag)
        {
        Clr_InputTimingChangeFlag();
	 g_CCIR656Info.ucSyncStatus = 0xFF;//hyy add for adjust source to CCIR656,Redetect signal 	
    	 }

    msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
    {
        ucSyncStatus = msSyncDetect();
        if(g_CCIR656Info.ucSyncStatus!=ucSyncStatus)
        {
            if((ucSyncStatus&SYNC_LOSS_MASK) && (g_CCIR656Info.ucNoSyncStableCounter < SYNC_CHECK_TIMES))
            {
                g_CCIR656Info.ucNoSyncStableCounter++;
                g_CCIR656Info.ucSystemFlag &= ~INPUT_SIGNAL_STABLE_FLAG;
                return;
            }
            else
            {
                if (ucSyncStatus&SYNC_LOSS_MASK)
                {
                    g_CCIR656Info.ucSystemFlag |= NO_INPUT_SIGNAL_FLAG;
                    g_CCIR656Info.bNoSyncstable=1;
                    g_CCIR656Info.ucNoSyncStableCounter=0;
                    g_CCIR656Info.ucSyncStatus=ucSyncStatus;
                    printMsg("No Signal Input !");
                }
                else
                {
                    if(g_CCIR656Info.ucSyncStableCounter < SYNC_STABLE_TIMES)
                    {
                        g_CCIR656Info.ucSyncStableCounter++;
                        return;
                    }
                    else
                    {
                        g_CCIR656Info.bSyncstable= TRUE;
                    }
                    g_CCIR656Info.ucSyncStatus=ucSyncStatus;

                   g_wHorizontalPeriod = msGetHorizontalPeriod();
                   g_wVerticalTotal = msGetVerticalTotal();

                   hFreq=HFreq(g_wHorizontalPeriod);
                   vFreq=VFreq(hFreq, g_wVerticalTotal);

                   if (msReadByte(BK0_EF_STATUS2)&INTM_B)
                   {
                       vFreq*=2;
                   }

                    printf("\r\nHFreq = %d", hFreq);
                    printf("\r\nVFreq = %d", vFreq);

                    printMsg("Signal Input !");
                    msVDColorBurstHandler(VD_COLOR_BURST_HANDLER_RESET);

                    g_CCIR656Info.ucSystemFlag &= ~NO_INPUT_SIGNAL_FLAG;
                }


                g_CCIR656Info.ucSystemFlag &= ~INPUT_TIMING_CHANGE_FLAG;
                g_CCIR656Info.ucSyncStableCounter = 0;

                msWriteByte(BK0_00_REGBK, REG_BANK2_VD);		// switch bkan 3 VCF
                ucTemp = msReadByte(BK3_72_COMB_STSC);
                if ((g_CCIR656Info.ucSystemFlag & NO_INPUT_SIGNAL_FLAG ) && (ucTemp & _BIT3 ==0))
                {
                    g_CCIR656Info.ucSystemFlag |= INPUT_TIMING_CHANGE_FLAG;
                    return;
                }
            }
        }
    }
    msWriteByte(BK0_00_REGBK, Bank);
}
void msCCIR656ModeHandler(void)
{
    BYTE Bank;
    Bank=msReadByte(BK0_00_REGBK);
    if(g_CCIR656Info.bSyncstable)
    {
        printMsg("\r\nCCIR656 sync setup");

        g_CCIR656Info.bSyncstable=0;
    g_InOutCtl.bInterlace = msGetInterlaceBit();
    //g_InOutCtl.bInterlace = 1;

        if(g_CCIR656Info.ucSyncStatus&PAL_MODE_B)
            {
            if(g_InOutCtl.bInterlace)
                {
                g_ucSrcModeIndex = MD_720x576_50I;				
	         printMsg("\r\n CCIR656 MD_720x576_50I");
            	  }
	     else
	     	 {
                g_ucSrcModeIndex = MD_720x576_50P;			
	         printMsg("\r\n CCIR656 MD_720x576_50P");
	     	 }
		 
            g_VdInfo.ucVideoSystem = SIG_PAL;
            }
        else
           {
            if(g_InOutCtl.bInterlace)
            	{
                g_ucSrcModeIndex = MD_720x480_60I;			
	         printMsg("\r\n CCIR656 MD_720x480_60I");
            	}
	     else
	     	{
                g_ucSrcModeIndex = MD_720x480_60P;			
	         printMsg("\r\n CCIR656 MD_720x480_60P");
	     	}
		 
            g_VdInfo.ucVideoSystem = SIG_NTSC;
           }
        msCommSetupMode();
  	 SetOutputTimingAndWindow( OUTPUT_SIG);

        msSetScaler();
        #if ENABLE_MONITOR_SIGNAL
	 msMonitorSignal(MONITOR_SIGNAL_INIT);
        #endif
        msSetBlueScreen( _DISABLE, FR_BLACK );

        if(PowerOnFlag)
            Power_TurnOnPanel();

    }
    else if(g_CCIR656Info.bNoSyncstable)
    {
	 printMsg("\r\nCCIR656 no sync setup");
        g_CCIR656Info.bNoSyncstable=0;
        g_InOutCtl.bInterlace = 1;
        g_ucSrcModeIndex = MD_FreeRun;
        g_VdInfo.ucVideoSystem = SIG_NONE;
        msSetBlueScreen( _ENABLE, FR_BLUE );

        if(PowerOnFlag)
            Power_TurnOnPanel();
    }



    msWriteByte(BK0_00_REGBK, Bank);
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -