Go to the documentation of this file.
38 #include "mikrosdk_version.h"
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_i2c_master.h"
62 #define FM_MAP_MIKROBUS( cfg, mikrobus ) \
63 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
64 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
65 cfg.gp2 = MIKROBUS( mikrobus, MIKROBUS_AN ); \
66 cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
67 cfg.sen = MIKROBUS( mikrobus, MIKROBUS_CS ); \
68 cfg.gp1 = MIKROBUS( mikrobus, MIKROBUS_INT )
75 #define FM_RETVAL uint8_t
78 #define FM_INIT_ERROR 0xFF
85 #define DEFAULT_SLAVE_ADDRESS 0x10
92 #define FM_DEVICE_ID 0x000E
93 #define FM_CHIP_ID 0x000F
94 #define FM_POWER_CONFIGURATION 0x0000
95 #define FM_CHANNEL 0x0001
96 #define FM_SYSTEM_CONFIGURATION_1 0x0002
97 #define FM_SYSTEM_CONFIGURATION_2 0x0003
98 #define FM_SYSTEM_CONFIGURATION_3 0x0004
99 #define FM_TEST_1 0x0005
100 #define FM_TEST_2 0x0006
101 #define FM_BOOT_CONFIGURATION 0x0007
102 #define FM_STATUS_RSSI 0x0008
103 #define FM_READ_CHANNEL 0x0009
104 #define FM_RDS_A 0x000A
105 #define FM_RDS_B 0x000B
106 #define FM_RDS_C 0x000C
107 #define FM_RDS_D 0x000D
114 #define FM_SOFTMUTE_MASK 0x7FFF
115 #define FM_SOFTMUTE_ENABLE 0x0000
116 #define FM_SOFTMUTE_DISABLE 0x8000
118 #define FM_MUTE_MASK 0xBFFF
119 #define FM_MUTE_ENABLE 0x0000
120 #define FM_MUTE_DISABLE 0x4000
122 #define FM_STEREO_MASK 0xDFFF
123 #define FM_STEREO 0x0000
124 #define FM_FORCE_MONO 0x2000
126 #define FM_RDS_MODE_MASK 0xF7FF
127 #define FM_RDS_MODE_STANDARD 0x0000
128 #define FM_RDS_MODE_VERBOSE 0x0800
130 #define FM_SEEK_MODE_MASK 0xFBFF
131 #define FM_SEEK_MODE_WRAP 0x0000
132 #define FM_SEEK_MODE_STOP 0x0400
134 #define FM_SEEK_DIRECTION_MASK 0xFDFF
135 #define FM_SEEK_DIRECTION_DOWN 0x0000
136 #define FM_SEEK_DIRECTION_UP 0x0200
138 #define FM_SEEK_MASK 0xFEFF
139 #define FM_SEEK_DISABLE 0x0000
140 #define FM_SEEK_ENABLE 0x0100
142 #define FM_POWERUP_DISABLE_MASK 0xFFBF
143 #define FM_POWERUP_DISABLE_LOW 0x0000
144 #define FM_POWERUP_DISABLE_HIGH 0x0040
146 #define FM_POWERUP_ENABLE_MASK 0xFFFE
147 #define FM_POWERUP_ENABLE_LOW 0x0000
148 #define FM_POWERUP_ENABLE_HIGH 0x0001
155 #define FM_TUNE_MASK 0x7FFF
156 #define FM_TUNE_DISABLE 0x0000
157 #define FM_TUNE_ENABLE 0x8000
164 #define FM_RDS_INTERRUPT_MASK 0x7FFF
165 #define FM_RDS_INTERRUPT_DISABLE 0x0000
166 #define FM_RDS_INTERRUPT_ENABLE 0x8000
168 #define FM_SEEK_TUNE_COMPLETE_INTERRUPT_MASK 0xBFFF
169 #define FM_SEEK_TUNE_COMPLETE_INTERRUPT_DISABLE 0x0000
170 #define FM_SEEK_TUNE_COMPLETE_INTERRUPT_ENABLE 0x4000
172 #define FM_RDS_MASK 0xEFFF
173 #define FM_RDS_DISABLE 0x0000
174 #define FM_RDS_ENABLE 0x1000
176 #define FM_DE_EMPHASIS_MASK 0xF7FF
177 #define FM_DE_EMPHASIS_USA 0x0000
178 #define FM_DE_EMPHASIS_EUROPE_AUSTRALIA_JAPAN 0x0800
180 #define FM_AGC_MASK 0xFBFF
181 #define FM_AGC_ENABLE 0x0000
182 #define FM_AGC_DISABLE 0x0400
184 #define FM_STEREO_MONO_BLEND_LEVEL_MASK 0xFF3F
185 #define FM_STEREO_MONO_BLEND_LEVEL_31_49_RSSI 0x0000
186 #define FM_STEREO_MONO_BLEND_LEVEL_37_55_RSSI 0x0040
187 #define FM_STEREO_MONO_BLEND_LEVEL_19_37_RSSI 0x0080
188 #define FM_STEREO_MONO_BLEND_LEVEL_25_43_RSSI 0x00C0
190 #define FM_GPIO3_MASK 0xFFCF
191 #define FM_GPIO3_HIGH_IMPENDANCE 0x0000
192 #define FM_GPIO3_MONO_STEREO_INDICATOR 0x0001
193 #define FM_GPIO3_LOW 0x0002
194 #define FM_GPIO3_HIGH 0x0003
196 #define FM_GPIO2_MASK 0xFFF3
197 #define FM_GPIO2_HIGH_IMPEDANCE 0x0000
198 #define FM_GPIO2_STC_RDS_INTERRUPT 0x0004
199 #define FM_GPIO2_LOW 0x0008
200 #define FM_GPIO2_HIGH 0x000C
202 #define FM_GPIO1_MASK 0xFFFC
203 #define FM_GPIO1_HIGH_IMPEDANCE 0x0000
204 #define FM_GPIO1_RESERVED 0x0001
205 #define FM_GPIO1_LOW 0x0002
206 #define FM_GPIO1_HIGH 0x0003
213 #define FM_BAND_MASK 0xFF3F
214 #define FM_BAND_USA_EUROPE_87P5_108_MHZ 0x0000
215 #define FM_BAND_JAPAN_WIDE_76_108_MHZ 0x0040
216 #define FM_BAND_JAPAN_76_90_MHZ 0x0080
217 #define FM_BAND_RESERVED 0x00C0
219 #define FM_CHANNEL_SPACING_MASK 0xFFCF
220 #define FM_CHANNEL_SPACING_USA_AUSTRALIA_200_KHZ 0x0000
221 #define FM_CHANNEL_SPACING_EUROPE_JAPAN_100_KHZ 0x0010
222 #define FM_CHANNEL_SPACING_50_KHZ 0x0020
229 #define FM_SOFTMUTE_ATTACK_RECOVER_RATE_MASK 0x3FFF
230 #define FM_SOFTMUTE_ATTACK_RECOVER_RATE_FASTEST 0x0000
231 #define FM_SOFTMUTE_ATTACK_RECOVER_RATE_FAST 0x4000
232 #define FM_SOFTMUTE_ATTACK_RECOVER_RATE_SLOW 0x8000
233 #define FM_SOFTMUTE_ATTACK_RECOVER_RATE_SLOWEST 0xC000
235 #define FM_SOFTMUTE_ATTENUATION_MASK 0xCFFF
236 #define FM_SOFTMUTE_ATTENUATION_16_DB 0x0000
237 #define FM_SOFTMUTE_ATTENUATION_14_DB 0x1000
238 #define FM_SOFTMUTE_ATTENUATION_12_DB 0x2000
239 #define FM_SOFTMUTE_ATTENUATION_10_DB 0x3000
241 #define FM_EXTENDED_VOLUME_RANGE_MASK 0xFEFF
242 #define FM_EXTENDED_VOLUME_RANGE_DISABLED 0x0000
243 #define FM_EXTENDED_VOLUME_RANGE_ENABLED 0x0100
250 #define FM_CRYSTAL_OSCYLATOR_MASK 0x7FFF
251 #define FM_CRYSTAL_OSCYLATOR_DISABLE 0x0000
252 #define FM_CRYSTAL_OSCYLATOR_ENABLE 0x8000
254 #define FM_AUDIO_HIGH_Z_MASK 0xBFFF
255 #define FM_AUDIO_HIGH_Z_DISABLE 0x0000
256 #define FM_AUDIO_HIGH_Z_ENABLE 0x4000
263 #define FM_RDS_READY_MASK 0x8000
264 #define FM_SEEK_TUNE_COMPLETE_MASK 0x4000
265 #define FM_SEEK_FAIL_BAND_LIMIT_MASK 0x2000
266 #define FM_AFC_RAIL_MASK 0x1000
267 #define FM_RDS_SYNCHRONIZED_MASK 0x0800
268 #define FM_STEREO_MONO_INDICATOR_MASK 0x0100
405 void fm_set_bits ( uint16_t *register_buffer, uint16_t register_address, uint16_t bits_mask, uint16_t bits_value );
uint8_t fm_set_volume(fm_t *ctx, uint8_t volume_level)
Setting volume value.
pin_name_t gp2
Definition: fm.h:315
void fm_power_up(fm_t *ctx)
Powering up device.
uint8_t fm_set_seek_threshold(fm_t *ctx, uint16_t seek_threshold)
Setting seek threshold value.
pin_name_t sda
Definition: fm.h:311
uint8_t fm_fine_tune_up(fm_t *ctx)
Fine tunning.
uint32_t i2c_speed
Definition: fm.h:322
void fm_basic_settings(fm_t *ctx)
Setting basic settings.
digital_out_t rst
Definition: fm.h:285
void fm_mute_disable(fm_t *ctx)
Disable mute.
void fm_end_tune(fm_t *ctx)
End tunning.
digital_in_t gp2
Definition: fm.h:290
uint8_t fm_get_errors_block_d(fm_t *ctx)
Reading number of errors to be corrected.
void fm_seek(fm_t *ctx)
Start seeking radio station.
uint8_t fm_tune(fm_t *ctx, float channel_frequency)
Tunning radio station.
uint8_t i2c_address
Definition: fm.h:323
Click configuration structure definition.
Definition: fm.h:307
uint8_t fm_get_errors_block_b(fm_t *ctx)
Reading number of errors to be corrected.
FM_RETVAL fm_init(fm_t *ctx, fm_cfg_t *cfg)
Initialization function.
void fm_cfg_setup(fm_cfg_t *cfg)
Config Object Initialization function.
uint16_t fm_get_channel(fm_t *ctx)
Reading CHANNEL bits.
pin_name_t sen
Definition: fm.h:317
uint8_t fm_set_seek_impulse_detection_threshold(fm_t *ctx, uint8_t impulse_detection_threshold)
Setting seek impulse detection threshold value.
float fm_get_channel_frequency(fm_t *ctx)
Calculating current channel frequency.
i2c_master_t i2c
Definition: fm.h:295
void fm_end_seek(fm_t *ctx)
End seeking.
pin_name_t gp1
Definition: fm.h:318
#define FM_RETVAL
Definition: fm.h:75
uint8_t fm_get_int_pin(fm_t *ctx)
Checking INT pin status.
void fm_set_bits(uint16_t *register_buffer, uint16_t register_address, uint16_t bits_mask, uint16_t bits_value)
Setting bits in specific register on a specific bit location.
uint8_t fm_volume_down(fm_t *ctx)
Decreasing volume level.
uint8_t fm_get_received_signal_strength_indicator(fm_t *ctx)
Reading recived strength indicator.
uint8_t fm_fine_tune_down(fm_t *ctx)
Fine tunning.
digital_out_t sen
Definition: fm.h:286
void fm_mute_enable(fm_t *ctx)
Enable mute.
uint8_t fm_get_errors_block_a(fm_t *ctx)
Reading number of errors to be corrected.
void fm_generic_read(fm_t *ctx, uint16_t *reg_buf)
Reading all registers.
pin_name_t scl
Definition: fm.h:310
void fm_default_cfg(fm_t *ctx)
Click Default Configuration function.
digital_in_t gp1
Definition: fm.h:291
uint8_t fm_volume_up(fm_t *ctx)
Increasing volume level.
uint8_t slave_address
Definition: fm.h:299
void fm_generic_write(fm_t *ctx, uint16_t *reg_buf)
Generic write function.
void fm_power_down(fm_t *ctx)
Powering down device.
uint8_t fm_set_snr_threshold(fm_t *ctx, uint8_t snr_threshold)
Setting seek SNR threshold value.
uint8_t fm_get_an_pin(fm_t *ctx)
Checking AN pin status.
void fm_tune_channel(fm_t *ctx, uint16_t channel)
Setting CHANNEL bits.
uint8_t fm_get_errors_block_c(fm_t *ctx)
Reading number of errors to be corrected.
pin_name_t rst
Definition: fm.h:316
Click ctx object definition.
Definition: fm.h:282