📄 qam029old7.c
字号:
{
i2c_buffer[ 0 ] = reg;
error = i2c_write( i2c_ssc0, LINKIC_DEV, i2c_buffer, 1, &actlen );
if( !error )
{
error = i2c_read( i2c_ssc0, LINKIC_DEV, i2c_buffer, 1, &actlen );
if( !error )
{
*value_p = i2c_buffer[ 0 ];
break;
}
do_report( severity_error, "link_read->I2C_read error address[%02x]\n" ,reg);
}
else
{
do_report( severity_error, "link_read->I2C_write error address[%02x]\n" ,reg);
}
break;
}
semaphore_signal( psemLinkIcAccess );
return error;
}
/*----------------------------------------------------------------------------*/
BOOLEAN link_write( BYTE reg, BYTE value )
{
BOOLEAN error = FALSE;
int actlen;
semaphore_wait( psemLinkIcAccess );
i2c_buffer[0] = reg;
i2c_buffer[1] = value;
error = i2c_write( i2c_ssc0, LINKIC_DEV, i2c_buffer, 2, &actlen );
if( error )
{
do_report( severity_error, "link_write->I2C error address[%02x] value[%02x]\n",reg,value );
}
semaphore_signal( psemLinkIcAccess );
return error;
}
/*
* CODE : tuner_write
* TYPE : sub
* PROTOTYPE : BOOLEAN tuner_write ( int value );
*
* PURPOSE : to write the given data into the TUNER_IC for the PLL setup.
*/
/*----------------------------------------------------------------------------*/
BOOLEAN tuner_write ( int value, unsigned char band, unsigned char charge_pump )
{
BOOLEAN error = true;
int actlen,i;
unsigned char i2c_buffer1[ I2C_COMMAND_LEN ];
int iBytes;
semaphore_wait (psemTunerAccess);
/*ENABLE_I2C_REPEATER*/
i2c_buffer1[0] = ( BYTE )(( value >> 8 ) & 0x7F ); /* MSB */
i2c_buffer1[1] = ( BYTE )( value & 0xFF ); /* LSB */
#ifdef DCF_8710
i2c_buffer1[2] = /*charge_pump*/0x85;
i2c_buffer1[3] = band;
iBytes=4;
#else
i2c_buffer1[2] = /*charge_pump*/0x86;//0xc6;//0x86
i2c_buffer1[3] = 0;
iBytes=4;
#endif
/*ENABLE_TUNER_I2C;*/
// MILLI_DELAY(300);
for(i=0;i<3 && error;i++)
{
ENABLE_I2C_REPEATER
/*semaphore_wait( psemLinkIcAccess );*/
QAM_DEBUG_CODE ( do_report ( severity_info, "tuner_write->%d ( %ld KHz ) data: %02x %02x %02x %02x\n",
value, ( long )(( long ) value * TUNER_STEP - TUNER_IF ),
i2c_buffer1[0], i2c_buffer1[1], i2c_buffer1[2], i2c_buffer1[3] ));
// error = i2c_write ( i2c_ssc0, TUNER_DEV, i2c_buffer1, iBytes, &actlen );
error = i2c_write ( i2c_ssc0, 0xc2, i2c_buffer1, iBytes, &actlen );
/*semaphore_signal( psemLinkIcAccess );*/
if ( error )
{
do_report( severity_error, "tuner_write->I2C error\n" ) ;
MILLI_DELAY ( 30 );
}
}
/*DISABLE_TUNER_I2C;*/
DISABLE_I2C_REPEATER
semaphore_signal (psemTunerAccess);
return (error);
}
/*----------------------------------------------------------------------------*/
BOOLEAN tuner_read ( BYTE *value_p )
{
BOOLEAN error = FALSE;
int actlen = 0;
semaphore_wait (psemTunerAccess);
ENABLE_I2C_REPEATER
/*ENABLE_TUNER_I2C;*/
error = i2c_read ( i2c_ssc0, TUNER_DEV, i2c_buffer, 1, &actlen );
/*DISABLE_TUNER_I2C;*/
DISABLE_I2C_REPEATER
*value_p = i2c_buffer [ 0 ];
semaphore_signal (psemTunerAccess);
return(error);
}
/*----------------------------------------------------------------------------*/
#define linkReset() \
{ \
link_write( CTRL_0, 0x01 ); \
link_write( CTRL_0, 0x00 ); \
}
/*----------------------------------------------------------------------------*/
#define linkResetDi() \
{ \
link_write( CTRL_1, 0x01 ); \
link_write( CTRL_1, 0x00 ); \
}
/*----------------------------------------------------------------------------*/
void linkSweepOff( void )
{
unsigned char data_read;
link_read( CRL_10, &data_read );
data_read |= 0x30;
data_read &= 0xfc;
link_write( CRL_10, data_read );
}
/*----------------------------------------------------------------------------*/
void linkSweepOn( void )
{
unsigned char data_read;
link_read( CRL_10, &data_read );
data_read &= 0xcf;
data_read |= 0x03;
link_write( CRL_10, data_read );
}
/*----------------------------------------------------------------------------*/
#define linkWbAgcOff() \
{ \
link_write( WBAGC_3, 0x40 ); \
}
/*----------------------------------------------------------------------------*/
#define linkWbAgcOn() \
{ \
link_write( WBAGC_3, 0x10 ); \
}
/*----------------------------------------------------------------------------*/
#define linkClearTiming() \
{ \
link_write( STLOOP_10, 0x3e ); \
link_write( STLOOP_10, 0x5e ); \
}
/*----------------------------------------------------------------------------*/
BOOLEAN linkDataLock( void )
{
unsigned char ucStatusRead;
link_read( RS_DESC_15, &ucStatusRead );
if( ucStatusRead & 0x80 )
return TRUE;
else
return FALSE;
}
/*----------------------------------------------------------------------------*/
void linkSetQamSize( unsigned char iReqQAMSize )
{
unsigned char equ0, equ1;
switch( iReqQAMSize )
{
case QAM16:
equ0 = 0x08;
equ1 = 0x58;
break;
case QAM32:
equ0 = 0x18;
equ1 = 0x58;
break;
case QAM64:
equ0 = 0x48;
equ1 = 0x58;
break;
case QAM128:
equ0 = 0x28;
equ1 = 0x58;
break;
case QAM256:
equ0 = 0x39;
equ1 = 0x69;
break;
default:
do_report( severity_error, "WRONG QAM size = %d\n", iReqQAMSize );
}
link_write( EQU_0, equ0 );
link_write( EQU_1, equ1 );
}
/*----------------------------------------------------------------------------*/
void linkSetSymbolRate( int symbolRate )
{
unsigned int tmp, ExtClk;
ExtClk = LINK_CLOCK_FREQUENCY / 4;
tmp = 131072 * symbolRate; /* 131072 = 2**17 */
tmp /= ExtClk;
tmp *= 8192; /* 8192L = 2**13 */
link_write( STLOOP_5, ( unsigned char )tmp );
link_write( STLOOP_6, ( unsigned char )( tmp >> 8 ) );
link_write( STLOOP_7, ( unsigned char )( tmp >> 16 ) );
link_write( STLOOP_8, ( unsigned char )( tmp >> 24 ) );
}
/*----------------------------------------------------------------------------*/
void linkSetSweepRate( int sweepRate )
{
long long_tmp;
unsigned char byte_temp;
long_tmp = sweepRate * 262144L ; /* 262144 = 2*18 */
long_tmp /= iSymbolRate ;
long_tmp *= 1024 ;
/* rounding */
if(long_tmp >= 0)
long_tmp += 500000 ;
else
long_tmp -= 500000 ;
long_tmp /= 1000000 ;
QAM_DEBUG_CODE(do_report( severity_info, "sweep rate in register: %08x symbol rate: %d\n", long_tmp, iSymbolRate ));
link_read(CRL_9,&byte_temp);
link_write( CRL_0, ( unsigned char )( long_tmp & 0xFF ) );
link_write( CRL_9, ( unsigned char )(( long_tmp >> 4 ) &0xf0)|(byte_temp&0x0f) );
}
/*----------------------------------------------------------------------------*/
void linkSetFrequencyOffset( int frequencyOffset )
{
long long_tmp;
unsigned char byte_temp;
long_tmp = frequencyOffset * 1048576L ; /* 2**20 */
long_tmp = long_tmp / iSymbolRate;
long_tmp = long_tmp * 256; ;
if(long_tmp < 0) long_tmp += 0x10000000 ;
long_tmp &= 0x0FFFFFFF ;
QAM_DEBUG_CODE(do_report( severity_info, "carrier offset in register: %08x symbol rate: %d\n", long_tmp, iSymbolRate ));
link_read(CRL_9,&byte_temp);
link_write( CRL_6, ( unsigned char )long_tmp );
link_write( CRL_7, ( unsigned char )( long_tmp >> 8 ) );
link_write( CRL_8, ( unsigned char )( long_tmp >> 16 ) );
link_write( CRL_9, ((( unsigned char )( long_tmp >> 24 ))&0x0f) | (byte_temp&0xf0) );
}
/*----------------------------------------------------------------------------*/
void linkSetSpectrumInversion( unsigned int spectrumInversion )
{
unsigned char byte_read;
link_read( CTRL_3, &byte_read );
if( spectrumInversion )
byte_read |= 0x08;
else
byte_read &= (~0x08);
link_write( CTRL_3, byte_read );
}
/*----------------------------------------------------------------------------*/
#define RESERVED_REGISTER(__address0__)
#define KEEP_REGISTER_IN_RESET_VALUE(__adress1__,__value1__) link_write(__adress1__,__value1__)
#define NO_NEED_INIT(__address2__)
void a_RegInit(void)
{
// linkReset() ;
// linkResetDi() ;
// linkInitRegisters();
linkReset() ;
linkResetDi() ;
RegInit();
Driv0297CNEstimatorInit();
}
/*--------------------------------------------------------*/
short linkGetAGC2( void )
{
unsigned char byte_read;
unsigned short agc;
link_read( WBAGC_2, &byte_read );
agc = byte_read << 8;
link_read( WBAGC_1, &byte_read );
agc |= byte_read;
agc &= 0x03ff;
return agc;
}
void linkInitRegisters( void )
{
link_write( EQU_0, INIT_EQU_0 );
link_write( EQU_1, INIT_EQU_1 );
RESERVED_REGISTER(EQU_2);
link_write( EQU_3, INIT_EQU_3 );
NO_NEED_INIT(EQU_4);
RESERVED_REGISTER(EQU_5);
RESERVED_REGISTER(EQU_6);
NO_NEED_INIT(EQU_7);
NO_NEED_INIT(EQU_8);
link_write(INITDEM_0,INIT_INITDEM_0);
link_write(INITDEM_1,INIT_INITDEM_1);
link_write(INITDEM_2,INIT_INITDEM_2);
link_write(INITDEM_3,INIT_INITDEM_3);
link_write(INITDEM_4,INIT_INITDEM_4);
link_write(INITDEM_5,INIT_INITDEM_5);
link_write(DELAGC_0,INIT_DELAGC_0);
link_write(DELAGC_1,INIT_DELAGC_1);
link_write(DELAGC_2,INIT_DELAGC_2);
link_write(DELAGC_3,INIT_DELAGC_3);
link_write(DELAGC_4,INIT_DELAGC_4);
link_write(DELAGC_5,INIT_DELAGC_5);
link_write(DELAGC_6,INIT_DELAGC_6);
link_write(DELAGC_7,INIT_DELAGC_7);
NO_NEED_INIT(DELAGC_8);
link_write(WBAGC_0,INIT_WBAGC_0);
link_write(WBAGC_1,INIT_WBAGC_1);/*NO_NEED_INIT(WBAGC_1);*/
link_write(WBAGC_2,INIT_WBAGC_2);
link_write(WBAGC_3,INIT_WBAGC_3);
link_write(WBAGC_4,INIT_WBAGC_4);
NO_NEED_INIT(WBAGC_5);
NO_NEED_INIT(WBAGC_6);
link_write(WBAGC_9,INIT_WBAGC_9);
NO_NEED_INIT(WBAGC_10);
NO_NEED_INIT(WBAGC_11);
link_write(STLOOP_2,INIT_STLOOP_2);
link_write(STLOOP_3,INIT_STLOOP_3);
NO_NEED_INIT(STLOOP_5);
NO_NEED_INIT(STLOOP_6);
NO_NEED_INIT(STLOOP_7);
NO_NEED_INIT(STLOOP_8);
link_write(STLOOP_9,INIT_STLOOP_9);
link_write(STLOOP_10,INIT_STLOOP_10);
link_write(STLOOP_11,INIT_STLOOP_11);
link_write(CRL_0,INIT_CRL_0);
link_write(CRL_1,INIT_CRL_1);
link_write(CRL_2,INIT_CRL_2);
NO_NEED_INIT(CRL_3);
NO_NEED_INIT(CRL_4);
NO_NEED_INIT(CRL_5);
link_write(CRL_6,INIT_CRL_6);
link_write(CRL_7,INIT_CRL_7);
link_write(CRL_8,INIT_CRL_8);
link_write(CRL_9,INIT_CRL_9);
link_write(CRL_10,INIT_CRL_10);
link_write(CRL_11,INIT_CRL_11);/*NO_NEED_INIT(CRL_11);*/
link_write(PMFAGC_0,INIT_PMFAGC_0);
link_write(PMFAGC_1,INIT_PMFAGC_1);
NO_NEED_INIT(PMFAGC_2);
NO_NEED_INIT(PMFAGC_3);
NO_NEED_INIT(PMFAGC_4);
NO_NEED_INIT(CTRL_0);
NO_NEED_INIT(CTRL_1);
KEEP_REGISTER_IN_RESET_VALUE(CTRL_2,INIT_CTRL_2);
KEEP_REGISTER_IN_RESET_VALUE(CTRL_3,INIT_CTRL_3);
link_write(CTRL_4,INIT_CTRL_4);
KEEP_REGISTER_IN_RESET_VALUE(CTRL_5,INIT_CTRL_5);
link_write(CTRL_6,INIT_CTRL_6);
link_write(CTRL_7,INIT_CTRL_7);
link_write(CTRL_8,INIT_CTRL_8);
KEEP_REGISTER_IN_RESET_VALUE(CTRL_9,INIT_CTRL_9);
KEEP_REGISTER_IN_RESET_VALUE(DEINT_SYNC_0,INIT_DEINT_SYNC_0);
link_write(DEINT_SYNC_1,INIT_DEINT_SYNC_1);
NO_NEED_INIT(BERT_0);
NO_NEED_INIT(BERT_1);
NO_NEED_INIT(BERT_2);
KEEP_REGISTER_IN_RESET_VALUE(DEINT_0,INIT_DEINT_0);
KEEP_REGISTER_IN_RESET_VALUE(DEINT_1,INIT_DEINT_1);
RESERVED_REGISTER(DEINT_2);
RESERVED_REGISTER(DEINT_3);
link_write(OUTFORMAT_0,INIT_OUTFORMAT_0);
KEEP_REGISTER_IN_RESET_VALUE(OUTFORMAT_1,INIT_OUTFORMAT_1);
link_write(OUTFORMAT_2,INIT_OUTFORMAT_2);
NO_NEED_INIT(RS_DESC_0);
NO_NEED_INIT(RS_DESC_1);
NO_NEED_INIT(RS_DESC_2);
NO_NEED_INIT(RS_DESC_3);
NO_NEED_INIT(RS_DESC_4);
NO_NEED_INIT(RS_DESC_5);
KEEP_REGISTER_IN_RESET_VALUE(RS_DESC_14,INIT_RS_DESC_14);
KEEP_REGISTER_IN_RESET_VALUE(RS_DESC_15,INIT_RS_DESC_15);
}
/*----------------------------------------------------------------------------*/
int linkSignalSearch( int QAMSize, unsigned int SymbolRate, int SweepRate, int CarrierOffset, int SpectrumInversion )
{
// linkReset();
// linkInitRegisters();
linkReset();
linkResetDi() ;
RegReset();
linkSweepOff();
linkWbAgcOff();
/*
Parameters setting
*/
linkSetQamSize( QAMSize );
linkSetSymbolRate( SymbolRate );
linkSetSweepRate( SweepRate );
linkSetFrequencyOffset( CarrierOffset );
linkSetSpectrumInversion( SpectrumInversion );
/*
Clear Timing Table
*/
linkClearTiming();
linkWbAgcOn();
linkSweepOn();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -