44#include " esp_idf_version.h"
55#include " sdkconfig.h"
66
7- #if defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S3)
7+ #if defined(CONFIG_IDF_TARGET_ESP32)
8+ #include " driver/timer.h"
9+ #elif defined(CONFIG_IDF_TARGET_ESP32S3)
810#include " driver/gptimer.h"
911#else
1012#error "neither esp32 or s3"
@@ -40,12 +42,19 @@ class HardwareTimer
4042 } fn_timer;
4143
4244
45+ #if defined(CONFIG_IDF_TARGET_ESP32S3)
4346gptimer_handle_t gptimer;
4447gptimer_config_t fn_config;
4548// gptimer_alarm_config_t alarm_config;
49+ #else
50+ timer_config_t fn_config;
51+ #endif
4652
4753public:
4854 void config ();
55+
56+ #if defined(CONFIG_IDF_TARGET_ESP32S3)
57+
4958 void reset () { gptimer_set_raw_count (gptimer, 0 ); };
5059 void latch () {};
5160 void read () {
@@ -54,6 +63,20 @@ gptimer_config_t fn_config;
5463 fn_timer.t0 = count & 0xFFFFFFFF ;
5564 };
5665
66+ #else
67+
68+ #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
69+ void reset () { TIMERG1.hw_timer [TIMER_1].loadlo .val = 0 ; TIMERG1.hw_timer [TIMER_1].load .val = 0 ; };
70+ void latch () { TIMERG1.hw_timer [TIMER_1].update .val = 0 ; };
71+ void read () { fn_timer.t0 = TIMERG1.hw_timer [TIMER_1].lo .val ; };
72+ #else
73+ void reset () { TIMERG1.hw_timer [TIMER_1].load_low = 0 ; TIMERG1.hw_timer [TIMER_1].reload = 0 ; };
74+ void latch () { TIMERG1.hw_timer [TIMER_1].update = 0 ; };
75+ void read () { fn_timer.t0 = TIMERG1.hw_timer [TIMER_1].cnt_low ; };
76+ #endif
77+
78+ #endif
79+
5780 bool timeout () { return (fn_timer.t0 > fn_timer.tn ); };
5881 void wait () { do {latch (); read ();} while (!timeout ()); };
5982 void alarm_set (int s) { fn_timer.tn = fn_timer.t0 + s * TIMER_100NS_FACTOR - TIMER_ADJUST; };
0 commit comments