mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-29 13:46:37 +00:00
Fix Onewire ESP32S2 functionality
Fix Onewire ESP32S2 functionality (#14338)
This commit is contained in:
parent
342af3d466
commit
165880f06b
@ -161,7 +161,7 @@ IO_REG_TYPE directRead(IO_REG_TYPE pin)
|
|||||||
#else // plain ESP32
|
#else // plain ESP32
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
return (GPIO.in >> pin) & 0x1;
|
return (GPIO.in >> pin) & 0x1;
|
||||||
else if ( pin < 40 )
|
else if ( pin < 46 )
|
||||||
return (GPIO.in1.val >> (pin - 32)) & 0x1;
|
return (GPIO.in1.val >> (pin - 32)) & 0x1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ void directWriteLow(IO_REG_TYPE pin)
|
|||||||
#else // plain ESP32
|
#else // plain ESP32
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
GPIO.out_w1tc = ((uint32_t)1 << pin);
|
GPIO.out_w1tc = ((uint32_t)1 << pin);
|
||||||
else if ( pin < 34 )
|
else if ( pin < 46 )
|
||||||
GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32));
|
GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -189,7 +189,7 @@ void directWriteHigh(IO_REG_TYPE pin)
|
|||||||
#else // plain ESP32
|
#else // plain ESP32
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
GPIO.out_w1ts = ((uint32_t)1 << pin);
|
GPIO.out_w1ts = ((uint32_t)1 << pin);
|
||||||
else if ( pin < 34 )
|
else if ( pin < 46 )
|
||||||
GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32));
|
GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -211,19 +211,15 @@ void directModeInput(IO_REG_TYPE pin)
|
|||||||
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown);
|
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown);
|
||||||
}
|
}
|
||||||
#elif ESP_IDF_VERSION_MAJOR > 3 // ESP32-S2 needs IDF 4.2 or later
|
#elif ESP_IDF_VERSION_MAJOR > 3 // ESP32-S2 needs IDF 4.2 or later
|
||||||
int rtcio_num = rtc_io_number_get((gpio_num_t)pin);
|
int8_t rtc_io = esp32_gpioMux[pin].rtc;
|
||||||
|
uint32_t rtc_reg = (rtc_io != -1)?rtc_io_desc[rtc_io].reg:0;
|
||||||
if (rtcio_num >= 0) {
|
if ( rtc_reg ) // RTC pins PULL settings
|
||||||
uint32_t rtc_reg(rtc_io_desc[rtcio_num].reg);
|
{
|
||||||
|
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtc_io].mux);
|
||||||
if ( rtc_reg ) // RTC pins PULL settings
|
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtc_io].pullup | rtc_io_desc[rtc_io].pulldown);
|
||||||
{
|
|
||||||
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtcio_num].mux);
|
|
||||||
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtcio_num].pullup | rtc_io_desc[rtcio_num].pulldown);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
// Input
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
GPIO.enable_w1tc = ((uint32_t)1 << pin);
|
GPIO.enable_w1tc = ((uint32_t)1 << pin);
|
||||||
else
|
else
|
||||||
@ -231,7 +227,7 @@ void directModeInput(IO_REG_TYPE pin)
|
|||||||
|
|
||||||
uint32_t pinFunction((uint32_t)2 << FUN_DRV_S); // what are the drivers?
|
uint32_t pinFunction((uint32_t)2 << FUN_DRV_S); // what are the drivers?
|
||||||
pinFunction |= FUN_IE; // input enable but required for output as well?
|
pinFunction |= FUN_IE; // input enable but required for output as well?
|
||||||
pinFunction |= ((uint32_t)2 << MCU_SEL_S);
|
pinFunction |= ((uint32_t)PIN_FUNC_GPIO << MCU_SEL_S);
|
||||||
|
|
||||||
ESP_REG(DR_REG_IO_MUX_BASE + esp32_gpioMux[pin].reg) = pinFunction;
|
ESP_REG(DR_REG_IO_MUX_BASE + esp32_gpioMux[pin].reg) = pinFunction;
|
||||||
|
|
||||||
@ -257,19 +253,15 @@ void directModeOutput(IO_REG_TYPE pin)
|
|||||||
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown);
|
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown);
|
||||||
}
|
}
|
||||||
#elif ESP_IDF_VERSION_MAJOR > 3 // ESP32-S2 needs IDF 4.2 or later
|
#elif ESP_IDF_VERSION_MAJOR > 3 // ESP32-S2 needs IDF 4.2 or later
|
||||||
int rtcio_num = rtc_io_number_get((gpio_num_t)pin);
|
int8_t rtc_io = esp32_gpioMux[pin].rtc;
|
||||||
|
uint32_t rtc_reg = (rtc_io != -1)?rtc_io_desc[rtc_io].reg:0;
|
||||||
if (rtcio_num >= 0) {
|
if ( rtc_reg ) // RTC pins PULL settings
|
||||||
uint32_t rtc_reg(rtc_io_desc[rtcio_num].reg);
|
{
|
||||||
|
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtc_io].mux);
|
||||||
if ( rtc_reg ) // RTC pins PULL settings
|
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtc_io].pullup | rtc_io_desc[rtc_io].pulldown);
|
||||||
{
|
|
||||||
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtcio_num].mux);
|
|
||||||
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[rtcio_num].pullup | rtc_io_desc[rtcio_num].pulldown);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
// Output
|
||||||
if ( pin < 32 )
|
if ( pin < 32 )
|
||||||
GPIO.enable_w1ts = ((uint32_t)1 << pin);
|
GPIO.enable_w1ts = ((uint32_t)1 << pin);
|
||||||
else // already validated to pins <= 33
|
else // already validated to pins <= 33
|
||||||
@ -277,7 +269,7 @@ void directModeOutput(IO_REG_TYPE pin)
|
|||||||
|
|
||||||
uint32_t pinFunction((uint32_t)2 << FUN_DRV_S); // what are the drivers?
|
uint32_t pinFunction((uint32_t)2 << FUN_DRV_S); // what are the drivers?
|
||||||
pinFunction |= FUN_IE; // input enable but required for output as well?
|
pinFunction |= FUN_IE; // input enable but required for output as well?
|
||||||
pinFunction |= ((uint32_t)2 << MCU_SEL_S);
|
pinFunction |= ((uint32_t)PIN_FUNC_GPIO << MCU_SEL_S);
|
||||||
|
|
||||||
ESP_REG(DR_REG_IO_MUX_BASE + esp32_gpioMux[pin].reg) = pinFunction;
|
ESP_REG(DR_REG_IO_MUX_BASE + esp32_gpioMux[pin].reg) = pinFunction;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user