Skip to content

Commit 165880f

Browse files
committed
Fix Onewire ESP32S2 functionality
Fix Onewire ESP32S2 functionality (#14338)
1 parent 342af3d commit 165880f

File tree

1 file changed

+19
-27
lines changed
  • lib/lib_basic/OneWire-Stickbreaker-20190506-1.1

1 file changed

+19
-27
lines changed

lib/lib_basic/OneWire-Stickbreaker-20190506-1.1/OneWire.h

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ IO_REG_TYPE directRead(IO_REG_TYPE pin)
161161
#else // plain ESP32
162162
if ( pin < 32 )
163163
return (GPIO.in >> pin) & 0x1;
164-
else if ( pin < 40 )
164+
else if ( pin < 46 )
165165
return (GPIO.in1.val >> (pin - 32)) & 0x1;
166166
#endif
167167

@@ -176,7 +176,7 @@ void directWriteLow(IO_REG_TYPE pin)
176176
#else // plain ESP32
177177
if ( pin < 32 )
178178
GPIO.out_w1tc = ((uint32_t)1 << pin);
179-
else if ( pin < 34 )
179+
else if ( pin < 46 )
180180
GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32));
181181
#endif
182182
}
@@ -189,7 +189,7 @@ void directWriteHigh(IO_REG_TYPE pin)
189189
#else // plain ESP32
190190
if ( pin < 32 )
191191
GPIO.out_w1ts = ((uint32_t)1 << pin);
192-
else if ( pin < 34 )
192+
else if ( pin < 46 )
193193
GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32));
194194
#endif
195195
}
@@ -211,27 +211,23 @@ void directModeInput(IO_REG_TYPE pin)
211211
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown);
212212
}
213213
#elif ESP_IDF_VERSION_MAJOR > 3 // ESP32-S2 needs IDF 4.2 or later
214-
int rtcio_num = rtc_io_number_get((gpio_num_t)pin);
215-
216-
if (rtcio_num >= 0) {
217-
uint32_t rtc_reg(rtc_io_desc[rtcio_num].reg);
218-
219-
if ( rtc_reg ) // RTC pins PULL settings
220-
{
221-
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtcio_num].mux);
222-
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtcio_num].pullup | rtc_io_desc[rtcio_num].pulldown);
223-
}
214+
int8_t rtc_io = esp32_gpioMux[pin].rtc;
215+
uint32_t rtc_reg = (rtc_io != -1)?rtc_io_desc[rtc_io].reg:0;
216+
if ( rtc_reg ) // RTC pins PULL settings
217+
{
218+
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtc_io].mux);
219+
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtc_io].pullup | rtc_io_desc[rtc_io].pulldown);
224220
}
225221
#endif
226-
222+
// Input
227223
if ( pin < 32 )
228224
GPIO.enable_w1tc = ((uint32_t)1 << pin);
229225
else
230226
GPIO.enable1_w1tc.val = ((uint32_t)1 << (pin - 32));
231227

232228
uint32_t pinFunction((uint32_t)2 << FUN_DRV_S); // what are the drivers?
233229
pinFunction |= FUN_IE; // input enable but required for output as well?
234-
pinFunction |= ((uint32_t)2 << MCU_SEL_S);
230+
pinFunction |= ((uint32_t)PIN_FUNC_GPIO << MCU_SEL_S);
235231

236232
ESP_REG(DR_REG_IO_MUX_BASE + esp32_gpioMux[pin].reg) = pinFunction;
237233

@@ -257,27 +253,23 @@ void directModeOutput(IO_REG_TYPE pin)
257253
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown);
258254
}
259255
#elif ESP_IDF_VERSION_MAJOR > 3 // ESP32-S2 needs IDF 4.2 or later
260-
int rtcio_num = rtc_io_number_get((gpio_num_t)pin);
261-
262-
if (rtcio_num >= 0) {
263-
uint32_t rtc_reg(rtc_io_desc[rtcio_num].reg);
264-
265-
if ( rtc_reg ) // RTC pins PULL settings
266-
{
267-
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtcio_num].mux);
268-
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtcio_num].pullup | rtc_io_desc[rtcio_num].pulldown);
269-
}
256+
int8_t rtc_io = esp32_gpioMux[pin].rtc;
257+
uint32_t rtc_reg = (rtc_io != -1)?rtc_io_desc[rtc_io].reg:0;
258+
if ( rtc_reg ) // RTC pins PULL settings
259+
{
260+
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtc_io].mux);
261+
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtc_io].pullup | rtc_io_desc[rtc_io].pulldown);
270262
}
271263
#endif
272-
264+
// Output
273265
if ( pin < 32 )
274266
GPIO.enable_w1ts = ((uint32_t)1 << pin);
275267
else // already validated to pins <= 33
276268
GPIO.enable1_w1ts.val = ((uint32_t)1 << (pin - 32));
277269

278270
uint32_t pinFunction((uint32_t)2 << FUN_DRV_S); // what are the drivers?
279271
pinFunction |= FUN_IE; // input enable but required for output as well?
280-
pinFunction |= ((uint32_t)2 << MCU_SEL_S);
272+
pinFunction |= ((uint32_t)PIN_FUNC_GPIO << MCU_SEL_S);
281273

282274
ESP_REG(DR_REG_IO_MUX_BASE + esp32_gpioMux[pin].reg) = pinFunction;
283275

0 commit comments

Comments
 (0)