FM-test

Dependencies:   MODSERIAL mbed-rtos mbed

Fork of Master by Ohnishi_Gundan

fm.cpp

Committer:
9uS7
Date:
2014-09-13
Revision:
8:bfcfda6b38fe
Parent:
2:c610e1a7fbcd
Child:
11:b8d46d371937

File content as of revision 8:bfcfda6b38fe:

#include "mbed.h"
#include "fm.h"


I2C i2c(p9,p10);    // SDA,SCI

DigitalOut f_led1(LED1);

void fmSetup(unsigned int _f)
{
    char freqH = 0, freqL = 0;//, c, i;
    unsigned int frequencyB, freq, freqB;
    const int addr = 0x11 << 1;
        
    freq = _f;         //freq/10.MHz   760~910
    if(freq > 870){
        freqB = freq - 870;
        freqH = freqB>>2;
        freqL = (freqB&3)<<6;                  // Shift channel selection for matching register 0x03
    }else{
        freqB = freq-760;
        freqH = freqB>>2;
        freqL = (freqB&3)<<6;
    }
   
    i2c.start();
    i2c.write(addr);
    i2c.write(0x02);
    i2c.write(0xF0);
    i2c.write(0x03);
    i2c.stop();
    wait(0.5);                        // wait 500ms
   
    i2c.start();
    i2c.write(addr);
    i2c.write(0x02);
    i2c.write(0xF0);
    i2c.write(0x0D);
    i2c.stop();
    wait(0.5);   
   
    if(freq > 870){
        freqL=freqL | 0x10;
    }else{ 
        freqL=freqL | 0x14;
    }
    i2c.start();
    i2c.write(addr);
    i2c.write(0x03);
    i2c.write(freqH);
    i2c.write(freqL);
    i2c.stop();
    wait(0.5);
   
    char temp0 = 0x00;
    char temp1 = 0x00;
    i2c.read(addr,&temp0,1);
    i2c.read(addr,&temp1,1);
    temp0 &= 0xff;
    temp1 &= 0xf0;
    temp0 |= 0x00;
    temp1 |= 0x01;
    i2c.start();
    i2c.write(addr);
    i2c.write(0x40);
    i2c.write(temp0);
    i2c.write(temp1);
    i2c.stop();
    wait(0.5);
 
    i2c.start();
    i2c.write(addr);
    i2c.write(0x42);
    i2c.write(0x00);    // Vin PtP set max:111b(0.009V) min000b(1.2V) 
    i2c.write(0x07);    // FMout Antena Gain max:111111b(0x3F) min:000000b
    i2c.stop();
   
    wait(0.5);
}