From da4d936eeed708198494c3cc29c21d637023f472 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens <hauke@hauke-m.de> Date: Thu, 15 Aug 2019 22:31:31 +0200 Subject: [PATCH] RTC: Add function to set time This allows to set the current time in milliseconds. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- epicardium/epicardium.h | 6 ++++++ epicardium/modules/rtc.c | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h index 25c239ac..36ea64b8 100644 --- a/epicardium/epicardium.h +++ b/epicardium/epicardium.h @@ -66,6 +66,7 @@ typedef _Bool bool; #define API_RTC_GET_SECONDS 0x50 #define API_RTC_SCHEDULE_ALARM 0x51 +#define API_RTC_SET_MILLISECONDS 0x52 #define API_LEDS_SET 0x60 #define API_LEDS_SET_HSV 0x61 @@ -964,6 +965,11 @@ API(API_FILE_UNLINK, int epic_file_unlink(const char* path)); */ API(API_RTC_GET_SECONDS, uint32_t epic_rtc_get_seconds(void)); +/** + * Sets the current RTC time in milliseconds + */ +API(API_RTC_SET_MILLISECONDS, void epic_rtc_set_milliseconds(uint64_t milliseconds)); + /** * Schedule the RTC alarm for the given timestamp. * diff --git a/epicardium/modules/rtc.c b/epicardium/modules/rtc.c index edfb0441..030de310 100644 --- a/epicardium/modules/rtc.c +++ b/epicardium/modules/rtc.c @@ -25,6 +25,21 @@ uint32_t epic_rtc_get_seconds(void) return sec; } +void epic_rtc_set_milliseconds(uint64_t milliseconds) +{ + uint32_t sec, subsec; + + sec = milliseconds / 1000; + subsec = (milliseconds % 1000); + subsec *= 256; + subsec /= 1000; + + while (RTC_Init(MXC_RTC, sec, subsec, NULL) == E_BUSY) + ; + while (RTC_EnableRTCE(MXC_RTC) == E_BUSY) + ; +} + void RTC_IRQHandler(void) { int flags = RTC_GetFlags(); -- GitLab