📄 tunerctr.c
字号:
/**************************************************************************************/
/*********************** BBK CONFIDENTIAL ************************/
/*********************** ************************/
/*********************** Description : Digital Audio Process ************************/
/*********************** ************************/
/*********************** Company: BBK AV ELECTRONICS CORP.,LTD ************************/
/*********************** ************************/
/*********************** Programmer : Terry Lee ******** ****************/
/**************************************************************************************/
#define TUNERCTR_PAR
#pragma NOAREGS
#include "general.h"
#include "..\..\procdef.h"
#include "..\..\typedef.h"
extern void vAdspVolume(BYTE bLevel) large;
extern void vNotifyDspSharedInfo(DWRD dwId) large;
#if defined(DV997K) || defined(DV979) || defined(DV985) || defined(DVR003)
sbit V_MUTE = P3^0;
#endif
#ifdef BBK_RD2_OLD_TUNER
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vSetDTSCE(BOOL fgHigh) large
{
if(fgHigh)
{
HI_DTSCE();
}
else
{
LO_DTSCE();
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vSetDTSDI(BOOL fgHigh) large
{
if(fgHigh)
{
HI_DTSDI();
}
else
{
LO_DTSDI();
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vSetDTSCL(BOOL fgHigh) large
{
if(fgHigh)
{
HI_DTSCL();
}
else
{
LO_DTSCL();
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static BOOL ReadDTSDO(void) large
{
#ifdef PIN_DESIGN89L
InitIoPIN_GPIO19(1);//fjw070728
#endif
return(ReadDTSDOIo());
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vTunerPower(BOOL fgPower) large
{
if(fgPower)
{
HI_TUNERPWR();
}
else
{
LO_TUNERPWR();
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vWait(void) large
{
BYTE i;
for(i=0; i<WAIT_TIME; i++)
{
/*do nothing!*/
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vLatch_data(void) large
{
vSetDTSCL(0);
vWait();
vSetDTSCL(1);
vWait();
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
static void vWriteTuner(BYTE InputMode, WORD Data0, BYTE Data1) large
{
BYTE i;
if(WRITE_MODE0 == InputMode)
{
if(TUNER_BAND_FM == _fgAmFm)
{
Data0 = (Data0 + FM_FREQ_IF) / FM_DIVISOR;
}
else
{
if(AM_STEP_9K == _fgStep9K10K)
{
Data0=(Data0 + AM_FREQ_IF) / AM_9K_DIVISOR;
}
else
{
Data0=(Data0 + AM_FREQ_IF) / AM_10K_DIVISOR;
}
Data0<<=4;
}
}
vSetDTSCE(0);
vSetDTSCL(1);
for(i=0; i<8; i++)
{
vSetDTSDI(InputMode & 0x01);
InputMode>>=1;
vLatch_data();
}
vSetDTSCE(1);
vWait();
for(i=0;i<16;i++)
{
vSetDTSDI(Data0 & 0x01);
Data0>>=1;
vLatch_data();
}
for(i=0;i<8;i++)
{
vSetDTSDI(Data1 & 0x01);
Data1>>=1;
vLatch_data();
}
vSetDTSCE(0);
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
DWRD dwReadIFCounter(void) large
{
DWRD dwDataBuf;
BYTE bReadMode;
BYTE i;
dwDataBuf = 0;
vSetDTSCE(0);
vSetDTSCL(1);
bReadMode = READ_MODE;
for(i=0;i<8;i++)
{
vSetDTSDI(bReadMode & 0x01);
bReadMode >>= 1;
vLatch_data();
}
vSetDTSCE(1);
vWait();
for(i=0;i<24;i++)
{
vLatch_data();
dwDataBuf = (dwDataBuf << 1) | ReadDTSDO();
}
vSetDTSCE(0);
return(dwDataBuf);
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vIFCountReset(void) large
{
WORD r_vcodata;
if(_fgAmFm==AMFM_FM)
{
vWriteTuner(WRITE_MODE1,FM_IFREQON_MO,IF_MEASURE_TIME_FM);// IF REQ=on, measurement period (GT)--32ms
#ifdef FM_PLUS
if(_bFmFreq<=MAX_FMFREQ_LOW) r_vcodata=_bFmFreq*FMstep_LOW+FMstartFREQ_LOW;
else r_vcodata=(_bFmFreq-MAX_FMFREQ_LOW-1)*FMstep_HIGH+FMstartFREQ_HIGH;
#else
r_vcodata=_bFmFreq*FMstep+FMstartFREQ;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,FM_RESET_IF);// CTE =0, IF counter reset reference frequency 25K
}
else
{
if(_fgStep9K10K==STEP_9K)
{
vWriteTuner(WRITE_MODE1,AM_IFREQON,IF_MEASURE_TIME_AM);// IF REQ=on, measurement period (GT)--32ms
#ifdef LC72130
r_vcodata=_bAmFreq*AMstep9K+AMstartFREQ9K;
#elif defined(LV23002)
r_vcodata=_bAmFreq*AMstep9K+AMstartFREQ9K;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,AM_9K_RESET_IF);
}
else
{
vWriteTuner(WRITE_MODE1,AM_IFREQON,IF_MEASURE_TIME_AM);// IF REQ=on, measurement period (GT)--32ms
#ifdef LC72130
r_vcodata=_bAmFreq*AMstep10K+AMstartFREQ10K;
#elif defined(LV23002)
r_vcodata=_bAmFreq*AMstep10K+AMstartFREQ10K;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,AM_10K_RESET_IF);
}
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vIFCountStart(void) large
{
WORD r_vcodata;
if(_fgAmFm==AMFM_FM)
{
#ifdef FM_PLUS
if(_bFmFreq<=MAX_FMFREQ_LOW) r_vcodata=_bFmFreq*FMstep_LOW+FMstartFREQ_LOW;
else r_vcodata=(_bFmFreq-MAX_FMFREQ_LOW-1)*FMstep_HIGH+FMstartFREQ_HIGH;
#else
r_vcodata=_bFmFreq*FMstep+FMstartFREQ;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,FM_START_IF);// CTE =1, IF counter start reference frequency 25K
}
else
{
if(_fgStep9K10K==STEP_9K)
{
#ifdef LC72130
r_vcodata=_bAmFreq*AMstep9K+AMstartFREQ9K;
#elif defined(LV23002)
r_vcodata=_bAmFreq*AMstep9K+AMstartFREQ9K;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,AM_9K_START_IF);// CTE=1, IF counter start reference frequency 9K
}
else // step=10k
{
#ifdef LC72130
r_vcodata=_bAmFreq*AMstep10K+AMstartFREQ10K;
#elif defined(LV23002)
r_vcodata=_bAmFreq*AMstep10K+AMstartFREQ10K;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,AM_10K_START_IF);// CTE=1 , IF counter start reference frequency 9K
}
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vIFCountNormal(void) large
{
WORD r_vcodata;
if(_fgAmFm==AMFM_FM)
{
if(_fgTunerMode==MODE_AUTO)
{
vWriteTuner(WRITE_MODE1,FM_IFREQOFF_ST,IF_MEASURE_TIME_FM);// IF REQ=OFF, measurement period (GT)--32ms
}
else
{
vWriteTuner(WRITE_MODE1,FM_IFREQOFF_MO,IF_MEASURE_TIME_FM);// IF REQ=OFF, measurement period (GT)--32ms
}
#ifdef FM_PLUS
if(_bFmFreq<=MAX_FMFREQ_LOW) r_vcodata=_bFmFreq*FMstep_LOW+FMstartFREQ_LOW;
else r_vcodata=(_bFmFreq-MAX_FMFREQ_LOW-1)*FMstep_HIGH+FMstartFREQ_HIGH;
#else
r_vcodata=_bFmFreq*FMstep+FMstartFREQ;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,FM_RESET_IF);// CTE =0, IF counter reset
}
else
{
if(_fgStep9K10K==STEP_9K)
{
vWriteTuner(WRITE_MODE1,AM_IFREQOFF,IF_MEASURE_TIME_AM);// IF REQ=on, measurement period (GT)--32ms
#ifdef LC72130
r_vcodata=_bAmFreq*AMstep9K+AMstartFREQ9K;
#elif defined(LV23002)
r_vcodata=_bAmFreq*AMstep9K+AMstartFREQ9K;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,AM_9K_RESET_IF);// CTE=0, IF counter reset
}
else
{
vWriteTuner(WRITE_MODE1,AM_IFREQOFF,IF_MEASURE_TIME_AM);// IF REQ=on, measurement period (GT)--32ms
#ifdef LC72130
r_vcodata=_bAmFreq*AMstep10K+AMstartFREQ10K;
#elif defined(LV23002)
r_vcodata=_bAmFreq*AMstep10K+AMstartFREQ10K;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,AM_10K_RESET_IF);// CTE=0 , IF counter reset reference frequency 9K
}
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vClearDeadZone(void) large
{
WORD r_vcodata;
if(_fgAmFm==AMFM_FM)
{
if(_fgTunerStMo==T_STEREO)
{
vWriteTuner(WRITE_MODE1,FM_IFREQOFF_ST,DEADclear);// IF REQ=on, measurement period (GT)--4ms
}
else
{
vWriteTuner(WRITE_MODE1,FM_IFREQOFF_MO,DEADclear);// IF REQ=on, measurement period (GT)--4ms
}
#ifdef FM_PLUS
if(_bFmFreq<=MAX_FMFREQ_LOW) r_vcodata=_bFmFreq*FMstep_LOW+FMstartFREQ_LOW;
else r_vcodata=(_bFmFreq-MAX_FMFREQ_LOW-1)*FMstep_HIGH+FMstartFREQ_HIGH;
#else
r_vcodata=_bFmFreq*FMstep+FMstartFREQ;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,FM_RESET_IF);// CTE =0, IF counter reset
}
else
{
if(_fgStep9K10K==STEP_9K)
{
vWriteTuner(WRITE_MODE1,AM_IFREQOFF,DEADclear);// IF REQ=on, measurement period (GT)--32ms
#ifdef LC72130
r_vcodata=_bAmFreq*AMstep9K+AMstartFREQ9K;
#elif defined(LV23002)
r_vcodata=_bAmFreq*AMstep9K+AMstartFREQ9K;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,AM_9K_RESET_IF);// CTE=0, IF counter reset
}
else
{
vWriteTuner(WRITE_MODE1,AM_IFREQOFF,DEADclear);// DLC=forced low, IF REQ=on, measurement period (GT)--32ms
#ifdef LC72130
r_vcodata=_bAmFreq*AMstep10K+AMstartFREQ10K;
#elif defined(LV23002)
r_vcodata=_bAmFreq*AMstep9K+AMstartFREQ9K;
#endif
vWriteTuner(WRITE_MODE0,r_vcodata,AM_10K_RESET_IF);// CTE=0, IF counter reset reference frequency 9K
}
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
#ifdef UNCALLED_CLOSE
void vEepromDelay(BYTE bDelayNum) large
{
BYTE i;
for(i=0; i<bDelayNum; i++)
{
/*delay time = (2us * EEPROM_DELAY)*/
vI2CDelay2us(0xf0);
}
}
#endif
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vTunerMute(BYTE fgMute) large
{
if(fgMute)
{
#if 0//ndef TEMP_CLOSE0426
vSendMasterVol(TEMPMUTE_VOLUME);
#endif
#ifdef DVR003
V_MUTE=1;
#endif
SetVMute();
#ifdef PT2314
vMainVolCtrltemp(0); //main vol 20
#endif
// vAdspMute(ADSP_ON, 0);
//vAdspVolume(0) ;
//vNotifyDspSharedInfo(UOP_DSP_UNMUTE);
}
else
{
#if 0//ndef TEMP_CLOSE0426
vSendMasterVol(COMMON_VOLUME);
#endif
#ifdef DVR003
V_MUTE=0;
#endif
#if 0//def BUG_CORRECT
if(_bWaitTimerPower> 1)
{
vClrCD4094Pin(Vmute);
#ifdef PT2314
vMainVolCtrltemp(0); //main vol 20
#endif
}
else if(_bWaitTimerPower == 1 )
{
vSetCD4094Pin(Vmute);
#ifdef PT2314
vMainVolCtrltemp(_bMasterVol); //main vol 20
#endif
}
#endif
vSetCD4094Pin(Vmute);
#ifdef PT2314
vMainVolCtrltemp(_bMasterVol); //main vol 20
#endif
ClrVMute();
// vAdspMute(ADSP_OFF, 0);
//vAdspVolume(bAdspCurrVol()) ;
// vNotifyDspSharedInfo(UOP_DSP_RAW_MUTE);
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -