📄 fmd1216.h
字号:
//fmd1216 driver
#define fmd1216_rf 0xc2 // RF device address of FMD1216ME
#define fmd1216_if 0x86 // IF device address of FMD1216ME for Analog TV and FM radio
#define ATV_IF 3890 // 38.9MHZ, IF of Analog TV
#define FM_IF 1070 // 10.70MHZ, IF of FM Radio
#define DVBT_IF 3613 // 36.13MHZ,if OF DVBT IF
#define MIN_IPF 4800 // 48 MHZ
#define MAX_IPF 86400 // 864 MHZ
#define TV_MODE 0
#define FM_MODE 1
#define DVBT_MODE 2
unsigned char pdivider_lo;
unsigned char pdivider_hi;
unsigned long in_freq = 18425;
unsigned long lo_freq;
unsigned char fine_value = 20;
void wr_fmd1216_rfdvbt(unsigned char bBW)
{
lo_freq = in_freq + DVBT_IF;
lo_freq = lo_freq + fine_value*5 - 100;
lo_freq = lo_freq*100/1667;
pdivider_lo = lo_freq&0xff;
pdivider_hi = ((lo_freq>>8)&0xff);
i2c_write(fmd1216_rf,pdivider_hi,pdivider_lo);
if(bBW==8)
bBW = 0x10;
//low band
if(in_freq < 14400)
{
i2c_data = 0x01|bBW;
i2c_write(fmd1216_rf,0xbc,i2c_data);
}
else if(in_freq < 16000)
{
i2c_data = 0x01|bBW;
i2c_write(fmd1216_rf,0xf4,i2c_data);
}
//mid band
else if(in_freq < 33000)
{
i2c_data = 0x02|bBW;
i2c_write(fmd1216_rf,0xbc,i2c_data);
}
else if(in_freq < 44200)
{
i2c_data = 0x02|bBW;
i2c_write(fmd1216_rf,0xf4,i2c_data);
}
// high band
else if(in_freq < 62600)
{
i2c_data = 0x04|bBW;
i2c_write(fmd1216_rf,0xbc,i2c_data);
}
else if(in_freq < 80400)
{
i2c_data = 0x04|bBW;
i2c_write(fmd1216_rf,0xf4,i2c_data);
}
else
{
i2c_data = 0x04|bBW;
i2c_write(fmd1216_rf,0xfc,i2c_data);
}
i2c_write_without_subaddr(fmd1216_rf,0xa0);
}
void wr_fmd1216_rf(void)
{
lo_freq = in_freq + ATV_IF;
lo_freq = lo_freq + fine_value*5 - 100;
lo_freq = lo_freq*16/100;
pdivider_lo = lo_freq&0xff;
pdivider_hi = ((lo_freq>>8)&0xff);
i2c_write(fmd1216_rf,pdivider_hi,pdivider_lo);
if(in_freq < 16000)
{
i2c_write(fmd1216_rf,0x86,0x11);
}
else if(in_freq < 44200)
{
i2c_write(fmd1216_rf,0x86,0x12);
}
else
{
i2c_write(fmd1216_rf,0x86,0x14);
}
i2c_write_without_subaddr(fmd1216_rf,0x60);
}
void wr_fmd1216rf_150mhz(void)
{
lo_freq = 15000 + ATV_IF;
lo_freq = lo_freq + fine_value*5 - 100;
lo_freq = lo_freq*16/100;
pdivider_lo = lo_freq&0xff;
pdivider_hi = ((lo_freq>>8)&0xff);
i2c_write(fmd1216_rf,pdivider_hi,pdivider_lo);
i2c_write(fmd1216_rf,0x86,0x11);
}
void wr_fmd1216rf_fm(void)
{
lo_freq = in_freq + FM_IF;
lo_freq = lo_freq + fine_value*5 - 100;
lo_freq = lo_freq*20/100;
pdivider_lo = lo_freq&0xff;
pdivider_hi = ((lo_freq>>8)&0xff);
i2c_write(fmd1216_rf,pdivider_hi,pdivider_lo);
i2c_write(fmd1216_rf,0x80,0x19);
i2c_write_without_subaddr(fmd1216_rf,0x40);
}
void wr_fmd1216_if_bg(void)
{
i2c_write(fmd1216_if,0x00,0x16);
i2c_write(fmd1216_if,0x01,0x70);
i2c_write(fmd1216_if,0x02,0x49);
}
void wr_fmd1216_if_i(void)
{
i2c_write(fmd1216_if,0x00,0x16);
i2c_write(fmd1216_if,0x01,0x70);
i2c_write(fmd1216_if,0x02,0x4a);
}
void wr_fmd1216_if_dk(void)
{
i2c_write(fmd1216_if,0x00,0x16);
i2c_write(fmd1216_if,0x01,0x70);
i2c_write(fmd1216_if,0x02,0x4b);
}
void wr_fmd1216_if_l(void)
{
i2c_write(fmd1216_if,0x00,0x06);
i2c_write(fmd1216_if,0x01,0x4e);
i2c_write(fmd1216_if,0x02,0x4b);
}
void wr_fmd1216_if_lp(void)
{
i2c_write(fmd1216_if,0x00,0x86);
i2c_write(fmd1216_if,0x01,0x4e);
i2c_write(fmd1216_if,0x02,0x53);
}
void wr_fmd1216if_fm(void)
{
i2c_write(fmd1216_if,0x00,0x0e);
i2c_write(fmd1216_if,0x01,0xd0);
i2c_write(fmd1216_if,0x02,0x77);
}
void rd_fmd1216_if(void)
{
i2c_data = 0xff;
i2c_read_without_subaddr(fmd1216_if);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -