📄 hw_fm5800.c
字号:
INT8U writeData8[2], xbTemp;
writeData8[0] = 0xd8 & (~0x40); //0x02 0xd881
writeData8[1] = 0x81; //0x81;
Tuner_SendCommand(writeData8, 2);
//DelayMs_nops(100);
}
/**************************************************************************************
* 函数名称:FmTune
* 功 能:fm 寄存器频率赋值
* 输入参数:frequency 频率
* 返 回 值: 无
* 说 明:
**************************************************************************************/
void FmTune(INT32U frequency)
{
INT8U readData8[32];
INT8U writeData8[4];
int temp = 0;
temp = FmFreqToChan(frequency);
temp = (((int)(temp)) << 8);
RDA5800REG_IMG[3] &= 0x00ff;
RDA5800REG_IMG[3] |= temp;
writeData8[0] = (RDA5800REG_IMG[2] >> 8) | TUNER_MUTE; //0x02 0xd081
writeData8[1] = (RDA5800REG_IMG[2]);
writeData8[2] = (RDA5800REG_IMG[3] >> 8); //0x03
writeData8[3] = (RDA5800REG_IMG[3]);
Tuner_SendCommand(writeData8, 4);
//DelayMs_nops(100);
}
/**************************************************************************************
* 函数名称:FmSingleSeek
* 功 能:fm 搜台寄存器初始化
* 输入参数:搜台方向seekDirection
* 返 回 值: 无
* 说 明:
**************************************************************************************/
void FmSingleSeek(INT8U seekDirection)
{
INT8U readData8[4];
INT8U writeData8[8];
//set seek bit
if (seekDirection == 0)
writeData8[0] = ((RDA5800REG_IMG[2] >> 8) | RUNER_SEEK_DN); // seek down0x01
else
writeData8[0] = ((RDA5800REG_IMG[2] >> 8) | RUNER_SEEK_UP); // seek up0x03
writeData8[1] = RDA5800REG_IMG[2];
Tuner_SendCommand(writeData8, 2);
}
/**************************************************************************************
* 函数名称:FmSeek
* 功 能:fm 搜台
* 输入参数:seekDirection 搜台方向
* 返 回 值: 当前频率
* 说 明:
**************************************************************************************/
INT16U FmSeek(INT8U seekDirection)
{
INT8U readData8[4];
INT8U writeData8[8];
BOOL fStopSeek = 0;
BOOL falseStation = 0;
INT16U channelflag = 0;
INT8U seekover = 0;
/* do{
FmSingleSeek(seekDirection);
DelayMs_nops(75);
Tuner_ReadData(readData8,4);
//read REG0A&0B
//if(i2c_rd(I2C_FM,I2C_FM_RD_DATA,4,readData8)==0) return(0);
}while((readData8[0]&0x40==0));*/
FmSingleSeek(seekDirection);
//DelayMs_nops(100);
DelayMs_nops(120);
do
{
seekover++;
DelayMs_nops(5);
Tuner_ReadData(readData8, 4);
//DelayMs_nops(75);
//read REG0A&0B
//if(i2c_rd(I2C_FM,I2C_FM_RD_DATA,4,readData8)==0) return(0);
}
while ((readData8[0]&0x40 == 0) && (seekover <= 8));
FmInit5800();
DelayMs_nops(5);//yangshi
RDA5800REG_IMG[10] = readData8[0] * 0x100 + readData8[1];
RDA5800REG_IMG[11] = readData8[2] * 0x100 + readData8[3];
//check whether SF=1
if (seekover > 8)
falseStation = 1;
if ((readData8[0]&0x20) != 0)
falseStation = 1;
//check station RSSI again, if RSSI<SEEKTH, then falseStation, continue seek
DelayMs_nops(5);//yangshi
if (readData8[2] < (RDA5800REG_IMG[5] >> 8))
falseStation = 1;
DelayMs_nops(5);//yangshi
channelflag = (readData8[1] << 8) & 0xFF00;
if (falseStation == 0)
{
//channelflag=(readData8[1]<<8)&0xFF00;
channelflag |= 0x0001;
return channelflag;
}
else
{
return channelflag;
}
//return channelflag;
}
/**************************************************************************************
* 函数名称:Tuner_Enable
* 功 能:使能 FM chip(TEA5800)
* 输入参数:地区 area 1为日本 0为ch/us
* 输出参数:无
* 返 回 值: 无
* 说 明:
**************************************************************************************/
void Tuner_Enable(INT8U area)
{
FmInitPowerOn(area);
FmInitData();
}
/**************************************************************************************
* 函数名称:Tuner_Disable
* 功 能:禁止 FM chip(TEA5800)
* 输入参数:无
* 输出参数:无
* 返 回 值: 无
* 说 明:
**************************************************************************************/
void Tuner_Disable(void)
{
INT8U writeData8[2];
writeData8[0] = 0xd8; //0x02 0xd881
writeData8[1] = 0x80; //0x81;
Tuner_SendCommand(writeData8, 2);
//DelayMs_nops(100);
}
/**************************************************************************************
* 函数名称:Tuner_PowerOnInit
* 功 能:FM chip(TEA5800)上电初始化
* 输入参数:无
* 输出参数:无
* 返 回 值: 无
* 说 明:上电时先关闭FM chip(TEA5800)
**************************************************************************************/
void Tuner_PowerOnInit(void)
{
Tuner_Disable();
}
/**************************************************************************************
* 函数名称:Tuner_SetStereo
* 功 能:Fm Radio Stereo Setting
* 输入参数:bStereo 0 ST 1MO
* 输出参数:无
* 返 回 值: 无
* 说 明:
**************************************************************************************/
void Tuner_SetStereo(BOOL bStereo)
{
INT8U writeData8[1];
INT8U ReadData8[1];
//writeData8[0] = ((RDA5800REG_IMG[2]>>8)|TUNER_MONO);
if (bStereo)
{
writeData8[0] = ((RDA5800REG_IMG[2] >> 8) & (~TUNER_MONO));
}
else
{
writeData8[0] = ((RDA5800REG_IMG[2] >> 8) | TUNER_MONO);
}
Tuner_SendCommand(writeData8, 1);
//DelayMs_nops(100);
//Tuner_ReadData(ReadData8,1);
}
/**************************************************************************************
* 函数名称:Tuner_SetMute
* 功 能:Fm Radio Mute Setting
* 输入参数:
* 输出参数:无
* 返 回 值: 无
* 说 明:
**************************************************************************************/
void Tuner_SetMute(BOOL mute)
{
INT8U writeData8[1];
INT8U ReadData8[1];
//writeData8[0] = ((RDA5800REG_IMG[2]>>8)|TUNER_MONO);
if (mute == 0)
{
writeData8[0] = ((RDA5800REG_IMG[2] >> 8) & (~TUNER_MUTE));
}
else
{
writeData8[0] = ((RDA5800REG_IMG[2] >> 8) | TUNER_MUTE);
}
Tuner_SendCommand(writeData8, 1);
//DelayMs_nops(100);
//Tuner_ReadData(ReadData8,1);
}
/**************************************************************************************
* 函数名称:GetStereoStatus
* 功 能:得到立体声状态
* 输入参数:无
* 输出参数:无
* 返 回 值: TRUE -- 为立体声状态
* FALSE -- 不是立体声
* 说 明:
**************************************************************************************/
BOOLEAN GetStereoStatus(void)
{
INT8U readData8[1];
Tuner_ReadData(readData8, 1);
return (readData8[0]&0x01);
}
/**************************************************************************************
* 函数名称:Tuner_PowerOffDeinit
* 功 能:Fm Radio Power Off Deinit
* 输入参数:无
* 输出参数:无
* 返 回 值: 无
* 说 明:
**************************************************************************************/
void Tuner_PowerOffDeinit(void)
{
Tuner_Disable();
}
/**************************************************************************************
* 函数名称:Tuner_SetFrequency
* 功 能:设置FM chip(TEA5800)频率
* 输入参数:n10KHz -- 频率(单位10KHz)
* 输出参数:无
* 返 回 值: 无
* 说 明:
**************************************************************************************/
void Tuner_SetFrequency(UINT32 n10KHz, UINT8 HILO, BOOL ForceMono)
{
FmTune(n10KHz);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -