极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20948|回复: 6

【arduino库】FM接收模块RDA58xx系列 I2C 读写库。(自编写)!

[复制链接]
发表于 2013-7-3 20:53:19 | 显示全部楼层 |阅读模式
本帖最后由 高宇 于 2013-7-3 23:21 编辑

       RDA 58xx系列芯片,是非常简单易用的FM接收、发射芯片。芯片还提供DAC等功能。

因58xx芯片,使用arduino提供的Wire.h库读写存在问题。所以特编写此函数解决58xx系列芯片的I2C的读写库。

希望为想用arduino做FM收发设备的朋友提供方便之门。

第一次写库,有不足的地方希望大家指正。

写函数:WriteTo_58xx(REG_ADDRESS,SEND_DATA);
读函数:ReadFrom_58xx(REG_ADDRESS);


[pre lang="arduino" line="1" file="RDA58xxTWI.h"]////////////        RDA58xxTWI.h  /////////////

#define RDA58xxTWI.h




#define TWI_START  TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
#define TWI_STOP   TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)
#define TWI_WAIT   {while(!(TWCR&(1<<TWINT)));}
#define TWI_TEST_ACK TWSR&0XF8
#define TWI_SEND_ACK  TWCR|=(1<<TWEA)
#define TWI_SEND_BYTE(X) {TWDR=(X);TWCR=(1<<TWINT)|(1<<TWEN);}
#define uchar unsigned char
#define uint unsigned int

void twi_ini();
uchar WriteTo_58xx(uchar REG_ADDRESS,uint SEND_DATA);
uint ReadFrom_58xx(uchar REG_ADDRESS);
//==================================================================
/////////////////////////////////////////////////////////[/code]




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2013-7-3 23:18:24 | 显示全部楼层
本帖最后由 高宇 于 2013-7-3 23:19 编辑

[pre lang="arduino" line="1" file="RDA58xxTWI.cpp"]#include <compat/twi.h>

#define uchar unsigned char
#define uint unsigned int
#include "RDA58xxTWI.h"

#define Wr_IIC 0x22 //RDA58xx芯片的I2C地址!
#define Rd_IIC (Wr_IIC +1)  //因读写时序问题,RDA58xx的读地址比写地址+1.


/*-----初始化TWI总线函数TWI-INI ----*/

void twi_ini()
{
    TWCR=0X00; //关闭TWI总线
    TWBR=10;   //设置传输比特率  
    TWSR=0;    //设置TWI总线的速度,
    TWCR=0x04; //使能TWI总线
}


/*-----RDA58XX写入数据函数 WRI_58xx() --------*/
uchar WriteTo_58xx(uchar REG_ADDRESS,uint SEND_DATA)
{

uchar TxH,TxL; //////////分解为输入的数据为高8位和低8位。
TxL=SEND_DATA;                       
SEND_DATA>>=8;
TxH=SEND_DATA;

twi_ini() ;        //初始化TWI总线

TWI_START;
TWI_WAIT;                                                 //等待START发出:正在发时TWINT为0,傻等他发好了TWINT为1
TWI_TEST_ACK;

TWI_SEND_BYTE(Wr_IIC);                         //再次置位这两个,就是开始发出写,5807器件地址0X22
TWI_WAIT;                                                 //等待START发出:正在发时TWINT为0,发好了TWINT为1;

TWI_SEND_BYTE(REG_ADDRESS);         //写寄存器地址
TWI_WAIT; ;                                         //等待发送完成及给出应答信号

TWI_SEND_BYTE(TxH);                         //写高字节
TWI_WAIT;                                                 //等待数据发送完成及给出应答信号

TWI_SEND_BYTE(TxL);                         //写低字节
TWI_WAIT;                                                 //等待数据发送完成及给出应答信号

TWI_STOP;

}
/*-----RDA58XX读取数据函数 WRI_58xx() --------*/
uint ReadFrom_58xx(uchar REG_ADDRESS)
{

twi_ini() ;        //初始化TWI总线

uint Read_Buff;
uchar RxH,RxL;
TWI_START;
TWI_WAIT; //等待START发出:正在发时TWINT为0,发好了TWINT为1

TWI_SEND_BYTE(Wr_IIC); //发出写,5807器件地址0X22
TWI_WAIT;

TWI_SEND_BYTE(REG_ADDRESS); //发出写,寄存器地址0X0A或0X0B
TWI_WAIT;

TWI_START; //再启动
TWI_WAIT;

TWI_SEND_BYTE(Rd_IIC); //读5807器件地址0X23
TWI_WAIT;

TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA);//接收数据后发出应答:1<<TWEA
TWI_WAIT;

RxH=TWDR; //读出寄存器高字节
TWCR&=~(1<<TWEA);
TWCR=(1<<TWINT)|(1<<TWEN);

TWI_WAIT;

RxL=TWDR; //读出寄存器低字节
TWI_STOP;


Read_Buff=0;
Read_Buff+=RxH;
Read_Buff<<=8;
Read_Buff+=RxL;
return Read_Buff; //返回状态字
}
[/code]
回复 支持 反对

使用道具 举报

发表于 2013-7-5 08:14:30 | 显示全部楼层
哪里可以买到这个模块?有相关数据吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-5 09:05:50 | 显示全部楼层
RDA 现在比较容易找到的 5820 5830模块资料。 淘宝可以买到。还可以买5807等旧型号。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-7-6 19:30:53 | 显示全部楼层
写库有什么书籍推荐的吗??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-7 08:33:33 | 显示全部楼层
一些c语言的书籍有介绍。
回复 支持 反对

使用道具 举报

发表于 2013-9-16 06:33:17 来自手机 | 显示全部楼层
还在的吗,我下载了你的库发现.h和.cpp都是乱码,我最近急用想弄个校园收音机,求帮助
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 21:36 , Processed in 0.034988 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表