是北京瑞迪科推出的高度集成的立体声FM收发芯片。该芯片具有以下特征
特点:
调频发射和接收一体化
支持65 MHz到115 MHz的全球FM接收频段,收发天线共用。
支持IIC/串行接口
支持32.768K晶振
数字音量和自动自动增益控制
支持带软件静音功能的立体声/单声道切换
支持I2S接口(输入/输出)
内置LDO,工作电压范围宽(2.7~5.5V)
大功率32欧姆负载音频输出,直接耳机
高集成度、低功耗、小尺寸(4毫米* 4毫米QFN封装)和简单的应用
RDA5820的引脚图如图所示
RDA5820支持两种通信模式,SPI和IIC。当mode引脚连接到GND时,RDA5820进入IIC模式。此时,SCLK扮演IIC的SCL,SDIO扮演IIC的民主行动党。RDA5820的IIC地址为0X11(不包括最低位),对应的读取为0X23,写入为0X20
实际电路连接如下
RDA5820有半自动搜台和全自动搜台两种模式
特定设置参考代码
#包括“rda5820.h”
//初始化
//0,初始化成功;
//其他,初始化失败。
u8 Rda5820Init(无效)
{
u16 id
IIcInit();//初始化IIC端口
id = RDA 5820 ReadReG(RDA 5820 _ R00);//读取ID =0X5805
If(id==0X5805) //正确读取id
{
Rda5820WriteReg(RDA5820_R02,0x 0002);//芯片软复位
delay ms(400);//等待复位结束
Rda5820WriteReg(RDA5820_R02,0x 0001);//芯片上的电源
delay ms(600);
Rda5820WriteReg(RDA5820_R02,0xd 201);//芯片上电,正常天线不复位。32.768时钟周期搜索不会开始搜索。想搜索一下。低音增强立体声静音非高阻抗
Rda5820WriteReg(RDA5820_R03,0x 0000);//100k Apache 87-108波特不开始调谐
Rda5820WriteReg(RDA5820_R04,0x 0000);//关闭中断0.75us去加重不会使所有iis io端口浮动空
Rda5820WriteReg(RDA5820_R05,0x 8548);//搜索强度8,LNAN,1.8mA,VOL最大值无输入低噪声
// Rda5820WriteReg(RDA5820_R0A,0x 7800);//0A不设置
// Rda5820WriteReg(RDA5820_R0B,0X 7800);//0b不设置
Rda5820WriteReg(RDA5820_R40,0x 0000);//半自动搜台RX工作模式
Rda5820WriteReg(RDA5820_R41,0x 0000);//RDS响应为0,fifo深度为0,FIFO不复位。
// Rda5820WriteReg(RDA5820_R42,0x 0000);//42不设置
Rda5820WriteReg(RDA5820_R4A,0x 0010);//fifo完全中断
RDA 5820 freqset(8700);//将初始化频率设置为81.00M
}else返回1;//初始化失败
返回0;
}
//写入RDA5820寄存器
void Rda5820WriteReg(u8地址,u16值)
{
IIcStart();
IIcSendByte(RDA 5820 _ WRITE);//发送写命令
iiicwaitack();
IIcSendByte(addr);//发送地址
iiicwaitack();
IIcSendByte(val & gt;>。8);//发送高字节
iiicwaitack();
IIcSendByte(val & amp;0XFF);//发送低位字节
iiicwaitack();
IIcStop();//生成停止条件
}
//读取RDA5820寄存器
u16 Rda5820ReadReg(u8地址)
{
u16 res
IIcStart();
IIcSendByte(RDA 5820 _ WRITE);//发送写命令
iiicwaitack();
IIcSendByte(addr);//发送地址
iiicwaitack();
IIcStart();
IIcSendByte(RDA 5820 _ READ);//发送读取命令
iiicwaitack();
RES = IICReadByte(1);//读取高字节并发送确认
res<。& lt=8;
RES " = IICReadByte(0);//读取低位字节并发送NACK
IIcStop();//生成停止条件
返回res//返回读取的数据
}
//将RDA5820设置为接收模式
void Rda5820RxMode(void)
{
u16温度;
temp = RDA 5820 ReadReG(0X40);//读取0X40的内容
temp&。= 0xfff0//RX模式
Rda5820WriteReg(0X40,temp);//FM RX模式
}
//将RDA5820设置为发射模式
void RDA 5820 xmode(void)
{
u16温度;
temp = RDA 5820 ReadReG(0X40);//读取0X40的内容
temp&。= 0xfff0
temp | = 0x0001//发射模式
Rda5820WriteReg(0X40,temp);//FM TM模式
}
//获取信号强度
//返回值范围:0~127
u8 Rda5820RssiGet(无效)
{
u16温度;
temp = RDA 5820 ReadReG(00B);//读取0X0B的内容
返回温度>>。9;//返回信号强度
}
//设置音量正常
//vol:0 ~ 15;
void Rda5820VolSet(u8 vol)
{
u16温度;
temp = RDA 5820 ReadReG(0X05);//读取0X05的内容
temp&。= 0XFFF0
temp | = vol & amp0X0F
Rda5820WriteReg(0X05,temp);//设置音量
}
//静音设置
//静音:0,不静音;1、静音
void Rda5820MuteSet静音)
{
u16温度;
temp = RDA 5820 ReadReG(0X02);//读取0X02的内容
if(静音)温度|=1<。& lt14;
else temp & amp= ~(1 & lt;& lt14);
Rda5820WriteReg(0X02,temp);//设置MUTE
}
//设置敏感度
//RSSI:0 ~ 127;
void Rda5820RssiSet(u8 rssi)
{
u16温度;
temp = RDA 5820 ReadReG(0X05);//读取0X05的内容
temp&。= 0X80FF
temp|=(u16)rssi<。& lt8;
Rda5820WriteReg(0X05,temp);//设置RSSI
}
//设置发射功率
//增益:0~63
void RDA 5820 xpagset(u8增益)
{
u16温度;
temp = RDA 5820 ReadReG(0X42);//读取0X42的内容
temp&。= 0XFFC0
temp | =增益;//GAIN
Rda5820WriteReg(0X42,temp);//设置PA的功率
}
//设置发射输入信号增益
//增益:0~7
void RDA 5820 xpgaset(u8增益)
{
u16温度;
temp = RDA 5820 ReadReG(0X42);//读取0X42的内容
temp&。= 0XF8FF
temp|=gain<。& lt8;//GAIN
Rda5820WriteReg(0X42,temp);//设置PGA
}
//设置RDA5820的工作频段
//频段:0,0,87 ~ 108Mhz1,1,76 ~ 91Mhz2,2,76 ~ 108Mhz3.用户自定义(53H~54H)
void Rda5820BandSet(u8波段)
{
u16温度;
temp = RDA 5820 ReadReG(0X03);//读取0X03的内容
temp&。= 0XFFF3
temp|=band<。& lt2;
Rda5820WriteReg(0X03,temp);//设置BAND
}
//设置RDA5820的步进频率
//频段:0,100 khz;1,200 khz;3,50k Hz;3.保留
void Rda5820SpaceSet(u8 spc)
{
u16温度;
temp = RDA 5820 ReadReG(0X03);//读取0X03的内容
temp&。= 0xffffc;
temp | = spc
Rda5820WriteReg(0X03,temp);//设置BAND
}
//设置RDA5820的频率
//freq:频率值(单位为10Khz),如10805,表示108.05Mhz
void Rda5820FreqSet(u16 freq)
{
u16温度;
u8 spc=0,频段= 0;
u16 fbtm,chan
temp = RDA 5820 ReadReG(0X03);//读取0X03的内容
temp&。= 001F;
band=(temp >;>。2)和amp0x03//获取频段
spc = temp & amp0x03//获取分辨率
if(SPC = = 0)SPC = 10;
否则if(SPC = = 1)SPC = 20;
else SPC = 5;
if(band = = 0)fbtm = 8700;
否则if(band = = 1 | | band = = 2)fbtm = 7600;
其他
{
fbtm = RDA 5820 ReadReG(0X53);//获取底部频率
fbtm * = 10
}
if(freq<。fbtm)返回;
chan =(freq-fbtm)/SPC;//获取CHAN应该写入的值
chan & amp= 0X3FF//取低10位
temp|=chan<。& lt6;
temp|=1<。& lt4;//TONE ENABLE
Rda5820WriteReg(0X03,temp);//设置频率
delay ms(20);//等待20毫秒
while((RDA 5820 ReadReG(00B))& amp;(1 & lt& lt7))==0);//等待FM_READY
}
//获取当前频率
//返回值:频率值(单位:10Khz)
u16 Rda5820FreqGet(无效)
{
u16温度;
u8 spc=0,频段= 0;
u16 fbtm,chan
temp = RDA 5820 ReadReG(0X03);//读取0X03的内容
chan=temp >;>。6;
band=(temp >;>。2)和amp0x03//获取频段
spc = temp & amp0x03//获取分辨率
if(SPC = = 0)SPC = 10;
否则if(SPC = = 1)SPC = 20;
else SPC = 5;
if(band = = 0)fbtm = 8700;
否则if(band = = 1 | | band = = 2)fbtm = 7600;
其他
{
fbtm = RDA 5820 ReadReG(0X53);//获取底部频率
fbtm * = 10
}
temp = fbtm+chan * SPC;
返回温度;//返回频率值
}
void RDasek(void)
{
u16温度;
u16计数= 0;
temp = RDA 5820 readReG(RDA 5820 _ R02);//读取0X03的内容
temp | = 0X0100
Rda5820WriteReg(RDA5820_R02,temp);//开始搜索频道
做
{
delay ms(20);
temp = RDA 5820 readReG(RDA 5820 _ R02);//读取频道搜索结果
temp&。= 0x0100
count++;
if(count >;5000)返回;
} while(temp = = 0x 0100);
}
#ifndef __RDA5820_H
#define __RDA5820_H
#包括“ioremap.h”
#包含“delay.h”
#包括“iic.h”
#定义RDA5820_R00 0X00 //读取16位的id = 0x 5820
//16位标识ID 0x5820
#定义RDA5820_R02 0X02 //DHIZ[15],DMUTE[14],MONO[13],BASS[12],SEEKUP[9],SEEK[8],SKMODE[7],CLK_MODE[6:4],ANTENNA[2],SOFTRESET[1],ENABLE[0]
//bit0 ENABLE芯片上电1芯片未上电0
//bit1 SOFTRESET芯片soft reset 1不复位0
//bit2天线1使用内部小型天线0使用普通外部天线(内部哮天线速慢得多)
//bit6-bit4时钟频率选择,根据实际频率选择000 32.768khz
//位7 SKMODE 0循环搜索1达到上限或下限时停止搜索
//bit8 seek 0搜索已停止。1搜索开始
//bit9搜索方向0向下1向上
//bit12 BASS 0不启用低音增强1启用低音增强
//为bit13mono通道选择0立体声和1立体声
//bit14 DMUTE静音选择0静音1非静音
//bit15 DHIZ音频输出高阻抗选择0高阻抗选择1无高阻抗选择
#定义RDA5820_R03 0X03 //CHAN[15:6],TUNE[4],BAND[3:2],SPACE[1:0]
//bit15-6电流通道,电流频率可按波特计算
//位4调谐0关闭调谐1开始调谐
//位3-2波特频段可以从四个选项中选择
//bit1-0步长选择00为100K
# define RDA 5820 _ r04 0x 04//stcien[14](搜索完成中断),de [11],i2s _ enable [6],gpio3 ~ 1 [5: 0]
GPIO2上显示位14 1打开调谐FM中断0关闭中断中断引脚
//位11选择0 75us 1 50us作为去加重时间
//位6 i2s使能0不使能1使能
//bit5-bit0,三个GPIO推荐的功能选择都是00
# define RDA 5820 _ r05 0x 05//int _ mode[15],seek th [14: 8](设置信号强度),lna _ port _ sel [7: 6],lna _ icsel _ bit [5: 4],volume[3:0];
//位15中断模式0短中断1在0c清零之前不要取消中断
//位14-8高于该值的搜索阈值被视为有效站
//位7-6输入低噪声放大模式00无输入
//位5-4输入低噪声电流00 1.8毫安
//位3-0卷0000最低1111最高
# define der 5820 _ r0a 0a//STC[14](搜索完成标志)、SF[13](搜索失败标志)、ST[10](立体声标志)、READCHAN[9:0](频率)。
//bit14通道搜索完成标志0不完整1完成
//bit13通道搜索失败标志0成功1失败
//bit10立体声表示0单声道1立体声
//bit9-bit0表示当前频率,可以计算当前频率
# define der 5820 _ r0b 0x0b//RSSI[15:9](信号强度),FM_TRUE[8](电台标志),FM_READY[7](调频就绪标志)
//位15-9当前信号强度
//bit8 1当前频率是有效电台0不是
//bit7 1准备好了。软件搜索0未准备好
# define der 5820 _ r40 0x 40//auto _ seek[15](全/半自动频道搜索),CHAN_SCAN[14](搜索空/忙碌频道),CHIP_FUN[3:0](工作模式)
//bit15 1自动频道搜索0手动频道搜索
//bit14搜索用于调频传输的/空空闲频率
//位3-0选择工作模式0000 rx模式
# define der 5820 _ r41 0x 41//mem _ clr[15](内存清零),RPT_TIME[14:9](RDS响应时间),MEM_DEPTH[8:0](先进先出大小,最大256)
//位15 1复位fifo 0不复位
//bit14-9传输数据是RDS响应时间
//位8-0 fifo深度0-256
#定义RDA 5820 _ r42 0x 42//tx _ SIG _ gain[10:8],tx _ pa _ gain [5: 0](发射功率)。
//位10-8传输增益000最小值111最大值
//bit5-0发射功率
#定义RDA 5820 _ R4A 0X4A//MEM _ INTMOD[4:0]
//bit4-bit0存储器数据/空中断重复空中断完全中断的中断模式
# define der 5820 _ r4b 0x4b//chan _ num[7:0](仅对自动频道搜索有效,表示电台数量)。
//bit7-bit0无线电台数量
#定义RDA 5820 _ R4C 04C//TX _ AUDIO _ DEV[15:0]
//发送音频设置
#定义RDA 5820 _ R4D 0x4D//TX _ PIlot _ DEV[15:0]
//发送频点设置
#定义RDA 5820 _ R4E 0x4E//TX _ RDS _ DEV[15:0]
//发送无线电数据系统设置
# define der 5820 _ r53 0x 53//chan _ botton[10:0](通道最低频率,100kHZ单位)
//通道的最低频率
#定义RDA 5820 _ r54 0x 54//chan _ top[10:0](通道的最高频率,单位为100kHZ)
//频道最高频率
#定义RDA 5820 _ r64 0x 64//rds _ rxd[4:3](先进先出模式[10]或寄存器模式[11])
//rds接收模式包括fifo模式和寄存器模式
#定义RDA5820_READ 0X23 // read RDA5820
#定义RDA 5820 _ WRITE 0X22//WRITE RDA 5820
u8 Rda 5820 init(void);//初始化
void Rda5820WriteReg(u8 addr,u16 val);//写入RDA5820寄存器
u16 RDA 5820 ReadReG(u8 addr);//读取RDA5820寄存器
void RDA 5820 rx mode(void);//将RDA5820设置为接收模式
void RDA 5820 xmode(void);//将RDA5820设置为发射模式
u8 RDA 5820 rssiget(void);
void RDA 5820 mutexet(u8静音);
void RDA 5820 RSSI set(u8 RSSI);
void RDA 5820 vol set(u8 vol);
void RDA 5820 xpagset(u8增益);
void RDA 5820 xpgaset(u8增益);
void Rda5820BandSet(u8波段);
void RDA 5820 spaceset(u8 SPC);
void RDA 5820 freqset(u16 freq);
u16 RDA 5820 freq get(void);
void RDasek(void);
#endif
原始链接:
1.《5820 RDA5820收音机芯片驱动》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《5820 RDA5820收音机芯片驱动》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guoji/1571788.html