00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "ar1000.h"
00036 #include "pic_serial.h"
00037
00038 uns8 ar1000_seek_threshold;
00039
00040
00041 uns16 regs[18] = {
00042 0xffff,0x5b15,0xF4B9,0x8012,0x0400,0x28aa,0x4400,0x1ee7,
00043 0x7141,0x007d,0x82ce,0x4f55,0x970c,0xb845,0xfc2d,0x8097,
00044 0x04a1,0xdf6a};
00045
00046 void ar1000_setup_io() {
00047 i2c_setup();
00048 }
00049
00050 void ar1000_set_register(uns8 reg, uns8 data)
00051 {
00052 regs[reg] = data;
00053 }
00054
00055 uns8 ar1000_get_register(uns8 reg)
00056 {
00057 return regs[reg];
00058 }
00059
00060 void ar1000_write_registers() {
00061 uns8 count;
00062
00063 }
00064
00065
00066 void ar1000_read_registers() {
00067 }
00068
00069
00070 uns16 ar1000_read_register(uns8 reg)
00071 {
00072
00073 return i2c_read_eeprom_16bit(AR1000_DEV_ADDR, reg);
00074
00075 }
00076
00077 void ar1000_write_register(uns8 reg, uns16 data) {
00078
00079 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, reg, data);
00080
00081 }
00082
00083 void ar1000_seek(uns16 frequency, bit seek_up) {
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
00092 set_bit(r1, R1_HARD_MUTE_ENABLE);
00093
00094 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, r1);
00095
00096
00097 clear_bit(r2, R2_TUNE_ENABLE);
00098
00099
00100
00101 r2 = r2 & 0b1000000000000000;
00102
00103 r2 = r2 & ((frequency - 690) << 7);
00104
00105 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, r2);
00106
00107
00108 clear_bit(r3, R3_SEEK_ENABLE);
00109 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3);
00110
00111
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);
00118 clear_bit(r3, R3_BAND_1);
00119
00120 r3 = r3 & 0b1111111110000000 + ar1000_seek_threshold;
00121 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3);
00122
00123
00124 set_bit(r3, R3_SEEK_ENABLE);
00125 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3);
00126
00127
00128
00129
00130
00131 clear_bit(r1, R1_HARD_MUTE_ENABLE);
00132 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, r1);
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 }
00144
00145 void ar1000_tune(uns16 frequency) {
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();
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
00161
00162 set_bit(r1, R1_HARD_MUTE_ENABLE);
00163 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, r1);
00164
00165
00166
00167 clear_bit(r2, R2_TUNE_ENABLE);
00168 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, r2);
00169
00170
00171 clear_bit(r3, R3_SEEK_ENABLE);
00172 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3);
00173
00174
00175 set_bit(r3, R3_SEEK_CHANNEL_SPACING);
00176 clear_bit(r3, R3_BAND_1);
00177 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 3, r3);
00178
00179
00180
00181
00182
00183
00184 r2 = frequency - 690;
00185
00186
00187 r2 = r2 << 6;
00188
00189
00190 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, r2);
00191
00192
00193 set_bit(r2, R2_TUNE_ENABLE);
00194 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 2, r2);
00195
00196
00197
00198
00199
00200
00201
00202 clear_bit(r1, R1_HARD_MUTE_ENABLE);
00203 i2c_write_eeprom_16bit(AR1000_DEV_ADDR, 1, r1);
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216 }
00217
00218
00219 void ar1000_set_seek_threshold(uns8 new_seek_threshold)
00220 {
00221 ar1000_seek_threshold = new_seek_threshold;
00222 }
00223
00224 void ar1000_init() {
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 }
00232
00233
00234 void ar1000_seek2() {
00235
00236
00237
00238
00239 regs[2] = 0xcd80;
00240
00241 regs[3] = 0xa001;
00242 ar1000_init();
00243 regs[3] = 0xe001;
00244 ar1000_init();
00245
00246
00247
00248
00249
00250
00251
00252
00253 }
00254
00255 void ar1000_test() {
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
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 }
00272
00273 void ar1000_seek_more() {
00274
00275
00276
00277
00278
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
00286 regs[2] = channel;
00287 set_bit(regs[2], R2_TUNE_ENABLE);
00288
00289 regs[3] = 0xa005;
00290 ar1000_init();
00291 regs[3] = 0xe005;
00292 ar1000_init();
00293 }
00294
00295 rom uns8 vol_lookup[] = {
00296 0x0F,
00297 0xCF,
00298 0xDF,
00299 0xEF,
00300 0xFF,
00301 0xEE,
00302 0xFE,
00303 0xED,
00304 0xFD,
00305 0xFB,
00306 0xFA,
00307 0xF9,
00308 0xF7,
00309 0xE6,
00310 0xF6,
00311 0xE5,
00312 0xF5,
00313 0xE3,
00314 0xF3,
00315 0xF2,
00316 0xF1,
00317 0xF0};
00318
00319
00320
00321 void ar1000_set_volume(uns8 volume) {
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
00335
00336 regs[14] = (regs[14] & ~0xF000) | (vol2 << 12);
00337
00338
00339
00340
00341
00342 ar1000_init();
00343 }
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371