当前位置:首页 > 单片机 > 单片机
[导读]rda5820.h文件:#ifndef__RDA5820_H#define__RDA5820_H#defineRDA5820_R000X00//读出16个位的ID=0X5820#defineRDA5820_R020X02//DHIZ[15],DMUTE[14],MONO[13],BASS[12],SEEKUP[9],SEEK[8],SKMODE[7],CLK_MODE[6:4],A

rda5820.h文件:

#ifndef__RDA5820_H#define__RDA5820_H#defineRDA5820_R000X00//读出16个位的ID=0X5820#defineRDA5820_R020X02//DHIZ[15],DMUTE[14],MONO[13],BASS[12],SEEKUP[9],SEEK[8],SKMODE[7],CLK_MODE[6:4],ANTENNA[2],SOFTRESET[1],ENABLE[0]#defineRDA5820_R030X03//CHAN[15:6],TUNE[4],BAND[3:2],SPACE[1:0]#defineRDA5820_R040X04//STCIEN[14](搜索完成中断),DE[11],I2S_ENABLE[6],GPIO3~1[5:0]#defineRDA5820_R050X05//INT_MODE[15],SEEKTH[14:8](设定信号强度),LNA_PORT_SEL[7:6],LNA_ICSEL_BIT[5:4],VOLUME[3:0];#defineRDA5820_R0A0X0A//STC[14](搜索完成标志),SF[13](搜索失败标志),ST[10](立体声标志),READCHAN[9:0](频率).#defineRDA5820_R0B0X0B//RSSI[15:9](信号强度),FM_TRUE[8](站点标志),FM_READY[7](fm就绪标志)#defineRDA5820_R400X40//AUTO_SEEK[15](全/半自动搜台),CHAN_SCAN[14](搜空/忙台),CHIP_FUN[3:0](工作模式)#defineRDA5820_R410X41//MEM_CLR[15](内存清除),RPT_TIME[14:9](RDS应答次数),MEM_DEPTH[8:0](FIFO大小,最大256)#defineRDA5820_R420X42//TX_SIG_GAIN[10:8],TX_PA_GAIN[5:0](发射功率).#defineRDA5820_R4A0X4A//MEM_INTMOD[4:0]#defineRDA5820_R4B0X4B//CHAN_NUM[7:0](仅在全自动搜台有效,代表电台数量).#defineRDA5820_R4C0X4C//TX_AUDIO_DEV[15:0]#defineRDA5820_R4D0X4D//TX_PILOT_DEV[15:0]#defineRDA5820_R4E0X4E//TX_RDS_DEV[15:0]#defineRDA5820_R530X53//CHAN_BOTTON[10:0](通道最低频率,100kHZ为单位)#defineRDA5820_R540X54//CHAN_TOP[10:0](通道最高频率,100kHZ为单位)#defineRDA5820_R640X64//RDS_RXMOD[4:3](FIFO模式[10]或者寄存器模式[11])#defineRDA5820_READ0X23//读RDA5820#defineRDA5820_WRITE0X22//写RDA5820uint8_tRDA5820_Init(void);//初始化voidRDA5820_WR_Reg(uint8_taddr,uint16_tval);//写RDA5820寄存器uint16_tRDA5820_RD_Reg(uint8_taddr);//读RDA5820寄存器voidRDA5820_RX_Mode(void);//设置RDA5820为RX模式voidRDA5820_TX_Mode(void);//设置RDA5820为TX模式uint8_tRDA5820_Rssi_Get(void);voidRDA5820_Mute_Set(uint8_tmute);voidRDA5820_Rssi_Set(uint8_trssi);voidRDA5820_Vol_Set(uint8_tvol);voidRDA5820_TxPAG_Set(uint8_tgain);voidRDA5820_TxPGA_Set(uint8_tgain);voidRDA5820_Band_Set(uint8_tband);voidRDA5820_Space_Set(uint8_tspc);voidRDA5820_Freq_Set(uint16_tfreq);uint16_tRDA5820_Freq_Get(void);#endif

rda5820.c文件:

