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

📄 mst705Ȧ

📁 MST705源代码
💻
字号:
#include "types.h"
#include "board.h"
#include "global.h"
#include "mcu.h"
#include "detect.h"
#include "menu.h"
#include "ms_reg.h"
#include "power.h"
#include "DEBUG.h"
#include "ms_rwreg.h"
#include "msosd.h"
#include "misc.h"
#include "NVRam.h"
#include "panel.h"
#include "mstar.h"
#include "UserPref.h"
#include "keypad.h"
#include "TV.h"
#include "DevVD.h"
#include "msvd.h"
#include "DEBUG.h"
#include "Tda7052.h"
#include "Game.h"
#include "Maria2_FSC_Lib.h"
#include "Maria2_ACC_Lib.h"
#include "M2_VD_Std_Lib.h"
#include "M9_VD_AGC_Lib.h"
#include "msVDField.h"
#include "msddc2bi.h"

#if(ENABLE_VD_DSP)
#include "Maria2_dsp_lib.h"
#endif

void Init_Device(void);
void StartConfig(void);
void SyncModeHandler(void);
BOOL TV_SearchHandle(void);
void VD_DSP_Processor(void);

#if(RM_EEPROM_TYPE==RM_TYPE_PMC010)
void msSPI_CheckWriteProtect(void);
#endif

extern BOOL ExecuteKeyEvent(MenuItemActionType menuAction);
void VersionMsg(void)
{
	#if SYSTEM_BOOT_UP_QUICKLY_ENABLE
	//dummy
	#else
    putstr("\r\nMstar Semiconductor");
    putstr("\r\n[Date]:");
    putstr(__DATE__);
    putstr("\r\n[Time]:");
    putstr(__TIME__);
    putstr("\r\nACC version: " );
    putstr(msVDAcc_GetVersion() );
    putstr("\r\nDSP version: " );
    putstr(VD_DSP_GetVersion() );
    putstr("\r\nFSC version: " );
    putstr(msVD_FSC_GetVersion() );
    putstr("\r\nAGC version: " );
    putstr(VD_AGC_GetVersion() );
    printf("\r\nMaria Ver: %d ",VD_Type );
    putstr("\r\nPanel:");
    putstr(PanelName);
#endif





}

/*
void Load4K(void)
{
	BYTE xdata *dest;
	BYTE code *src;

	src = 0xf000; // Code
	dest = 0xf000; // SRam
	do {
		*dest = *src;
		src++;
		dest++;
	} while (dest != 0);
	//P3_4 = 0;
    sfRegs[0x9e]=0x0f;
    sfRegs[0x39]=0x10;  //0x30 make address after 0xf000->code memory(address 0x0000)
                        //0x10 make address after 0xf000->code memory(address 0xf000)
}
*/

#if( LOAD_4K_TO == 0x0000 ) // SRAM mapping to 0000
code char dummy[16] _at_ 0x0FF8;
#endif
void Load4K(void)
{
	BYTE xdata *dest;
	BYTE code *src;

#if( LOAD_4K_TO == 0x0000 ) // SRAM mapping to 0000
	src = 0x0000; // Code
	dest = 0xf000; // SRam
	do {
		*dest = *src;
		src++;
		dest++;
        WDTCON = 1;
	} while (dest != 0);
    sfRegs[0x9e]=0x0f;
    sfRegs[0x39]=0x50; // 0x50 make address after 0xf000->code memory(address 0x0000)

#elif( LOAD_4K_TO == 0xF000 ) // SRAM mapping to F000
	src = 0xf000; // Code
	dest = 0xf000; // SRam
	do {
		*dest = *src;
		src++;
		dest++;
        WDTCON = 1;
	} while (dest != 0);
    sfRegs[0x9e]=0x0f;
    sfRegs[0x39]=0x10; // 0x10 make address after 0xf000->code memory(address 0xf000)
#endif

if( VD_Type >= MARIA2_E )
    sfRegs[0x39] |= 0x80; // Enable HW patch
}

