Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
KT0915.cpp
00001 #include "mbed.h" 00002 #include "KT0915.h" 00003 00004 KT0915::KT0915(PinName sda,PinName scl): 00005 _KT0915(sda,scl) 00006 { 00007 _KT0915.frequency(100000); 00008 } 00009 00010 void KT0915::init(void) 00011 { 00012 write_reg(0x02, 0b00000000, 0b00000111);//FM space:100KHz, R/L mute:disable 00013 write_reg(0x04, 0b11100000, 0b10010000);//FM/AM/device mute:disable, bass:disable DAC cap:60uF 00014 write_reg(0x05, 0b10011000, 0b00100000);//Mono:enable, de-emphasis:50uF, blend:disable 00015 write_reg(0x0A, 0b00000100, 0b00000000);//LDO:highest, FM AFC:enable 00016 write_reg(0x0C, 0b00000000, 0b00101100);//FM wide freq:enable 00017 write_reg(0x0F, 0b10001000, 0b00000000);//Stanby:disable, volume:0 00018 read_reg(0x16,&data1,&data2); 00019 write_reg(0x16,data1&0b000111111, 0b11000010);//mode:FM, use internal defined band, audio gain:0dB, AM AFC:enable 00020 write_reg(0x22, 0b10100010, 0b11101100);//AM AGC fast win:fastest, AM AGC short win:slowest 00021 //AM bandwidth:6KHz, AM gain:12dB, Left Inverse Control:enable 00022 read_reg(0x23, &data1, &data2); 00023 write_reg(0x23, (data1 | 0b00011100), data2);//low th:B 00024 write_reg(0x2E, 0b00101000, 0b10001100);//softmute:fast, AM softmute start level:0b100 00025 //softmute target volume:0b0100, softmute mode:RSSI, FM softmute start threshold:0b100 00026 write_reg(0x33, 0b01010100, 0b00000001);//AM space:9KHz 00027 read_reg(0x3F, &data1, &data2); 00028 write_reg(0x3F, data1, ((data2 & 0b10001000) | 0b00010011));//RF AGC patch 00029 } 00030 00031 int KT0915::getID(void) 00032 { 00033 read_reg(0x01,&data1,&data2); 00034 return (data1<<8)+data2; 00035 } 00036 00037 void KT0915::set_xtal(int xtal) 00038 { 00039 read_reg(0x16,&data1,&data2); 00040 if(xtal==32) { 00041 write_reg(0x16,data1&0b11100000,data2); 00042 } else if(xtal==38) { 00043 write_reg(0x16,(data1&0b11100000)|0b00001001,data2); 00044 } else if(xtal==12000) { 00045 write_reg(0x16,(data1&0b11100000)|0b00010011,data2); 00046 } else if(xtal==24000) { 00047 write_reg(0x16,(data1&0b11100000)|0b00010111,data2); 00048 } 00049 } 00050 00051 void KT0915::set_space(bool mode,int space) 00052 { 00053 if(mode==0) { 00054 read_reg(0x33,&data1,&data2); 00055 read_reg(0x22,&data1,&data2); 00056 if(space==1) { 00057 write_reg(0x33,data1&0b00111111,data2); 00058 write_reg(0x22,data1,data2&0b00111111); 00059 } else if(space==9) { 00060 write_reg(0x33,(data1&0b00111111)|0b01000000,data2); 00061 write_reg(0x22,data1,data2|0b11000000); 00062 } else if(space==10) { 00063 write_reg(0x33,data1|0b11000000,data2); 00064 write_reg(0x22,data1,data2|0b11000000); 00065 } 00066 } else { 00067 read_reg(0x02,&data1,&data2); 00068 if(space==50) { 00069 write_reg(0x02,data1,(data2&0b11110011)|0b00001000); 00070 } else if(space==100) { 00071 write_reg(0x02,data1,(data2&0b11110011)|0b00000100); 00072 } else if(space==200) { 00073 write_reg(0x02,data1,data2&0b11110011); 00074 } 00075 } 00076 } 00077 00078 void KT0915::set_vol(int vol) 00079 { 00080 read_reg(0x0F, &data1, &data2); 00081 if ((data2 & 0b00011111) != vol) { 00082 write_reg(0x0F, data1, (data2 >> 5) * 0b100000 + vol); 00083 } 00084 } 00085 00086 void KT0915::set_freq(bool mode,int freq) 00087 { 00088 int f_upper, f_lower, freq2; 00089 read_reg(0x16,&data1,&data2); 00090 if (mode == 0) { 00091 write_reg(0x16, data1|0b10000000,data2); 00092 f_upper = (freq >> 8 | 0b10000000); 00093 f_lower = freq & 0b11111111; 00094 write_reg(0x17, f_upper, f_lower); 00095 } 00096 if (mode == 1) { 00097 write_reg(0x16, data1&0b01111111,data2); 00098 freq2 = freq / 5; 00099 f_upper = (freq2 >> 8 | 0b10000000); 00100 f_lower = freq2 & 0b11111111; 00101 write_reg(0x03, f_upper, f_lower); 00102 } 00103 } 00104 00105 int KT0915::get_rssi(bool mode) 00106 { 00107 int rssi; 00108 if (mode == 0) { 00109 read_reg(0x24, &data1, &data2); 00110 rssi = -90 + ( data1 & 0b00011111) * 3; 00111 } 00112 if (mode == 1) { 00113 read_reg(0x12, &data1, &data2); 00114 rssi = -100 + (data2 >> 3) * 3; 00115 } 00116 return rssi; 00117 } 00118 00119 int KT0915::get_snr(bool mode) 00120 { 00121 int snr; 00122 if (mode == 1) { 00123 read_reg(0x14, &data1, &data2); 00124 snr = (data1 & 0b00011111) * 0b100 + (data2 >> 6); 00125 } 00126 return snr; 00127 } 00128 00129 bool KT0915::get_ready(void) 00130 { 00131 read_reg(0x14,&data1,&data2); 00132 return (data1&0b00100000)>>5; 00133 } 00134 00135 void KT0915::cali(void) //re_cali 00136 { 00137 write_reg(0x10,0b01100000,0b00000000); 00138 } 00139 00140 00141 void KT0915::write_reg(int memory_address,int byte1,int byte2) 00142 { 00143 char cmd[3]= {memory_address,byte1,byte2}; 00144 _KT0915.write(KT0915_address,cmd,3); 00145 } 00146 00147 void KT0915::read_reg(int memory_address,int *byte1,int *byte2) 00148 { 00149 char cmd[2]; 00150 cmd[0]=memory_address; 00151 _KT0915.write(KT0915_address,cmd,1,true); 00152 _KT0915.read(KT0915_address|1,cmd,2); 00153 *byte1=cmd[0]; 00154 *byte2=cmd[1]; 00155 }
Generated on Thu Jul 14 2022 08:00:47 by
1.7.2