FM-test

Dependencies:   MODSERIAL mbed-rtos mbed

Fork of Master by Ohnishi_Gundan

Committer:
9uS7
Date:
Mon Sep 15 04:05:56 2014 +0000
Revision:
13:3f0505bbe284
Parent:
12:168338a29373
add fmStop and fmRestart

Who changed what in which revision?

UserRevisionLine numberNew contents of line
9uS7 0:4f07ba929908 1 #include "mbed.h"
9uS7 0:4f07ba929908 2 #include "fm.h"
9uS7 0:4f07ba929908 3
9uS7 0:4f07ba929908 4
9uS7 1:e1cfb5850088 5 I2C i2c(p9,p10); // SDA,SCI
9uS7 1:e1cfb5850088 6
9uS7 8:bfcfda6b38fe 7 DigitalOut f_led1(LED1);
9uS7 8:bfcfda6b38fe 8
9uS7 2:c610e1a7fbcd 9 void fmSetup(unsigned int _f)
9uS7 0:4f07ba929908 10 {
9uS7 1:e1cfb5850088 11 char freqH = 0, freqL = 0;//, c, i;
9uS7 11:b8d46d371937 12 unsigned int freq, freqB;
9uS7 11:b8d46d371937 13 const int addr = 0x11; //slave address
9uS7 11:b8d46d371937 14 const int i2c_write = (addr << 1) | I2C_WRITE;
9uS7 11:b8d46d371937 15 const int i2c_read = (addr << 1) | I2C_READ;
9uS7 8:bfcfda6b38fe 16
9uS7 0:4f07ba929908 17 freq = _f; //freq/10.MHz 760~910
9uS7 11:b8d46d371937 18
9uS7 11:b8d46d371937 19 freq = _f; // 89.2 MHz
9uS7 0:4f07ba929908 20 if(freq > 870){
9uS7 11:b8d46d371937 21 freqB = freq - 870;
9uS7 11:b8d46d371937 22 freqH = freqB>>2;
9uS7 11:b8d46d371937 23 freqL = (freqB&3)<<6; // Shift channel selection for matching register 0x03
9uS7 0:4f07ba929908 24 }else{
9uS7 0:4f07ba929908 25 freqB = freq-760;
9uS7 0:4f07ba929908 26 freqH = freqB>>2;
9uS7 0:4f07ba929908 27 freqL = (freqB&3)<<6;
9uS7 0:4f07ba929908 28 }
9uS7 11:b8d46d371937 29
9uS7 0:4f07ba929908 30 i2c.start();
9uS7 11:b8d46d371937 31 i2c.write(i2c_write);
9uS7 0:4f07ba929908 32 i2c.write(0x02);
9uS7 13:3f0505bbe284 33 i2c.write(
9uS7 13:3f0505bbe284 34 1*I2C_NORMAL_OUTPUT_Z |
9uS7 13:3f0505bbe284 35 1*I2C_NO_MUTE |
9uS7 13:3f0505bbe284 36 1*I2C_MONORAL |
9uS7 13:3f0505bbe284 37 0*I2C_BASS_BOOST
9uS7 13:3f0505bbe284 38 );
9uS7 13:3f0505bbe284 39 i2c.write(//0x0D
9uS7 13:3f0505bbe284 40
9uS7 13:3f0505bbe284 41 I2C_CLK_32k |
9uS7 13:3f0505bbe284 42 1*I2C_ANTENNA_INNER |
9uS7 13:3f0505bbe284 43 0*I2C_SOFT_RESET |
9uS7 13:3f0505bbe284 44 1*I2C_POWER_UP
9uS7 13:3f0505bbe284 45
9uS7 13:3f0505bbe284 46 );
9uS7 0:4f07ba929908 47 i2c.stop();
9uS7 0:4f07ba929908 48 wait(0.5);
9uS7 0:4f07ba929908 49
9uS7 0:4f07ba929908 50 if(freq > 870){
9uS7 0:4f07ba929908 51 freqL=freqL | 0x10;
9uS7 0:4f07ba929908 52 }else{
9uS7 0:4f07ba929908 53 freqL=freqL | 0x14;
9uS7 0:4f07ba929908 54 }
9uS7 0:4f07ba929908 55 i2c.start();
9uS7 11:b8d46d371937 56 i2c.write(i2c_write);
9uS7 0:4f07ba929908 57 i2c.write(0x03);
9uS7 0:4f07ba929908 58 i2c.write(freqH);
9uS7 0:4f07ba929908 59 i2c.write(freqL);
9uS7 0:4f07ba929908 60 i2c.stop();
9uS7 0:4f07ba929908 61 wait(0.5);
9uS7 0:4f07ba929908 62
9uS7 11:b8d46d371937 63 //Transmitter mode
9uS7 0:4f07ba929908 64 i2c.start();
9uS7 11:b8d46d371937 65 i2c.write(i2c_write);
9uS7 0:4f07ba929908 66 i2c.write(0x40);
9uS7 11:b8d46d371937 67 i2c.write(0x00);
9uS7 11:b8d46d371937 68 i2c.write(0x01);
9uS7 0:4f07ba929908 69 i2c.stop();
9uS7 0:4f07ba929908 70 wait(0.5);
9uS7 11:b8d46d371937 71
9uS7 11:b8d46d371937 72 //configure each gain
9uS7 0:4f07ba929908 73 i2c.start();
9uS7 11:b8d46d371937 74 i2c.write(i2c_write);
9uS7 0:4f07ba929908 75 i2c.write(0x42);
9uS7 11:b8d46d371937 76 i2c.write(0x02); //audio gain
9uS7 11:b8d46d371937 77 i2c.write(0x0F); //antenna gain
9uS7 0:4f07ba929908 78 i2c.stop();
9uS7 0:4f07ba929908 79
9uS7 0:4f07ba929908 80 wait(0.5);
9uS7 11:b8d46d371937 81
9uS7 11:b8d46d371937 82 f_led1 = 1;
9uS7 13:3f0505bbe284 83 }
9uS7 13:3f0505bbe284 84
9uS7 13:3f0505bbe284 85 void fmStop(){
9uS7 13:3f0505bbe284 86 const int addr = 0x11; //slave address
9uS7 13:3f0505bbe284 87 const int i2c_write = (addr << 1) | I2C_WRITE;
9uS7 13:3f0505bbe284 88
9uS7 13:3f0505bbe284 89 i2c.start();
9uS7 13:3f0505bbe284 90 i2c.write(i2c_write);
9uS7 13:3f0505bbe284 91 i2c.write(0x02);
9uS7 13:3f0505bbe284 92 i2c.write(
9uS7 13:3f0505bbe284 93 1*I2C_NORMAL_OUTPUT_Z |
9uS7 13:3f0505bbe284 94 0*I2C_NO_MUTE |
9uS7 13:3f0505bbe284 95 1*I2C_MONORAL |
9uS7 13:3f0505bbe284 96 0*I2C_BASS_BOOST
9uS7 13:3f0505bbe284 97 );
9uS7 13:3f0505bbe284 98 i2c.write(//0x0D
9uS7 13:3f0505bbe284 99
9uS7 13:3f0505bbe284 100 I2C_CLK_32k |
9uS7 13:3f0505bbe284 101 1*I2C_ANTENNA_INNER |
9uS7 13:3f0505bbe284 102 0*I2C_SOFT_RESET |
9uS7 13:3f0505bbe284 103 1*I2C_POWER_UP
9uS7 13:3f0505bbe284 104
9uS7 13:3f0505bbe284 105 );
9uS7 13:3f0505bbe284 106 i2c.stop();
9uS7 13:3f0505bbe284 107 }
9uS7 13:3f0505bbe284 108
9uS7 13:3f0505bbe284 109 void fmRestart(){
9uS7 13:3f0505bbe284 110 const int addr = 0x11; //slave address
9uS7 13:3f0505bbe284 111 const int i2c_write = (addr << 1) | I2C_WRITE;
9uS7 13:3f0505bbe284 112
9uS7 13:3f0505bbe284 113 i2c.start();
9uS7 13:3f0505bbe284 114 i2c.write(i2c_write);
9uS7 13:3f0505bbe284 115 i2c.write(0x02);
9uS7 13:3f0505bbe284 116 i2c.write(
9uS7 13:3f0505bbe284 117 1*I2C_NORMAL_OUTPUT_Z |
9uS7 13:3f0505bbe284 118 1*I2C_NO_MUTE |
9uS7 13:3f0505bbe284 119 1*I2C_MONORAL |
9uS7 13:3f0505bbe284 120 0*I2C_BASS_BOOST
9uS7 13:3f0505bbe284 121 );
9uS7 13:3f0505bbe284 122 i2c.write(//0x0D
9uS7 13:3f0505bbe284 123
9uS7 13:3f0505bbe284 124 I2C_CLK_32k |
9uS7 13:3f0505bbe284 125 1*I2C_ANTENNA_INNER |
9uS7 13:3f0505bbe284 126 0*I2C_SOFT_RESET |
9uS7 13:3f0505bbe284 127 1*I2C_POWER_UP
9uS7 13:3f0505bbe284 128
9uS7 13:3f0505bbe284 129 );
9uS7 13:3f0505bbe284 130 i2c.stop();
9uS7 0:4f07ba929908 131 }