diff options
-rw-r--r-- | ports/esp32/mphalport.c | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/ports/esp32/mphalport.c b/ports/esp32/mphalport.c index e588fc65a..e299a196f 100644 --- a/ports/esp32/mphalport.c +++ b/ports/esp32/mphalport.c @@ -27,7 +27,6 @@ */ #include <stdio.h> -#include <sys/time.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" @@ -86,35 +85,30 @@ void mp_hal_stdout_tx_strn_cooked(const char *str, uint32_t len) { } uint32_t mp_hal_ticks_ms(void) { - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec * 1000 + tv.tv_usec / 1000; + return esp_timer_get_time() / 1000; } uint32_t mp_hal_ticks_us(void) { - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec * 1000000 + tv.tv_usec; + return esp_timer_get_time(); } void mp_hal_delay_ms(uint32_t ms) { - struct timeval tv_start; - struct timeval tv_end; + uint64_t us = ms * 1000; uint64_t dt; - gettimeofday(&tv_start, NULL); + uint64_t t0 = esp_timer_get_time(); for (;;) { - gettimeofday(&tv_end, NULL); - dt = (tv_end.tv_sec - tv_start.tv_sec) * 1000 + (tv_end.tv_usec - tv_start.tv_usec) / 1000; - if (dt + portTICK_PERIOD_MS >= ms) { - // doing a vTaskDelay would take us beyound requested delay time + uint64_t t1 = esp_timer_get_time(); + dt = t1 - t0; + if (dt + portTICK_PERIOD_MS * 1000 >= us) { + // doing a vTaskDelay would take us beyond requested delay time break; } MICROPY_EVENT_POLL_HOOK vTaskDelay(1); } - if (dt < ms) { + if (dt < us) { // do the remaining delay accurately - ets_delay_us((ms - dt) * 1000); + mp_hal_delay_us(us - dt); } } |