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

📄 hw_fm5800.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -