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

📄 lc72130.c

📁 三洋锁相环IC L72130的收音搜台驱动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/***********************************************************************/
/* File:															   */
/*	  Copyright (c) 2000 ZORAN Corporation, All Rights Reserved		   */
/*	  THIS IS PROPRIETARY SOURCE CODE OF ZORAN CORPORATION             */
/*																	   */
/* ===========                                                         */
/* Descripton:                                                         */
/* ===========                                                         */
/*                                                                     */
/* Log:                                                                */
/* ===                                                                 */
/* $Name: V2_0 $ 
/* $Log: lc72130.c $	
/***********************************************************************/

#include "..\..\kernel\ker_api.h"
#include "..\..\include\sysdefs.h"
#include "..\..\tuner\tuner_api.h"
#include "..\..\playcore\coremain\coregdef.h"
#include "..\..\Customer\Lib_Setup\Lib_Setup.h"


/////////////////////////////////////////////////////////////////////////////////////////////////
//Constant value define
#define		IN1_CMD			0x28
#define		IN2_CMD			0x29
#define		READ_CMD		0x2a

#define		FMIN           0x02
#define		AMINL          0x00
#define		AMINH          0x01
#define		COUNTER_START  0x04
#define		COUNTER_RESET  0x00
#define		CRYSTAL_72MHZ  0x08
#define		CRYSTAL_45MHZ  0x00
#define		Rfreq_100KHZ   0x00
#define		Rfreq_050KHZ   0x10
#define		Rfreq_025KHZ   0x20
#define		Rfreq_010KHZ   0x80
#define		Rfreq_009KHZ   0x90
#define		Rfreq_005KHZ   0xa0
#define		Rfreq_001KHZ   0xb0
#define		Rfreq_003KHZ   0xc0
#define		Rfreq_015KHZ   0xd0

#define		BO5_STEREO    0x00
#define		BO5_MONO      0x01

#define		DOC_MODE0     0x00 
#define		DOC_MODE1     0x02
#define		DOC_MODE2     0x04

#define		PHASE_ERR_WIDTH0      0x10
#define		PHASE_ERR_WIDTH1      0x20
#define		PHASE_ERR_WIDTH2      0x30

#define		DEAD_ZONE_A		0x00
#define		DEAD_ZONE_B		0x40
#define		DEAD_ZONE_C		0x80
#define		DEAD_ZONE_D		0xc0

#define		IF_COUNTER_PERIOD4    	0x00
#define		IF_COUNTER_PERIOD8    	0x01
#define		IF_COUNTER_PERIOD32    	0x02
#define		IF_COUNTER_PERIOD64    	0x03
#define		IFS_1			0x10
#define		IFS_0			0x00

#define		AMREF_FREQ		Rfreq_003KHZ
#define		IFS_VALUE		IFS_1			//in2_cdata[2]
#define		MEASURE_TIME	IF_COUNTER_PERIOD64
#define		DEAD_ZONE		DEAD_ZONE_D		//in2_cdata[1]
#define		PHASE_ERR_WIDTH PHASE_ERR_WIDTH0	
#define		DOC_MODE		DOC_MODE2

#define		FMIF_6250HZ	6250
#define		FMIF_12500HZ	12500
#define		AMIF_3000HZ	3000
#define		AMIF_2000HZ	2000

#define		FMIF_RANGE	(FMIF_12500HZ * 64) / 1000
#define		AMIF_RANGE	(AMIF_3000HZ * 64) / 1000

#define		FMIF_CENTER	10700 * 64
#define		AMIF_CENTER	450 * 64



enum
{
	LOW = 0,
	HIGH = 1
};

/////////////////////////////////////////////////////////////////////////////////////////////////
//Variable define
unsigned int	In1_Pdata;
unsigned char	In1_Cdata;
unsigned char	In2_Cdata[3] = {0,0,0};
unsigned char	lc_dataout[3] = {0,0,0};
unsigned char*	pRadioData = lc_dataout;
unsigned char   FMREF_FREQ;
UINT8 CRYSTAL_FREQ;
extern unsigned char FMFreq_DIVIDER, FMFreq_STEP;

/////////////////////////////////////////////////////////////////////////////////////////////////
// void send_byte_to_lc72130() -
//
// Input: 
//		BYTE data1 -- Data need to send to lc72130
//
// Output:
//		None
// 
// Desc :
//	Function which just send one byte into radio
//
///////////////////////////////////////////////////////////////////////////////////////////////////
void send_byte_to_lc72130(BYTE data)
{
	char i;
   
	for( i=0; i<8; i++)
    {
		set_radio_clk(LOW);
		delay_us(5);
		set_radio_din(data & 0x01);
		delay_us(5);
		set_radio_clk(HIGH);
		data >>= 1;
		delay_us(5);
	}
}


