1 #ifndef _BFLB_AUADC_H 2 #define _BFLB_AUADC_H 3 4 #include "bflb_core.h" 5 6 /** 7 * @defgroup AUADC_SAMPLING_RATE auadc sampling rate 8 */ 9 #define AUADC_SAMPLING_RATE_8K 0 /* audio mode */ 10 #define AUADC_SAMPLING_RATE_16K 1 /* audio mode */ 11 #define AUADC_SAMPLING_RATE_24K 2 /* audio mode, same as 22.02K, adjust the AUPLL clock */ 12 #define AUADC_SAMPLING_RATE_32K 3 /* audio mode */ 13 #define AUADC_SAMPLING_RATE_48K 4 /* audio mode, same as 44.1K, adjust the AUPLL clock */ 14 #define AUADC_SAMPLING_RATE_MEASURE_128K 8 /* only used in ADC measurement mode */ 15 #define AUADC_SAMPLING_RATE_MEASURE_256K 9 /* only used in ADC measurement mode */ 16 #define AUADC_SAMPLING_RATE_MEASURE_512K 10 /* only used in ADC measurement mode */ 17 /** 18 * @} 19 */ 20 21 /** 22 * @defgroup AUADC_INPUT_MODE auadc input mode 23 */ 24 #define AUADC_INPUT_MODE_ADC 0 /* Analog ADC */ 25 #define AUADC_INPUT_MODE_PDM_L 1 /* PDM left channel */ 26 #define AUADC_INPUT_MODE_PDM_R 2 /* PDM right channel */ 27 /** 28 * @} 29 */ 30 31 /** 32 * @defgroup AUADC_DATA_FORMAT auadc data format 33 */ 34 #define AUADC_DATA_FORMAT_16BIT 3 35 #define AUADC_DATA_FORMAT_20BIT 2 36 #define AUADC_DATA_FORMAT_24BIT 1 37 #define AUADC_DATA_FORMAT_32BIT 0 38 /** 39 * @} 40 */ 41 42 /** 43 * @brief AUADC_ADC_ANALOG_CH auadc adc input ch 44 */ 45 #define AUADC_ADC_ANALOG_CH_0 0 46 #define AUADC_ADC_ANALOG_CH_1 1 47 #define AUADC_ADC_ANALOG_CH_2 2 48 #define AUADC_ADC_ANALOG_CH_3 3 49 #define AUADC_ADC_ANALOG_CH_4 4 50 #define AUADC_ADC_ANALOG_CH_5 5 51 #define AUADC_ADC_ANALOG_CH_6 6 52 #define AUADC_ADC_ANALOG_CH_7 7 53 /** 54 * @} 55 */ 56 57 /** 58 * @brief AUADC_ADC_MEASURE_RATE auadc adc Sampling rate in measurement mode, @ AUADC_SAMPLING_RATE_MEASURE_256K 59 */ 60 61 #define AUADC_ADC_MEASURE_RATE_SPS_2_5 0 62 #define AUADC_ADC_MEASURE_RATE_SPS_5 1 63 #define AUADC_ADC_MEASURE_RATE_SPS_10 2 64 #define AUADC_ADC_MEASURE_RATE_SPS_20 3 65 #define AUADC_ADC_MEASURE_RATE_SPS_25 4 66 #define AUADC_ADC_MEASURE_RATE_SPS_50 5 67 #define AUADC_ADC_MEASURE_RATE_SPS_100 6 68 #define AUADC_ADC_MEASURE_RATE_SPS_200 7 69 #define AUADC_ADC_MEASURE_RATE_SPS_400 8 70 #define AUADC_ADC_MEASURE_RATE_SPS_800 9 71 #define AUADC_ADC_MEASURE_RATE_SPS_1000 10 72 #define AUADC_ADC_MEASURE_RATE_SPS_2000 11 73 #define AUADC_ADC_MEASURE_RATE_SPS_4000 12 74 75 /** 76 * @} 77 */ 78 79 /** 80 * @brief AUADC_ADC_MODE auadc adc mode 81 */ 82 #define AUADC_ADC_MODE_AUDIO 0 83 #define AUADC_ADC_MODE_MEASURE 1 84 /** 85 * @} 86 */ 87 88 /** 89 * @brief AUADC_ADC_PGA_MODE auadc adc mode, Ac or DC, differential or single 90 */ 91 #define AUADC_ADC_PGA_MODE_AC_DIFFER 0 92 #define AUADC_ADC_PGA_MODE_AC_SINGLE 1 93 #define AUADC_ADC_PGA_MODE_DC_DIFFER 2 94 #define AUADC_ADC_PGA_MODE_DC_SINGLE 3 95 /** 96 * @} 97 */ 98 99 /** @defgroup AUADC_INTMASK auadc interrupt status definition 100 * @{ 101 */ 102 #define AUADC_INTMASK_FIFO_OVER (1 << 1) 103 #define AUADC_INTMASK_FIFO_UNDER (1 << 2) 104 #define AUADC_INTMASK_FIFO_AVAILABLE (1 << 3) 105 /** 106 * @} 107 */ 108 109 /** @defgroup AUADC_INTSTS auadc interrupt status definition 110 * @{ 111 */ 112 #define AUADC_INTSTS_FIFO_OVER (1 << 1) 113 #define AUADC_INTSTS_FIFO_UNDER (1 << 2) 114 #define AUADC_INTSTS_FIFO_AVAILABLE (1 << 4) 115 /** 116 * @} 117 */ 118 119 /** @defgroup AUADC_CMD auadc feature control cmd definition 120 * @{ 121 */ 122 #define AUADC_CMD_RECORD_START (0x01) 123 #define AUADC_CMD_RECORD_STOP (0x02) 124 #define AUADC_CMD_SET_VOLUME_VAL (0x03) 125 #define AUADC_CMD_SET_PGA_GAIN_VAL (0x04) 126 #define AUADC_CMD_CLEAR_RX_FIFO (0x05) 127 #define AUADC_CMD_GET_RX_FIFO_CNT (0x06) 128 /** 129 * @} 130 */ 131 132 /** 133 * @brief auadc initialization configuration structure 134 * 135 * @param sampling_rate auadc sampling rate, use @ref AUADC_SAMPLING_RATE 136 * @param input_mode auadc mode, use @ref AUADC_INPUT_MODE 137 * @param data_format auadc fifo data format, use @ref AUADC_DATA_FORMAT 138 * @param fifo_threshold auadc tx fifo threshold, 0 ~ 7 139 */ 140 struct bflb_auadc_init_config_s { 141 uint8_t sampling_rate; 142 uint8_t input_mode; 143 uint8_t data_format; 144 uint8_t fifo_threshold; 145 }; 146 147 /** 148 * @brief auadc adc analog initialization configuration structure 149 * 150 * @param analog_adc_en auadc sampling rate, use true or false 151 * @param adc_mode auadc adc work pattern, use @ref AUADC_ADC_MODE 152 * @param adc_pga_mode auadc adc PGA mode, use @ref AUADC_ADC_PGA_MODE 153 * @param adc_pga_posi_ch auadc adc positive channel selection, use @ref AUADC_ADC_ANALOG_CH 154 * @param adc_pga_nega_ch auadc adc negative channel selection, This channel is valid only when adc_pga_mode is differential, use @ref AUADC_ADC_ANALOG_CH 155 * @param adc_pga_gain auadc adc PGA Gain control, 6dB ~ 42dB, step by 3db 156 * @param adc_measure_rate auadc adc sampling rate in measurement mode @ AUADC_SAMPLING_RATE_MEASURE_256K, use @ref AUADC_ADC_MEASURE_RATE 157 */ 158 struct bflb_auadc_adc_init_config_s { 159 uint8_t auadc_analog_en; 160 uint8_t adc_mode; 161 uint8_t adc_pga_mode; 162 uint8_t adc_pga_posi_ch; 163 uint8_t adc_pga_nega_ch; 164 uint8_t adc_pga_gain; 165 uint8_t adc_measure_rate; 166 }; 167 168 int bflb_auadc_init(struct bflb_device_s *dev, const struct bflb_auadc_init_config_s *config); 169 170 int bflb_auadc_adc_init(struct bflb_device_s *dev, const struct bflb_auadc_adc_init_config_s *config); 171 172 int bflb_auadc_link_rxdma(struct bflb_device_s *dev, bool enable); 173 174 int bflb_auadc_int_mask(struct bflb_device_s *dev, uint32_t int_sts); 175 176 int bflb_auadc_int_unmask(struct bflb_device_s *dev, uint32_t int_sts); 177 178 int bflb_auadc_get_intstatus(struct bflb_device_s *dev); 179 180 int bflb_auadc_feature_control(struct bflb_device_s *dev, int cmd, size_t arg); 181 182 #endif