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

📄 hw_fm5800.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************/
/*   Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  hw_fm5800.c
Desc :  fm接口函数的实现

Author : huangxinyu
Date : 2007-08-21
Notes : 移植Rock26上的FM driver,修改I2C调用

$Log: hw_fm5800.c,v $
Revision 1.2  2008/06/19 04:43:30  Administrator
代码整理!

Revision 1.1.1.1  2008/05/07 04:15:08  Administrator
no message

Revision 1.1.1.1  2008/03/06 13:29:05  Lingzhaojun
no message

Revision 1.1.1.1  2007/12/07 03:23:29  Lingzhaojun
导入纽漫260

Revision 1.5  2007/10/15 09:06:15  Huangxinyu
根据RK27提交修改driver

Revision 1.4  2007/10/11 04:09:20  Huangshilin
System 其他目录。

Revision 1.3  2007/10/08 02:38:41  Lingzhaojun
添加版本自动注释脚本

*********************************************************************/
#include "hw_include.h"
#if (FM_TYPE==FM5800_TYPE)

#include "hw_fm5800.h"
INT8U   TEA5800ControlData[5];
INT16U RDA5800REG_IMG[45];
INT8U READCHAN;
INT16U  cwFMDefault[] =
{
    0x0000,
    0x0000,
    0xd881, //0x02
    0x0000,
    0x4400, //0x04
    0x12ff,  //0x13ff,     0x10ff,    lilin, 06/22, 0x10f8, //0x05RSSI
    0x0000,
    0x00cd,
    0x0096,
    0x0020,
    0x4163,
    0x0806,
    0x5800,
    0x5800,
    0x5800,
    0x5800,
    0x4c17,//0x4c17, //lilin, 08/13, seek_singlestep, 0x4817,
    0x20a2,
    0x0000,
    0x000f,
    0x06de,
    0xecc0,
    0x0200,
    0x5383,
    0x95a4,
    0xe848,
    0x0500, //0x0500, lilin, 06/22, 0x0500,
    0x00a4, //0x00a4, lilin, 06/22, 0x00a4,
    0x889b,
    0x0d84,
    0x4f04,
    0x8832,
    0x7f71,
    0x0660,
    0x4010,
    0x6002,
    0x1808,
    0x6458,
    0x787f,
    0x0100,
    0xc040,
    0xc020,
    0x0024,
    0x0400,
    0x0020,
};
/**************************************************************************************
*   函数名称:FmChanToFreq
*   功    能:CH 变为频率
*   输入参数:ch   (channel)
*   返 回 值: 频率(frequency*10)
*   说    明:
**************************************************************************************/
INT32U FmChanToFreq(INT8U channel)
{
    INT16U channelSpacing;
    INT16U bottomOfBand;
    INT16U frequency;
    if ((RDA5800REG_IMG[3] & 0x0002) == 0x0000)
        bottomOfBand = 875;
    else
        bottomOfBand = 760;
    if ((RDA5800REG_IMG[3] & 0x0001) == 0x0000)
        channelSpacing = 1;
    else if ((RDA5800REG_IMG[5] & 0x0001) == 0x0001)
        channelSpacing = 2;
    else
        channelSpacing = 1;
    frequency = (bottomOfBand + channelSpacing * channel);
    return (frequency*10);
}
/**************************************************************************************
*   函数名称:FmFreqToChan
*   功    能:频率变为CH
*   输入参数:频率(frequency)
*   返 回 值: ch  (channel)
*   说    明:
**************************************************************************************/
INT8U FmFreqToChan(INT32U frequency)
{
    INT16U channelSpacing;
    INT16U bottomOfBand;
    INT8U channel;
    frequency = frequency / 10;

    if ((RDA5800REG_IMG[3] & 0x0002) == 0x0000)
        bottomOfBand = 875;
    else
        bottomOfBand = 760;
    if ((RDA5800REG_IMG[3] & 0x0001) == 0x0000)
        channelSpacing = 1;
    else if ((RDA5800REG_IMG[5] & 0x0001) == 0x0001)
        channelSpacing = 2;
    else
        channelSpacing = 1;
    channel = (INT8U)((frequency - bottomOfBand) / channelSpacing);
    return (channel);
}
/**************************************************************************************
*   函数名称:Tuner_ReadData
*   功    能:从FM chip(TEA5800)读取数据
*   输入参数:pdata -- 要读的数据指针
*             size -- 要读的数据个数
*   输出参数:无
*   返 回 值: TRUE -- 读取成功
*             FALSE -- 读取失败
*   说    明:
**************************************************************************************/
BOOL Tuner_ReadData(UINT8 *pdata, UINT8 size)
{
    BOOL ret;
    I2C_Init(FM5800, 400);//210
    ret = I2C_Read(0, pdata, size, DirectMode);
    I2C_Deinit();
    return ret;
}

