当前位置:首页 > 民俗文化

5820 RDA5820收音机芯片驱动

是北京瑞迪科推出的高度集成的立体声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

上一篇

攻对攻 在一盘以攻对攻的棋局中,于幼华技高一筹,胜吉星海

下一篇

川岛茉树 爱情公寓2她是最美日系女配,因打人遭封,今穿水蛭袜成秀腿魔!

多地开启堵车模式:高速变停车场 究竟是怎么一回事?

多地开启堵车模式:高速变停车场 究竟是怎么一回事?

预计五一假期全国客运量2.65亿人次;预计今年五一假期首日车流量有望突破6000万辆,达到历史新高;全国高速公路网日均流量在5250万~5450万车流辆。  昨日(4月30日),五一小长假前...

zola 商业模式丨Zola,婚庆电商新模式!

  • zola 商业模式丨Zola,婚庆电商新模式!
  • zola 商业模式丨Zola,婚庆电商新模式!
  • zola 商业模式丨Zola,婚庆电商新模式!

锁定qq有什么用 腾讯推出儿童锁模式,有什么用?

  • 锁定qq有什么用 腾讯推出儿童锁模式,有什么用?
  • 锁定qq有什么用 腾讯推出儿童锁模式,有什么用?
  • 锁定qq有什么用 腾讯推出儿童锁模式,有什么用?
qq猎杀者 《Apex英雄》猎杀者模式铁驭技能一览

qq猎杀者 《Apex英雄》猎杀者模式铁驭技能一览

Apex英雄中猎人的模式是选择一个团队,让他们成为铁控团队。三个铁控队的技能不一样,那么三个铁控队的技能是什么呢?今天,边肖将为你带来“浪人鹰眼”玩家共享的猎人模式技能。我们来看看。  猎人模式下的钢铁控制技能列表 铁...

新疆教育教学研究网 教育援疆新模式:两地学校“结对”开展课题研究

中国教育新闻网(记者蒋富尔)近日,由山东省11所学校和新疆生产建设兵团12师11所学校联合开展的“互联网+同步课堂”研究活动在新疆生产建设兵团12师举行。包括北京师范大学专家在内的许多专家学者,与资助学校的老师一起,对...

手机静音找不到妙招 苹果手机静音找不到妙招(一键解除苹果静音模式)

  • 手机静音找不到妙招 苹果手机静音找不到妙招(一键解除苹果静音模式)
  • 手机静音找不到妙招 苹果手机静音找不到妙招(一键解除苹果静音模式)
  • 手机静音找不到妙招 苹果手机静音找不到妙招(一键解除苹果静音模式)

苹果静音模式怎么取消 苹果手机静音找不到妙招(一键解除苹果静音模式)

  • 苹果静音模式怎么取消 苹果手机静音找不到妙招(一键解除苹果静音模式)
  • 苹果静音模式怎么取消 苹果手机静音找不到妙招(一键解除苹果静音模式)
  • 苹果静音模式怎么取消 苹果手机静音找不到妙招(一键解除苹果静音模式)
昆明暴雨袭城 昆明暴雨袭城 春城开启看海模式

昆明暴雨袭城 昆明暴雨袭城 春城开启看海模式

7月21日,昨天,昆明下了一场大雨。一夜雷雨过后,春城开始观海。许多路段被严重淹没,车辆无法通行。北站下的隧道被6万立方米的水淹没,到处都是“水景”的配置。预计今明两天昆明将以中雨为主。昨晚,昆明主城区经历了暴雨和局部...