9.2. AUDIO_DAC

概述

提供DAC的配置介绍、推荐使用方式和注意点

9.2.1. 常见问题

  • WL83 有两个AUDIO_DAC通道

  • DAC模拟通道hw_channel配置说明,dac的硬件配置均在板级文件中board_develop.c,在board_devolop_AC792x.h中进行宏定义修改配置

    /**
    * @brief struct AUDIO_DAC参数设置结构体
    */
    struct dac_platform_data {
            int pa_mute_port;           /*!< 功放MUTE IO */
            u8 pa_auto_mute;            /*!< 关闭DAC时是否自动MUTE功放  0:不mute功放 1:MUTE功放 */
            u8 pa_mute_value;           /*!< MUTE电平值 0:低电平 1:高电平 */
            u8 trim_en;                 /*!< 是否每次开机都trim dac */
            u8 differ_output;           /*!< 是否使用硬件差分输出模式  0:不使用 1:使用 */
            u8 hw_channel;              /*!< 硬件DAC模拟通道 */
            u8 ch_num;                  /*!< 数字通道,软件输出通道数 */
            u8 auto_src_enable;         /*!< 根据当前解码的最高采样率自动调整最佳DAC采样率 */
            u8 fade_enable;             /*!< 数字音量淡入淡出使能位 */
            u8 fade_points_step;        /*!< 数字音量淡入淡出每隔多少个采样点更新一次音量 */
            u8 fade_volume_step;        /*!< 数字音量淡入淡出音量每次更新的步进 */
            u16 mute_delay_ms;          /*!< MUTE延时 */
            u16 fade_delay_ms;          /*!< 模拟音量淡入淡出延时 */
            u16 sr_points;              /*!< 多少个采样点进一次中断,一般不建议修改 */
            u16 vcm_init_delay_ms;      /*!< VCM电压初始化后等待稳定的延时ms */
            u32 poweron_delay;          /*!< 低功耗睡眠时恢复DAC模块的延迟us */
            void (*pa_mute_cb)(u8 mute);/*!< 功放mute用户操作回调 */
    };

    //*********************************************************************************//
    //                                AUDIO DAC配置                                    //
    //*********************************************************************************//
    #define TCFG_AUDIO_DAC_ENABLE               1
    #define TCFG_AUDIO_DAC_PA_AUTO_MUTE_ENABLE  1
    #define TCFG_AUDIO_DAC_PA_MUTE_PORT         IO_PORTE_15
    #define TCFG_AUDIO_DAC_PA_MUTE_LEVEL        0
    #define TCFG_AUDIO_DAC_DIFFER_OUTPUT_ENABLE 1
    #define TCFG_AUDIO_DAC_HW_CHANNEL           (AUDIO_DAC_CH_L | AUDIO_DAC_CH_R)
    #define TCFG_AUDIO_DAC_VCM_CAP_ENABLE       1
    #if TCFG_AUDIO_DAC_VCM_CAP_ENABLE
    #define TCFG_AUDIO_DAC_VCM_INIT_DELAY_MS    1000
    #else
    #define TCFG_AUDIO_DAC_VCM_INIT_DELAY_MS    0
    #endif
    #define TCFG_AUDIO_DAC_PA_MUTE_DELAY_MS     500

     /*通道配置说明*/
    //单声道单端输出
    #define TCFG_AUDIO_DAC_DIFFER_OUTPUT_ENABLE 0
    #define TCFG_AUDIO_DAC_HW_CHANNEL           (AUDIO_DAC_CH_L)   //或者(AUDIO_DAC_CH_R) 配置单左或者单右单端模式

    //双声道单端输出
    #define TCFG_AUDIO_DAC_DIFFER_OUTPUT_ENABLE 0
    #define TCFG_AUDIO_DAC_HW_CHANNEL           (AUDIO_DAC_CH_L | AUDIO_DAC_CH_R)

    //单声道差分输出
    #define TCFG_AUDIO_DAC_DIFFER_OUTPUT_ENABLE 1
    #define TCFG_AUDIO_DAC_HW_CHANNEL           (AUDIO_DAC_CH_L)


- DAC开机第一声出声延时默认1秒,延时时间可通过配置板级的vcm_init_delay_ms参数调整

9.2.2. API参考

DAC通道选择

AUDIO_DAC_CH_L

通道0 左声道

AUDIO_DAC_CH_R

通道1 右声道

淡入淡出状态

FADE_DISABLE

淡入淡出失能

FADE_VOL_OUT

淡入淡出模拟音量淡出

FADE_VOL_IN

淡入淡出模拟音量淡入

FADE_VOL_UPDOWN

淡入淡出模拟音量调节

void dac_early_init(u8 hw_channel, u8 vcm_cap)

dac_early_init, dac初始化

Parameters
  • hw_channel – 硬件dac通道配置BIT(x)

  • vcm_cap – VCM是否外挂电容

int dac_open(const struct dac_platform_data *pd)

打开dac模块

Parameters

structdac_platform_data *pd dac配置参数结构体参数指针

int dac_on(void)

dac模块使能

int dac_off(void)

dac模块失能

int dac_close(void)

关闭dac模块

void dac_poweron(void)

低功耗休眠起来后恢复dac模块

void dac_poweroff(void)

低功耗进入前挂起dac模块

void dac_set_volume(s16 volume)

dac数字音量设置

Parameters

volume – 音量0-100

int dac_set_sample_rate(u32 sample_rate)

dac采样率设置

Parameters

sample_rate – 采样率

int dac_get_sample_rate(void)

获取当前dac采样率

Returns

DAC当前采样率

void dac_irq_handle(void)

dac中断函数

void dac_set_data_handler(void *priv, void (*handler)(void*, u8 *data, int len))

dac中断的回调函数设置

Parameters
  • priv – 传入指针

  • handler – 传入的回调函数

void dac_set_gain(u8 gain, u8 fade_opt)

dac模拟增益设置

Note

本芯片无效

Parameters
  • gain – 模拟增益0-31

  • fade_opt – 淡入淡出状态位

void dac_direct_set_gain(u8 gain)

dac直通模拟增益设置

Note

本芯片无效

Parameters

gain – 模拟增益0-31

void dac_fade_inout_set(u8 enable)

dac模拟增益淡入淡出设置

Note

本芯片无效

Parameters

enable – 0:关闭 1:使能

int audio_dac_read_single_channel(u16 *read_pos, s16 points_offset, void *data, int len)

读取DAC DMA BUF的单通道数据

Parameters
  • read_pos – 读指针

  • points_offset – 偏移量

  • data – 数据指针

  • len – 数据长度

Returns

数据长度

struct dac_platform_data
#include <dac.h>

struct AUDIO_DAC参数设置结构体

Public Members

int pa_mute_port

功放MUTE IO

u8 pa_auto_mute

关闭DAC时是否自动MUTE功放 0:不mute功放 1:MUTE功放

u8 pa_mute_value

MUTE电平值 0:低电平 1:高电平

u8 trim_en

是否每次开机都trim dac

u8 differ_output

是否使用硬件差分输出模式 0:不使用 1:使用

u8 hw_channel

硬件DAC模拟通道

u8 ch_num

数字通道,软件输出通道数

u8 auto_src_enable

根据当前解码的最高采样率自动调整最佳DAC采样率

u8 fade_enable

数字音量淡入淡出使能位

u8 fade_points_step

数字音量淡入淡出每隔多少个采样点更新一次音量

u8 fade_volume_step

数字音量淡入淡出音量每次更新的步进

u16 mute_delay_ms

MUTE延时

u16 fade_delay_ms

模拟音量淡入淡出延时

u16 sr_points

多少个采样点进一次中断,一般不建议修改

u16 vcm_init_delay_ms

VCM电压初始化后等待稳定的延时ms

u32 poweron_delay

低功耗睡眠时恢复DAC模块的延迟us

void (*pa_mute_cb)(u8 mute)

功放mute用户操作回调