📄 mst705Ȧ
字号:
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 + -