mirror of
https://github.com/Fishwaldo/bl_mcu_sdk.git
synced 2025-07-10 06:48:51 +00:00
182 lines
No EOL
5.7 KiB
C
182 lines
No EOL
5.7 KiB
C
#ifndef _BFLB_AUADC_H
|
|
#define _BFLB_AUADC_H
|
|
|
|
#include "bflb_core.h"
|
|
|
|
/**
|
|
* @defgroup AUADC_SAMPLING_RATE auadc sampling rate
|
|
*/
|
|
#define AUADC_SAMPLING_RATE_8K 0 /* audio mode */
|
|
#define AUADC_SAMPLING_RATE_16K 1 /* audio mode */
|
|
#define AUADC_SAMPLING_RATE_24K 2 /* audio mode, same as 22.02K, adjust the AUPLL clock */
|
|
#define AUADC_SAMPLING_RATE_32K 3 /* audio mode */
|
|
#define AUADC_SAMPLING_RATE_48K 4 /* audio mode, same as 44.1K, adjust the AUPLL clock */
|
|
#define AUADC_SAMPLING_RATE_MEASURE_128K 8 /* only used in ADC measurement mode */
|
|
#define AUADC_SAMPLING_RATE_MEASURE_256K 9 /* only used in ADC measurement mode */
|
|
#define AUADC_SAMPLING_RATE_MEASURE_512K 10 /* only used in ADC measurement mode */
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @defgroup AUADC_INPUT_MODE auadc input mode
|
|
*/
|
|
#define AUADC_INPUT_MODE_ADC 0 /* Analog ADC */
|
|
#define AUADC_INPUT_MODE_PDM_L 1 /* PDM left channel */
|
|
#define AUADC_INPUT_MODE_PDM_R 2 /* PDM right channel */
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @defgroup AUADC_DATA_FORMAT auadc data format
|
|
*/
|
|
#define AUADC_DATA_FORMAT_16BIT 3
|
|
#define AUADC_DATA_FORMAT_20BIT 2
|
|
#define AUADC_DATA_FORMAT_24BIT 1
|
|
#define AUADC_DATA_FORMAT_32BIT 0
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @brief AUADC_ADC_ANALOG_CH auadc adc input ch
|
|
*/
|
|
#define AUADC_ADC_ANALOG_CH_0 0
|
|
#define AUADC_ADC_ANALOG_CH_1 1
|
|
#define AUADC_ADC_ANALOG_CH_2 2
|
|
#define AUADC_ADC_ANALOG_CH_3 3
|
|
#define AUADC_ADC_ANALOG_CH_4 4
|
|
#define AUADC_ADC_ANALOG_CH_5 5
|
|
#define AUADC_ADC_ANALOG_CH_6 6
|
|
#define AUADC_ADC_ANALOG_CH_7 7
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @brief AUADC_ADC_MEASURE_RATE auadc adc Sampling rate in measurement mode, @ AUADC_SAMPLING_RATE_MEASURE_256K
|
|
*/
|
|
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_2_5 0
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_5 1
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_10 2
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_20 3
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_25 4
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_50 5
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_100 6
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_200 7
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_400 8
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_800 9
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_1000 10
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_2000 11
|
|
#define AUADC_ADC_MEASURE_RATE_SPS_4000 12
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @brief AUADC_ADC_MODE auadc adc mode
|
|
*/
|
|
#define AUADC_ADC_MODE_AUDIO 0
|
|
#define AUADC_ADC_MODE_MEASURE 1
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @brief AUADC_ADC_PGA_MODE auadc adc mode, Ac or DC, differential or single
|
|
*/
|
|
#define AUADC_ADC_PGA_MODE_AC_DIFFER 0
|
|
#define AUADC_ADC_PGA_MODE_AC_SINGLE 1
|
|
#define AUADC_ADC_PGA_MODE_DC_DIFFER 2
|
|
#define AUADC_ADC_PGA_MODE_DC_SINGLE 3
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup AUADC_INTMASK auadc interrupt status definition
|
|
* @{
|
|
*/
|
|
#define AUADC_INTMASK_FIFO_OVER (1 << 1)
|
|
#define AUADC_INTMASK_FIFO_UNDER (1 << 2)
|
|
#define AUADC_INTMASK_FIFO_AVAILABLE (1 << 3)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup AUADC_INTSTS auadc interrupt status definition
|
|
* @{
|
|
*/
|
|
#define AUADC_INTSTS_FIFO_OVER (1 << 1)
|
|
#define AUADC_INTSTS_FIFO_UNDER (1 << 2)
|
|
#define AUADC_INTSTS_FIFO_AVAILABLE (1 << 4)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup AUADC_CMD auadc feature control cmd definition
|
|
* @{
|
|
*/
|
|
#define AUADC_CMD_RECORD_START (0x01)
|
|
#define AUADC_CMD_RECORD_STOP (0x02)
|
|
#define AUADC_CMD_SET_VOLUME_VAL (0x03)
|
|
#define AUADC_CMD_SET_PGA_GAIN_VAL (0x04)
|
|
#define AUADC_CMD_CLEAR_RX_FIFO (0x05)
|
|
#define AUADC_CMD_GET_RX_FIFO_CNT (0x06)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @brief auadc initialization configuration structure
|
|
*
|
|
* @param sampling_rate auadc sampling rate, use @ref AUADC_SAMPLING_RATE
|
|
* @param input_mode auadc mode, use @ref AUADC_INPUT_MODE
|
|
* @param data_format auadc fifo data format, use @ref AUADC_DATA_FORMAT
|
|
* @param fifo_threshold auadc tx fifo threshold, 0 ~ 7
|
|
*/
|
|
struct bflb_auadc_init_config_s {
|
|
uint8_t sampling_rate;
|
|
uint8_t input_mode;
|
|
uint8_t data_format;
|
|
uint8_t fifo_threshold;
|
|
};
|
|
|
|
/**
|
|
* @brief auadc adc analog initialization configuration structure
|
|
*
|
|
* @param analog_adc_en auadc sampling rate, use true or false
|
|
* @param adc_mode auadc adc work pattern, use @ref AUADC_ADC_MODE
|
|
* @param adc_pga_mode auadc adc PGA mode, use @ref AUADC_ADC_PGA_MODE
|
|
* @param adc_pga_posi_ch auadc adc positive channel selection, use @ref AUADC_ADC_ANALOG_CH
|
|
* @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
|
|
* @param adc_pga_gain auadc adc PGA Gain control, 6dB ~ 42dB, step by 3db
|
|
* @param adc_measure_rate auadc adc sampling rate in measurement mode @ AUADC_SAMPLING_RATE_MEASURE_256K, use @ref AUADC_ADC_MEASURE_RATE
|
|
*/
|
|
struct bflb_auadc_adc_init_config_s {
|
|
uint8_t auadc_analog_en;
|
|
uint8_t adc_mode;
|
|
uint8_t adc_pga_mode;
|
|
uint8_t adc_pga_posi_ch;
|
|
uint8_t adc_pga_nega_ch;
|
|
uint8_t adc_pga_gain;
|
|
uint8_t adc_measure_rate;
|
|
};
|
|
|
|
int bflb_auadc_init(struct bflb_device_s *dev, const struct bflb_auadc_init_config_s *config);
|
|
|
|
int bflb_auadc_adc_init(struct bflb_device_s *dev, const struct bflb_auadc_adc_init_config_s *config);
|
|
|
|
int bflb_auadc_link_rxdma(struct bflb_device_s *dev, bool enable);
|
|
|
|
int bflb_auadc_int_mask(struct bflb_device_s *dev, uint32_t int_sts);
|
|
|
|
int bflb_auadc_int_unmask(struct bflb_device_s *dev, uint32_t int_sts);
|
|
|
|
int bflb_auadc_get_intstatus(struct bflb_device_s *dev);
|
|
|
|
int bflb_auadc_feature_control(struct bflb_device_s *dev, int cmd, size_t arg);
|
|
|
|
#endif |