Functions | |
uns8 | ar1000_get_register (uns8 reg) |
void | ar1000_init () |
uns16 | ar1000_read_register (uns8 reg) |
void | ar1000_read_registers () |
void | ar1000_seek (uns16 frequency, bit seek_up) |
void | ar1000_seek2 () |
void | ar1000_seek_more () |
void | ar1000_set_register (uns8 reg, uns8 data) |
void | ar1000_set_seek_threshold (uns8 new_seek_threshold) |
void | ar1000_set_volume (uns8 volume) |
void | ar1000_setup_io () |
Setup AR1000 ports and pins. | |
void | ar1000_test () |
void | ar1000_tune (uns16 frequency) |
void | ar1000_write_register (uns8 reg, uns16 data) |
void | ar1000_write_registers () |
Variables | |
uns8 | ar1000_seek_threshold |
uns16 | regs [18] |
rom uns8 | vol_lookup [] |
uns8 ar1000_get_register | ( | uns8 | reg | ) |
00056 { 00057 return regs[reg]; 00058 }
void ar1000_init | ( | ) |
00224 { 00225 ar1000_seek_threshold = 0; 00226 for (uns8 count = 1; count < 18; count ++) { 00227 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, count, regs[count]); 00228 } 00229 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 0, regs[0]); 00230 00231 }
uns16 ar1000_read_register | ( | uns8 | reg | ) |
00071 { 00072 00073 return i2c_read_eeprom_16bit(AR1000_DEV_ADDR, reg); 00074 00075 }
void ar1000_seek | ( | uns16 | frequency, | |
bit | seek_up | |||
) |
00083 { 00084 00085 uns16 r1, r2, r3; 00086 00087 r1 = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, 1); 00088 r2 = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, 2); 00089 r3 = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, 3); 00090 00091 // Set hmute bit 00092 set_bit(r1, R1_HARD_MUTE_ENABLE); 00093 00094 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, r1); 00095 00096 // clear tune bit 00097 clear_bit(r2, R2_TUNE_ENABLE); 00098 00099 // set chan bits r2 to 87.5Mhz 00100 // Means setting the bits to 185 00101 r2 = r2 & 0b1000000000000000; // Mask out tune bits 00102 //r2 = r2 + (frequency - 690); // eg 875 - 690 = 185 for 87.5Mhz 00103 r2 = r2 & ((frequency - 690) << 7); // eg 875 - 690 = 185 for 87.5Mhz 00104 00105 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, r2); 00106 00107 // clear seek bit 00108 clear_bit(r3, R3_SEEK_ENABLE); 00109 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3); 00110 00111 // Set SEEK UP/DOWN / SPACE / BAND / SEEKTH 00112 if (seek_up) { 00113 set_bit(r3, R3_SEEK_UP); 00114 } else { 00115 clear_bit(r3, R3_SEEK_UP); 00116 } 00117 set_bit(r3, R3_SEEK_CHANNEL_SPACING); // 100k spacing 00118 clear_bit(r3, R3_BAND_1); // US / EUROPE 00119 00120 r3 = r3 & 0b1111111110000000 + ar1000_seek_threshold; 00121 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3); 00122 00123 // Enable SEEK Bit 00124 set_bit(r3, R3_SEEK_ENABLE); 00125 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3); 00126 00127 // Wait STC flag (Seek/Tune Complete, in “Status” register) 00128 // Not done yet! not sure which register it is... 00129 00130 // Clear hmute Bit 00131 clear_bit(r1, R1_HARD_MUTE_ENABLE); 00132 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, r1); 00133 // register_values[02] = 0xB480; //set tune to 900kHz 00134 // register_values[03] = 0xA001; //turn off seek, seek up, set threshold to 1 00135 00136 // ar1000calibration(register_values); 00137 00138 // register_values[03] = 0xE001; //turns on seek 00139 00140 // ar1000calibration(register_values); 00141 00142 00143 }
void ar1000_seek2 | ( | ) |
00234 { 00235 // i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, 0xb480); 00236 // i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, 0xa001); 00237 // i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, 0xe001); 00238 //0xF4B9 00239 regs[2] = 0xcd80; //0xB480;// 0xf4b9; //0b1111111000000000; 00240 //ar1000_init(); 00241 regs[3] = 0xa001; 00242 ar1000_init(); 00243 regs[3] = 0xe001; 00244 ar1000_init(); 00245 // register_values[02] = 0xB480; //set tune to 900kHz 00246 // register_values[03] = 0xA001; //turn off seek, seek up, set threshold to 1 00247 00248 // ar1000calibration(register_values); 00249 00250 // register_values[03] = 0xE001; //turns on seek 00251 00252 // ar1000calibration(register_values); 00253 }
void ar1000_seek_more | ( | ) |
00273 { 00274 // i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, 0xb480); 00275 // i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, 0xa001); 00276 // i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, 0xe001); 00277 //0xF4B9 00278 // regs[2] = 0; //0xB480;// 0xf4b9; //0b1111111000000000; 00279 set_bit(regs[2], R2_TUNE_ENABLE); 00280 uns16 channel = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, AR1000_STATUS); 00281 channel = channel >> 7; 00282 serial_print_str(" fr="); 00283 serial_print_int(channel+690); 00284 serial_print_nl(); 00285 //channel = channel << 6; 00286 regs[2] = channel; 00287 set_bit(regs[2], R2_TUNE_ENABLE); 00288 //ar1000_init(); 00289 regs[3] = 0xa005; 00290 ar1000_init(); 00291 regs[3] = 0xe005; 00292 ar1000_init(); 00293 }
void ar1000_set_register | ( | uns8 | reg, | |
uns8 | data | |||
) |
00051 { 00052 regs[reg] = data; 00053 }
void ar1000_set_seek_threshold | ( | uns8 | new_seek_threshold | ) |
00220 { 00221 ar1000_seek_threshold = new_seek_threshold; 00222 }
void ar1000_set_volume | ( | uns8 | volume | ) |
00321 { 00322 00323 uns16 reg, temp; 00324 uns8 vol; 00325 uns16 vol1, vol2; 00326 00327 if (volume > 21) { return; } 00328 vol = vol_lookup[volume]; 00329 vol2 = vol >> 4; 00330 vol1 = vol & 0x0f; 00331 00332 00333 regs[3] = (regs[3] & ~0x0780) | (vol1 << 7); 00334 //write(3, register_values[3]); 00335 00336 regs[14] = (regs[14] & ~0xF000) | (vol2 << 12); 00337 //write(14, register_values[14]); 00338 00339 //serial_print_str(" AR3="); 00340 //serial_print_int_hex_16bit(reg); 00341 //regs[3] = reg; 00342 ar1000_init(); 00343 }
void ar1000_setup_io | ( | ) |
00046 { 00047 i2c_setup(); 00048 }
void ar1000_test | ( | ) |
00255 { 00256 /* serial_print_str("Read 01 = "); 00257 uns16 r1 = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, 1); 00258 serial_print_int_hex_16bit(r1); 00259 serial_print_nl(); 00260 serial_print_str("Write "); 00261 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, 0xabcd); 00262 serial_print_str("Read 01 = "); 00263 r1 = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, 1); 00264 serial_print_int_hex_16bit(r1); 00265 serial_print_nl(); 00266 */ 00267 uns16 r1 = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, 1); 00268 toggle_bit(r1, R1_HARD_MUTE_ENABLE); 00269 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, r1); 00270 00271 }
void ar1000_tune | ( | uns16 | frequency | ) |
00145 { 00146 00147 uns16 r1, r2, r3; 00148 set_bit(regs[3], R3_SEEK_CHANNEL_SPACING); 00149 regs[2] = 0b0000000100111111; 00150 ar1000_init(); 00151 regs[2] = 0b0000001100111111; 00152 00153 ar1000_init(); //a7e0 00154 return; 00155 r1 = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, 1); 00156 r2 = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, 2); 00157 serial_print_str("r2o="); 00158 serial_print_int_hex(r2); 00159 r3 = i2c_read_eeprom_16bit(AR1000_DEV_ADDR, 3); 00160 //1 100111111 000000 00161 // Set hmute bit 00162 set_bit(r1, R1_HARD_MUTE_ENABLE); 00163 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, r1); 00164 00165 00166 // clear tune bit 00167 clear_bit(r2, R2_TUNE_ENABLE); 00168 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, r2); 00169 00170 // clear seek bit 00171 clear_bit(r3, R3_SEEK_ENABLE); 00172 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3); 00173 00174 // Set SPACE / BAND / CHAN 00175 set_bit(r3, R3_SEEK_CHANNEL_SPACING); // 100k spacing 00176 clear_bit(r3, R3_BAND_1); // US / EUROPE 00177 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3); 00178 00179 // set chan bits r2 to 87.5Mhz 00180 // Means setting the bits to 185 00181 //serial_print_str("f="); 00182 //serial_print_int(frequency); 00183 //serial_print_nl(); 00184 r2 = frequency - 690; 00185 //serial_print_str(" f-690="); 00186 //serial_print_int(r2); 00187 r2 = r2 << 6; 00188 //serial_print_str("tuning to="); 00189 //serial_print_int_hex_16bit(r2); 00190 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, r2); 00191 // 100111100 0000000 00192 // Enable TUNE Bit 00193 set_bit(r2, R2_TUNE_ENABLE); 00194 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, r2); 00195 //1 001111000 00000 00196 //serial_print_str(" r2en="); 00197 //serial_print_int_hex_16bit(r2); 00198 00199 // Wait STC flag (Seek/Tune Complete, in “Status” register) 00200 // Not done yet! not sure which register it is... 00201 // Clear hmute Bit 00202 clear_bit(r1, R1_HARD_MUTE_ENABLE); 00203 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, r1); 00204 // register_values[02] = 0xB480; //set tune to 900kHz 00205 // register_values[03] = 0xA001; //turn off seek, seek up, set threshold to 1 00206 00207 // ar1000calibration(register_values); 00208 00209 // register_values[03] = 0xE001; //turns on seek 00210 00211 // ar1000calibration(register_values); 00212 00213 00214 00215 00216 }
void ar1000_write_register | ( | uns8 | reg, | |
uns16 | data | |||
) |
00077 { 00078 00079 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, reg, data); 00080 00081 }
void ar1000_write_registers | ( | ) |
00060 { 00061 uns8 count; 00062 00063 }
uns16 regs[18] |
{ 0xffff,0x5b15,0xF4B9,0x8012,0x0400,0x28aa,0x4400,0x1ee7, 0x7141,0x007d,0x82ce,0x4f55,0x970c,0xb845,0xfc2d,0x8097, 0x04a1,0xdf6a}
rom uns8 vol_lookup[] |
{ 0x0F, 0xCF, 0xDF, 0xEF, 0xFF, 0xEE, 0xFE, 0xED, 0xFD, 0xFB, 0xFA, 0xF9, 0xF7, 0xE6, 0xF6, 0xE5, 0xF5, 0xE3, 0xF3, 0xF2, 0xF1, 0xF0}