From 31719589b2ebf570ca4702a1c05b0d7ad2b990ce Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 21 Sep 2012 11:50:52 +0200 Subject: [PATCH] Fixed micros()-not-monothonic bug --- hardware/arduino/sam/cores/arduino/wiring.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/hardware/arduino/sam/cores/arduino/wiring.c b/hardware/arduino/sam/cores/arduino/wiring.c index 5de053a1e..ce3f798ac 100644 --- a/hardware/arduino/sam/cores/arduino/wiring.c +++ b/hardware/arduino/sam/cores/arduino/wiring.c @@ -31,13 +31,16 @@ uint32_t millis( void ) uint32_t micros( void ) { - uint32_t dwTicks ; + uint32_t ticks ; + uint32_t count ; - __disable_irq() ; - dwTicks=SysTick->VAL ; - __enable_irq() ; + SysTick->CTRL; + do { + ticks = SysTick->VAL; + count = GetTickCount(); + } while (SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk); - return (GetTickCount()*1000) + ((SysTick->LOAD + 1 - dwTicks)/(SystemCoreClock/1000000)) ; + return count * 1000 + (SysTick->LOAD + 1 - ticks) / (SystemCoreClock/1000000) ; } void delay( uint32_t dwMs )