Crate tlv320aic3204

Crate tlv320aic3204 

Source
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§

registers

Structs§

Tlv320aic3204
TLV320AIC3204 I2C 驱动结构体

Enums§

Error
驱动可能返回的错误类型
Operation
I2C operation.

Constants§

I2C_ADDRESS
TLV320AIC3204 I2C 默认地址

Traits§

I2c
Blocking I2C.