/**************************************************************************************
*   函数名称:Tuner_SendCommand
*   功    能:往FM chip(TEA5800)发送数据
*   输入参数:pdata -- 要发送的数据指针
*             size -- 要发送的数据个数
*   输出参数:无
*   返 回 值: TRUE -- 发送成功
*             FALSE -- 发送失败
*   说    明:
**************************************************************************************/
BOOL Tuner_SendCommand(UINT8 *pdata, UINT8 size)
{
    BOOL ret;
    I2C_Init(FM5800, 400);
    ret = I2C_Write(0, pdata, size, DirectMode);
    I2C_Deinit();
    return ret;
}
/**************************************************************************************
*   函数名称:FmInitReady
*   功    能:初始化读寄存器
*   输入参数:无
*   返 回 值: 无
*   说    明:
**************************************************************************************/
void FmInitReady(void)
{
    INT8U ReadData8[2];
    Tuner_ReadData(ReadData8, 2);
}
/**************************************************************************************
*   函数名称:FmInitPowerOn
*   功    能:上电
*   输入参数:area  0为中国 1日本
*   返 回 值: 无
*   说    明:
**************************************************************************************/
void FmInitPowerOn(INT8U area)
{
    int i, j;
    INT8U writeData8[2], xbTemp;
    for (xbTemp = 0; xbTemp < 45; xbTemp++)
        RDA5800REG_IMG[xbTemp] = cwFMDefault[xbTemp];
    if (area == 1)
        RDA5800REG_IMG[3] |= RUNER_AREA_JA;
    else
        RDA5800REG_IMG[3] &= (~RUNER_AREA_JA);
    RDA5800REG_IMG[2] &= (~0x4000);
    writeData8[0] = 0xd8;  //0x02   0xd881
    writeData8[1] = 0x81;  //0x81;
    //writeData8[0] =(RDA5800REG_IMG[2] >> 8);
    //writeData8[1] = (RDA5800REG_IMG[2]);
    Tuner_SendCommand(writeData8, 2);
    //DelayMs_nops(100);
}
/**************************************************************************************
*   函数名称:FmAreaSwitch
*   功    能:地区变换
*   输入参数:area  0为中国/us      1日本
*   返 回 值: 无
*   说    明:
**************************************************************************************/
void FmAreaSwitch(INT8U area)
{
    if (area == 1)
        RDA5800REG_IMG[3] |= RUNER_AREA_JA;
    else
        RDA5800REG_IMG[3] &= (~RUNER_AREA_JA);
}
/**************************************************************************************
*   函数名称:FmInitData
*   功    能:fm 寄存器初始化
*   输入参数:无
*   返 回 值: 无
*   说    明:
**************************************************************************************/
void FmInitData(void)
{
    int i, j;
    INT8U writeData8[86], xbTemp;
    for (xbTemp = 0; xbTemp < 43; xbTemp++)
    {
        writeData8[xbTemp*2] = (RDA5800REG_IMG[xbTemp+2] >> 8);
        writeData8[xbTemp*2+1] = (RDA5800REG_IMG[xbTemp+2]);
    }
    Tuner_SendCommand(writeData8, 86);
    //DelayMs_nops(100);
}
/**************************************************************************************
*   函数名称:FmInit5800
*   功    能:搜台初始化
*   输入参数:无
*   返 回 值: 无
*   说    明:
**************************************************************************************/
void FmInit5800(void)
{
    int i, j;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -