arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
AnalogConfigESP32V1.h
1#pragma once
2
3#include "AudioToolsConfig.h"
4#if defined(USE_ANALOG) && defined(ESP32) && \
5 ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) || \
6 defined(DOXYGEN)
7
8 #include "AudioTools/CoreAudio/AudioTypes.h"
9
10#include "esp_adc/adc_cali_scheme.h"
11#include "esp_adc/adc_continuous.h"
12#ifdef ARDUINO
13#include "esp32-hal-periman.h"
14#endif
15
16#if CONFIG_IDF_TARGET_ESP32
17#define ADC_CONV_MODE ADC_CONV_SINGLE_UNIT_1
18#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE1
19#define ADC_CHANNELS \
20 {ADC_CHANNEL_0, ADC_CHANNEL_3, ADC_CHANNEL_4, \
21 ADC_CHANNEL_5, ADC_CHANNEL_6, ADC_CHANNEL_7}
22#define NUM_ADC_CHANNELS 6
23#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type1.channel)
24#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type1.data)
25#define HAS_ESP32_DAC
26#define ADC_CHANNEL_TYPE uint16_t
27#define ADC_DATA_TYPE uint16_t
28#elif CONFIG_IDF_TARGET_ESP32S2
29#define ADC_CONV_MODE ADC_CONV_SINGLE_UNIT_1
30#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE2
31#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type2.channel)
32#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type2.data)
33#define ADC_CHANNELS \
34 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, ADC_CHANNEL_4, \
35 ADC_CHANNEL_5, ADC_CHANNEL_6, ADC_CHANNEL_7, ADC_CHANNEL_8, ADC_CHANNEL_9}
36#define NUM_ADC_CHANNELS 10
37#define HAS_ESP32_DAC
38#define ADC_CHANNEL_TYPE uint16_t
39#define ADC_DATA_TYPE uint16_t
40#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32H2 || \
41 CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C6
42#define ADC_CONV_MODE ADC_CONV_ALTER_UNIT // ESP32C3 only supports alter mode
43#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE2
44#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type2.channel)
45#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type2.data)
46#define ADC_CHANNELS \
47 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, ADC_CHANNEL_4}
48#define NUM_ADC_CHANNELS 5
49#define ADC_CHANNEL_TYPE uint32_t
50#define ADC_DATA_TYPE uint32_t
51#elif CONFIG_IDF_TARGET_ESP32C6
52#define ADC_CONV_MODE ADC_CONV_ALTER_UNIT
53#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE2
54#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type2.channel)
55#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type2.data)
56#define ADC_CHANNELS \
57 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, \
58 ADC_CHANNEL_4, ADC_CHANNEL_5, ADC_CHANNEL_6}
59#define NUM_ADC_CHANNELS 7
60#define ADC_CHANNEL_TYPE uint32_t
61#define ADC_DATA_TYPE uint32_t
62#elif CONFIG_IDF_TARGET_ESP32S3
63#define ADC_CONV_MODE ADC_CONV_SINGLE_UNIT_1
64#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE2
65#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type2.channel)
66#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type2.data)
67#define ADC_CHANNELS \
68 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, ADC_CHANNEL_4, \
69 ADC_CHANNEL_5, ADC_CHANNEL_6, ADC_CHANNEL_7, ADC_CHANNEL_8, ADC_CHANNEL_9}
70#define NUM_ADC_CHANNELS 10
71#define ADC_CHANNEL_TYPE uint32_t
72#define ADC_DATA_TYPE uint32_t
73#elif CONFIG_IDF_TARGET_ESP32P4
74#define ADC_CONV_MODE ADC_CONV_SINGLE_UNIT_1
75#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE2
76#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type2.channel)
77#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type2.data)
78#define ADC_CHANNELS \
79 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, \
80 ADC_CHANNEL_4, ADC_CHANNEL_5, ADC_CHANNEL_6, ADC_CHANNEL_7}
81#define NUM_ADC_CHANNELS 8
82#define ADC_CHANNEL_TYPE uint32_t
83#define ADC_DATA_TYPE uint32_t
84#endif
85
86// continuous ADC API should run on ADC1
87
88#define ADC_UNIT ADC_UNIT_1
89#ifdef HAS_ESP32_DAC
90#include "driver/dac_continuous.h"
91#endif
92
93namespace audio_tools {
94
103 // allow ADC to access the protected methods
104 friend class AnalogDriverESP32;
105
106 public:
107 int buffer_count = ANALOG_BUFFER_COUNT;
108 int buffer_size = ANALOG_BUFFER_SIZE;
109 RxTxMode rx_tx_mode;
110 TickType_t timeout = portMAX_DELAY;
111
112#ifdef HAS_ESP32_DAC
113 bool is_blocking_write = true;
114 bool use_apll = false;
116 dac_channel_mask_t dac_mono_channel = DAC_CHANNEL_MASK_CH0;
117#endif
118
119 // ADC config parameters
120 bool adc_calibration_active = false;
121 bool is_auto_center_read = false;
122 adc_digi_convert_mode_t adc_conversion_mode = ADC_CONV_MODE;
123 adc_digi_output_format_t adc_output_type = ADC_OUTPUT_TYPE;
124 uint8_t adc_attenuation = ADC_ATTEN_DB_12; // full voltage range of 3.9V
125 uint8_t adc_bit_width = SOC_ADC_DIGI_MAX_BITWIDTH;
126
127 adc_unit_t adc_unit = ADC_UNIT;
128 adc_channel_t adc_channels[NUM_ADC_CHANNELS] = ADC_CHANNELS;
129
131 AnalogConfigESP32V1(RxTxMode rxtxMode = TX_MODE) {
132 sample_rate = 44100;
133 channels = 2;
134 bits_per_sample = 16;
135 rx_tx_mode = rxtxMode;
136 switch (rx_tx_mode) {
137 case RX_MODE: {
138 // make sure that the proposed sample rate is valid
139 if (sample_rate * channels > SOC_ADC_SAMPLE_FREQ_THRES_HIGH) {
140 sample_rate = SOC_ADC_SAMPLE_FREQ_THRES_HIGH / channels;
141 }
142 LOGI("I2S_MODE_ADC_BUILT_IN");
143 break;
144 }
145#ifdef HAS_ESP32_DAC
146 case TX_MODE:
147 use_apll = true;
148 LOGI("I2S_MODE_DAC_BUILT_IN");
149 break;
150#endif
151
152 default:
153 LOGE("RxTxMode not supported: %d", rx_tx_mode);
154 break;
155 }
156 }
157
160
161 void logInfo() {
162 AudioInfo::logInfo();
163#if !defined(ESP32X)
164 if (rx_tx_mode == TX_MODE) {
165 LOGI("analog left output pin: %d", 25);
166 LOGI("analog right output pin: %d", 26);
167 }
168#endif
169#ifdef HAS_ESP32_DAC
170 LOGI("use_apll: %d", use_apll);
171#endif
172 }
173};
174
175#ifndef ANALOG_CONFIG
176#define ANALOG_CONFIG
177using AnalogConfig = AnalogConfigESP32V1;
178#endif
179
180} // namespace audio_tools
181
182#endif
ESP32 specific configuration for i2s input via adc using the adc_continuous API.
Definition AnalogConfigESP32V1.h:102
AnalogConfigESP32V1(RxTxMode rxtxMode=TX_MODE)
Default constructor.
Definition AnalogConfigESP32V1.h:131
AnalogConfigESP32V1(const AnalogConfigESP32V1 &cfg)=default
Copy constructor.
Please use AnalogAudioStream: A very fast ADC and DAC using the ESP32 I2S interface.
Definition AnalogDriverESP32.h:35
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition AudioTypes.h:28
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:53
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:55
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:57
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition AudioTypes.h:59