/////////////////////////////////////////////////////////////////////////////////////////////////
// void ll_send_cmd_to_radio() -
//
// Input: 
//	unsigned char cmd,			--Commnad
//	unsigned char para1,		--Param
//	unsigned char para2,
//	unsigned char para3
//
// Output:
//		None
// 
// Desc :
//	Function which just send command to radio
//
///////////////////////////////////////////////////////////////////////////////////////////////////
void ll_send_cmd_to_radio(unsigned char cmd,unsigned char para1,unsigned char para2,unsigned char para3)
{
     set_radio_stb(LOW);
     send_byte_to_lc72130(cmd);

     set_radio_stb(HIGH);
     send_byte_to_lc72130(para1);
     send_byte_to_lc72130(para2);
     send_byte_to_lc72130(para3);
     set_radio_stb(LOW);
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// void ll_read_data_from_radio(unsigned char* pRadioData) -
//
// Input: 
//		pRadioData -- point to data get from radio
//
// Output:
//		None
// 
// Desc :
//	Function read data from radio
//
///////////////////////////////////////////////////////////////////////////////////////////////////
void ll_read_data_from_radio(unsigned char* pRadioData)
{
	unsigned char i,j,value;

	set_radio_stb(LOW);
	send_byte_to_lc72130(READ_CMD);
	set_radio_stb(HIGH);

	for(j=0;j<3;j++)
    {
		value = 0;
		for(i=0;i<8;i++)
		{
			set_radio_clk(LOW);
			delay_us(5);
			set_radio_clk(HIGH);
			delay_us(5);
			set_radio_dout(HIGH);

			if(read_radio_dout())
				value |= 0x01;
			if(i != 7) 
				value <<= 1;
		}
		*(pRadioData+j) = value;
	}

	set_radio_stb(LOW);
}


/////////////////////////////////////////////////////////////////////////////////////////////////
// void IsLc72130DataoutAvaliable() -
//
// Input: 
//		None
//
// Output:
//		None
// 
// Desc :
//	Pay attention to this one 
//
///////////////////////////////////////////////////////////////////////////////////////////////////
BOOL IsLc72130DataoutAvaliable(void)
{
	if(read_radio_dout())
		return FALSE;
	else
		return TRUE;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
//ll_Check_StereoMono()
//
//Input:
//		None
//Output:
//		None
//
//Desc:
//		check the audio mode
/////////////////////////////////////////////////////////////////////////////////////////////////
void	ll_Check_StereoMono(void)
{
	if(gps->bAmFm)
	{
			gcompo.bStereoAudio = 0;
	}
	else
	{
IFDEF (Receiver_Macro.bMATSUSHITA_TM08)
		if(read_radio_dout())
			gcompo.bStereoAudio = 0;
		else
			gcompo.bStereoAudio = 1;
ELSE
  IFDEF (Receiver_Macro.bKWANGSUNG_MV011)
		if(read_ST_PIN())
			gcompo.bStereoAudio = 0;
		else
			gcompo.bStereoAudio = 1;
  ELSE
		//if(IsLc72130DataoutAvaliable())
		{
		   	ll_read_data_from_radio(pRadioData);
		   	if((lc_dataout[0] & 0x80) == 0)
		   		gcompo.bStereoAudio = 1;
		   	else
		   		gcompo.bStereoAudio = 0;
		}   
  ENDIF
ENDIF				   
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// void ll_mute_radio() -
//
// Input: 
//		unsigned char mute	--Mute or not
//
// Output:
//		None
// 
// Desc :
//	Function mute radio output
//
///////////////////////////////////////////////////////////////////////////////////////////////////
void ll_mute_radio(unsigned char mute_tuner,char mute_dac)
{
	if(mute_tuner)
 	{
IFDEF (Receiver_Macro.bMATSUSHITA_TM08)
 		In2_Cdata[0] &= 0x7f;	//bo4 = 1 mute
ELSE
  IFDEF (Receiver_Macro.bKWANGSUNG_MV011)
 		In2_Cdata[0] &= 0x7f;	//bo4 = 1 mute
  ELSE 		
 		In2_Cdata[0] &= 0xdf;
  ENDIF
ENDIF
 	}
	else
 	{
IFDEF (Receiver_Macro.bMATSUSHITA_TM08)
		In2_Cdata[0] |= 0x80;	//bo4 = 0 unmute
ELSE
  IFDEF (Receiver_Macro.bKWANGSUNG_MV011)
		In2_Cdata[0] |= 0x80;	//bo4 = 0 unmute
  ELSE
		In2_Cdata[0] |= 0x20;
  ENDIF
ENDIF
 	}
 
	ll_send_cmd_to_radio(IN2_CMD,In2_Cdata[0],In2_Cdata[1],In2_Cdata[2]);

	if(mute_dac)
	{
	    //attenuate_vol(0);
		gcompo.bIsAudioMuted = 1;
	}
	else
	{
	    //attenuate_vol(gcust.ChannelVolume);
		gcompo.bIsAudioMuted = 0;
	}
		
}

/////////////////////////////////////////////////////////////////////////////////////////////////
//ll_radio_monostereo()
//
//Input:
//		1:	Mono
//		0:	Stereo
//Output:
//		None
//
//Desc:
//		switch audio mode between stereo and mono
/////////////////////////////////////////////////////////////////////////////////////////////////
void ll_radio_monostereo(BOOL MonoStereo)
{
IFDEF (Receiver_Macro.bMATSUSHITA_TM08)
	if(gps->bAmFm)
	{		
		In2_Cdata[0] |= 0x08;	//io2 output low level
	}
	else
	{

⌨️ 快捷键说明

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