具体设置参考代码 #include "rda5820.h"
//初始化
//0,初始化成功;
//其他,初始化失败.
u8 Rda5820Init(void)
{
u16 id;
IIcInit(); //初始化IIC口
id=Rda5820ReadReg(RDA5820_R00); //读取ID =0X5805
if(id==0X5805) //读取ID正确
{
Rda5820WriteReg(RDA5820_R02,0x0002); //芯片软复位
DelayMs(400);//等待复位结束
Rda5820WriteReg(RDA5820_R02,0x0001);//芯片上电
DelayMs(600);
Rda5820WriteReg(RDA5820_R02,0xD201); //芯片上电,不复位 正常天线 32.768时钟 循环搜索 不开始搜索 想上搜索 低音增强 立体声 非静音 非高阻抗
Rda5820WriteReg(RDA5820_R03,0x0000);//100k apace 87-108baud 不开启调谐
Rda5820WriteReg(RDA5820_R04,0x0000);//关闭中断 0.75us去加重 不使能iis io口全部浮空
Rda5820WriteReg(RDA5820_R05,0X8548);//搜索强度8,LNAN,1.8mA,VOL最大 无输入低噪声
// Rda5820WriteReg(RDA5820_R0A,0X7800);//0A不用设置
// Rda5820WriteReg(RDA5820_R0B,0X7800);//0b不用设置
Rda5820WriteReg(RDA5820_R40,0X0000);//半自动搜台 RX工作模式
Rda5820WriteReg(RDA5820_R41,0X0000);//RDS应答为0 不复位fifo fifo深度为0
// Rda5820WriteReg(RDA5820_R42,0X0000);//42不用设置
Rda5820WriteReg(RDA5820_R4A,0X0010);//fifo满中断
Rda5820FreqSet(8700);//设置初始化频率81.00M
}else return 1;//初始化失败
return 0;
}
//写RDA5820寄存器
void Rda5820WriteReg(u8 addr,u16 val)
{
IIcStart();
IIcSendByte(RDA5820_WRITE); //发送写命令
IIcWaitAck();
IIcSendByte(addr); //发送地址
IIcWaitAck();
IIcSendByte(val>>8); //发送高字节
IIcWaitAck();
IIcSendByte(val&0XFF); //发送低字节
IIcWaitAck();
IIcStop(); //产生一个停止条件
}
//读RDA5820寄存器
u16 Rda5820ReadReg(u8 addr)
{
u16 res;
IIcStart();
IIcSendByte(RDA5820_WRITE); //发送写命令
IIcWaitAck();
IIcSendByte(addr); //发送地址
IIcWaitAck();
IIcStart();
IIcSendByte(RDA5820_READ); //发送读命令
IIcWaitAck();
res=IIcReadByte(1); //读高字节,发送ACK
res<<=8;
res|=IIcReadByte(0); //读低字节,发送NACK
IIcStop(); //产生一个停止条件
return res; //返回读到的数据
}
//设置RDA5820为RX模式
void Rda5820RxMode(void)
{
u16 temp;
temp=Rda5820ReadReg(0X40); //读取0X40的内容
temp&=0xfff0; //RX 模式
Rda5820WriteReg(0X40,temp) ; //FM RX模式
}
//设置RDA5820为TX模式
void Rda5820TxMode(void)
{
u16 temp;
temp=Rda5820ReadReg(0X40); //读取0X40的内容
temp&=0xfff0;
temp|=0x0001; //TX 模式
Rda5820WriteReg(0X40,temp) ; //FM TM 模式
}
|