RDA5807M FM Radio library with RDS.

Dependents:   RDA5807M-FM-Radio EFM32 RDA5807M RDS Radio

Example program here:

https://developer.mbed.org/users/star297/code/RDA5807M-FM-Radio/

Committer:
star297
Date:
Fri Jun 19 16:19:31 2015 +0000
Revision:
4:3e7968bd455d
Parent:
3:bdd691977de4
Update RDS Text function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
star297 0:527aa96336ac 1
star297 0:527aa96336ac 2 #include "mbed.h"
star297 0:527aa96336ac 3
star297 0:527aa96336ac 4 class RDA5807M
star297 0:527aa96336ac 5 {
star297 0:527aa96336ac 6 public:
star297 0:527aa96336ac 7
star297 1:2c8a64e71afd 8 RDA5807M(PinName sda, PinName scl);
star297 0:527aa96336ac 9
star297 0:527aa96336ac 10 ~RDA5807M();
star297 0:527aa96336ac 11
star297 0:527aa96336ac 12 //--------------------------------------------------------------
star297 0:527aa96336ac 13 // Global Functions
star297 0:527aa96336ac 14 //--------------------------------------------------------------
star297 0:527aa96336ac 15 void WriteAll(void);
star297 0:527aa96336ac 16 void WriteReg(int address,int data);
star297 0:527aa96336ac 17 void Init(void);
star297 3:bdd691977de4 18 void Readregisters(void);
star297 0:527aa96336ac 19 void Reset(void);
star297 0:527aa96336ac 20 void PowerOn(void);
star297 0:527aa96336ac 21 void PowerOff(void);
star297 0:527aa96336ac 22 void RDS(void);
star297 0:527aa96336ac 23 void Mute(void);
star297 0:527aa96336ac 24 void Mono(void);
star297 0:527aa96336ac 25 void Softmute(void);
star297 0:527aa96336ac 26 void SoftBlend(void);
star297 0:527aa96336ac 27 void BassBoost(void);
star297 1:2c8a64e71afd 28 void AFC(void);
star297 1:2c8a64e71afd 29 void Volume(int vol);
star297 0:527aa96336ac 30 void SeekUp(void);
star297 0:527aa96336ac 31 void SeekDown(void);
star297 0:527aa96336ac 32 void Frequency(float Freq);
star297 0:527aa96336ac 33 void Channel(void);
star297 1:2c8a64e71afd 34 void getRDS(void);
star297 1:2c8a64e71afd 35
star297 1:2c8a64e71afd 36 // Initialise internal variables before starting or after a change to another channel.
star297 1:2c8a64e71afd 37 void RDSinit();
star297 1:2c8a64e71afd 38
star297 1:2c8a64e71afd 39 // Pass all available RDS data through this function.
star297 3:bdd691977de4 40 void ProcessData();
star297 0:527aa96336ac 41
star297 0:527aa96336ac 42 //--------------------------------------------------------------
star297 0:527aa96336ac 43 // Definitions
star297 0:527aa96336ac 44 //--------------------------------------------------------------
star297 0:527aa96336ac 45 /* I2C Address */
star297 1:2c8a64e71afd 46 #define RDASequential 0x20 // Write address
star297 1:2c8a64e71afd 47 #define RDARandom 0x22 // Read address
star297 0:527aa96336ac 48 /* Initialization Options */
star297 3:bdd691977de4 49 #define StartingFreq 87.00
star297 0:527aa96336ac 50 #define EndingFreq 108.00
star297 3:bdd691977de4 51 #define DefaultFreq 87.50
star297 1:2c8a64e71afd 52 #define InitialVolume 4
star297 0:527aa96336ac 53 /* RDA5807M Function Code */
star297 0:527aa96336ac 54 /* Register 0x02H (16Bits) */
star297 0:527aa96336ac 55 #define RDA_DHIZ 0x8000
star297 0:527aa96336ac 56 #define RDA_MUTE 0x8000
star297 0:527aa96336ac 57 #define RDA_MONO_ON 0x2000
star297 0:527aa96336ac 58 #define RDA_MONO_OFF 0xDFFF
star297 0:527aa96336ac 59 #define RDA_BASS_ON 0x1000
star297 0:527aa96336ac 60 #define RDA_BASS_OFF 0xEFFF
star297 0:527aa96336ac 61 #define RDA_RCLK_MODE 0x0800
star297 0:527aa96336ac 62 #define RDA_RCLK_DIRECT 0x0400
star297 0:527aa96336ac 63 #define RDA_SEEK_UP 0x0300
star297 0:527aa96336ac 64 #define RDA_SEEK_DOWN 0x0100
star297 0:527aa96336ac 65 #define RDA_SEEK_STOP 0xFCFF
star297 0:527aa96336ac 66 #define RDA_SEEK_WRAP 0x0080
star297 0:527aa96336ac 67 #define RDA_SEEK_NOWRAP 0xFF7F
star297 0:527aa96336ac 68 #define RDA_CLK_0327 0x0000
star297 0:527aa96336ac 69 #define RDA_CLK_1200 0x0010
star297 0:527aa96336ac 70 #define RDA_CLK_2400 0x0050
star297 0:527aa96336ac 71 #define RDA_CLK_1300 0x0020
star297 0:527aa96336ac 72 #define RDA_CLK_2600 0x0060
star297 0:527aa96336ac 73 #define RDA_CLK_1920 0x0030
star297 0:527aa96336ac 74 #define RDA_CLK_3840 0x0070
star297 0:527aa96336ac 75 #define RDA_RDS_ON 0x0008
star297 0:527aa96336ac 76 #define RDA_RDS_OFF 0xFFF7
star297 0:527aa96336ac 77 #define RDA_NEW 0x0004
star297 0:527aa96336ac 78 #define RDA_RESET 0x0002
star297 0:527aa96336ac 79 #define RDA_POWER 0x0001
star297 0:527aa96336ac 80 /* Register 0x03H (16Bits) */
star297 0:527aa96336ac 81 #define RDA_TUNE_ON 0x0010
star297 0:527aa96336ac 82 #define RDA_TUNE_OFF 0xFFEF
star297 0:527aa96336ac 83 //--------------------------------------------------------------
star297 0:527aa96336ac 84 // Global Variables
star297 0:527aa96336ac 85 //--------------------------------------------------------------
star297 0:527aa96336ac 86 //
star297 1:2c8a64e71afd 87 int tuneok,nochannel,power,volume,softblend,bass,mute,softmute,mono,afc,stereo,signal,fmready,fmstation;
star297 1:2c8a64e71afd 88 int rdsblockerror,rdssynchro,rdsready,rds,block1,block2,block3,block4;
star297 1:2c8a64e71afd 89
star297 1:2c8a64e71afd 90 char StationName[10]; // Station Name. 8 characters
star297 1:2c8a64e71afd 91 char RDSText[66]; // RDS test message 64 characters
star297 3:bdd691977de4 92 char CTtime[12]; // CT time string formatted as 'CT hh:mm'
star297 3:bdd691977de4 93 int minutes; // CT minutes transmitted on the minute
star297 1:2c8a64e71afd 94 float freq; // Tuned frequency
star297 0:527aa96336ac 95
star297 0:527aa96336ac 96 //--------------------------------------------------------------
star297 0:527aa96336ac 97
star297 0:527aa96336ac 98 private:
star297 0:527aa96336ac 99
star297 0:527aa96336ac 100 I2C i2c;
star297 1:2c8a64e71afd 101
star297 3:bdd691977de4 102 unsigned int RDA5807M_WriteReg[8],RDA5807M_ReadReg[7],RDA5807M_RDS[32];
star297 0:527aa96336ac 103
star297 3:bdd691977de4 104 // ----- actual RDS values
star297 3:bdd691977de4 105 int textAB, lasttextAB, lastTextIDX;
star297 3:bdd691977de4 106 int rdsGroupType, rdsTP, rdsPTY;
star297 3:bdd691977de4 107
star297 3:bdd691977de4 108 int mins; // RDS time in minutes
star297 3:bdd691977de4 109 int lastmins;
star297 3:bdd691977de4 110 int i,n;
star297 3:bdd691977de4 111 int idx; // index of rdsText
star297 3:bdd691977de4 112 int offset; // RDS time offset and sign
star297 3:bdd691977de4 113 char c1, c2;
star297 3:bdd691977de4 114 char RDSTxt[66];
star297 3:bdd691977de4 115 char PSName[10]; // including trailing '\00' character.
star297 3:bdd691977de4 116 char PSName1[10];
star297 3:bdd691977de4 117 char PSName2[10];
star297 1:2c8a64e71afd 118 };