void main(void)
{
    StartConfig();
    Init_MCU();

    #if(RM_EEPROM_TYPE==RM_TYPE_PMC010)
    msSPI_CheckWriteProtect();
    #endif

    Load4K();
    WatchDogClear();
    #if(ENABLE_VD_DSP)
    VD_DSP_Init();
    #endif

    WatchDogClear();
    VersionMsg();
    WatchDogClear();

    Init_GlobalVariables();
    ReadSetting();
    Set_PowerOnFlag();
    WatchDogClear();

    msInit();
    WatchDogClear();

    #if ENABLE_MCU_USE_INTERNAL_CLOCK
    McuUseInternalClock();
    #endif

    vdInitVariable();
    Init_Device();
    WatchDogClear();

    CheckFactoryKeyStatus();
    #if ENABLE_DDC2BI
    msDDC2BIInit();
    #endif
    WatchDogClear();

    msSetupInputPort();

    OSDGammaInit();
    WatchDogClear();

    Menu_InitVariable();
    #if(ENABLE_WATCH_DOG)
    McuWatchDogSetTimer(WatchDogTime_5S);
    #endif


    while (1)
    {
        WatchDogClear();
        uartDecodeCommand(); // uart debug command

        if(g_bDebugProgStopFlag)
        continue;

        if(IsVideoPortInUse()&&PowerOnFlag)
        {
            VD_DSP_Processor();
            #if(ENABLE_DDC2BI)
            CheckDSPVSYNC();
            #endif
            #if(ENABLE_SW_FILED)
            MSVD_FieldProcessor();
            #endif

            msVD_FSC_Detect();

            if((g_ucmsVDCtl&MSVD_CTL_FLAG_ACC))
                msVDAcc_Processor();

            //if( g_ucmsVDCtl&MSVD_CTL_FLAG_NOISE_HANDLER )
                msVDNoiseHandler();

            //if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_AFEC )
                msVDAFECHandler();

            if( IsSrcHasSignal()||IsTVInUse())
            {
                //if ( g_ucmsVDCtl&MSVD_CTL_FLAG_COLOR_BURST_HANDLER )
                    msVDColorBurstHandler(NULL);

                #if(ENABLE_VCR_HANDLER)
                if(g_ucmsVDCtl2&MSVD_CTL2_FLAG_VCR)
                {
                    if( !IsTVInUse())
                        msVDVCRHandler();
                }
                #endif

                #if( ENABLE_HSYNC_HANDLER )
                msVDHSyncHandler();
                #endif
            }
        }

        SlowTimeHandler();

        VD_DSP_Processor();
        Menu_OsdHandler();

        #if TV_ENABLE
        if (TV_SearchHandle())
            continue;
        #endif

        #if( ENABLE_PAL_SWITCH_HANDLER )
        //if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_PAL_SWITCH )
            msVDPalSwitchHandler();
        #endif

        SyncModeHandler();
        Power_PowerHandler();

        #if GAME_ENABLE
        GameHandle();
        #endif

        #ifdef IR_DEBUG_EN
        DebugIRHandler();
        #endif

        VD_DSP_Processor();

        #if(ENABLE_CHECK_AUTO_H_TOTAL)
        msCheckBK0_57_Value();
        #endif


        #if(ENABLE_DDC2BI)
        msDDC2BICommandHandler();
        #endif

        #if  SYSTEM_BOOT_UP_QUICKLY_ENABLE
        if(g_bOSDLoadFlag==1&& b_turnonpannelflagbit==1)
        {
            Osd_LoadOsdFont();
            Set_ShowSourceFlag();
            g_bOSDLoadFlag=0;
        }
        #endif
    }
}

void VD_DSP_Processor(void)
{
    BYTE ucBank;

    if( IsVideoPortInUse() && PowerOnFlag)
    {
        if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_AGC_PROCESSOR )
            AGC_Processor();

        #if( ENABLE_SECAM )
        if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_SECAM )
            msVDSecamHandler();
        #endif

        #if( ((DSP_RUN_MODE == DSP_RUN_MODE_POLLING)||(DSP_RUN_MODE == DSP_RUN_MODE_TIMER_AND_POLLING)) )
        //if( g_ucmsVDCtl&MSVD_CTL_FLAG_VSYNC )
        {
            VD_DSP();

            ucBank = msReadByte( BK0_00_REGBK);
            msWriteByte( BK0_00_REGBK, REG_BANK3_COMB );
            if( msVDGetVTotal() > 566 ) // 50Hz
                msWriteByteMask(BK3_40_TIMDETCFGA, 0x03, 0x03); // Force 625 lines
            else
                msWriteByteMask(BK3_40_TIMDETCFGA, 0x02, 0x03); // Force 525 lines
            msWriteByte( BK0_00_REGBK, ucBank );
        }
        #endif

        #ifdef VD_PATCH_005
        if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_PATCH5 )
            msVD_Patch_005( 0 );
        #endif

        //if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_AFEC )
            //msVDAFECHandler();
    }
}

