是北京瑞迪科推出的高度集成的立體聲FM收發(fā)芯片。該芯片具有以下特征
特點:
調頻發(fā)射和接收一體化
支持65 MHz到115 MHz的全球FM接收頻段,收發(fā)天線共用。
支持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,F(xiàn)IFO不復位。
// 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);//發(fā)送寫命令
iiicwaitack();
IIcSendByte(addr);//發(fā)送地址
iiicwaitack();
IIcSendByte(val & gt;>。8);//發(fā)送高字節(jié)
iiicwaitack();
IIcSendByte(val & amp;0XFF);//發(fā)送低位字節(jié)
iiicwaitack();
IIcStop();//生成停止條件
}
//讀取RDA5820寄存器
u16 Rda5820ReadReg(u8地址)
{
u16 res
IIcStart();
IIcSendByte(RDA 5820 _ WRITE);//發(fā)送寫命令
iiicwaitack();
IIcSendByte(addr);//發(fā)送地址
iiicwaitack();
IIcStart();
IIcSendByte(RDA 5820 _ READ);//發(fā)送讀取命令
iiicwaitack();
RES = IICReadByte(1);//讀取高字節(jié)并發(fā)送確認
res<。& lt=8;
RES " = IICReadByte(0);//讀取低位字節(jié)并發(fā)送NACK
IIcStop();//生成停止條件
返回res//返回讀取的數據
}
//將RDA5820設置為接收模式
void Rda5820RxMode(void)
{
u16溫度;
temp = RDA 5820 ReadReG(0X40);//讀取0X40的內容
temp&。= 0xfff0//RX模式
Rda5820WriteReg(0X40,temp);//FM RX模式
}
//將RDA5820設置為發(fā)射模式
void RDA 5820 xmode(void)
{
u16溫度;
temp = RDA 5820 ReadReG(0X40);//讀取0X40的內容
temp&。= 0xfff0
temp | = 0x0001//發(fā)射模式
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
}
//設置發(fā)射功率
//增益:0~63
void RDA 5820 xpagset(u8增益)
{
u16溫度;
temp = RDA 5820 ReadReG(0X42);//讀取0X42的內容
temp&。= 0XFFC0
temp | =增益;//GAIN
Rda5820WriteReg(0X42,temp);//設置PA的功率
}
//設置發(fā)射輸入信號增益
//增益: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循環(huán)搜索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](信號強度),F(xiàn)M_TRUE[8](電臺標志),F(xiàn)M_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](發(fā)射功率)。
//位10-8傳輸增益000最小值111最大值
//bit5-0發(fā)射功率
#定義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]
//發(fā)送音頻設置
#定義RDA 5820 _ R4D 0x4D//TX _ PIlot _ DEV[15:0]
//發(fā)送頻點設置
#定義RDA 5820 _ R4E 0x4E//TX _ RDS _ DEV[15:0]
//發(fā)送無線電數據系統(tǒng)設置
# 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設置為發(fā)射模式
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收音機芯片驅動》援引自互聯(lián)網,旨在傳遞更多網絡信息知識,僅代表作者本人觀點,與本網站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《5820 RDA5820收音機芯片驅動》僅供讀者參考,本網站未對該內容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉載時請保留本站內容來源地址,http://f99ss.com/guoji/1571788.html