📄 hw_fm5800.c
字号:
/******************************************************************/
/* 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 + -