3 * RADIO CHIP AKC6955 Handler(Header)
4 * Copyright (C) 2013-06-10 K.Ohta <whatisthis.sowhat ai gmail.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2,
10 * or (at your option) any later version.
11 * This library / program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 * See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this library; see the file COPYING. If not, write to the
18 * Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
21 * As a special exception, if you link this(includeed from sdcc) library
22 * with other files, some of which are compiled with SDCC,
23 * to produce an executable, this library does not by itself cause
24 * the resulting executable to be covered by the GNU General Public License.
25 * This exception does not however invalidate any other reasons why
26 * the executable file might be covered by the GNU General Public License.
36 #define AKC6955_ADDRESS 0x20
39 * Register definisions.
41 #define AKC6955_POWER 0
42 #define AKC6955_BAND 1
43 #define AKC6955_CH_HI 2
44 #define AKC6955_CH_LO 3
45 #define AKC6955_UCH_ST 4
46 #define AKC6955_UCH_EN 5
47 #define AKC6955_VOLUME 6
48 #define AKC6955_STEREO 7
49 #define AKC6955_THRESH 8
50 #define AKC6955_ENABLE 9
51 #define AKC6955_FM_SEEKSTEP 10
52 #define AKC6955_SPACE 11
53 #define AKC6955_ADCEN 12
54 #define AKC6955_PRE 13
57 // Read only registers
58 #define AKC6955_RCH_HI 20
59 #define AKC6955_RCH_LO 21
60 #define AKC6955_CNR_AM 22
61 #define AKC6955_CNR_FM 23
62 #define AKC6955_PGALEVEL 24
63 #define AKC6955_VBAT 25
64 #define AKC6955_FDNUM 26
65 #define AKC6955_RSSI 27
72 AKC6955_BAND_LW = 0, // 150~285KHz, 3KHz order
73 AKC6955_BAND_MW1, // 520~1710KHz, 5KHz order
74 AKC6955_BAND_MW2, // 522~1620KHz, 9KHz order
75 AKC6955_BAND_MW3, // 520~1710KHz, 10KHz order
77 AKC6955_BAND_SW1, // 4700~10000KHz, 5KHz order
78 AKC6955_BAND_SW2, // 3200~4100KHz, 5KHz order
79 AKC6955_BAND_SW3, // 4700~5600KHz, 5KHz order
80 AKC6955_BAND_SW4, // 5700~6400KHz, 5KHz order
82 AKC6955_BAND_SW5, // 6800~7600KHz, 5KHz order
83 AKC6955_BAND_SW6, // 9200~10000KHz, 5KHz order
84 AKC6955_BAND_SW7, // 11400~12200KHz, 5KHz order
85 AKC6955_BAND_SW8, // 13500~14300KHz, 5KHz order
87 AKC6955_BAND_SW9, // 15000~15900KHz, 5KHz order
88 AKC6955_BAND_SW10, // 17400~17900KHz, 5KHz order
89 AKC6955_BAND_SW11, // 18900~19700KHz, 5KHz order
90 AKC6955_BAND_SW12, // 21400~21900KHz, 5KHz order
92 AKC6955_BAND_SW13, // 11400~17900KHz, 5KHz order
93 AKC6955_BAND_AMUSER, // User Setting
94 AKC6955_BAND_MW4, // 520~1730KHz, 5KHz order
100 AKC6955_BAND_FM1 = 0, // 87.0~108.0MHz
101 AKC6955_BAND_FM2, // 76.0~108.0MHz
102 AKC6955_BAND_FM3, // 70.0~93.0MHz
103 AKC6955_BAND_FM4, // 76.0~90.0MHz
104 AKC6955_BAND_FM5, // 64.0~88.0MHz
105 AKC6955_BAND_TV1, // 56.25~91.75MHz
106 AKC6955_BAND_TV2, // 174.75~222.25MHz
107 AKC6955_BAND_FMUSER, // User Setting
117 extern const banddesc ambands[AKC6955_BAND_AMEND];
118 extern const banddesc fmbands[AKC6955_BAND_FMEND];
120 * Resister definitions
125 unsigned power_on :1;
138 #define _AKC6955_WAIT_62_5MS() delay1ktcy(500)
140 #define _AKC6955_WAIT_12_5MS() delay1ktcy(100)
142 #define _AKC6955_WAIT_125_0MS() delay10ktcy(100)
144 #define _AKC6955_WAIT_12_5uS() delay10tcy(40)
146 #define _AKC6955_WAIT_62_5MS() __delay_ms(63)
148 #define _AKC6955_WAIT_12_5MS() __delay_ms(13)
150 #define _AKC6955_WAIT_125_0MS() idle_time_ms(125)
152 #define _AKC6955_WAIT_12_5uS() __delay_us(13)
155 #define akc6955_get_amband(b) { \
156 b = akc6955_get_band() >> 3; \
159 #define akc6955_get_fmband(b) { \
160 b = akc6955_get_band() & 0x07; \
163 extern unsigned char akc6955_getband(void);
164 extern void akc6955_writecmd(unsigned char reg, unsigned char data);
165 extern unsigned char akc6955_readcmd(unsigned char reg);
166 extern void akc6955_chg_fm(unsigned char fm, unsigned int freq);
167 extern unsigned char akc6955_get_fm(void);
168 extern unsigned char akc6955_get_band(void);
170 extern void akc6955_set_amband(unsigned char band);
171 extern void akc6955_set_fmband(unsigned char band);
174 extern void akc6955_set_power(unsigned char on);
175 extern void akc6955_do_tune(void);
176 extern unsigned char akc6955_tune(void);
178 extern void akc6955_mode3k(unsigned char flag);
179 extern void akc6955_set_tune(unsigned char mode_3k, unsigned int ch);
180 extern void akc6955_do_scan(unsigned char up);
181 extern void akc6955_abort_scan(void);
182 extern unsigned char akc6955_chk_donescan(void);
184 extern unsigned int akc6955_get_channel(void);
185 extern unsigned int akc6955_get_freq(void);
186 extern void akc6955_set_freq(unsigned int freq);
187 extern unsigned char akc6955_get_cnr(void);
188 extern void akc6955_set_userband(unsigned char start, unsigned char stop, unsigned int ch, unsigned char mode3k);
190 extern int akc6955_read_level(void);
191 extern void akc6955_up_freq(unsigned int step);
192 extern void akc6955_down_freq(unsigned int step);
193 extern int akc6955_get_diff(void);
195 extern void akc6955_setvolume(unsigned char level);
196 extern void akc6955_setvolumemode(unsigned char flag);
197 extern unsigned char akc6955_getvolumemode(void);
198 extern unsigned char akc6955_getvolume(void);
199 extern unsigned char akc6955_get_prevolume(void);
200 extern void akc6955_set_prevolume(unsigned char level);
202 extern void akc6955_setphase(unsigned char flag);
203 extern void akc6955_setline(unsigned char flag);
204 extern void akc6955_set_stereomode(unsigned char mode);
205 extern unsigned char akc6955_get_stereo(void);
206 extern void akc6955_set_scanrate_fm(unsigned char rate);
207 extern unsigned int akc6955_get_battery(void);
208 extern void akc6955_set_lowboost(unsigned char flag);
209 extern void akc6955_set_thresh_fmstereo(unsigned char a);
210 extern void akc6955_set_thresh_fmcnr(unsigned char a);
211 extern void akc6955_set_thresh_amcnr(unsigned char a);
212 extern void akc6955_set_thresh_width(unsigned char a);
214 #define akc6955_set_fmbandwidth(bw) { \
215 unsigned char c = akc6955_readcmd(AKC6955_STEREO); \
216 c = (c & 0xfc) | (bw & 0x03); \
217 akc6955_writecmd(AKC6955_STEREO, c); \
220 #define akc6955_get_fmbandwidth(c) { \
221 c = akc6955_readcmd(AKC6955_STEREO) & 0x03; \
230 #endif /* AKC6955_H */