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