📄 fmschedule.c
字号:
void FmCPUInit(void)
{
unsigned int temp;
bitclear_creg(%imask,15);
SysCpuSetFreq(48);
SysTimer0Set(48,25000);
write_mem(CLOCK_PWRCON,read_mem(CLOCK_PWRCON) | 0x0002);
write_creg(%ip0,0x0000);
write_creg(%ip1,0x0000);
write_creg(%ireq,0x0000);
bitset_creg(%imask,15);
}
/*
********************************************************************************
* Copyright (C),2004-2007, Fuzhou Rockchip Electronics Co.,Ltd.
* Function name : FmVariableInit()
* Author: ZHengYongzhi
* Description: FM模块变量初始化
*
* Input:
* Output:
* Return:
* Calls:
*
* History: <author> <time> <version>
* ZhengYongzhi 2006/01/01 Ver1.0
* desc: ORG
* --------------------------------------------------------------------
* ZhengYongzhi 2007-5-7 Ver1.9
* desc: 添加注释
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmVariableInit(void)
{
unsigned int i,j;
Sys1InitFlag.word = 0xffffffff;
Sys1InitFlag.bc.bFmSysInitEnable = 0;
Sys1InitFlag.bc.bFmModuleInitEnable = 0;
SystemInfo.bc.bPowerOffDisable = 1;
FmSensitive = 0;
FmStereoState = 0;
FmStereoCount = 0;
FmStereoCount1 = 0;
if (GlobalFmVar.FmArea == FM_AREA_JAPAN)
{
FmFreqMaxVal = 9100;
FmFreqMinVal = 7600;
}
else
{
FmFreqMaxVal = 10800;
FmFreqMinVal = 8750;
}
if ((GlobalFmVar.FmFreq < FmFreqMinVal) || (GlobalFmVar.FmFreq > FmFreqMaxVal))
{
GlobalFmVar.FmFreq = FmFreqMinVal;
}
j = 0;
for (i = 0; i < FREQMAXNUMBLE; i++)
{
if ((GlobalFmVar.FmFreqArray[i] < FmFreqMinVal) || (GlobalFmVar.FmFreqArray[i] > FmFreqMaxVal))
{
GlobalFmVar.FmFreqArray[i] = 0;
j ++ ;
}
}
if (j >= FREQMAXNUMBLE -1 )
{
GlobalFmVar.FmSaveNum = 0;
}
FmGuageVal = (unsigned int)((unsigned long)(FM_GUAGE_CONST) * (GlobalFmVar.FmFreq - FmFreqMinVal) / (FmFreqMaxVal - FmFreqMinVal));
FmGuageX = FmGuageVal;
FmDisplayFlag = (FM_DISPFLAG_NULL | FM_DISPFLAG_BACKGROUND | FM_DISPFLAG_BATT |
FM_DISPFLAG_CH | FM_DISPFLAG_FREQ | FM_DISPFLAG_GUAGE | FM_DISPFLAG_REGION |
FM_DISPFLAG_VOL | FM_DISPFLAG_SENS | FM_DISPFLAG_STEREO);
if (GlobalFmVar.FmState != FM_STATE_PRESET)
{
GlobalFmVar.FmState = FM_STATE_MANUAL;
}
FmFunctionSele = GlobalFmVar.FmState;
}
/*
********************************************************************************
* Copyright (C),2004-2007, Fuzhou Rockchip Electronics Co.,Ltd.
* Function name : FmCodecInit()
* Author: ZHengYongzhi
* Description: FM模块Codec初始化
*
* Input:
* Output:
* Return:
* Calls:
*
* History: <author> <time> <version>
* ZhengYongzhi 2006/01/01 Ver1.0
* desc: ORG
* --------------------------------------------------------------------
* ZhengYongzhi 2007-5-7 Ver1.9
* desc: 添加注释
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmCodecInit(void)
{
CodecIicInit();
#ifndef _INSIDE_HPSENSE_USED_
CodecCommandSet(P_ADD_TR1, 0x0002);
#else
CodecCommandSet(P_ADD_TR1, 0x0000);
#endif
CodecCommandSet(P_ADD_CR1, 0x0002); //FM Bypass2
Pre_CR1_Value = 0x0002; //2006-5-11 20:31
CodecCommandSet(P_ADD_CR2, 0x0003); //Mixer Output
#if(CPU_TYPE == _RK2608A_)
CodecCommandSet(P_ADD_PMR1, 0x001b); //All Power Down
#else
CodecCommandSet(P_ADD_PMR1, 0x003b); //All Power Down
#endif
CodecCommandSet(P_ADD_PMR2, 0x0008); //All Power Down
}
/*
********************************************************************************
* Copyright (C),2004-2007, Fuzhou Rockchip Electronics Co.,Ltd.
* Function name : FmPlayStart()
* Author: ZHengYongzhi
* Description: FM工作开始,设置初始频率
*
* Input:
* Output:
* Return:
* Calls:
*
* History: <author> <time> <version>
* ZhengYongzhi 2006/01/01 Ver1.0
* desc: ORG
* --------------------------------------------------------------------
* ZhengYongzhi 2007-5-7 Ver1.9
* desc: 添加注释
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmPlayStart(void)
{
bitclear_creg(%imask,5);
FmTimerCount = 5;
bitset_creg(%imask,5);
Tuner_FreqSet(GlobalFmVar.FmFreq);
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_MUTE_ON,0,0);
}
/*
********************************************************************************
* Copyright (C),2004-2007, Fuzhou Rockchip Electronics Co.,Ltd.
* Function name : FmPlay()
* Author: ZHengYongzhi
* Description: FM工作处理程序,FM调频、中频检测、立体声状态获取等处理程序
*
* Input:
* Output:
* Return:
* Calls:
*
* History: <author> <time> <version>
* ZhengYongzhi 2006/01/01 Ver1.0
* desc: ORG
* --------------------------------------------------------------------
* ZhengYongzhi 2007-5-7 Ver1.9
* desc: 添加注释
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmPlay(void)
{
unsigned int temp,temp1;
switch (Fun1MsgArray[2])
{
case MSG_FUNCTION1_FM_AUTO_START:
{
if (FmTimerCount > 0)
{
break;
}
Tuner_FreqSet(GlobalFmVar.FmFreq);
bitclear_creg(%imask,5);
FmTimerCount = 1;
bitset_creg(%imask,5);
FmGuageVal = (unsigned int)((unsigned long)(FM_GUAGE_CONST) * (GlobalFmVar.FmFreq - FmFreqMinVal) / (FmFreqMaxVal - FmFreqMinVal));
FmDisplayFlag |= (FM_DISPFLAG_GUAGE | FM_DISPFLAG_FREQ | FM_DISPFLAG_CH);
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_AUTO_STC,0,0);
}
case MSG_FUNCTION1_FM_AUTO_STC:
{
if (FmTimerCount > 0)
{
break;
}
if(FmWaitSTC()==1)
{
bitclear_creg(%imask,5);
FmTimerCount = 6;
bitset_creg(%imask,5);
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_AUTO_STC,0,0);
}
else
{
bitclear_creg(%imask,5);
FmTimerCount = 1;
bitset_creg(%imask,5);
FmClrSTC();
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_SEEK,0,0);
}
}
case MSG_FUNCTION1_FM_SEEK:
{
if (FmTimerCount > 0)
{
break;
}
bitclear_creg(%imask,5);
FmTimerCount=4;
bitset_creg(%imask,5);
FmSeek(UpDownFlag);
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_SEEK_STC,0,0);
break;
}
case MSG_FUNCTION1_FM_SEEK_STC:
{
if (FmTimerCount > 0)
{
break;
}
if(FmWaitSTC()==1)
{
bitclear_creg(%imask,5);
FmTimerCount = 3;
bitset_creg(%imask,5);
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_SEEK_STC,0,0);
}
else
{
bitclear_creg(%imask,5);
FmTimerCount=4;
bitset_creg(%imask,5);
FmReadABReg();
temp=(char)(RDA5800REG_IMG[10]&0x00ff);
GlobalFmVar.FmFreq=FmChanToFreq(temp);
temp=(char)((RDA5800REG_IMG[11]&0xff00)>>8);
FmSeekClrSTC();
if (GlobalFmVar.FmState == FM_STATE_AUTO)
{
FmGuageVal = (unsigned int)((unsigned long)(FM_GUAGE_CONST) * (GlobalFmVar.FmFreq - FmFreqMinVal) / (FmFreqMaxVal - FmFreqMinVal));
FmDisplayFlag |= (FM_DISPFLAG_GUAGE | FM_DISPFLAG_FREQ | FM_DISPFLAG_CH);
if(((RDA5800REG_IMG[10]&0x2000)==0)&&(temp>=(RDA5800REG_IMG[5]>>8)))
{
GlobalFmVar.FmFreqArray[GlobalFmVar.FmSaveNum] = GlobalFmVar.FmFreq;
GlobalFmVar.FmSaveNum++;
}
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_SEEK,0,0);
if((GlobalFmVar.FmFreq == FmFreqMaxVal)||(GlobalFmVar.FmSaveNum >= (FREQMAXNUMBLE-1)))
{
GlobalFmVar.FmState = FM_STATE_PRESET;
GlobalFmVar.FmSaveNum = 0;
GlobalFmVar.FmFreq = GlobalFmVar.FmFreqArray[GlobalFmVar.FmSaveNum];
if((GlobalFmVar.FmFreq < FmFreqMinVal) || (GlobalFmVar.FmFreq > FmFreqMaxVal))
{
GlobalFmVar.FmFreq = FmFreqMinVal;
}
FmGuageVal = (unsigned int)((unsigned long)(FM_GUAGE_CONST) * (GlobalFmVar.FmFreq - FmFreqMinVal) / (FmFreqMaxVal - FmFreqMinVal));
FmDisplayFlag |= (FM_DISPFLAG_GUAGE | FM_DISPFLAG_FREQ | FM_DISPFLAG_CH);
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_START,0,0,0);
break;
}
}
else
{
FmGuageVal = (unsigned int)((unsigned long)(FM_GUAGE_CONST) * (GlobalFmVar.FmFreq - FmFreqMinVal) / (FmFreqMaxVal - FmFreqMinVal));
FmDisplayFlag |= (FM_DISPFLAG_GUAGE | FM_DISPFLAG_FREQ);
if(((RDA5800REG_IMG[10]&0x2000)==0)&&(temp>=(RDA5800REG_IMG[5]>>8)))
{
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_START,0,0,0);
}
else
{
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_SEEK,0,0);
}
}
}
break;
}
case MSG_FUNCTION1_FM_MUTE_ON:
{
if (FmTimerCount > 0)
{
break;
}
if(FmWaitSTC()==1)
{
bitclear_creg(%imask,5);
FmTimerCount = 3;
bitset_creg(%imask,5);
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_MUTE_ON,0,0);
}
else
{
bitclear_creg(%imask,5);
FmTimerCount = 4;
bitset_creg(%imask,5);
FmClrSTC();
AmplifierOn();
FmStereoCount = 0;
FmStereoCount1 = 0;
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_MUTE_OFF,0,0);
}
}
case MSG_FUNCTION1_FM_MUTE_OFF:
{
if (FmTimerCount > 0)
{
break;
}
PostFun1Message(MSG_FUNCTION1_FM,MSG_FUNCTION1_FM_PLAY,MSG_FUNCTION1_FM_READ_ST,0,0);
break;
}
case MSG_FUNCTION1_FM_READ_ST:
{
if (FmTimerCount > 0)
{
break;
}
if (FmStereoCount1 < 32)
{
FmStereoCount1 ++ ;
bitclear_creg(%imask,5);
FmTimerCount = 2;
bitset_creg(%imask,5);
GetStereoStatus();
if (FmStereoState == 1)
{
FmStereoCount++;
}
else
{
FmStereoCount = 0;
}
}
else if (FmStereoCount1 == 32)
{
FmStereoCount1 ++ ;
if(FmStereoCount > 20)
{
FmStereoState = 1;
}
else
{
FmStereoState = 0;
}
FmDisplayFlag |= (FM_DISPFLAG_STEREO | FM_DISPFLAG_SENS);
}
break;
}
default:
break;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -