1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
#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
|