9.1. AUDIO_ADC
概述
WL83有两个ADUIO_ADC通道
提供AUDIO_ADC的MIC和LINEIN配置介绍、推荐使用方式和注意点
ADC的硬件配置均在板级文件中board_develop.c,在board_devolop_AC792x.h中进行宏定义修改配置
/**
* @brief struct AUDIO_ADC参数设置结构体
*/
struct adc_platform_data {
int mic_port[4]; /*!< 用到的mic的io组 [0]MIC0P [1]MIC0N [2]MIC1P [3]MIC1N */
int linein_port[4]; /*!< 用到的linein的io组 [0]AUX0P [1]AUX0N [2]AUX1P [3]AUX1N */
u8 mic_ch_num; /*!< 用到的mic通道数 */
u8 mic_share_micbias; /*!< 共用micbias使用 */
u8 mic_other_power_enable; /*!< 不使用micbias使能普通io或外部ldo供电做mic电源 */
int mic_other_power_port[2]; /*!< 不使用micbias使用普通io或外部ldo供电做mic供电电源 */
u8 linein_ch_num; /*!< 用到的linein通道数 */
u8 isel; /*!< AD电流档,一般没有特殊要求不建议改动 */
u8 inside_bias_resistor;/*!< MIC BIAS是否使用内置电阻 */
u8 all_channel_open; /*!< 所有AD通道打开,使用多路AD时建议打开 */
u8 dmic_enable; /*!< 数字麦通道使能,此时模拟麦通道会被替换 */
u16 sr_points; /*!< 多少个采样点进一次中断,一般不建议修改 */
u16 dump_num; /*!< 打开adc时丢掉点数 */
u16 dmic_init_delay_ms; /*!< 数字麦初始化后等待SCLK稳定的延时ms */
u32 dmic_sclk_fre; /*!< 数字麦的sclk输出频率 */
int dmic_io_sclk; /*!< 数字麦的sclk输出引脚 */
int dmic_io_idat0; /*!< 数字麦的dat输入引脚0 */
int dmic_io_idat1; /*!< 数字麦的dat输入引脚0 */
};
//*********************************************************************************//
// AUDIO ADC配置 //
//*********************************************************************************//
//--- MICBIASA: PC9 MICBIASB: PC10
//--- AIN_AP0: PC7 AIN_AN0: PC6 AIN_BP0: PC11 AIN_BN0: PC12
//--- AIN_AP1: PC3 AIN_AN1: PC2 AIN_BP1: PC4 AIN_BN1: PC5
#define TCFG_AUDIO_ADC_ENABLE 1
#define TCFG_MIC_IO_PORT {-1/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_11/*MIC1P*/, IO_PORTC_12/*MIC1N*/}
#define TCFG_MIC_CHANNEL_NUM 1
#define TCFG_MIC_SHARE_MICBIAS_ENABLE 0 //使用到两个mic时候,共用偏置电压MICBIASB:PC10使用
#define TCFG_MIC_OTHER_POWER_ENABLE 0 //不使用micbias使能普通io或外部ldo供电做mic电源
#define TCFG_MIC_OTHER_POWER_IO_PORT {-1/*MIC0_POWER*/, -1/*MIC1_POWER*/} //不使用micbias时的供电io,外部ldo供电填-1
#define TCFG_LINEIN_IO_PORT {IO_PORTC_07/*AUX0P*/, IO_PORTC_06/*AUX0N*/, -1/*AUX1P*/, -1/*AUX1N*/}
#define TCFG_LINEIN_CHANNEL_NUM 1
#define TCFG_AUDIO_ADC_ALL_CHANNEL_OPEN 1
#define TCFG_DMIC_ENABLE 0
#define TCFG_DMIC_SCLK_FREQUENCY 2000000
#define TCFG_DMIC_IO_SCLK IO_PORTC_11
#define TCFG_DMIC_IO_IDAT0 IO_PORTA_11
#define TCFG_DMIC_IO_IDAT1 IO_PORTA_11
// 通道配置说明
// TCFG_MIC_IO_PORT和TCFG_LINEIN_IO_PORT配置io使用, 未配置使用时将io值设置为-1
// 单端mic或者单端linein时候只能设置正端使用
// MIC0P MIC0N AUX0P AUX0N 使用的是ADC0
// MIC1P MIC1N AUX1P AUX1N 使用的是ADC1
// mic和linein可分时复用,有两组io分别对应
// 对应ADC通道的引脚可查看io_map或者查看板级文件中注释
//使用mic adc0 单端情况
#define TCFG_MIC_CHANNEL_NUM 1
#define TCFG_MIC_IO_PORT {IO_PORTC_07/*MIC0P*/, -1/*MIC0N*/, -1/*MIC1P*/, -1/*MIC1N*/}
#define TCFG_MIC_IO_PORT {IO_PORTC_03/*MIC0P*/, -1/*MIC0N*/, -1/*MIC1P*/, -1/*MIC1N*/}
//使用mic adc1 单端情况
#define TCFG_MIC_CHANNEL_NUM 1
#define TCFG_MIC_IO_PORT {-1/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_11/*MIC1P*/, -1/*MIC1N*/}
#define TCFG_MIC_IO_PORT {-1/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_04/*MIC1P*/, -1/*MIC1N*/}
//使用mic adc0 差分情况
#define TCFG_MIC_CHANNEL_NUM 1
#define TCFG_MIC_IO_PORT {IO_PORTC_07/*MIC0P*/, IO_PORTC_06/*MIC0N*/, -1/*MIC1P*/, -1/*MIC1N*/}
#define TCFG_MIC_IO_PORT {IO_PORTC_03/*MIC0P*/, IO_PORTC_02/*MIC0N*/, -1/*MIC1P*/, -1/*MIC1N*/}
//使用mic adc1 差分情况
#define TCFG_MIC_CHANNEL_NUM 1
#define TCFG_MIC_IO_PORT {-1/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_11/*MIC1P*/, IO_PORTC_12/*MIC1N*/}
#define TCFG_MIC_IO_PORT {-1/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_04/*MIC1P*/, IO_PORTC_05/*MIC1N*/}
//使用mic adc0 和 adc1 单端情况
#define TCFG_MIC_CHANNEL_NUM 2
#define TCFG_MIC_IO_PORT {IO_PORTC_07/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_11/*MIC1P*/, -1/*MIC1N*/}
#define TCFG_MIC_IO_PORT {IO_PORTC_03/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_04/*MIC1P*/, -1/*MIC1N*/}
//使用mic adc0 和 adc1 差分情况
#define TCFG_MIC_CHANNEL_NUM 2
#define TCFG_MIC_IO_PORT {IO_PORTC_07/*MIC0P*/, IO_PORTC_06/*MIC0N*/, IO_PORTC_11/*MIC1P*/, IO_PORTC_12/*MIC1N*/}
#define TCFG_MIC_IO_PORT {IO_PORTC_03/*MIC0P*/, IO_PORTC_02/*MIC0N*/, IO_PORTC_04/*MIC1P*/, IO_PORTC_05/*MIC1N*/}
//使用mic adc0单端 和 adc1差分情况
#define TCFG_MIC_CHANNEL_NUM 2
#define TCFG_MIC_IO_PORT {IO_PORTC_07/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_11/*MIC1P*/, IO_PORTC_12/*MIC1N*/}
#define TCFG_MIC_IO_PORT {IO_PORTC_03/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_04/*MIC1P*/, IO_PORTC_05/*MIC1N*/}
//使用mic adc0差分 和 adc1单端情况
#define TCFG_MIC_CHANNEL_NUM 2
#define TCFG_MIC_IO_PORT {IO_PORTC_07/*MIC0P*/, IO_PORTC_06/*MIC0N*/, IO_PORTC_11/*MIC1P*/, -1/*MIC1N*/}
#define TCFG_MIC_IO_PORT {IO_PORTC_03/*MIC0P*/, IO_PORTC_02/*MIC0N*/, IO_PORTC_04/*MIC1P*/, -1/*MIC1N*/}
//以上为mic使用adc的所有情况, linein配置使用情况与mic使用配置情况相同
mic电源配置说明
1.默认使用micbias进行供电,MICBIASA: PC9 MICBIASB: PC10,micbias会根据#define TCFG_MIC_IO_PORT选择的通道在驱动中默认打开对应的micbias,外部无需进行配置
2.由于DACR(PC9)和MICBISA(PC9)在ic设计上属于绑定引脚,无法同时使用, 要想同时使用两个mic和使用到DACR时,两个mic只能共用使用MICBIASB(PC10) #define TCFG_MIC_SHARE_MICBIAS_ENABLE 0 //使用到两个mic时候,共用偏置电压MICBIASB:PC10使用
3.不使用MICBIAS进行供电,使用io供电或者外部ldo供电的情况下,需要使能宏#define TCFG_MIC_OTHER_POWER_ENABLE 1 //不使用micbias,使能普通io或外部ldo供电做mic电源,如果是使用io供电在#define TCFG_MIC_OTHER_POWER_IO_PORT中填入供电的io,如果使用外部ldo供电,在#define TCFG_MIC_OTHER_POWER_IO_PORT中填入-1表示由外部供电
//四种mic供电情况
// 1.使用对应micbias供电 MICBIASA: PC9 MICBIASB: PC10, 只需配置#define TCFG_MIC_IO_PORT通道配置,内部驱动会根据配置的通道打开对应micbias,外部无需配置
// 2.两个mic共用MICBIASB(PC10)供电
#define TCFG_MIC_SHARE_MICBIAS_ENABLE 1 //使用到两个mic时候,共用偏置电压MICBIASB:PC10使用
// 3.不使用micbias供电,使用io供电
#define TCFG_MIC_OTHER_POWER_ENABLE 1 //不使用micbias使能普通io或外部ldo供电做mic电源
#define TCFG_MIC_OTHER_POWER_IO_PORT {IO_PORTx_xx/*MIC0_POWER*/, IO_PORTx_xx/*MIC1_POWER*/} //不使用micbias时的供电io,外部ldo供电填-1
// 4.不使用micbias供电,使用外部供电
#define TCFG_MIC_OTHER_POWER_ENABLE 1 //不使用micbias使能普通io或外部ldo供电做mic电源
#define TCFG_MIC_OTHER_POWER_IO_PORT {-1/*MIC0_POWER*/, -1/*MIC1_POWER*/} //不使用micbias时的供电io,外部ldo供电填-1
9.1.1. API参考
Functions
-
void adc_multiplex_set_gain(const char *source, u8 channel_bit_map, u8 gain)
ADC多路复用时的模拟增益设置
- Parameters
source – 采样源 “mic” “linein”
channel_bit_map – 通道选择
gain – 模拟增益 0-100
-
void adc_multiplex_open(const char *source, u8 channel_bit_map, u8 rec_linein_channel_bit_map)
ADC多路复用时打开通道
- Parameters
source – 采样源 “mic” “linein”
channel_bit_map – 通道选择
rec_linein_channel_bit_map – linein回采通道选择
-
int adc_open(const char *source, struct adc_platform_data *pd)
打开ADC
- Parameters
source – 采样源 “mic” “linein”
adc_platform_data – *pd adc配置参数结构体指针
-
int adc_set_sample_rate(int sample_rate)
ADC采样率设置
- Parameters
sample_rate – 采样率
-
int adc_start(const char *source)
ADC模块使能
- Parameters
source – 采样源 “mic” “linein”
-
void adc_irq_handler(void)
ADC中断函数
-
int adc_stop(void)
ADC模块失能
-
int adc_close(void)
关闭ADC
-
void adc_set_data_handler(void *priv, void (*handler)(void*, u8 *data, int len))
设置ADC中断的回调函数
- Parameters
priv – 传入指针
handler – 回调函数
-
int adc_set_gain(const char *source, u8 gain)
ADC增益设置
- Parameters
source – 采样源 “mic” “linein”
gain – 模拟增益 0-100
-
void linein_to_fdac(u8 enable_dacl, u8 enable_dacr)
LINEIN模拟直通到DACL/R
- Parameters
enable_dacl – 直通使能DACL位
enable_dacr – 直通使能DACR位
-
void mic_to_fdac(u8 channel_bit_map, u8 enable_dacl, u8 enable_dacr)
MIC模拟直通到DACL/R
- Parameters
channel_bit_map – 通道选择
enable_dacl – 直通使能DACL位
enable_dacr – 直通使能DACR位
-
void vcm_early_init(u32 delay_ms)
vcm电压初始化
- Parameters
delay_ms – 毫秒级稳定延时
-
void linein_to_fdac_high_gain(u8 enable)
linein模拟直通DAC的模拟增益控制开关
- Parameters
enable – 1:使能 0:关闭
-
struct adc_platform_data
- #include <ladc.h>
struct AUDIO_ADC参数设置结构体
Public Members
-
int mic_port[4]
用到的mic的io组 [0]MIC0P [1]MIC0N [2]MIC1P [3]MIC1N
-
int linein_port[4]
用到的linein的io组 [0]AUX0P [1]AUX0N [2]AUX1P [3]AUX1N
-
u8 mic_ch_num
用到的mic通道数
共用micbias使用
-
u8 mic_other_power_enable
不使用micbias使能普通io或外部ldo供电做mic电源
-
int mic_other_power_port[2]
不使用micbias使用普通io或外部ldo供电做mic供电电源
-
u8 linein_ch_num
用到的linein通道数
-
u8 isel
AD电流档,一般没有特殊要求不建议改动
-
u8 inside_bias_resistor
MIC BIAS是否使用内置电阻
-
u8 all_channel_open
所有AD通道打开,使用多路AD时建议打开
-
u8 dmic_enable
数字麦通道使能,此时模拟麦通道会被替换
-
u16 sr_points
多少个采样点进一次中断,一般不建议修改
-
u16 dump_num
打开adc时丢掉点数
-
u16 dmic_init_delay_ms
数字麦初始化后等待SCLK稳定的延时ms
-
u32 dmic_sclk_fre
数字麦的sclk输出频率
-
int dmic_io_sclk
数字麦的sclk输出引脚
-
int dmic_io_idat0
数字麦的dat输入引脚0
-
int dmic_io_idat1
数字麦的dat输入引脚0
-
int mic_port[4]