📄 main.c
字号:
#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 "M2_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)
{
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);
}
/*
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)
{
Init_MCU();
StartConfig();
#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();
OSDGammaInit();
WatchDogClear();
vdInitVariable();
Init_Device();
CheckFactoryKeyStatus();
#if ENABLE_DDC2BI
msDDC2BIInit();
#endif
#if ENABLE_MCU_USE_INTERNAL_CLOCK
McuUseInternalClock();
#endif
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(0);
#endif
#if(ENABLE_DDC2BI)
msDDC2BICommandHandler();
#endif
}
}
void VD_DSP_Processor(void)
{
BYTE ucBank;
if( IsVideoPortInUse() && PowerOnFlag)
{
if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_AGC_PROCESSOR )
VD_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();
if( VD_Type >= MARIA2_G)
{
msWriteBit(BK0_F7_TEST_BUS_SELECT, 1,_BIT6);
msWriteByte(BK0_F8_TEST_MODE, 0x00);
msWriteBit(BK0_F7_TEST_BUS_SELECT, 0,_BIT6);
}
msSoftwareReset(SWR_B|REGR_B, 10);
devAudioWrite(0);
}
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 VGA_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 + -