Expand description
§TLV320AIC3204 I2C Driver
一个基于 embedded-hal 的平台无关 Rust 驱动,用于控制 Texas Instruments TLV320AIC3204
超低功耗立体声音频编解码器。
主要功能包括:
- 初始化和软件复位 。
- 时钟系统配置,包括 PLL 和各种时钟分频器 。
- ADC 和 DAC 的电源管理和配置 。
- 输入/输出路由选择(例如,将 IN1L 连接到左 MICPGA) 。
- 增益和音量控制(数字和模拟) 。
- 信号处理块(PRB)的选择 。
- 耳机、线路输出驱动器配置,包括 Class-D 模式 。
- PowerTune™ 模式配置,用于在功耗和性能之间进行权衡 。
§使用示例
以下是如何在项目中实例化和使用此驱动程序的示例。 此示例演示了如何初始化编解码器以进行高性能的 48ksps 立体声 DAC 播放, 该示例的配置与应用参考指南中的脚本类似 。
// 1. 实例化驱动
// TLV320AIC3204 的默认 I2C 地址是 0x18
let mut codec = Tlv320aic3204::new(i2c, tlv320aic3204_driver::I2C_ADDRESS);
// 2. 初始化序列
codec.software_reset()?;
// 等待复位完成 (datasheet 建议 >1ms)
// hal::delay::Delay::delay_ms(2);
// --- 时钟配置 ---
// 假设 MCLK = 12.288MHz, DAC_FS = 48kHz. PLL 被禁用。
// CODEC_CLKIN = MCLK
codec.select_codec_clkin(registers::CodecClockInput::MCLK)?;
// NDAC = 1, MDAC = 2, DOSR = 128
// DAC_FS = MCLK / (NDAC * MDAC * DOSR) = 12.288MHz / (1 * 2 * 128) = 48kHz
codec.set_dac_dividers(1, true, 2, true)?;
codec.set_dac_oversampling(128)?;
// --- 音频接口配置 ---
// I2S, 16-bit, 从机模式
codec.set_audio_interface(registers::AudioInterface::I2S)?;
codec.set_word_length(registers::WordLength::Bits16)?;
codec.set_clock_direction(false, false)?; // BCLK 和 WCLK 为输入
// --- 信号处理 ---
// 选择一个处理块,例如 PRB_P1 (默认)
codec.select_dac_processing_block(registers::DacProcessingBlock::PRB_P1)?;
// --- 模拟部分配置 ---
codec.disable_crude_avdd()?; //
codec.enable_master_analog_power()?; //
codec.set_ref_charging_time(registers::RefChargingTime::Ms40)?; //
// 配置耳机驱动的 Pop-Free 启动
let depop_settings = registers::HeadphoneDepopSettings {
step_time: registers::SoftStepTime::Ms100, //
num_time_constants: registers::TimeConstants::N5, //
resistor: registers::RpopValue::K6, //
};
codec.configure_headphone_depop(depop_settings)?;
// 设置共模电压为 0.9V (适用于 AVDD >= 1.8V)
codec.set_full_chip_common_mode(registers::CommonModeVoltage::V0_9)?;
// --- 路由和输出功率 ---
// 将 DAC 信号路由到耳机输出
codec.set_hpl_routing(registers::HplInput::from_bits_truncate(registers::HplInput::LEFT_DAC.bits()))?;
codec.set_hpr_routing(registers::HprInput::from_bits_truncate(registers::HprInput::RIGHT_DAC.bits()))?;
// 设置 DAC PowerTune 模式为 PTM_P3/P4
codec.set_dac_ptm_mode(
registers::DacPtmMode::PTM_P3_P4,
registers::DacPtmMode::PTM_P3_P4
)?;
// 设置耳机驱动增益为 0dB
codec.set_headphone_driver_gain(
registers::OutputDriverGain::Db0,
registers::OutputDriverGain::Db0
)?;
// 打开耳机输出驱动
codec.set_output_driver_power(registers::OutputDriverPower::HPL | registers::OutputDriverPower::HPR, true)?;
// 等待耳机软启动完成 (重要!)
// 实际应用中应轮询标志位 Page 1, Reg 63, D(7:6)
// hal::delay::Delay::delay_ms(500); // 简单延时作为替代
// --- 启动 DAC ---
// 上电并连接 DAC 通道
codec.set_dac_channel_power(true, true)?;
codec.set_dac_data_paths(
registers::DacDataPath::LeftChanAudio,
registers::DacDataPath::RightChanAudio
)?;
// 取消 DAC 静音
codec.set_dac_mute(false, false)?;Modules§
Structs§
- Tlv320aic3204
- TLV320AIC3204 I2C 驱动结构体
Enums§
Constants§
- I2C_
ADDRESS - TLV320AIC3204 I2C 默认地址
Traits§
- I2c
- Blocking I2C.