From 05c4a7af8fadf4be8bdb794fc0335e113c134d14 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Tue, 29 Jan 2019 11:44:00 +0100 Subject: add primitive esp8266 counter --- include/arch/esp8266/driver/counter.h | 36 +++++++++++++++++++++++++++++++++++ src/arch/esp8266/driver/counter.cc | 3 +++ 2 files changed, 39 insertions(+) create mode 100644 include/arch/esp8266/driver/counter.h create mode 100644 src/arch/esp8266/driver/counter.cc diff --git a/include/arch/esp8266/driver/counter.h b/include/arch/esp8266/driver/counter.h new file mode 100644 index 0000000..754f4d6 --- /dev/null +++ b/include/arch/esp8266/driver/counter.h @@ -0,0 +1,36 @@ +#ifndef COUNTER_H +#define COUNTER_H + +extern "C" { +#include "osapi.h" +#include "user_interface.h" +} +#include "c_types.h" + +class Counter { + private: + Counter(const Counter ©); + uint32_t start_cycles; + + public: + Counter() : start_cycles(0) {} + uint32_t overflowed; + + inline void start() { + asm volatile ("esync; rsr %0,ccount":"=a" (start_cycles)); + } + + inline uint32_t stop() { + uint32_t stop_cycles; + asm volatile ("esync; rsr %0,ccount":"=a" (stop_cycles)); + if (stop_cycles > start_cycles) { + return stop_cycles - start_cycles; + } else { + return 0; + } + } +}; + +extern Counter counter; + +#endif diff --git a/src/arch/esp8266/driver/counter.cc b/src/arch/esp8266/driver/counter.cc new file mode 100644 index 0000000..17a0f95 --- /dev/null +++ b/src/arch/esp8266/driver/counter.cc @@ -0,0 +1,3 @@ +#include "driver/counter.h" + +Counter counter; -- cgit v1.2.3