From 0cdc7448e4560f365ac87de21f411b0cec1d740e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Sun, 14 Jun 2020 13:35:47 +0200 Subject: [PATCH] Systick: Add function to calculate uptime in days, hours, minutes, and seconds from global tick --- .../include/reflow-controller/systick.h | 2 ++ stm-firmware/systick.c | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/stm-firmware/include/reflow-controller/systick.h b/stm-firmware/include/reflow-controller/systick.h index 505400e..c2adcd0 100644 --- a/stm-firmware/include/reflow-controller/systick.h +++ b/stm-firmware/include/reflow-controller/systick.h @@ -71,6 +71,8 @@ void systick_wait_ms(uint32_t ms); uint64_t systick_get_global_tick(); +void systick_get_uptime_from_tick(uint32_t *days, uint32_t *hours, uint32_t *minutes, uint32_t *seconds); + bool systick_ticks_have_passed(uint64_t start_timestamp, uint64_t ticks); #endif /* __SYSTICK_H__ */ diff --git a/stm-firmware/systick.c b/stm-firmware/systick.c index 96e77ed..6b5047c 100644 --- a/stm-firmware/systick.c +++ b/stm-firmware/systick.c @@ -53,6 +53,35 @@ uint64_t systick_get_global_tick() return temp; } +void systick_get_uptime_from_tick(uint32_t *days, uint32_t *hours, uint32_t *minutes, uint32_t *seconds) +{ + uint64_t tick_secs; + uint32_t secs; + uint32_t mins; + uint32_t hs; + uint32_t ds; + + + tick_secs = systick_get_global_tick() / 1000; + secs = tick_secs % 60; + tick_secs /= 60; + mins = tick_secs % 60; + tick_secs /= 60; + hs = tick_secs % 60; + tick_secs /= 24; + ds = tick_secs; + + if (days) + *days = ds; + if (hours) + *hours = hs; + if (minutes) + *minutes = mins; + if (seconds) + *seconds = secs; + +} + bool __attribute__((optimize("O3"))) systick_ticks_have_passed(uint64_t start_timestamp, uint64_t ticks) { uint64_t end_timestamp = start_timestamp + ticks;