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

📄 lc72130.c

📁 三洋锁相环IC L72130的收音搜台驱动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		if(MonoStereo)
		{
			In2_Cdata[0] |=  0x08;	//io2 output low level
		}
		else
		{
			In2_Cdata[0] &= 0xf7;	//io2 output high level
		}
	}
ELSE
  IFDEF (Receiver_Macro.bKWANGSUNG_MV011)
	if(gps->bAmFm)
	{		
		In2_Cdata[0] |= 0x20;	//bo2 output low level
	}
	else
	{
		if(MonoStereo)
		{
			In2_Cdata[0] |=  0x20;	//bo2 output low level
		}
		else
		{
			In2_Cdata[0] &= 0xdf;	//bo2 output high level
		}
	}
  ELSE
  	if(gps->bAmFm)
	{	
		In2_Cdata[1] |= BO5_MONO;
	}
	else
	{
		if(MonoStereo)
		{
			In2_Cdata[1] |=  BO5_MONO;
		}
		else
		{
			In2_Cdata[1] &= 0xfe;
		}
	}
  ENDIF	
ENDIF	
	ll_send_cmd_to_radio(IN2_CMD,In2_Cdata[0],In2_Cdata[1],In2_Cdata[2]);
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// void ll_set_fmam() -
//
// Input: 
//		None
//
// Output:
//		None
// 
// Desc :
//	Function switch audio FM and AM output. gcompo frequency should be same as gps frequency
//	Note: Frequency should been stored when it take effect
//
///////////////////////////////////////////////////////////////////////////////////////////////////
void ll_set_fmam()
{
IFDEF (Receiver_Macro.bMATSUSHITA_TM08)
	if (gps->bAmFm)
   	{
		In1_Cdata = AMREF_FREQ | AMINL | COUNTER_RESET | CRYSTAL_FREQ;
		In1_Pdata = ((gcompo.CurrentAMfreq+450)/AMFreq_DIVIDER)<< 4;

   		In2_Cdata[0] = 0x03;		//io2 & io1 output mode
   		if(!gcompo.bIsAudioMuted)
			In2_Cdata[0] |= 0x80;	//bo4	mute or unmute

//		In2_Cdata[0] |= 0x40;		//b03	fm/am sd sensitivity
//		In2_Cdata[0] |= 0x20;		//bo2	nc
		In2_Cdata[0] |= 0x10;		//bo1	fm/am switch,1 = fm,0 = am
			
		In2_Cdata[0] |= 0x08;		//io2	mono/stereo,mono mode
//		In2_Cdata[0] |= 0x04;		//io1	=0,fm mode
			
		In2_Cdata[1] = DEAD_ZONE | PHASE_ERR_WIDTH | DOC_MODE;
   		In2_Cdata[2] = IFS_VALUE | MEASURE_TIME;
	}
	else
   	{
		In1_Cdata = FMREF_FREQ | FMIN | COUNTER_RESET | CRYSTAL_FREQ;  
		In1_Pdata = (gcompo.CurrentFMfreq+1070)/FMFreq_DIVIDER;

   		In2_Cdata[0] = 0x03;		//io2 & io1 output mode
   		if(!gcompo.bIsAudioMuted)
			In2_Cdata[0] |= 0x80;	//bo4	mute or unmute

//		In2_Cdata[0] |= 0x40;		//b03	fm/am sd sensitivity
//		In2_Cdata[0] |= 0x20;		//bo2	nc
//		In2_Cdata[0] |= 0x10;		//bo1	fm/am switch,1 = fm
			
		if(gcompo.bMonoStereo)
			In2_Cdata[0] |= 0x08;	//io2	mono/stereo,1 = stereo
		In2_Cdata[0] |= 0x04;		//io1	=0,fm mode
				
		In2_Cdata[1] = DEAD_ZONE | PHASE_ERR_WIDTH | DOC_MODE;
		In2_Cdata[2] = IFS_VALUE | MEASURE_TIME;
   	}
ELSE
  IFDEF (Receiver_Macro.bKWANGSUNG_MV011)
	if (gps->bAmFm)
   	{
		In1_Cdata = AMREF_FREQ | AMINL | COUNTER_RESET | CRYSTAL_FREQ;
		In1_Pdata = ((gcompo.CurrentAMfreq+450)/AMFreq_DIVIDER)<< 4;

   		In2_Cdata[0] = 0x03;		//io2 & io1 output mode
   		if(!gcompo.bIsAudioMuted)
			In2_Cdata[0] |= 0x80;	//bo4	mute or unmute

		In2_Cdata[0] |= 0x40;		//b03	fm/am switch 0 = am
		In2_Cdata[0] |= 0x20;		//bo2	mono/stereo,0 = mono mode
//		In2_Cdata[0] |= 0x10;		//bo1	nc
			
//		In2_Cdata[0] |= 0x08;		//io2	fm mode,1 = am mode
//		In2_Cdata[0] |= 0x04;		//io1	nc
			
		In2_Cdata[1] = DEAD_ZONE | PHASE_ERR_WIDTH | DOC_MODE;
   		In2_Cdata[2] = IFS_VALUE | MEASURE_TIME;
	}
	else
   	{
		In1_Cdata = FMREF_FREQ | FMIN | COUNTER_RESET | CRYSTAL_FREQ;  
		In1_Pdata = (gcompo.CurrentFMfreq+1070)/FMFreq_DIVIDER;

   		In2_Cdata[0] = 0x03;		//io2 & io1 output mode
   		if(!gcompo.bIsAudioMuted)
			In2_Cdata[0] |= 0x80;	//bo4	mute or unmute

//		In2_Cdata[0] |= 0x40;		//b03	fm/am switch 1 = fm
		if(gcompo.bMonoStereo)
			In2_Cdata[0] |= 0x20;	//bo2	mono/stereo
//		In2_Cdata[0] |= 0x10;		//bo1	nc
			
		In2_Cdata[0] |= 0x08;		//io2	fm mode,0 = fm mode
//		In2_Cdata[0] |= 0x04;		//io1	nc
				
		In2_Cdata[1] = DEAD_ZONE | PHASE_ERR_WIDTH | DOC_MODE;
		In2_Cdata[2] = IFS_VALUE | MEASURE_TIME;
   	}
  ELSE
	if (gps->bAmFm)
   	{
		In1_Cdata = AMREF_FREQ | AMINL | COUNTER_RESET | CRYSTAL_FREQ;
		In1_Pdata = ((gcompo.CurrentAMfreq+450)/AMFreq_DIVIDER)<< 4;

   		In2_Cdata[0] = 0x10;
   		if(!gcompo.bIsAudioMuted)
			In2_Cdata[0] |= 0x20;
		In2_Cdata[1] = DEAD_ZONE | PHASE_ERR_WIDTH | DOC_MODE | BO5_MONO;
   		In2_Cdata[2] = IFS_VALUE | MEASURE_TIME;
	}
	else
   	{
		In1_Cdata = FMREF_FREQ | FMIN | COUNTER_RESET | CRYSTAL_FREQ;  
		In1_Pdata = (gcompo.CurrentFMfreq+1070)/FMFreq_DIVIDER;

   		In2_Cdata[0] = 0x80;
   		if(!gcompo.bIsAudioMuted)
			In2_Cdata[0] |= 0x20;
		In2_Cdata[1] = DEAD_ZONE | PHASE_ERR_WIDTH | DOC_MODE;
		if(gcompo.bMonoStereo)
			In2_Cdata[1] |= BO5_MONO;
		In2_Cdata[2] = IFS_VALUE | MEASURE_TIME;
   	}
  ENDIF	
ENDIF
    ll_send_cmd_to_radio(IN1_CMD,(unsigned char) (In1_Pdata),(unsigned char)((In1_Pdata) >> 8),In1_Cdata);
    ll_send_cmd_to_radio(IN2_CMD,In2_Cdata[0],In2_Cdata[1],In2_Cdata[2]);
}


/////////////////////////////////////////////////////////////////////////////////////////////////
// void ll_radio_init() -
//
// Input: 
//		None
//
// Output:
//		None
// 
// Desc :
//	Config radio control pin and set radio work mode
//
///////////////////////////////////////////////////////////////////////////////////////////////////
void ll_radio_init(void)
{
	//Config radio parameters
IFDEF (Receiver_Macro.bTUNER_FOR_AMERICA)
	FMFreq_DIVIDER = 10;
	FMFreq_STEP = 10;
ELSE
	FMFreq_DIVIDER = 5;
	FMFreq_STEP = 5;
ENDIF

IFDEF (Receiver_Macro.bTUNER_FOR_AMERICA)
	FMREF_FREQ = Rfreq_050KHZ;
ELSE
	FMREF_FREQ = Rfreq_025KHZ;
ENDIF


IFDEF (Receiver_Macro.bMATSUSHITA_TM08)
	CRYSTAL_FREQ = CRYSTAL_72MHZ;
ELSE	
IFDEF (Receiver_Macro.bKWANGSUNG_MV011)
	CRYSTAL_FREQ = CRYSTAL_72MHZ;
  ELSE
	CRYSTAL_FREQ = CRYSTAL_45MHZ;
  ENDIF
ENDIF	

	set_din_out();
	set_dout_in();
	set_radio_clk_out();
	set_radio_stb_out();
	set_radio_SD_in();
	set_radio_ST_in();
	delay_us(50);

	ll_set_fmam();
	ll_mute_radio(FALSE,FALSE);
}


/////////////////////////////////////////////////////////////////////////////////////////////////
// void ll_change_freq_value() -
//
// Input: 
//		None
//
// Output:
//		None
// 
// Desc :
//	Function change frequency. Increase or decrease frequency step by step or continuously
//
///////////////////////////////////////////////////////////////////////////////////////////////////
void ll_change_freq_value(void)
{
	if(gps->bAmFm)
		In1_Pdata =((gcompo.CurrentAMfreq+450)/AMFreq_DIVIDER)<< 4;
	else
		In1_Pdata = (gcompo.CurrentFMfreq+1070)/FMFreq_DIVIDER;

	ll_send_cmd_to_radio(IN1_CMD,(unsigned char) (In1_Pdata),(unsigned char)((In1_Pdata) >> 8),In1_Cdata);
}


/////////////////////////////////////////////////////////////////////////////////////////////////
// void ll_select_radio_station() -
//
// Input: 
//		None
//
// Output:
//		None
// 
// Desc :
//	This function select radio station. 
//
/////////////////////////////////////////////////////////////////////////////////////////////////
void ll_select_radio_station()
{
	if(gps->bAmFm)
		In1_Pdata =((gcompo.CurrentAMfreq+450)/AMFreq_DIVIDER)<<4;
	else
		In1_Pdata = (gcompo.CurrentFMfreq+1070)/FMFreq_DIVIDER;
	
	In1_Cdata &= 0xfb;
	ll_send_cmd_to_radio(IN1_CMD,(unsigned char) (In1_Pdata),(unsigned char)((In1_Pdata) >> 8),In1_Cdata);
}

///////////////////////////////////////////////////////////////////////////////
//void	ll_countIF_start()
//
//Input:
//		None
//Output:
//		None
//Desc:
//		send IF counter start command to tuner
///////////////////////////////////////////////////////////////////////////////
void	ll_countIF_start(void)
{
//	In1_Cdata &= 0xfb;
//	ll_send_cmd_to_radio(IN1_CMD,(unsigned char) (In1_Pdata),(unsigned char)((In1_Pdata) >> 8),In1_Cdata);
		
//	delay_us(5000);
	if(gps->bAmFm)
		In1_Pdata =((gcompo.CurrentAMfreq+450)/AMFreq_DIVIDER)<< 4;
	else
		In1_Pdata = (gcompo.CurrentFMfreq+1070)/FMFreq_DIVIDER;
	
	In1_Cdata |= COUNTER_START;
	ll_send_cmd_to_radio(IN1_CMD,(unsigned char) (In1_Pdata),(unsigned char)((In1_Pdata) >> 8),In1_Cdata);
}

///////////////////////////////////////////////////////////////////////////////
//void	ll_check_IFcounter()
//
//Input:
//		None
//Output:
//		if IF OK return 1 else return 0
//Desc:
//		read out the IF counter and judge 
///////////////////////////////////////////////////////////////////////////////

BOOL	ll_check_IFcounter(void)
{
	DWORD Ifcount;
	
	ll_read_data_from_radio(pRadioData);
	ll_read_data_from_radio(pRadioData);

	In1_Cdata &= 0xfb;	//counter stop
	ll_send_cmd_to_radio(IN1_CMD,(unsigned char) (In1_Pdata),(unsigned char)((In1_Pdata) >> 8),In1_Cdata);


	Ifcount = ((((DWORD)lc_dataout[0]) <<16) | (((DWORD)lc_dataout[1]) <<8) | (DWORD)lc_dataout[2]) & 0xfffff;

//	if ( (lc_dataout[0] & 0x10) == 0x10)
	if(1)
	{
		if(gps->bAmFm)
		{
			if((Ifcount >AMIF_CENTER - AMIF_RANGE) && (Ifcount < AMIF_CENTER + AMIF_RANGE))
				return 1;
			else
				return 0;
		}
		else
		{
			if((Ifcount >FMIF_CENTER - FMIF_RANGE) && (Ifcount < FMIF_CENTER + FMIF_RANGE))
				return 1;
			else
				return 0;
		}
			
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -