Skip to content

Commit d47f5ac

Browse files
authored
Merge pull request #11056 from dhalbert/espressif-pdmin-support
Turn on PDMIn on ESP32. Update limitations doc for PDMIn and TouchAlarm.rm. Improve option handling in espressif/mpconfigport.mk.
2 parents 94cfa71 + 704fe54 commit d47f5ac

5 files changed

Lines changed: 69 additions & 27 deletions

File tree

ports/espressif/common-hal/alarm/touch/TouchAlarm.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,19 @@ void alarm_touch_touchalarm_set_alarm(const bool deep_sleep, const size_t n_alar
125125
.init_charge_volt = TOUCH_INIT_CHARGE_VOLT_DEFAULT,
126126
.group = TOUCH_CHAN_TRIG_GROUP_BOTH,
127127
};
128-
#else
128+
#elif SOC_TOUCH_SENSOR_VERSION == 2
129129
touch_channel_config_t chan_cfg = {
130130
.active_thresh = {(uint32_t)(benchmark / 10)},
131131
.charge_speed = TOUCH_CHARGE_SPEED_7,
132132
.init_charge_volt = TOUCH_INIT_CHARGE_VOLT_DEFAULT,
133133
};
134+
#elif SOC_TOUCH_SENSOR_VERSION == 3
135+
// Values are similar to an ESP-IDF example: 1000, 2500, 5000.
136+
touch_channel_config_t chan_cfg = {
137+
.active_thresh = {(uint32_t)(benchmark / 10), (uint32_t)(benchmark / 4), (uint32_t)(benchmark / 2)},
138+
};
139+
#else
140+
#error bad SOC_TOUCH_SENSOR_VERSION
134141
#endif
135142
touch_sensor_reconfig_channel(chan, &chan_cfg);
136143
}

ports/espressif/mpconfigport.mk

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@ CIRCUITPY_LIBC_STRING0 = 0
6464
# These modules are implemented in ports/<port>/common-hal:
6565
CIRCUITPY__EVE ?= 1
6666
CIRCUITPY_ALARM ?= 1
67-
CIRCUITPY_ALARM_TOUCH ?= 0
67+
CIRCUITPY_ALARM_TOUCH ?= 1
6868
CIRCUITPY_ANALOGBUFIO ?= 1
6969
CIRCUITPY_AUDIOBUSIO ?= 1
70-
CIRCUITPY_AUDIOBUSIO_PDMIN ?= 0
70+
CIRCUITPY_AUDIOBUSIO_PDMIN ?= 1
7171
CIRCUITPY_AUDIOI2SIN ?= 1
7272
CIRCUITPY_AUDIOIO ?= 1
7373
CIRCUITPY_BLEIO_HCI = 0
@@ -80,7 +80,7 @@ CIRCUITPY_ESPULP ?= 1
8080
CIRCUITPY_FRAMEBUFFERIO ?= 1
8181
CIRCUITPY_FREQUENCYIO ?= 1
8282
CIRCUITPY_HASHLIB ?= 1
83-
CIRCUITPY_I2CTARGET ?= 0
83+
CIRCUITPY_I2CTARGET = 0
8484
CIRCUITPY_MAX3421E ?= 1
8585
CIRCUITPY_MEMORYMAP ?= 1
8686
CIRCUITPY_RCLCPY ?= 0
@@ -92,6 +92,7 @@ CIRCUITPY_ROTARYIO ?= 1
9292
CIRCUITPY_SDIOIO ?= 1
9393
CIRCUITPY_SETTABLE_PROCESSOR_FREQUENCY ?= 1
9494
CIRCUITPY_SYNTHIO_MAX_CHANNELS ?= 12
95+
CIRCUITPY_TOUCHIO ?= 1
9596
CIRCUITPY_TOUCHIO_USE_NATIVE ?= 1
9697
CIRCUITPY_WATCHDOG ?= 1
9798
CIRCUITPY_WIFI ?= 1
@@ -101,7 +102,6 @@ CIRCUITPY_SOCKETPOOL_IPV6 ?= 1
101102
#### esp32 ############################################################
102103
ifeq ($(IDF_TARGET),esp32)
103104
# Modules
104-
CIRCUITPY_ALARM_TOUCH = 1
105105
CIRCUITPY_RGBMATRIX = 0
106106

107107
# Has no USB
@@ -117,6 +117,10 @@ CIRCUITPY_ESPCAMERA = 0
117117
CIRCUITPY_ESPULP = 0
118118
CIRCUITPY_MEMORYMAP = 0
119119

120+
# No capacitive touch peripheral
121+
CIRCUITPY_ALARM_TOUCH = 0
122+
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
123+
120124
# No I80 support from the IDF
121125
CIRCUITPY_PARALLELDISPLAYBUS = 0
122126

@@ -146,8 +150,6 @@ CIRCUITPY_RGBMATRIX = 0
146150
# No SDMMC
147151
CIRCUITPY_SDIOIO = 0
148152

149-
CIRCUITPY_TOUCHIO ?= 1
150-
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
151153
# Features
152154
CIRCUITPY_USB_DEVICE = 0
153155
CIRCUITPY_ESP_USB_SERIAL_JTAG = 0
@@ -162,9 +164,16 @@ CIRCUITPY_MEMORYMAP = 0
162164
# No I80 support from the IDF
163165
CIRCUITPY_PARALLELDISPLAYBUS = 0
164166

167+
# No capacitive touch peripheral
168+
CIRCUITPY_ALARM_TOUCH = 0
169+
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
170+
165171
# No DAC
166172
CIRCUITPY_AUDIOIO = 0
167173

174+
# No I2S peripheral PDM-to-PCM hardware support
175+
CIRCUITPY_AUDIOBUSIO_PDMIN = 0
176+
168177
# No PCNT peripheral
169178
CIRCUITPY_FREQUENCYIO = 0
170179
CIRCUITPY_COUNTIO = 0
@@ -173,8 +182,6 @@ CIRCUITPY_ROTARYIO = 0
173182
# No SDMMC
174183
CIRCUITPY_SDIOIO = 0
175184

176-
CIRCUITPY_TOUCHIO ?= 1
177-
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
178185
# Features
179186
CIRCUITPY_USB_DEVICE = 0
180187
CIRCUITPY_ESP_USB_SERIAL_JTAG ?= 1
@@ -187,9 +194,16 @@ CIRCUITPY_ESPULP = 0
187194
CIRCUITPY_MEMORYMAP = 0
188195
CIRCUITPY_RGBMATRIX = 0
189196

197+
# No capacitive touch peripheral
198+
CIRCUITPY_ALARM_TOUCH = 0
199+
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
200+
190201
# No DAC
191202
CIRCUITPY_AUDIOIO = 0
192203

204+
# No I2S peripheral PDM-to-PCM hardware support
205+
CIRCUITPY_AUDIOBUSIO_PDMIN = 0
206+
193207
# No space for this
194208
CIRCUITPY_AUDIOBUSIO = 0
195209

@@ -199,8 +213,6 @@ CIRCUITPY_PARALLELDISPLAYBUS = 0
199213
# No SDMMC
200214
CIRCUITPY_SDIOIO = 0
201215

202-
CIRCUITPY_TOUCHIO ?= 1
203-
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
204216
# Features
205217
CIRCUITPY_USB_DEVICE = 0
206218
CIRCUITPY_ESP_USB_SERIAL_JTAG ?= 1
@@ -213,6 +225,10 @@ CIRCUITPY_ESPULP = 0
213225
CIRCUITPY_MEMORYMAP = 0
214226
CIRCUITPY_RGBMATRIX = 0
215227

228+
# No capacitive touch peripheral
229+
CIRCUITPY_ALARM_TOUCH = 0
230+
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
231+
216232
# No DAC
217233
CIRCUITPY_AUDIOIO = 0
218234

@@ -225,8 +241,6 @@ CIRCUITPY_PARALLELDISPLAYBUS = 0
225241
# No SDMMC
226242
CIRCUITPY_SDIOIO = 0
227243

228-
CIRCUITPY_TOUCHIO ?= 1
229-
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
230244
# Features
231245
CIRCUITPY_USB_DEVICE = 0
232246
CIRCUITPY_ESP_USB_SERIAL_JTAG ?= 1
@@ -252,18 +266,22 @@ CIRCUITPY_ESPULP = 0
252266
CIRCUITPY_MEMORYMAP = 0
253267
CIRCUITPY_RGBMATRIX = 0
254268

269+
# No capacitive touch peripheral
270+
CIRCUITPY_ALARM_TOUCH = 0
271+
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
272+
255273
# No DAC
256274
CIRCUITPY_AUDIOIO = 0
257275

276+
# No I2S peripheral PDM-to-PCM hardware support
277+
CIRCUITPY_AUDIOBUSIO_PDMIN = 0
278+
258279
# No I80 support from the IDF
259280
CIRCUITPY_PARALLELDISPLAYBUS = 0
260281

261282
# No SDMMC
262283
CIRCUITPY_SDIOIO = 0
263284

264-
CIRCUITPY_TOUCHIO ?= 1
265-
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
266-
267285
# Features
268286
CIRCUITPY_USB_DEVICE = 0
269287
CIRCUITPY_ESP_USB_SERIAL_JTAG ?= 1
@@ -283,9 +301,6 @@ CIRCUITPY_BLEIO_NATIVE = 0
283301
CIRCUITPY_WIFI = 0
284302
CIRCUITPY_SSL = 0
285303

286-
CIRCUITPY_TOUCHIO = 1
287-
CIRCUITPY_TOUCHIO_USE_NATIVE = 0
288-
289304
# Second stage bootloader doesn't work when the factory partition is empty due to
290305
# UF2 missing.
291306
UF2_BOOTLOADER = 0
@@ -316,9 +331,11 @@ CIRCUITPY_MIPIDSI = 1
316331
#### esp32s2 ##########################################################
317332
else ifeq ($(IDF_TARGET),esp32s2)
318333
# Modules
319-
CIRCUITPY_ALARM_TOUCH = $(CIRCUITPY_ALARM)
320334
CIRCUITPY_AUDIOIO ?= 1
321335

336+
# No I2S peripheral PDM-to-PCM hardware support
337+
CIRCUITPY_AUDIOBUSIO_PDMIN = 0
338+
322339
# No BLE in hw
323340
CIRCUITPY_BLEIO_NATIVE = 0
324341

@@ -331,8 +348,6 @@ CIRCUITPY_ESP_USB_SERIAL_JTAG ?= 0
331348
else ifeq ($(IDF_TARGET),esp32s3)
332349

333350
# Modules
334-
CIRCUITPY_ALARM_TOUCH = $(CIRCUITPY_ALARM)
335-
CIRCUITPY_AUDIOBUSIO_PDMIN = 1
336351
CIRCUITPY_ESP_USB_SERIAL_JTAG ?= 0
337352

338353
# No DAC
@@ -342,7 +357,7 @@ endif
342357
#### end chip-specific choices ########################################
343358

344359
# By default, enable dualbank, and it'll be disabled for small flash sizes
345-
CIRCUITPY_DUALBANK = 1
360+
CIRCUITPY_DUALBANK ?= 1
346361

347362
# No room for large modules on 2MB boards
348363
# 2MB boards have a single firmware partition, and can't do dualbank.

ports/espressif/peripherals/touch.c

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ void peripherals_touch_init(const int channel_id) {
7474
touch_sensor_sample_config_t sample_cfg = TOUCH_SENSOR_V2_DEFAULT_SAMPLE_CONFIG(500, TOUCH_VOLT_LIM_L_0V5, TOUCH_VOLT_LIM_H_2V2);
7575
#elif SOC_TOUCH_SENSOR_VERSION == 3
7676
touch_sensor_sample_config_t sample_cfg = TOUCH_SENSOR_V3_DEFAULT_SAMPLE_CONFIG2(3, 29, 8, 3);
77+
#else
78+
#error bad SOC_TOUCH_SENSOR_VERSION
7779
#endif
7880
touch_sensor_config_t sens_cfg = TOUCH_SENSOR_DEFAULT_BASIC_CONFIG(1, &sample_cfg);
7981
touch_sensor_new_controller(&sens_cfg, &touch_controller);
@@ -86,12 +88,19 @@ void peripherals_touch_init(const int channel_id) {
8688
.init_charge_volt = TOUCH_INIT_CHARGE_VOLT_DEFAULT,
8789
.group = TOUCH_CHAN_TRIG_GROUP_BOTH,
8890
};
89-
#else
91+
#elif SOC_TOUCH_SENSOR_VERSION == 2
9092
touch_channel_config_t chan_cfg = {
9193
.active_thresh = {2000},
9294
.charge_speed = TOUCH_CHARGE_SPEED_7,
9395
.init_charge_volt = TOUCH_INIT_CHARGE_VOLT_DEFAULT,
9496
};
97+
#elif SOC_TOUCH_SENSOR_VERSION == 3
98+
// Values are similar to an ESP-IDF example: 1000, 2500, 5000.
99+
touch_channel_config_t chan_cfg = {
100+
.active_thresh = {1000, 2000, 5000},
101+
};
102+
#else
103+
#error bad SOC_TOUCH_SENSOR_VERSION
95104
#endif
96105

97106
touch_sensor_new_channel(touch_controller, channel_id, &chan_cfg, &touch_channels[idx]);
@@ -110,19 +119,29 @@ uint16_t peripherals_touch_read(int channel_id) {
110119
}
111120

112121
uint32_t touch_value = 0;
113-
touch_channel_read_data(touch_channels[idx], TOUCH_CHAN_DATA_TYPE_RAW, &touch_value);
114122

115123
#if SOC_TOUCH_SENSOR_VERSION == 1
116124
// ESP32 touch reads a lower value when touched.
117125
// Flip the values to be consistent with TouchIn assumptions.
126+
touch_channel_read_data(touch_channels[idx], TOUCH_CHAN_DATA_TYPE_RAW, &touch_value);
118127
if (touch_value > UINT16_MAX) {
119128
return 0;
120129
}
121130
return UINT16_MAX - (uint16_t)touch_value;
122-
#else
131+
touch_channel_read_data(touch_channels[idx], TOUCH_CHAN_DATA_TYPE_RAW, &touch_value);
132+
return UINT16_MAX - (uint16_t)touch_value;
133+
#elif SOC_TOUCH_SENSOR_VERSION == 2
123134
if (touch_value > UINT16_MAX) {
124135
return UINT16_MAX;
125136
}
126137
return (uint16_t)touch_value;
138+
#elif SOC_TOUCH_SENSOR_VERSION == 3
139+
touch_channel_read_data(touch_channels[idx], TOUCH_CHAN_DATA_TYPE_SMOOTH, &touch_value);
140+
if (touch_value > UINT16_MAX) {
141+
return UINT16_MAX;
142+
}
143+
return (uint16_t)touch_value;
144+
#else
145+
#error bad SOC_TOUCH_SENSOR_VERSION
127146
#endif
128147
}

shared-bindings/alarm/touch/TouchAlarm.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
//| may be limited due to hardware restrictions, particularly for deep-sleep alarms.
2222
//|
2323
//| **Limitations:** Not available on SAMD, Nordic, or RP2040.
24+
//| On Espressif, only available on ESP32, ESP32-S2, ESP32-S3, and ESP32-P4.
2425
//| """
2526
//| ...
2627
//|

shared-bindings/audiobusio/PDMIn.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
//|
4949
//| **Limitations:** On SAMD and RP2040, supports only 8 or 16 bit mono input, with 64x oversampling.
5050
//| On nRF52840, supports only 16 bit mono input at 16 kHz; oversampling is fixed at 64x. Not provided
51-
//| on nRF52833 for space reasons. Not available on Espressif.
51+
//| on nRF52833 for space reasons. On Espressif, only available on ESP32, ESP32-S3, and ESP32-P4.
5252
//|
5353
//| For example, to record 8-bit unsigned samples to a buffer::
5454
//|

0 commit comments

Comments
 (0)