📄 lc72130.c
字号:
/***********************************************************************/
/* 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 + -