void Init_Device(void)
{
	if (PowerOnFlag)
   		Power_TurnOnGreenLed();

	#if TV_ENABLE
	TV_ChannelInit();
	#endif

   	msInitdevAudio();

	#if PanelLG07_AT
	msWriteByte(BK0_00_REGBK, REG_BANK1_ADC_ACE_MCU);			// Switch to Bank 1 for Turn off VGH and VGL
	msWriteByte(BK1_4A, 0x00);
	msWriteByte(BK1_4B, 0x40);
	msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);			// Switch to Bank 0
	#endif
}

void StartConfig(void)
{
    while((msReadByte(BK0_00_REGBK)&0xC0)!= 0x80)
        WatchDogClear();

    msChipVersionRead();

    msSoftwareReset(SWR_B|REGR_B, 1);
    devAudioWrite(0xFF);
    msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
    msWriteByte(BK0_F7_TEST_BUS_SELECT, 0xC8);
    msWriteByte(BK0_F8_TEST_MODE, 0x00);
    #if(MST_CHIP==MST702&&RM_EEPROM_TYPE<RM_TYPE_SST512)    //for enable GPIO for I2C , PWM3D/4D
    msWriteBit(BK0_87_DEBUG, 0,_BIT1);
    #endif
}

void SyncModeHandler(void)
{
    #if GAME_ENABLE
    if (g_bGameEnable)
        return;
    #endif

    if(IsVideoPortInUse())
    {
        VD_DSP_Processor();

        #if(ENABLE_MONITOR_VTOTAL)
        msMonitorVTotal( 0 );
        #endif

        vdMonitorInput();

        vdModeHandler();
        VD_DSP_Processor();
    }
    #if CCIR656_ENABLE
    else if(IsCCIR656InUse())
    {
        msCCIR656Detect();
        msCCIR656ModeHandler();
	if(FreeRunModeFlag)
        Clr_FreeRunModeFlag(); // hyy add to clear flage for adjust source from freerun to 656 bank0_57 bit 1
    }
    #endif
    #if (VGA_ENABLE || YPBPR_ENABLE)
    else
    {
        if (!g_ucModeDetectCounter || g_bInputTimingChangeFlag)
        {
            msMonitorInputTiming();
            g_ucModeDetectCounter=10;
        }
        msModeHandler();
    }
    #endif
}

#if TV_ENABLE
BOOL TV_SearchHandle(void)
{
    if(!IsTVInUse())
        return FALSE;

    if(g_bTVAutoScanChannelEnable)
    {
        TV_ChannelAutoScan();
        return TRUE;
    }
#if TV_SYSTEM!=TV_NTSC
    else if(g_bTVManualSearchEnable)
    {
        TV_ChannelManualScan();
        return TRUE;
    }
#endif

    if (g_bTVManualStore)
    {
        SaveChannelData( g_TVChSetting.ucCurChannelNO, &chData );
        g_bTVManualStore = FALSE;
    }

    return FALSE;
}
#endif

#if(RM_EEPROM_TYPE==RM_TYPE_PMC010)
void msSPI_CheckWriteProtect(void)
{
    BYTE ucTmp;

    // Read serial flash status
    MCUXFR_40_SSPI_WD0 = 0x05;
    MCUXFR_48_SSPI_TRIG= 0xF9;
    ucTmp = MCUXFR_49;
    //printf("\r\nFlash status=%x", ucTmp);

    if( (ucTmp&_BIT7) == 0 || (ucTmp&_BIT1) )
    {
        // Write Enable
        MCUXFR_40_SSPI_WD0 = 0x06;
        MCUXFR_48_SSPI_TRIG = 0xF9;

        // Write protect
        MCUXFR_40_SSPI_WD0 = 0x01;
        MCUXFR_41_SSPI_WD1= 0x9C;
        MCUXFR_48_SSPI_TRIG  = 0xF9;
    }
}
#endif

⌨️ 快捷键说明

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