summaryrefslogtreecommitdiffstatshomepage
path: root/ports/samd/modtime.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/samd/modtime.c')
-rw-r--r--ports/samd/modtime.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/ports/samd/modtime.c b/ports/samd/modtime.c
index 83072dd16f..0bed3cb83a 100644
--- a/ports/samd/modtime.c
+++ b/ports/samd/modtime.c
@@ -28,6 +28,8 @@
#include "shared/timeutils/timeutils.h"
#include "modmachine.h"
+static uint64_t time_us_64_offset_from_epoch;
+
// Return the localtime as an 8-tuple.
static mp_obj_t mp_time_localtime_get(void) {
timeutils_struct_time_t tm;
@@ -54,3 +56,15 @@ static mp_obj_t mp_time_time_get(void) {
return mp_obj_new_int_from_uint(timeutils_mktime(
tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec));
}
+
+void mp_hal_time_ns_set_from_rtc(void) {
+ timeutils_struct_time_t tm;
+ rtc_gettime(&tm);
+ uint64_t time_us = (uint64_t)timeutils_mktime(tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour,
+ tm.tm_min, tm.tm_sec) * 1000000ULL;
+ time_us_64_offset_from_epoch = time_us - mp_hal_ticks_us_64();
+}
+
+uint64_t mp_hal_time_ns(void) {
+ return (time_us_64_offset_from_epoch + mp_hal_ticks_us_64()) * 1000ULL;
+}