Rework pulseIn to work on ESP32-C3
Fixes: https://github.com/espressif/arduino-esp32/issues/5488
This commit is contained in:
parent
c5a1f3efd7
commit
023ae75b97
@ -17,13 +17,11 @@
|
|||||||
//#include <limits.h>
|
//#include <limits.h>
|
||||||
#include "wiring_private.h"
|
#include "wiring_private.h"
|
||||||
#include "pins_arduino.h"
|
#include "pins_arduino.h"
|
||||||
|
#include <hal/cpu_hal.h>
|
||||||
|
|
||||||
extern uint32_t xthal_get_ccount();
|
|
||||||
|
|
||||||
#define WAIT_FOR_PIN_STATE(state) \
|
#define WAIT_FOR_PIN_STATE(state) \
|
||||||
while (digitalRead(pin) != (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; \
|
return 0; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
@ -36,12 +34,12 @@ unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout)
|
|||||||
timeout = max_timeout_us;
|
timeout = max_timeout_us;
|
||||||
}
|
}
|
||||||
const uint32_t timeout_cycles = microsecondsToClockCycles(timeout);
|
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);
|
||||||
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);
|
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)
|
unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout)
|
||||||
|
Loading…
Reference in New Issue
Block a user