FM-test
Dependencies: MODSERIAL mbed-rtos mbed
Fork of Master by
fm.cpp@13:3f0505bbe284, 2014-09-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |