📄 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 FlagCheckHandler(void); //标志位判断程序
void SyncModeHandler(void); //同步信号模式处理程序
BOOL TV_SearchHandle(void); //电视搜索处理称许
void VD_DSP_Processor(void); //VD_DSP处理程序
extern BOOL ExecuteKeyEvent(MenuItemActionType menuAction);//按键执行事件程序
void VersionMsg(void) //程序版本处理
{
putstr("\r\nMstar Semiconductor"); //Mstar 驱动IC
putstr("\r\n[Date]:"); //编译日期
putstr(__DATE__);
putstr("\r\n[Time]:"); //编译时间
putstr(__TIME__);
putstr("\r\nACC version: " ); //ACC版本号
putstr(msVDAcc_GetVersion() );
putstr("\r\nDSP version: " ); //DSP版本号
putstr(VD_DSP_GetVersion() );
putstr("\r\nFSC version: " ); //FSC版本号
putstr(msVD_FSC_GetVersion() );
putstr("\r\nAGC version: " ); //AGC版本号
putstr(VD_AGC_GetVersion() );
printf("\r\nMaria Ver: %d ",VD_Type ); //
putstr("\r\nPanel:");
putstr(PanelName); //屏的型号
}
#define LOAD_4K_TO 0x0000
#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++;
} 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++;
} while (dest != 0);
sfRegs[0x9e]=0x0f;
sfRegs[0x39]=0x10; // 0x10 make address after 0xf000->code memory(address 0xf000)
#endif
}
void main(void)
{
Init_MCU(); //初始化MCU
StartConfig(); //初始化配置
Load4K(); //?
#if(ENABLE_VD_DSP)
VD_DSP_Init();
#endif
msChipVersionRead(); //读芯片版本
WatchDogClear(); //清看门狗
VersionMsg(); //相关版本信息显示
WatchDogClear(); //清看门狗
Init_GlobalVariables(); //初始化全局变量
ReadSetting(); //读设置?
Set_PowerOnFlag(); //置电源标志位
WatchDogClear(); //清看门狗
msInit(); //MTSAR初始化
WatchDogClear(); //清看门狗
OSDGammaInit(); //OSD及GAMMA初始化
WatchDogClear();
vdInitVariable(); //?
Init_Device(); //初始化驱动设备
#if ENABLE_DDC2BI
msDDC2BIInit(); //DDC初始化
#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(); //VD_DSP处理
#if(ENABLE_SW_FILED)
MSVD_FieldProcessor(); //?
#endif
msVD_FSC_Detect(); //FSC(制式晶振、频率)探测
if((g_ucmsVDCtl&MSVD_CTL_FLAG_ACC))
msVDAcc_Processor(); //?
//VD[7:0]ITU65 VIDEO DATA BUS
//if( g_ucmsVDCtl&MSVD_CTL_FLAG_NOISE_HANDLER )
msVDNoiseHandler();
//if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_AFEC )
msVDAFECHandler();
if( IsSrcHasSignal() )
{
//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
FlagCheckHandler();
VD_DSP_Processor();
#if(ENABLE_CHECK_AUTO_H_TOTAL)
msCheckBK0_57_Value();
#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)
;
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;
}
else if(g_bTVManualSearchEnable)
{
TV_ChannelManualScan();
return TRUE;
}
if (g_bTVManualStore)
{
SaveChannelData( g_TVChSetting.ucCurChannelNO, &chData );
g_bTVManualStore = FALSE;
}
return FALSE;
}
#endif
void FlagCheckHandler(void)
{
#if GAME_ENABLE
if (g_ucMenuPageIndex!=GameMenu&&g_bGameEnable)
g_bGameEnable=0;
#endif
MenuStatusCHK();
if(ReDrawCurrentOSDFlag)//for time set
{
ReDrawCurrentOSDItem(1);
ReDrawCurrentOSDItem(2);
ReDrawCurrentOSDItem(3);
Clr_ReDrawCurrentOSDFlag();
}
#if TV_ENABLE
if(ChannelChangFlag)
{
TV_SetCh();
Clr_ChannelChangFlag();
}
#endif
if(ShowSourceFlag)
{
DrawShowSourcemenu();
Clr_ShowSourceFlag();
}
#ifdef Multi_language
if(RedrawSystemMenuFlag)
{
DrawSystemMenu();
Clr_RedrawSystemMenuFlag();
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -