17 bool initialized =
false;
31 constexpr
std::int32_t MaxUtcSpeedCorrectionX16 = 100 * 16;
45 CriticalSectionLocker lock;
72 time += USecPerOverflow;
75 return time + (cycles / cycles_per_usec);
91 CriticalSectionLocker locker;
106 CriticalSectionLocker locker;
120 prev_adjustment = adjustment.
toUSec();
122 utc_correction_usec_per_overflow_x16 += adjustment.
isPositive() ? 1 : -1;
123 utc_correction_usec_per_overflow_x16 += (adj_delta > 0) ? 1 : -1;
125 utc_correction_usec_per_overflow_x16 =
126 uavcan::max(utc_correction_usec_per_overflow_x16, -MaxUtcSpeedCorrectionX16);
127 utc_correction_usec_per_overflow_x16 =
128 uavcan::min(utc_correction_usec_per_overflow_x16, MaxUtcSpeedCorrectionX16);
134 CriticalSectionLocker locker;
147 utc_correction_usec_per_overflow_x16 = 0;
177 time_mono += USecPerOverflow;
std::uint64_t getUtcUSecFromCanInterrupt()
__attribute__((gnu_inline)) inline void spi_start(uint8_t data)
static MonotonicTime fromUSec(uint64_t us)
uint32_t SystemCoreClock
Current system clock rate, mainly used for sysTick.
static std::uint64_t sampleFromCriticalSection(const volatile std::uint64_t *const value)
Implicitly convertible to/from uavcan.Timestamp.
UAVCAN_EXPORT const T & max(const T &a, const T &b)
uavcan::UtcDuration getPrevUtcAdjustment()
void adjustUtc(uavcan::UtcDuration adjustment)
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
System Tick Configuration.
static UtcDuration fromUSec(int64_t us)
UAVCAN_EXPORT const T & min(const T &a, const T &b)
#define SCB_ICSR_PENDSTSET_Msk
static SystemClock & instance()
uavcan::MonotonicTime getMonotonic()