#include"lpc11xx.h"#include"rda5820.h"#include"i2c.h"//初始化//0,初始化成功;//其他,初始化失败.uint8_tRDA5820_Init(void){uint16_tid;I2C_Init();//初始化I2C口id=RDA5820_RD_Reg(RDA5820_R00);//读取ID=0X5805if(id==0X5805)//读取ID正确{RDA5820_WR_Reg(RDA5820_R02,0x0002);//软复位delay_ms(50);RDA5820_WR_Reg(RDA5820_R02,0xC001);//立体声,上电delay_ms(600);//等待时钟稳定RDA5820_WR_Reg(RDA5820_R05,0X884F);//搜索强度8,LNAN,1.8mA,VOL最大RDA5820_WR_Reg(0X07,0X7800);//RDA5820_WR_Reg(0X13,0X0008);//RDA5820_WR_Reg(0X15,0x1420);//VCO设置0x17A0/0x1420RDA5820_WR_Reg(0X16,0XC000);//RDA5820_WR_Reg(0X1C,0X3126);//RDA5820_WR_Reg(0X22,0X9C24);//fm_trueRDA5820_WR_Reg(0X47,0XF660);//txrds}elsereturn1;//初始化失败return0;}//写RDA5820寄存器voidRDA5820_WR_Reg(uint8_taddr,uint16_tval){I2C_Start();I2C_Send_Byte(RDA5820_WRITE);//发送写命令I2C_Wait_Ack();I2C_Send_Byte(addr);//发送地址I2C_Wait_Ack();I2C_Send_Byte(val>>8);//发送高字节I2C_Wait_Ack();I2C_Send_Byte(val&0XFF);//发送低字节I2C_Wait_Ack();I2C_Stop();//产生一个停止条件}//读RDA5820寄存器uint16_tRDA5820_RD_Reg(uint8_taddr){uint16_tres;I2C_Start();I2C_Send_Byte(RDA5820_WRITE);//发送写命令I2C_Wait_Ack();I2C_Send_Byte(addr);//发送地址I2C_Wait_Ack();I2C_Start();I2C_Send_Byte(RDA5820_READ);//发送读命令I2C_Wait_Ack();res=I2C_Read_Byte(1);//读高字节,发送ACKres<<=8;res|=I2C_Read_Byte(0);//读低字节,发送NACKI2C_Stop();//产生一个停止条件returnres;//返回读到的数据}//设置RDA5820为RX模式voidRDA5820_RX_Mode(void){uint16_ttemp;temp=RDA5820_RD_Reg(0X40);//读取0X40的内容temp&=0xfff0;//RX模式RDA5820_WR_Reg(0X40,temp);//FMRX模式}//设置RDA5820为TX模式voidRDA5820_TX_Mode(void){uint16_ttemp;temp=RDA5820_RD_Reg(0X40);//读取0X40的内容temp&=0xfff0;temp|=0x0001;//TX模式RDA5820_WR_Reg(0X40,temp);//FMTM模式}//得到信号强度//返回值范围:0~127uint8_tRDA5820_Rssi_Get(void){uint16_ttemp;temp=RDA5820_RD_Reg(0X0B);//读取0X0B的内容returntemp>>9;//返回信号强度}//设置音量ok//vol:0~15;voidRDA5820_Vol_Set(uint8_tvol){uint16_ttemp;temp=RDA5820_RD_Reg(0X05);//读取0X05的内容temp&=0XFFF0;temp|=vol&0X0F;RDA5820_WR_Reg(0X05,temp);//设置音量}//静音设置//mute:0,不静音;1,静音voidRDA5820_Mute_Set(uint8_tmute){uint16_ttemp;temp=RDA5820_RD_Reg(0X02);//读取0X02的内容if(mute)temp|=1<<14;elsetemp&=~(1<<14);RDA5820_WR_Reg(0X02,temp);//设置MUTE}//设置灵敏度//rssi:0~127;voidRDA5820_Rssi_Set(uint8_trssi){uint16_ttemp;temp=RDA5820_RD_Reg(0X05);//读取0X05的内容temp&=0X80FF;temp|=(uint16_t)rssi<<8;RDA5820_WR_Reg(0X05,temp);//设置RSSI}//设置TX发送功率//gain:0~63voidRDA5820_TxPAG_Set(uint8_tgain){uint16_ttemp;temp=RDA5820_RD_Reg(0X42);//读取0X42的内容temp&=0XFFC0;temp|=gain;//GAINRDA5820_WR_Reg(0X42,temp);//设置PA的功率}//设置TX输入信号增益//gain:0~7voidRDA5820_TxPGA_Set(uint8_tgain){uint16_ttemp;temp=RDA5820_RD_Reg(0X42);//读取0X42的内容temp&=0XF8FF;temp|=gain<<8;//GAINRDA5820_WR_Reg(0X42,temp);//设置PGA}//设置RDA5820的工作频段//band:0,87~108Mhz;1,76~91Mhz;2,76~108Mhz;3,用户自定义(53H~54H)voidRDA5820_Band_Set(uint8_tband){uint16_ttemp;temp=RDA5820_RD_Reg(0X03);//读取0X03的内容temp&=0XFFF3;temp|=band<<2;RDA5820_WR_Reg(0X03,temp);//设置BAND}//设置RDA5820的步进频率//band:0,100Khz;1,200Khz;3,50Khz;3,保留voidRDA5820_Space_Set(uint8_tspc){uint16_ttemp;temp=RDA5820_RD_Reg(0X03);//读取0X03的内容temp&=0XFFFC;temp|=spc;RDA5820_WR_Reg(0X03,temp);//设置BAND}//设置RDA5820的频率//freq:频率值(单位为10Khz),比如10805,表示108.05MhzvoidRDA5820_Freq_Set(uint16_tfreq){uint16_ttemp;uint8_tspc=0,band=0;uint16_tfbtm,chan;temp=RDA5820_RD_Reg(0X03);//读取0X03的内容temp&=0X001F;band=(temp>>2)&0x03;//得到频带spc=temp&0x03;//得到分辨率if(spc==0)spc=10;elseif(spc==1)spc=20;elsespc=5;if(band==0)fbtm=8700;elseif(band==1||band==2)fbtm=7600;else{fbtm=RDA5820_RD_Reg(0X53);//得到bottom频率fbtm*=10;}if(freq>6;band=(temp>>2)&0x03;//得到频带spc=temp&0x03;//得到分辨率if(spc==0)spc=10;elseif(spc==1)spc=20;elsespc=5;if(band==0)fbtm=8700;elseif(band==1||band==2)fbtm=7600;else{fbtm=RDA5820_RD_Reg(0X53);//得到bottom频率fbtm*=10;}temp=fbtm+chan*spc;returntemp;//返回频率值}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

