📄 adjust.c
字号:
//----------------------------------------------------------------------------------------------------
// ID Code : Adjust.c No.0001
// Update Note :
//
//----------------------------------------------------------------------------------------------------
#define __ADJUST__
#include "..\Header\Include.h"
//--------------------------------------------------
// Description : Adjust IHS delay
// Input Value : IHS delay
// Output Value : None
//--------------------------------------------------
void CAdjustIHSDelay(WORD usIHSDelay)
{
CScalerSetBit(_VGIP_HV_DELAY_13, ~_BIT0, HIBYTE(usIHSDelay) & _BIT0);
CScalerSetByte(_IHS_DELAY_12, LOBYTE(usIHSDelay));
}
//--------------------------------------------------
// Description : Adjust IVS delay
// Input Value : IVS delay
// Output Value : None
//--------------------------------------------------
void CAdjustIVSDelay(WORD usIVSDelay)
{
CScalerSetBit(_VGIP_HV_DELAY_13, ~_BIT1, (usIVSDelay >> 7) & _BIT1);
CScalerSetByte(_IVS_DELAY_11, LOBYTE(usIVSDelay));
}
//--------------------------------------------------
// Description : Adjust Dclk offset
// Input Value : Dclk offset
// Output Value : None
//--------------------------------------------------
void CAdjustDclkOffset(WORD usDclkOffset)
{
CScalerSetBit(_DCLK_FINE_TUNE_OFFSET_MSB_B5, 0xf0, HIBYTE(usDclkOffset) & 0x0f);
CScalerSetByte(_DCLK_FINE_TUNE_OFFSET_LSB_B6, LOBYTE(usDclkOffset));
CScalerSetBit(_SPREAD_SPECTRUM_B7, ~_BIT2, _BIT2);
}
//--------------------------------------------------
// Description : Adjust spread spectrum range
// Input Value : Spread spectrum range
// Output Value : None
//--------------------------------------------------
void CAdjustSpreadSpectrumRange(BYTE ucSpreadRange)
{
CScalerSetBit(_SPREAD_SPECTRUM_B7, 0x0f, (ucSpreadRange << 4) & 0xf0);
CScalerSetBit(_SPREAD_SPECTRUM_B7, ~_BIT2, _BIT2);
}
//--------------------------------------------------
// Description : Sync processor measure start
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CAdjustSyncProcessorMeasureStart(void)
{
CScalerSetBit(_MEAS_HS_PERIOD_H_52, ~_BIT5, _BIT5); //Enable to start a measurement, auto cleared after finished. note by zhang_dc
}
//--------------------------------------------------
// Description : Turn on the error correction function
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CAdjustTMDSErrorCorrectionOn(void)
{
CScalerSetBit(_UP_DOWN_CTRL3_D4, 0x3f, 0xc0);
}
/*
//--------------------------------------------------
// Description : Turn off the error correction function
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CAdjustTMDSErrorCorrectionOff(void)
{
CScalerSetBit(_UP_DOWN_CTRL3_D4, 0x3f, 0x00);
}
*/
#if(_TMDS_SUPPORT == _ON)
//--------------------------------------------------
// Description : Measure TMDS transition result
// Input Value : ucType --> _TMDS_MEASURE_AVE, _TMDS_MEASURE_MAX, _TMDS_MEASURE_MIN
// ucSelect --> _TMDS_MEASURE_HSYNC_BE, _TMDS_MEASURE_HSYNC_AF, _TMDS_MEASURE_DE_BE, _TMDS_MEASURE_DE_AF
// Output Value : Transition result
//--------------------------------------------------
BYTE CAdjustTMDSMeasure(BYTE ucType, BYTE ucSelect)
{
BYTE result;
CScalerSetBit(_TMDS_MEAS_RESULT0_BD, ~(_BIT6 | _BIT5), (ucType << 5));
CScalerSetBit(_TMDS_MEAS_RESULT0_BD, ~(_BIT7 | _BIT4 | _BIT3), (_BIT7 | (ucSelect << 3)));
if(CTimerPollingEventProc(60, CMiscTMDSMeasureEvent) == _FALSE)
{
CScalerSetBit(_TMDS_MEAS_RESULT0_BD, ~_BIT7, 0x00);
return 0xff;
}
CScalerRead(_TMDS_MEAS_RESULT1_BE, 1, &result, _NON_AUTOINC);
return (result & 0x7f);
}
//--------------------------------------------------
// Description : Measure TMDS CRC value
// Input Value : None
// Output Value : CRC value, LWORD data type
//--------------------------------------------------
LWORD CAdjustTMDSCRCMeasure(void)
{
BYTE result[4];
result[0] = 0;
CScalerSetBit(_POWER_ON_OFF_CTRL_C2, ~_BIT0, 0x00);
CScalerSetBit(_POWER_ON_OFF_CTRL_C2, ~_BIT0, _BIT0);
if(CTimerPollingEventProc(60, CMiscTMDSCRCEvent) == _FALSE)
{
CScalerSetBit(_POWER_ON_OFF_CTRL_C2, ~_BIT0, 0x00);
return 0xffffffffl;
}
CScalerRead(_CRC_OUTPUT_BYTE_2_C0, 3, &result[1], _NON_AUTOINC);
return ((LWORD *)result)[0];
}
//--------------------------------------------------
// Description : Do two times CRC check and get phase SOD value
// Input Value : pArray --> SOD value buffer
// Output Value : Return 0 if CRCs are not the same or CRCs == 0
//--------------------------------------------------
BYTE CAdjustTMDSCRC(BYTE *pArray)
{
BYTE temp;
CScalerSetByte(_AUTO_ADJ_CTRL1_7D, 0x3b);
CScalerSetByte(_STATUS0_02, 0x00);
((LWORD *)pData)[0] = CAdjustTMDSCRCMeasure();
((LWORD *)pData)[1] = CAdjustTMDSCRCMeasure();
CScalerRead(_STATUS0_02, 1, &temp, _NON_AUTOINC);
CScalerRead(_AUTO_PHASE_3_84, 4, pArray, _AUTOINC);
if((((LWORD *)pData)[0] != ((LWORD *)pData)[1]) || ((temp & 0x03) != 0) || (((LWORD *)pData)[0] == 0) || (((LWORD *)pData)[1] == 0))
return 0;
else
return 1;
}
//--------------------------------------------------
// Description : TMDS CRC check process before displaying
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CAdjustTMDSCRCCheck(void)
{
BYTE temp0, temp1;
LWORD dsod0, dsod1;
if(GET_FRAMESYNCSTATUS())
{
CTimerDelayXms(20);
temp0 = 0;
temp0 += CAdjustTMDSCRC(&pData[8]);
temp0 += CAdjustTMDSCRC(&pData[12]);
dsod0 = abs(((LWORD *)pData)[2] - ((LWORD *)pData)[3]);
if(temp0 < 2)
{
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, ~(_BIT5 | _BIT6), CScalerGetBit(_ANALOG_COMMON_CTRL2_C6, (_BIT6 | _BIT5)) ^ (_BIT5 | _BIT6));
temp1 = 0;
temp1 += CAdjustTMDSCRC(&pData[8]);
temp1 += CAdjustTMDSCRC(&pData[12]);
dsod1 = abs(((LWORD *)pData)[2] - ((LWORD *)pData)[3]);
if(temp1 < 2)
{
if(GET_USE_TRANSITION_RESULT())
{
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, ~(_BIT5 | _BIT6), CScalerGetBit(_ANALOG_COMMON_CTRL2_C6, (_BIT6 | _BIT5)) ^ (_BIT5 | _BIT6));
}
else
{
if(dsod0 <= dsod1)
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, ~(_BIT5 | _BIT6), CScalerGetBit(_ANALOG_COMMON_CTRL2_C6, (_BIT6 | _BIT5)) ^ (_BIT5 | _BIT6));
}
}
else
{
//CModeSetDigitalCapture();
}
}
else
{
//CModeSetDigitalCapture();
}
}
}
//--------------------------------------------------
// Description : Get TMDS transition difference
// Input Value : ucPar --> _MEASURE_HSYNC or _MEASURE_DE
// Output Value : Transition difference result
//--------------------------------------------------
BYTE CAdjustTMDSEqualizerCheck(BYTE ucPar)
{
BYTE result0, result1;
if(ucPar == _MEASURE_HSYNC)
{
result0 = CAdjustTMDSMeasure(_TMDS_MEASURE_MAX, _TMDS_MEASURE_HSYNC_BE);
if(result0 == 0xff) return 0xff;
else if(result0 < 6) return 0xfe;
result1 = CAdjustTMDSMeasure(_TMDS_MEASURE_MIN, _TMDS_MEASURE_HSYNC_AF);
if(result1 == 0xff) return 0xff;
else if(result1 < 6) return 0xfe;
}
else if(ucPar == _MEASURE_DE)
{
result0 = CAdjustTMDSMeasure(_TMDS_MEASURE_MAX, _TMDS_MEASURE_DE_BE);
if(result0 == 0xff) return 0xff;
else if(result0 < 6) return 0xfe;
result1 = CAdjustTMDSMeasure(_TMDS_MEASURE_MAX, _TMDS_MEASURE_DE_AF);
if(result1 == 0xff) return 0xff;
else if(result1 < 6) return 0xfe;
}
result0 = abs(result0 - result1);
if(result0 <= 2)
result0 = 0;
return result0;
}
//--------------------------------------------------
// Description : Adjust TMDS equalizer setting
// Input Value : None
// Output Value : return _TRUE if success
//--------------------------------------------------
bit CAdjustTMDSEqualizer(void)
{
BYTE cnt, result0, result1;
CLR_USE_TRANSITION_RESULT();
CScalerSetByte(_TMDS_MEAS_SELECT_BC, 0x21);
CScalerSetBit(_TMDS_MEAS_RESULT0_BD, 0x9f, 0x20);
cnt = 1;
do
{
CScalerSetBit(_TMDS_MEAS_SELECT_BC, 0xf0, (cnt%16));
result0 = CAdjustTMDSMeasure(_TMDS_MEASURE_MAX, _TMDS_MEASURE_DE_BE);
if(result0 == 0xff)
return _FALSE;
if(result0 > 80)
break;
cnt++;
}
while(cnt <= 16);
cnt = 0;
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, 0x8f, 0x00);
result0 = CAdjustTMDSEqualizerCheck(_MEASURE_HSYNC);
if(result0 == 0xff) return _FALSE;
if(result0 == 0xfe) cnt += 1;
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, 0x8f, 0x10);
result1 = CAdjustTMDSEqualizerCheck(_MEASURE_HSYNC);
if(result1 == 0xff) return _FALSE;
if(result1 == 0xfe) cnt += 2;
if((abs(result0 - result1) <= 2) || (cnt != 0))
{
cnt = 0;
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, 0x8f, 0x00);
result0 = CAdjustTMDSEqualizerCheck(_MEASURE_DE);
if(result0 == 0xff) return _FALSE;
if(result0 == 0xfe) cnt += 1;
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, 0x8f, 0x10);
result1 = CAdjustTMDSEqualizerCheck(_MEASURE_DE);
if(result1 == 0xff) return _FALSE;
if(result1 == 0xfe) cnt += 2;
}
if((result0 <= result1) || (cnt >= 2))
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, 0x8f, 0x70);
if(abs(result0 - result1) > 2)
SET_USE_TRANSITION_RESULT();
return _TRUE;
}
#endif // End of #if(_TMDS_SUPPORT == _ON)
#if(_HDCP_SUPPORT == _ON)
//--------------------------------------------------
// Description : Adjust HDCP key
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CAdjustHDCP(void)
{
CScalerSetByte(_HDCP_CTRL_D5, 0x06);
CScalerCodeW(tHDCP_CTRL);
CScalerWrite(_DEVICE_KEY_ACCESS_PORT_D6, 320, tHDCP_KEY_TABLE_0, _NON_AUTOINC);
CScalerSetByte(_HDCP_CTRL_D5, 0x01);
}
#endif
//--------------------------------------------------
// Description : Enable watch dog
// Input Value : ucPar --> Parameter for watch dog
// Output Value : None
//--------------------------------------------------
void CAdjustEnableWatchDog(BYTE ucPar)
{
if(GET_FRAMESYNCSTATUS())
{
CScalerSetByte(_WATCHDOG_CTRL1_DA, 0x00);
CMiscClearStatusRegister();
CScalerSetBit(_WATCHDOG_CTRL1_DA, ~ucPar, 0x06 | ucPar);
}
}
//--------------------------------------------------
// Description : Disable watch dog
// Input Value : ucPar --> Parameter for watch dog
// Output Value : None
//--------------------------------------------------
void CAdjustDisableWatchDog(BYTE ucPar)
{
BYTE temp;
CScalerSetBit(_WATCHDOG_CTRL1_DA, ~ucPar, 0x00);
temp = CScalerGetBit(_WATCHDOG_CTRL1_DA, (_BIT5 | _BIT4 | _BIT3));
if(temp == 0x00)
CScalerSetByte(_WATCHDOG_CTRL1_DA, 0x00);
}
//--------------------------------------------------
// Description : Adjust sRGB function ( Not ready )
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CAdjustSRGB(void)
{
}
//--------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -