📄 auto.c
字号:
}
auto_adc_phase( PhaseValue );
bplval0 = bplval1 - bplval2; /* best_sod - worst_sod */
bplval0 = (bplval1 << 3) + bplval0;
return bplval0;
#endif
}
/***************************************************************************
Function : auto_get_zurac
Purpose : get Zurac register value
Input : Byte Addr Zurac register address
Byte Rcount number of bytes to be read
Output :
External : Byte TruBuf[] i2c i/o buffer
Byte SlvAdr i2c slave address
Byte ByteCnt i2c i/o byte count
Return :
***************************************************************************/
void auto_get_zurac(Byte Addr, Byte Rcount)
{
SlvAdr = ZURAC_ADDRESS;
ReadI2CData(Addr,Rcount);
return;
}
/***************************************************************************
Function : auto_zurac_restore
Purpose : restore Zurac Brightness and Contrast
Input :
Output :
External : Byte TruBuf[] i2c i/o buffer
Byte SlvAdr i2c slave address
Byte ByteCnt i2c i/o byte count
Byte ContrastValueZ contrast value for Zurac
Byte BrightnessValueZ brightness value ofr Zurac
Return :
***************************************************************************/
void auto_zurac_restore()
{
return;
}
/***************************************************************************
Function : auto_adc_restore
Purpose : restore the ADC default status
Input :
Output :
External : Byte ModeCounter display mode index
Return :
***************************************************************************/
void auto_adc_restore()
{
ADC9884( ModeCounter );
return;
}
/***************************************************************************
Function : auto_adc_preset
Purpose : preset the ADC device to default status
Input :
Output :
External : Byte TruBuf[] i2c i/o buffer
Byte SlvAdr i2c slave address
Byte ByteCnt i2c i/o byte count
Byte ModeCounter display mode index
Word ClockValue current clock value
Byte PhaseValue current phase value
Bool CurrentHPol current h-sync polarity
Return :
***************************************************************************/
void auto_adc_preset()
{
#if 0 // USE_TDA8752
SlvAdr = TDA8752_ADDR;
ByteCnt = 10;
TrmBuf[0] = TDA_OFFSETR;
TrmBuf[1] = 90; // minimize the offset value
TrmBuf[2] = TDA_COARSER;
TrmBuf[3] = 180;
TrmBuf[4] = TDA_FINER;
TrmBuf[5] = 31;
TrmBuf[6] = TDA_OFFSETG;
TrmBuf[7] = 90;
TrmBuf[8] = TDA_COARSEG;
TrmBuf[9] = 180;
SendData();
ByteCnt = 8;
TrmBuf[0] = TDA_FINEG;
TrmBuf[1] = 31;
TrmBuf[2] = TDA_OFFSETB;
TrmBuf[3] = 90;
TrmBuf[4] = TDA_COARSEB;
TrmBuf[5] = 180;
TrmBuf[6] = TDA_FINEB;
TrmBuf[7] = 31;
SendData();
#endif
#if (ADC_CHIP==ADI_9884 || ADC_CHIP==FMS_9884 || ADC_CHIP==FMS_9874 || \
ADC_CHIP==SCL_9884 || ADC_CHIP==TMI_9884 || ADC_CHIP==SG_9884 )
Word wval;
if ( ModeInputport[ModeCounter] == 2 )
wval = (ClockValue - 1) << 4;
else if ( ModeInputport[ModeCounter] == 1 )
wval = (ClockValue*2 - 1) << 4;
else /* ( ModeInputport[ModeCounter] == 0 ), single port */
wval = (ClockValue - 1) << 4;
SlvAdr = AD9884_ADDR;
ByteCnt = 9;
TrmBuf[0] = 0x00;
TrmBuf[1] = HIBYTE(wval); // Reg00 clockvalue Msb8
TrmBuf[2] = LOBYTE(wval); // Reg01 clockvalue lsb4
TrmBuf[3] = 0x74; // Reg02 R Gain contrast
TrmBuf[4] = 0x74; // Reg03 G Gain
TrmBuf[5] = 0x74; // Reg04 B Gain
TrmBuf[6] = 0x9C; // Reg05 R OFFSET brightness
TrmBuf[7] = 0x9C; // Reg06 G OFFSET
TrmBuf[8] = 0x9C; // Reg07 B OFFSET
SendData();
if( ModeInputport[ModeCounter]==1 )
{
ByteCnt = 2;
TrmBuf[0] = 0x0B;
TrmBuf[1] = (PhaseValue & 0x0F)*2 + 1;
TrmBuf[1] = TrmBuf[1]<<3; // Reg0B phase
SendData();
ByteCnt = 2;
TrmBuf[0] = 0x0D;
if( (PhaseValue&0x1F) < 16 )
TrmBuf[1] = 0x10; // Reg0D
else
TrmBuf[1] = 0x00; // Reg0D
SendData();
}
else
{
ByteCnt = 2;
TrmBuf[0] = 0x0B; /* phase adjust register */
TrmBuf[1] = ((PhaseValue%32) << 3);
SendData();
}
#endif
#if (ADC_CHIP==ADI_9883)
Word wval;
wval = (ClockValue - 1) << 4;
SlvAdr = AD9883_ADDR;
ByteCnt = 3;
TrmBuf[0] = 0x01;
TrmBuf[1] = HIBYTE(wval); // Reg00 clockvalue Msb8
TrmBuf[2] = LOBYTE(wval); // Reg01 clockvalue lsb4
SendData();
SlvAdr = AD9883_ADDR;
ByteCnt = 7;
TrmBuf[0] = 0x08;
TrmBuf[1] = 0x74; // Reg08 R Gain contrast
TrmBuf[2] = 0x74; // Reg09 G Gain
TrmBuf[3] = 0x74; // Reg0A B Gain
TrmBuf[4] = 0x9C; // Reg0B R OFFSET brightness
TrmBuf[5] = 0x9C; // Reg0C G OFFSET
TrmBuf[6] = 0x9C; // Reg0D B OFFSET
SendData();
SlvAdr = AD9883_ADDR;
ByteCnt = 2;
TrmBuf[0] = 0x04;
TrmBuf[1] = PhaseValue<<3; // Reg0B phase
SendData();
#endif
#if (ADC_CHIP==ADI_9887)
Word wval;
if ( ModeInputport[ModeCounter] == 2 )
wval = (ClockValue - 1) << 4;
else if ( ModeInputport[ModeCounter] == 1 )
wval = (ClockValue*2 - 1) << 4;
else /* ( ModeInputport[ModeCounter] == 0 ), single port */
wval = (ClockValue - 1) << 4;
SlvAdr = AD9887_ADDR;
ByteCnt = 3;
TrmBuf[0] = 0x01;
TrmBuf[1] = HIBYTE(wval); // Reg00 clockvalue Msb8
TrmBuf[2] = LOBYTE(wval); // Reg01 clockvalue lsb4
SendData();
SlvAdr = AD9887_ADDR;
ByteCnt = 7;
TrmBuf[0] = 0x08;
TrmBuf[1] = 0x74; // Reg08 R Gain contrast
TrmBuf[2] = 0x74; // Reg09 G Gain
TrmBuf[3] = 0x74; // Reg0A B Gain
TrmBuf[4] = 0x9C; // Reg0B R OFFSET brightness
TrmBuf[5] = 0x9C; // Reg0C G OFFSET
TrmBuf[6] = 0x9C; // Reg0D B OFFSET
SendData();
SlvAdr = AD9887_ADDR;
ByteCnt = 2;
TrmBuf[0] = 0x04;
TrmBuf[1] = PhaseValue<<3; // Reg0B phase
SendData();
#endif
return;
}
/***************************************************************************
Function : auto_adc_clockphase
Purpose : set the TDA8752/AD9884 clock and phase value
Input :
Output :
External : Byte TruBuf[] i2c i/o buffer
Byte SlvAdr i2c slave address
Byte ByteCnt i2c i/o byte count
Byte DataValue_8752[][] DA8752 data table
Byte ModeCounter display mode index
Word ClockValue current clock value
Byte PhaseValue current phase value
Return :
***************************************************************************/
void auto_adc_clockphase()
{
#if 0 // USE_TDA8752
SlvAdr = TDA8752_ADDR;
ByteCnt = 8;
TrmBuf[0] = TDA_CONTROL;
TrmBuf[1] = DataValue_8752[ModeCounter][0] & 0x07;
TrmBuf[2] = TDA_VCO_R;
TrmBuf[3] = (DataValue_8752[ModeCounter][1] & 0xF8) | (Byte)((ClockValue & 0xE00) >> 9);
TrmBuf[4] = TDA_DIVIDER;
TrmBuf[5] = (Byte)((ClockValue & 0x1FE)>>1);
TrmBuf[6] = TDA_PHASEA;
TrmBuf[7] = (PhaseValue%32)| (Byte)((ClockValue & 1)<<6);
SendData();
#endif
#if (ADC_CHIP==ADI_9884 || ADC_CHIP==FMS_9884 || ADC_CHIP==FMS_9874 || \
ADC_CHIP==SCL_9884 || ADC_CHIP==TMI_9884 || ADC_CHIP==SG_9884 )
Word wval;
if ( ModeInputport[ModeCounter]==2 )
wval = (ClockValue - 1) << 4;
else if ( ModeInputport[ModeCounter]==1 )
wval = (ClockValue*2 - 1) << 4;
else /* ( ModeInputport[ModeCounter]==0 ), single port */
wval = (ClockValue - 1) << 4;
SlvAdr = AD9884_ADDR;
ByteCnt = 3;
TrmBuf[0] = 0x00;
TrmBuf[1] = HIBYTE(wval); /* Reg00 clockvalue MSB 8 */
TrmBuf[2] = LOBYTE(wval); /* Reg01 clockvalue LSB 4 */
SendData();
if( ModeInputport[ModeCounter]==1 )
{
ByteCnt = 2;
TrmBuf[0] = 0x0B;
TrmBuf[1] = (PhaseValue & 0x0F)*2 + 1;
TrmBuf[1] = TrmBuf[1]<<3; // Reg0B phase
SendData();
ByteCnt = 2;
TrmBuf[0] = 0x0D;
if( (PhaseValue&0x1F) < 16 )
TrmBuf[1] = 0x10; // Reg0D
else
TrmBuf[1] = 0x00; // Reg0D
SendData();
}
else
{
ByteCnt = 2;
TrmBuf[0] = 0x0B; /* phase adjust register */
TrmBuf[1] = ((PhaseValue%32) << 3);
SendData();
}
#endif
#if (ADC_CHIP==ADI_9883)
Word wval;
wval = (ClockValue - 1) << 4;
SlvAdr = AD9883_ADDR;
ByteCnt = 3;
TrmBuf[0] = 0x01;
TrmBuf[1] = HIBYTE(wval); /* Reg00 clockvalue MSB 8 */
TrmBuf[2] = LOBYTE(wval); /* Reg01 clockvalue LSB 4 */
SendData();
ByteCnt = 2;
TrmBuf[0] = 0x04; /* phase adjust register */
TrmBuf[1] = ((PhaseValue%32) << 3);
SendData();
#endif
#if (ADC_CHIP==ADI_9887)
Word wval;
if ( ModeInputport[ModeCounter]==2 )
wval = (ClockValue - 1) << 4;
else if ( ModeInputport[ModeCounter]==1 )
wval = (ClockValue*2 - 1) << 4;
else /* ( ModeInputport[ModeCounter]==0 ), single port */
wval = (ClockValue - 1) << 4;
SlvAdr = AD9887_ADDR;
ByteCnt = 3;
TrmBuf[0] = 0x01;
TrmBuf[1] = HIBYTE(wval); /* Reg00 clockvalue MSB 8 */
TrmBuf[2] = LOBYTE(wval); /* Reg01 clockvalue LSB 4 */
SendData();
ByteCnt = 2;
TrmBuf[0] = 0x04; /* phase adjust register */
TrmBuf[1] = ((PhaseValue%32) << 3);
SendData();
#endif
auto_short_delay(2);
return;
}
void auto_adc_phase(Byte phase_value)
{
#if (ADC_CHIP==ADI_9884 || ADC_CHIP==FMS_9884 || ADC_CHIP==FMS_9874 || \
ADC_CHIP==SCL_9884 || ADC_CHIP==TMI_9884 || ADC_CHIP==SG_9884 )
SlvAdr = AD9884_ADDR;
if( ModeInputport[ModeCounter]==1 )
{
ByteCnt = 2;
TrmBuf[0] = 0x0B;
TrmBuf[1] = (phase_value & 0x0F)*2 + 1;
TrmBuf[1] = TrmBuf[1]<<3; // Reg0B phase
SendData();
ByteCnt = 2;
TrmBuf[0] = 0x0D;
if( (phase_value&0x1F) < 16 )
TrmBuf[1] = 0x10; // Reg0D
else
TrmBuf[1] = 0x00; // Reg0D
SendData();
}
else
{
ByteCnt = 2;
TrmBuf[0] = 0x0B; /* phase adjust register */
TrmBuf[1] = ((phase_value%32) << 3);
SendData();
}
#endif
#if (ADC_CHIP==ADI_9883)
SlvAdr = AD9883_ADDR;
ByteCnt = 2;
TrmBuf[0] = 0x04; /* phase adjust register */
TrmBuf[1] = ((phase_value%32) << 3);
SendData();
#endif
#if (ADC_CHIP==ADI_9887)
SlvAdr = AD9887_ADDR;
ByteCnt = 2;
TrmBuf[0] = 0x04; /* phase adjust register */
TrmBuf[1] = ((phase_value%32) << 3);
SendData();
#endif
return;
}
/***************************************************************************
Function : auto_clock_change
Purpose : Set the Zurac related registers value for clock adjustment
Input :
Output :
External : Byte TruBuf[] i2c i/o buffer
Byte SlvAdr i2c slave address
Byte ByteCnt i2c i/o byte count
Byte mode_factor[] mode factor table
Byte scale_factor_table[] scaling factor table
Byte ModeCounter display mode index
Word ClockValue current clock value
Return :
***************************************************************************/
void auto_clock_change()
{
Word accval;
accval = ClockValue;
if( accval>0x07FF ) accval = 0x07FF;
SlvAdr = ZURAC_ADDRESS;
ByteCnt = 3;
TrmBuf[0] = ZRC_IH_TOTAL; // input Hsync total
TrmBuf[1] = LOBYTE(accval);
TrmBuf[2] = HIBYTE(accval);
SendData();
#if (FREERUN_AUTO==0)
accval = 4 * mode_factor[ModeCounter];
accval = (Word) ( ((long)ClockValue * (long)scale_factor_table[accval + Vd]) /
(long)scale_factor_table[accval + Vn] );
if ( ModeInputport[ModeCounter]==2 ) /* for dual port */
accval = accval / 2;
SlvAdr = ZURAC_ADDRESS;
ByteCnt = 3;
TrmBuf[0] = ZRC_SPH_EMU;
TrmBuf[1] = LOBYTE(accval);
TrmBuf[2] = HIBYTE(accval);
SendData();
#endif
return;
}
/***************************************************************************
Function : auto_min_threshold
Purpose : Set the Zurac related registers value for clock adjustment
Input : Byte min_val value for minimum_threhold
Output :
External : Byte TruBuf[] i2c i/o buffer
Byte SlvAdr i2c slave address
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -