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参考
淡入淡出状态
-
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
struct – dac_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用户操作回调
-
int pa_mute_port