4#if (defined(ESP32) && defined(USE_ANALOG) && !USE_LEGACY_I2S) || defined(DOXYGEN)
7#include "esp_adc/adc_cali_scheme.h"
8#include "esp_adc/adc_continuous.h"
10# include "esp32-hal-periman.h"
14#ifndef SOC_ADC_SAMPLE_FREQ_THRES_HIGH
15# define SOC_ADC_SAMPLE_FREQ_THRES_HIGH (2000000)
17#ifndef SOC_ADC_SAMPLE_FREQ_THRES_LOW
18# define SOC_ADC_SAMPLE_FREQ_THRES_LOW (20000)
23 #ifndef perimanClearPinBus
24 #define perimanClearPinBus(p) perimanSetPinBus(p, ESP32_BUS_TYPE_INIT, NULL)
29#if CONFIG_IDF_TARGET_ESP32
30#define ADC_CONV_MODE ADC_CONV_SINGLE_UNIT_1
31#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE1
33 {ADC_CHANNEL_0, ADC_CHANNEL_3, ADC_CHANNEL_4, \
34 ADC_CHANNEL_5, ADC_CHANNEL_6, ADC_CHANNEL_7}
35#define NUM_ADC_CHANNELS 6
36#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type1.channel)
37#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type1.data)
39#define ADC_CHANNEL_TYPE uint16_t
40#define ADC_DATA_TYPE uint16_t
41#elif CONFIG_IDF_TARGET_ESP32S2
42#define ADC_CONV_MODE ADC_CONV_SINGLE_UNIT_1
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)
47 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, ADC_CHANNEL_4, \
48 ADC_CHANNEL_5, ADC_CHANNEL_6, ADC_CHANNEL_7, ADC_CHANNEL_8, ADC_CHANNEL_9}
49#define NUM_ADC_CHANNELS 10
51#define ADC_CHANNEL_TYPE uint16_t
52#define ADC_DATA_TYPE uint16_t
53#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32H2 || \
54 CONFIG_IDF_TARGET_ESP32C2
55#define ADC_CONV_MODE ADC_CONV_ALTER_UNIT
56#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE2
57#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type2.channel)
58#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type2.data)
60 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, ADC_CHANNEL_4}
61#define NUM_ADC_CHANNELS 5
62#define ADC_CHANNEL_TYPE uint32_t
63#define ADC_DATA_TYPE uint32_t
64#elif CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6
65#define ADC_CONV_MODE ADC_CONV_ALTER_UNIT
66#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE2
67#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type2.channel)
68#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type2.data)
70 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, \
71 ADC_CHANNEL_4, ADC_CHANNEL_5, ADC_CHANNEL_6}
72#define NUM_ADC_CHANNELS 7
73#define ADC_CHANNEL_TYPE uint32_t
74#define ADC_DATA_TYPE uint32_t
75#elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S31
76#define ADC_CONV_MODE ADC_CONV_SINGLE_UNIT_1
77#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE2
78#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type2.channel)
79#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type2.data)
81 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, ADC_CHANNEL_4, \
82 ADC_CHANNEL_5, ADC_CHANNEL_6, ADC_CHANNEL_7, ADC_CHANNEL_8, ADC_CHANNEL_9}
83#define NUM_ADC_CHANNELS 10
84#define ADC_CHANNEL_TYPE uint32_t
85#define ADC_DATA_TYPE uint32_t
86#elif CONFIG_IDF_TARGET_ESP32P4
87#define ADC_CONV_MODE ADC_CONV_SINGLE_UNIT_1
88#define ADC_OUTPUT_TYPE ADC_DIGI_OUTPUT_FORMAT_TYPE2
89#define AUDIO_ADC_GET_CHANNEL(p_data) ((p_data)->type2.channel)
90#define AUDIO_ADC_GET_DATA(p_data) ((p_data)->type2.data)
92 {ADC_CHANNEL_0, ADC_CHANNEL_1, ADC_CHANNEL_2, ADC_CHANNEL_3, \
93 ADC_CHANNEL_4, ADC_CHANNEL_5, ADC_CHANNEL_6, ADC_CHANNEL_7}
94#define NUM_ADC_CHANNELS 8
95#define ADC_CHANNEL_TYPE uint32_t
96#define ADC_DATA_TYPE uint32_t
101#define ADC_UNIT ADC_UNIT_1
102#if defined(HAS_ESP32_DAC) && !USE_LEGACY_I2S
103#include "driver/dac_continuous.h"
108#if defined(SOC_ADC_DIGI_DATA_BYTES_PER_CONV) && \
109 defined(SOC_ADC_DIGI_RESULT_BYTES)
110#if defined(SOC_ADC_DIGI_MAX_BYTES_PER_CONV_FRAME)
111constexpr uint32_t ADC_CONTINUOUS_RX_MAX_CONV_FRAME_BYTES =
112 SOC_ADC_DIGI_MAX_BYTES_PER_CONV_FRAME;
114constexpr uint32_t ADC_CONTINUOUS_RX_MAX_CONV_FRAME_BYTES = 4092;
117inline uint32_t adcContinuousAlignFrameSize(uint32_t frame_size_bytes) {
118 uint32_t alignment = SOC_ADC_DIGI_DATA_BYTES_PER_CONV;
119 if (alignment == 0)
return frame_size_bytes;
120 uint32_t remainder = frame_size_bytes % alignment;
121 if (remainder == 0)
return frame_size_bytes;
122 return frame_size_bytes + (alignment - remainder);
125inline uint32_t adcContinuousMaxConvFrameBytes() {
126 return ADC_CONTINUOUS_RX_MAX_CONV_FRAME_BYTES;
129inline uint32_t adcContinuousMaxResultsPerFrame() {
130 return adcContinuousMaxConvFrameBytes() / SOC_ADC_DIGI_RESULT_BYTES;
157 bool is_blocking_write =
true;
158 bool use_apll =
false;
160 dac_channel_mask_t dac_mono_channel = DAC_CHANNEL_MASK_CH0;
186 LOGI(
"I2S_MODE_ADC_BUILT_IN");
192 LOGI(
"I2S_MODE_DAC_BUILT_IN");
209 LOGI(
"analog left output pin: %d", 25);
210 LOGI(
"analog right output pin: %d", 26);
214 LOGI(
"use_apll: %d", use_apll);
#define SOC_ADC_SAMPLE_FREQ_THRES_HIGH
Definition AnalogConfigESP32V1.h:15
#define ADC_UNIT
Definition AnalogConfigESP32V1.h:101
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define portMAX_DELAY
Definition QueueZephyr.h:14
uint32_t TickType_t
Definition QueueZephyr.h:11
#define ANALOG_BUFFER_SIZE
Definition giga.h:13
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition AudioTypes.h:26
@ TX_MODE
Definition AudioTypes.h:26
@ RX_MODE
Definition AudioTypes.h:26