1个不稳定版本
0.1.0 | 2019年12月3日 |
---|
2135 在 嵌入式开发
26 每月下载量
70KB
1.5K SLoC
Rust Si4703 FM收音机转换器(接收器)驱动程序
这是一个使用embedded-hal
特性和I2C为Si4703和Si4702 FM收音机转换器(接收器)提供的跨平台Rust驱动程序。
此驱动程序允许您
- 启用/禁用设备。见:
enable()
。 - 静音/取消静音。见:
mute()
。 - 配置搜索。见:
configure_seek()
。 - 带/不带STC中断搜索。见:
seek_with_stc_int_pin()
。 - 带/不带STC中断调整频率。见:
tune_with_stc_int_pin()
。 - 设置音量。见:
set_volume()
。 - 设置波段。见:
set_band()
。 - 设置频道间隔。见:
set_channel_spacing()
。 - 设置GPIO1、GPIO2和GPIO3的功能/状态。见:
set_gpio1()
。 - 启用/禁用软静音。见:
enable_softmute()
。 - 启用/禁用自动增益控制。见:
enable_auto_gain_control()
。 - 启用/禁用振荡器。见:
enable_oscillator()
。 - 启用/禁用STC中断。见:
enable_stc_interrupts()
。 - 启用/禁用音频高阻。见:
enable_audio_high_z()
。 - 设置去加重。参见:
set_deemphasis()
。 - 设置立体声到单声道的混合级别。参见:
set_stereo_to_mono_blend_level()
。 - 设置立体声/单声道输出模式。参见:
set_output_mode()
。 - 读取输出模式。参见:
output_mode()
。 - 读取通道。参见:
channel()
。 - 读取设备ID。参见:
device_id()
。 - 读取芯片ID。参见:
chip_id()
。 - 通过多种方法重置并选择I2C通信。参见:
reset_and_select_i2c_method1()
。 - RDS/RBDS(仅适用于Si4703)
- 启用/禁用RDS。参见:
enable_rds()
。 - 启用/禁用RDS中断。参见:
enable_rds_interrupts()
。 - 读取是否准备好新的RDS组。参见:
rds_ready()
。 - 读取RDS是否已同步。参见:
rds_synchronized()
。 - 读取RDS数据。参见:
rds_data()
。 - 从RDS数据解码RDS无线电文本。参见:
get_rds_radio_text()
。 - 使用RDS数据填充字符数组以解码RDS无线电文本。参见:
fill_with_rds_radio_text()
。
- 启用/禁用RDS。参见:
设备
Si4702/03-C19扩展了Silicon Laboratories Si4700/Si4701 FM调谐器系列,并通过小型尺寸和板面积、最小组件数量、灵活的可编程性和卓越的、经过验证的性能,进一步提高了将FM收音机接收功能添加到移动设备的简便性和吸引力。
设备提供了显著的编程能力,并通过简化的编程接口和成熟的功能,满足全球FM听众的主观需求和变化的FM广播环境。
Si4703-C集成了用于欧洲无线电数据系统(RDS)和美国无线电广播数据系统(RBDS)的数字处理器,包括所有必需的符号解码、块同步、错误检测和错误纠正功能。
RDS允许显示如电台标识和歌曲名称等数据。Si4703-C提供详细的RDS视图和标准视图,允许采用者选择性地选择RDS状态、数据和块错误的粒度。
数据表
更多文档
用法
要使用此驱动程序,导入此crate和embedded_hal
实现,然后实例化适当的设备。
在以下示例中,将创建Si4703设备的实例。可以使用方法创建Si4702设备的实例:Si4703::new_si4702(...)
。
请在此存储库中找到使用硬件的额外示例: driver-examples
use embedded_hal::blocking::delay::DelayMs;
use linux_embedded_hal::{Delay, I2cdev, Pin};
use nb::block;
use si4703::{
reset_and_select_i2c_method1, ChannelSpacing, DeEmphasis, SeekDirection, SeekMode, Si4703,
Volume,
};
fn main() {
let mut delay = Delay {};
{
// Reset and communication protocol selection must be done beforehand
let mut sda = Pin::new(2);
let mut rst = Pin::new(17);
reset_and_select_i2c_method1(&mut rst, &mut sda, &mut delay).unwrap();
}
let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut radio = Si4703::new(dev);
radio.enable_oscillator().unwrap();
// Wait for the oscillator to stabilize
delay.delay_ms(500_u16);
radio.enable().unwrap();
// Wait for powerup
delay.delay_ms(110_u16);
radio.set_volume(Volume::Dbfsm28).unwrap();
radio.set_deemphasis(DeEmphasis::Us50).unwrap();
radio.set_channel_spacing(ChannelSpacing::Khz100).unwrap();
radio.unmute().unwrap();
let stc_int = Pin::new(27);
// Seek using STC interrupt pin
block!(radio.seek_with_stc_int_pin(SeekMode::Wrap, SeekDirection::Up, &stc_int)).unwrap();
let channel = radio.channel().unwrap_or(-1.0);
println!("Found channel at {:1} MHz", channel);
}
支持
有关问题、问题、功能请求和其他更改,请在该 GitHub 项目中提交 问题。
许可
以下任一许可下授权:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任您选择。
贡献
除非您明确说明,否则您提交的任何贡献,只要它有意包含在您的工作中,根据 Apache-2.0 许可证的定义,都应双重许可,不附加任何额外条款或条件。
依赖关系
~480KB