中断方式串口接收数据新建一个工程,结构如下图所示:在main.c文件中,输入以下代码:#include “lpc11xx.h”#include “uart.h”uint8_t rec_buf;void UART_IRQH...

关键字: Cortex lpc1114 mo uart 串口中断 收发数据

LPC_IOCON->R_PIO1_0 &= ~0x07;LPC_IOCON->R_PIO1_0 |= 0x02;上面是设置P1.0为AD1的语句。P1.0低三位是引脚功能选择位,所以配置低三位就可以...

关键字: lpc1114 引脚功能 设置

LPC1114内部一共有4个定时器,2个32位定时器,2个16位定时器,使用方式都一样,只是要注意使用16位定时器时,寄存器的值不要超出65535。给它们分别取名称为CT16B0、CT16B1、CT32B0、CT32B1...

关键字: lpc1114 通用定时器

你还在为如何给LPC1114主控的电路板留程序下载接口而烦恼吗?下面瑞生(Ration)以自己曾经做过的项目为例给大家分享一下吧!1.LPC1114如何下载程序?这个当然是你必须要知道的问题。LPC1114一共2种下载方...

关键字: lpc1114 程序下载接口

#include\"ds18b20.h\"uint8_ttemp_sign;voiddelay_ds(uint16_tzz){uint8_txx;uint16_tyy;for(xx=0;xx

关键字: 18b20 lpc1114 测量温度

某同学:你好,看了基础篇SysClk、GPIO、UART的例程,在用到IOCON模块,UART模块在SYSAHBCLKCTRL寄存器中都需要相应时钟允许位置1,IOCON使能,在设置完后又禁能,UART使用时只使能,不用...

关键字: lpc1114 iocon 模块时钟

32位的单片机内部各种数据寄存器和控制寄存器都是32位的,同理,8位单片机内部的数据和控制寄存器都是8位的。例如:AT89C51单片机的“中断控制寄存器”IE定义如下图所示:bit7bit6bit5bit4bit3bit...

关键字: ARM Cortex lpc1114 m0 寄存器配置

新建一个工程,结构如下图所示:timer.h文件和timer.c文件用上一节的。在timer.h中增加两个变量和两个函数的声明,如下所示:#ifndef __NXPLPC11xx_TIME_H__#define __NX...

关键字: lpc1114 pwm 通用定时器

LPC1114的中断,由中断控制模块NVIC控制。一共32个中断,每个中断的优先级可编程为 0~3 四种级别。级别越高对应的优先级越低。因此,级别0 是最高的中断优先级。设置中断优先级的函数,CMISIS已经写好,并嵌入...

关键字: cortex-m0 lpc1114 中断优先级

LPC1114有一个串口,具备标准9针串口的所有功能引脚:RXD、TXD、RTS、CTS、DTR、DSR、DCD、IR一般情况下,我们只用到RXD和TXD。在这一章,只对RXD和TXD的使用做介绍。可以用于程序下载。可以...

关键字: Cortex lpc1114 m0 串口 收发数据 uart查询
关闭
关闭