Merge pull request #12326 from kjbracey-arm/systimer_abs_fix

Correct SysTimer absolute time calculations
pull/12438/head
Kevin Bracey 2020-01-31 15:01:36 +02:00 committed by GitHub
commit 65a5d1b682
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 3 deletions

View File

@ -52,7 +52,8 @@ SysTimer<US_IN_TICK, IRQ>::SysTimer() :
#else
TimerEvent(get_us_ticker_data()),
#endif
_time_us(ticker_read_us(_ticker_data)),
_epoch(ticker_read_us(_ticker_data)),
_time_us(_epoch),
_tick(0),
_unacknowledged_ticks(0),
_wake_time_set(false),
@ -66,7 +67,8 @@ SysTimer<US_IN_TICK, IRQ>::SysTimer() :
template<uint32_t US_IN_TICK, bool IRQ>
SysTimer<US_IN_TICK, IRQ>::SysTimer(const ticker_data_t *data) :
TimerEvent(data),
_time_us(ticker_read_us(_ticker_data)),
_epoch(ticker_read_us(_ticker_data)),
_time_us(_epoch),
_tick(0),
_unacknowledged_ticks(0),
_wake_time_set(false),
@ -104,7 +106,7 @@ void SysTimer<US_IN_TICK, IRQ>::set_wake_time(uint64_t at)
}
uint64_t ticks_to_sleep = at - _tick;
uint64_t wake_time = at * US_IN_TICK;
uint64_t wake_time = _epoch + at * US_IN_TICK;
/* Set this first, before attaching the interrupt that can unset it */
_wake_time_set = true;

View File

@ -225,6 +225,7 @@ protected:
uint64_t _elapsed_ticks() const;
static void _set_irq_pending();
static void _clear_irq_pending();
const us_timestamp_t _epoch;
us_timestamp_t _time_us;
uint64_t _tick;
uint8_t _unacknowledged_ticks;