From 023ae75b9718a7e0f14b8ebe246b68339d755dd3 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Mon, 2 Aug 2021 14:53:11 +0300 Subject: [PATCH] Rework pulseIn to work on ESP32-C3 Fixes: https://github.com/espressif/arduino-esp32/issues/5488 --- cores/esp32/wiring_pulse.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/cores/esp32/wiring_pulse.c b/cores/esp32/wiring_pulse.c index e6326789..cb3e946d 100644 --- a/cores/esp32/wiring_pulse.c +++ b/cores/esp32/wiring_pulse.c @@ -17,13 +17,11 @@ //#include #include "wiring_private.h" #include "pins_arduino.h" - - -extern uint32_t xthal_get_ccount(); +#include #define WAIT_FOR_PIN_STATE(state) \ while (digitalRead(pin) != (state)) { \ - if (xthal_get_ccount() - start_cycle_count > timeout_cycles) { \ + if (cpu_hal_get_cycle_count() - start_cycle_count > timeout_cycles) { \ return 0; \ } \ } @@ -36,12 +34,12 @@ unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout) timeout = max_timeout_us; } const uint32_t timeout_cycles = microsecondsToClockCycles(timeout); - const uint32_t start_cycle_count = xthal_get_ccount(); + const uint32_t start_cycle_count = cpu_hal_get_cycle_count(); WAIT_FOR_PIN_STATE(!state); WAIT_FOR_PIN_STATE(state); - const uint32_t pulse_start_cycle_count = xthal_get_ccount(); + const uint32_t pulse_start_cycle_count = cpu_hal_get_cycle_count(); WAIT_FOR_PIN_STATE(!state); - return clockCyclesToMicroseconds(xthal_get_ccount() - pulse_start_cycle_count); + return clockCyclesToMicroseconds(cpu_hal_get_cycle_count() - pulse_start_cycle_count); } unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout)