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通道数

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