⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tunerctr.c

📁 关于收音功能代码,并且显示在OSD和VFD上
💻 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 + -