📄 tea5760_drv.c
字号:
// set feq.
philips_fm.wb[1] = (uint8)((command1_pll>>8)&0x0000003f);
philips_fm.wb[2] = (uint8)(command1_pll&0x000000ff);
kal_prompt_trace(MOD_MMI,"%s,%s,%d: Optimizer curf:%x, pll: %x ", __FILE__,__func__,__LINE__,curf,command1_pll);
// send to philips chip register
retcode = Philips_FM_Send(philips_fm.wb, 7, PHILIPS_I2C_WADDRESS);
//wait for RF == 1
retcode = Philips_FM_Send_checkRF();
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s,%s,%d: Check RF Error,retcode:%d", __FILE__,__func__,__LINE__,retcode);
FM_Debug_Print_Bin((uint8 *)__FILE__,(uint8 *)__func__,__LINE__,(uint8 *)"HIINJECT READ DATA",philips_fm.rb,16);
return OPTIMIZER_HI_SIDE_TIMEOUT_ERROR;
}
// SAVE LEVEL HIGHT.
philips_fm.hi_level = ((philips_fm.rb[9]>>4)&0x0f);
// Send command2_pll
FetchCommandData();
// 1. set LO INJECT PLL
command2_pll = GetPllFromFrequency((curf-45), LO_SIDE_INJECTION);
philips_fm.wb[4] = (philips_fm.wb[4] & (~FM_HLSI))| FM_MUTE; // HLSI = 1, MUTE = 1
// 2 set feq.
philips_fm.wb[1] = (uint8)((command2_pll>>8)&0x0000003f);
philips_fm.wb[2] = (uint8)(command2_pll&0x000000ff);
// 3 send to philips chip register
retcode = Philips_FM_Send(philips_fm.wb, 7, PHILIPS_I2C_WADDRESS);
//wait for RF == 1
retcode = Philips_FM_Send_checkRF();
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s,%s,%d: Check RF Error,retcode:", __FILE__,__func__,__LINE__,retcode);
FM_Debug_Print_Bin((uint8 *)__FILE__,(uint8 *)__func__,__LINE__,(uint8 *)"HIINJECT READ DATA",philips_fm.rb,16);
return OPTIMIZER_LO_SIDE_TIMEOUT_ERROR;
}
// SAVE LEVEL HIGHT.
philips_fm.lo_level = ((philips_fm.rb[9]>>4)&0x0f);
return 0;
}
void FMDrv_SetFreq( int16 curf )
{
int16 retcode;
uint8 fm_hlsi;
uint32 command_pll;
uint16 i;
uint32 used_curf;
kal_prompt_trace(MOD_MMI,"%s:%d: Entry Function: %s",__FILE__,__LINE__,__func__);
used_curf = curf*10;
kal_prompt_trace(MOD_MMI,"%s:%d: %s, used_curf = %x",__FILE__,__LINE__,__func__,used_curf);
// 开始PRESET流程
retcode = FM_Philips_optimizer(used_curf);
if ( retcode < 0 )
{
// Error. See Errcode
kal_prompt_trace(MOD_MMI,"%s:%s:%d: set feq error: %d\n",__FILE__,__func__,__LINE__,retcode);
return;
}
kal_prompt_trace(MOD_MMI,"%s:%s:%d: set feq done,FEQ = %d\n",__FILE__,__func__,__LINE__,used_curf);
fm_hlsi = (philips_fm.hi_level < philips_fm.lo_level)? 1: 0;
//fm_hlsi = 1;
// set command.
FetchCommandData();
// 2. set LO INJECT PLL
if ( fm_hlsi)
{
command_pll = GetPllFromFrequency(used_curf, HI_SIDE_INJECTION);
}
else
{
command_pll = GetPllFromFrequency(used_curf, LO_SIDE_INJECTION);
}
philips_fm.wb[4] = (philips_fm.wb[4] & ~(FM_MUTE));
//set HLSI
if ( fm_hlsi)
{
philips_fm.wb[4] |= FM_HLSI;
}
else
{
philips_fm.wb[4] &= (~FM_HLSI);
}
// set feq.
philips_fm.wb[1] = (uint8)((command_pll>>8)&0x0000003f);
philips_fm.wb[2] = (uint8)(command_pll&0x000000ff);
// send to philips chip register
retcode = Philips_FM_Send(philips_fm.wb, 7, PHILIPS_I2C_WADDRESS);
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s:%s:%d: set register error,code = %d\n",__FILE__,__func__,__LINE__,retcode);
}
/*
for( i = 0; i < 1000; i++);
Philips_FM_Read(philips_fm.rb,16,PHILIPS_I2C_RADDRESS);
FM_Debug_Print_Bin((uint8 *)__FILE__,(uint8 *)__func__,__LINE__,(uint8 *)"SET FEQ Data",philips_fm.rb,16);
kal_prompt_trace(MOD_MMI,"%s:%d: Exit Function: %s",__FILE__,__LINE__,__func__);
*/
return;
}
uint8 FMDrv_GetSigLvl(int16 curf)
{
int16 retcode;
uint8 fm_hlsi;
uint32 command_pll;
uint8 frrflag;
uint16 i;
uint16 used_freq;
uint8 if_value;
uint8 search_directory;
kal_prompt_trace(MOD_MMI,"%s:%d: Entry Function: %s",__FILE__,__LINE__,__func__);
used_freq = curf*10; // 875 --> 8750
#if 0
/*
retcode = FM_Philips_optimizer(curf);
if ( retcode < 0 )
{
// Error. See Errcode
kal_prompt_trace(MOD_MMI,"%s:%s:%d: set feq error: %d\n",__FILE__,__func__,__LINE__,retcode);
return 0; // Error, return 0 , FIXME!!!
}
kal_prompt_trace(MOD_MMI,"%s:%s:%d: set feq done,FEQ = %d\n",__FILE__,__func__,__LINE__,curf);
*/
fm_hlsi = (philips_fm.hi_level < philips_fm.lo_level)? 1: 0;
// set command.
FetchCommandData();
// 2. set LO INJECT PLL
if ( fm_hlsi)
{
command_pll = GetPllFromFrequency(curf, HI_SIDE_INJECTION);
}
else
{
command_pll = GetPllFromFrequency(curf, LO_SIDE_INJECTION);
}
philips_fm.wb[4] = (philips_fm.wb[4] | FM_MUTE );
//set HLSI
if ( fm_hlsi)
{
philips_fm.wb[4] |= FM_HLSI;
}
else
{
philips_fm.wb[4] &= (~FM_HLSI);
}
// set feq.
philips_fm.wb[1] = (uint8)((command_pll>>8)&0x0000003f);
philips_fm.wb[2] = (uint8)(command_pll&0x000000ff);
// send to philips chip register
retcode = Philips_FM_Send(philips_fm.wb, 7, PHILIPS_I2C_WADDRESS);
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s:%s:%d: set register error,code = %d\n",__FILE__,__func__,__LINE__,retcode);
return 0; // Error, return 0 , FIXME!!!
}
//wait for RF == 1
retcode = Philips_FM_Send_checkRF();
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s,%s,%d: Check RF Error,retcode:", __FILE__,__func__,__LINE__,retcode);
FM_Debug_Print_Bin((uint8 *)__FILE__,(uint8 *)__func__,__LINE__,(uint8 *)"HIINJECT READ DATA",philips_fm.rb,16);
return 0;
}
kal_prompt_trace(MOD_MMI,"%s:%d: Function: %s, Level: %d",__FILE__,__LINE__,__func__,((philips_fm.rb[9]>>4)&0x0f));
#endif
if ( 1 )
{
search_directory = 1; //up
fm_hlsi = 0;
}
else
{
search_directory = 0; //down
fm_hlsi = 1;
}
if ( fm_hlsi)
{
command_pll = GetPllFromFrequency(used_freq, HI_SIDE_INJECTION);
}
else
{
command_pll = GetPllFromFrequency(used_freq, LO_SIDE_INJECTION);
}
FetchCommandData();
philips_fm.wb[4] = (philips_fm.wb[4] | (FM_MUTE));
//set HLSI
if ( fm_hlsi)
{
philips_fm.wb[1] &= ~(FM_SUD);
philips_fm.wb[4] |= FM_HLSI;
}
else
{
philips_fm.wb[1] |= FM_SUD;
philips_fm.wb[4] &= (~FM_HLSI);
}
// Threshold
philips_fm.wb[4] |= 0x20; // 00100000
// SETTING searching mode
philips_fm.wb[1] |= FM_SM;
// set feq.
philips_fm.wb[1] |= (uint8)((command_pll>>8)&0x0000003f);
philips_fm.wb[2] = (uint8)(command_pll&0x000000ff);
//FM_Debug_Print_Bin((uint8 *)__FILE__,(uint8 *)__func__,__LINE__,(uint8 *)"Vaild stop send",philips_fm.wb,7);
// send to philips chip register
retcode = Philips_FM_Send(philips_fm.wb, 7, PHILIPS_I2C_WADDRESS);
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s:%s:%d: set register error,code = %d\n",__FILE__,__func__,__LINE__,retcode);
return 0; // FLASE
}
//wait for RF == 1
retcode = Philips_FM_Send_checkRF();
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s,%s,%d: Check RF Error,retcode:%d", __FILE__,__func__,__LINE__,retcode);
return 0;
}
//FM_Debug_Print_Bin((uint8 *)__FILE__,(uint8 *)__func__,__LINE__,(uint8 *)"Read vaild stop",philips_fm.rb,16);
kal_prompt_trace(MOD_MMI,"%s:%s:%d: Feq = %d IF Count = %x, Level = %x ",__FILE__,__func__,__LINE__,used_freq,(philips_fm.rb[8]>>1),(philips_fm.rb[9]>>4));
// IF check
if_value = (philips_fm.rb[8]>>1);
if ( if_value <= 0x31 || if_value >= 0x3e )
{
// not in condition check.
kal_prompt_trace(MOD_MMI,"%s,%s,%d: %x not in IF condition check. ",__FILE__,__func__,__LINE__,if_value);
return 0;
}
philips_fm.hi_level = (philips_fm.rb[9]>>4);
/*
if ( philips_fm.hi_level < 5 ) // FIXME!!
{
return 0;
}
*/
fm_hlsi = ( fm_hlsi )? 0:1;
if ( fm_hlsi)
{
command_pll = GetPllFromFrequency(used_freq, HI_SIDE_INJECTION);
}
else
{
command_pll = GetPllFromFrequency(used_freq, LO_SIDE_INJECTION);
}
FetchCommandData();
philips_fm.wb[4] = (philips_fm.wb[4] | (FM_MUTE));
//set HLSI
if ( fm_hlsi)
{
philips_fm.wb[1] &= ~(FM_SUD);
philips_fm.wb[4] |= FM_HLSI;
}
else
{
philips_fm.wb[1] |= FM_SUD;
philips_fm.wb[4] &= (~FM_HLSI);
}
// SETTING searching mode
philips_fm.wb[1] &= ~(FM_SM);
// set feq.
philips_fm.wb[1] |= (uint8)((command_pll>>8)&0x0000003f);
philips_fm.wb[2] = (uint8)(command_pll&0x000000ff);
// FM_Debug_Print_Bin((uint8 *)__FILE__,(uint8 *)__func__,__LINE__,(uint8 *)"Vaild stop send2",philips_fm.wb,7);
// send to philips chip register
retcode = Philips_FM_Send(philips_fm.wb, 7, PHILIPS_I2C_WADDRESS);
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s:%s:%d: set register error,code = %d\n",__FILE__,__func__,__LINE__,retcode);
return 0; // FLASE
}
//wait for RF == 1
retcode = Philips_FM_Send_checkRF();
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s,%s,%d: Check RF Error,retcode:%d", __FILE__,__func__,__LINE__,retcode);
return 0;
}
kal_prompt_trace(MOD_MMI,"%s:%s:%d: FEQ = %d IF Count2 = %x, Level = %x ",__FILE__,__func__,__LINE__,used_freq,(philips_fm.rb[8]>>1),(philips_fm.rb[9]>>4));
//FM_Debug_Print_Bin((uint8 *)__FILE__,(uint8 *)__func__,__LINE__,(uint8 *)"Read vaild stop2",philips_fm.rb,16);
// IF check
if_value = (philips_fm.rb[8]>>1);
if ( if_value <= 0x31 || if_value >= 0x3e )
{
// not in condition check.
kal_prompt_trace(MOD_MMI,"%s,%s,%d: %x not in IF condition check.",__FILE__,__func__,__LINE__,if_value);
return 0;
}
philips_fm.lo_level = (philips_fm.rb[9]>>4);
/*
if ( philips_fm.lo_level < 5 ) // FIXME!!
{
return 0;
}
*/
if ( philips_fm.lo_level > philips_fm.hi_level )
{
if_value = philips_fm.lo_level - philips_fm.hi_level;
}
else
{
if_value = philips_fm.hi_level - philips_fm.lo_level;
}
if ( if_value > 2 )
{
return 0;
}
kal_prompt_trace(MOD_MMI,"%s:%d: Exit Function: %s",__FILE__,__LINE__,__func__);
return (philips_fm.lo_level > philips_fm.hi_level)?philips_fm.lo_level : philips_fm.hi_level;
}
void FMDrv_Mute(uint8 mute)
{
int16 retcode;
FetchCommandData();
if ( mute )
{
philips_fm.wb[4] |= FM_MUTE;
}
else
{
philips_fm.wb[4] &= ~(FM_MUTE);
}
retcode = Philips_FM_Send(philips_fm.wb, 7, PHILIPS_I2C_WADDRESS);
return;
}
void FMDrv_ChipInit()
{
GPO_ModeSetup(4,3); //32k gpo4
GPIO_InitIO(0,4);
/*
GPIO_ModeSetup(6,0);
GPIO_InitIO(1,6); //zkh 2007 9 27
GPIO_WriteIO(1,6);
GPIO_ModeSetup(19,0);
GPIO_InitIO(1,19);
GPIO_WriteIO(1,19); //Eable
*/
return;
}
bool FMDrv_IsChipValid( void )
{
return true;
}
void FMDrv_SetVolumeLevel(uint8 volume)//gaorui mod
{
SerialVolumeReset();
for( ;volume > 0;volume --)
{
SerialVolumeUp();
}
}
static int16 Philips_FM_Send_checkRF(void)
{
uint8 frrflag;
uint16 i;
int16 retcode;
//wait for RF == 1
frrflag = 0;
for ( i = 0; i < 8; i++)
{
kal_sleep_task(20); // sleep 4.6 ms
// Read Data from Register.
retcode = Philips_FM_Read(philips_fm.rb, 16, PHILIPS_I2C_RADDRESS);
if ( retcode < 0 )
{
kal_prompt_trace(MOD_MMI,"%s,%s,%d:Optimizer Read Register Error,retcode:", __FILE__,__func__,__LINE__,retcode);
return CHECK_PHILIPSFM_RF_READ_ERR; //fixme!!
}
// check FRRFLAG
if ( philips_fm.rb[0]&0x02 ) // FRRFLAG == 1
{
//tunner state machine is ready.
frrflag++;
break;
}
}
if ( frrflag == 0 )
{
// TIMEOUT ERROR
return CHECK_PHILIPSFM_RF_TIMEOUT; // Fixme!!
}
// check band limit has been reached or timeout
if ( philips_fm.rb[0]&0x01 )
{
// Error
kal_prompt_trace(MOD_MMI,"%s,%s,%d: Chip search limit reach. ", __FILE__,__func__,__LINE__);
return CHECK_PHILIPSFM_REATCH_LIMIT;
}
return 0;
}
static void FM_Debug_Print_Bin(uint8 *filename, uint8 *function, uint16 line_number, uint8 *debug_info,uint8 *data, uint16 length)
{
uint16 i;
for ( i = 0; i < length; i++)
{
kal_prompt_trace(MOD_MMI,"%s:%s:%d: %s:i = [%d] data = [%x]\n",filename,function,line_number,debug_info,i,data[i]);
}
kal_prompt_trace(MOD_MMI,"==============================================");
}
static void FM_Debug_Print_String(uint8 *filename, uint8 *function, uint16 line_number, uint8 *debug_info,uint8 *data)
{
kal_prompt_trace(MOD_MMI,"%s:%s:%d: %s:%s\n",filename,function,line_number,debug_info,data);
kal_prompt_trace(MOD_MMI,"==============================================");
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -