20#ifndef _WIRING_TIME_H_
21#define _WIRING_TIME_H_
37extern uint32_t millis(
void) ;
49extern uint32_t micros(
void) ;
57extern void delay(uint32_t ms) ;
64static inline void delayMicroseconds(uint32_t) __attribute__((always_inline, unused));
65static inline void delayMicroseconds(uint32_t us)
67#if defined(DWT_BASE) && !defined(DWT_DELAY_DISABLED)
68 int32_t start = dwt_getCycles();
69 int32_t cycles = us * (SystemCoreClock / 1000000);
71 while ((int32_t)dwt_getCycles() - start < cycles);
73 __IO uint32_t currentTicks = SysTick->VAL;
75 const uint32_t tickPerMs = SysTick->LOAD + 1;
77 const uint32_t nbTicks = ((us - ((us > 0) ? 1 : 0)) * tickPerMs) / 1000;
79 uint32_t elapsedTicks = 0;
80 __IO uint32_t oldTicks = currentTicks;
82 currentTicks = SysTick->VAL;
83 elapsedTicks += (oldTicks < currentTicks) ? tickPerMs + oldTicks - currentTicks :
84 oldTicks - currentTicks;
85 oldTicks = currentTicks;
86 }
while (nbTicks > elapsedTicks);
103int __attribute__((weak)) _gettimeofday(
struct timeval *tv,
void *tz)
106 tv->tv_sec = getCurrentMillis() / 1000;
107 tv->tv_usec = getCurrentMicros() - (tv->tv_sec * 1000000);