diff --git a/build/shared/revisions.txt b/build/shared/revisions.txt index 024b44377..dbea406ca 100644 --- a/build/shared/revisions.txt +++ b/build/shared/revisions.txt @@ -1,8 +1,12 @@ ARDUINO 1.5.3 BETA +[ide] * Removed useless baud rates from serial monitor +[arduino core] +* sam: Fixed delayMicrosecond() when interrupts are disabled + ARDUINO 1.5.2 BETA - 2013.02.06 [ide] diff --git a/hardware/arduino/sam/cores/arduino/Arduino.h b/hardware/arduino/sam/cores/arduino/Arduino.h index c433ead6a..a1682a36c 100644 --- a/hardware/arduino/sam/cores/arduino/Arduino.h +++ b/hardware/arduino/sam/cores/arduino/Arduino.h @@ -41,12 +41,6 @@ extern "C"{ void yield(void); -#include "wiring.h" -#include "wiring_digital.h" -#include "wiring_analog.h" -#include "wiring_shift.h" -#include "WInterrupts.h" - /* sketch */ extern void setup( void ) ; extern void loop( void ) ; @@ -195,6 +189,12 @@ extern const PinDescription g_APinDescription[] ; // Include board variant #include "variant.h" +#include "wiring.h" +#include "wiring_digital.h" +#include "wiring_analog.h" +#include "wiring_shift.h" +#include "WInterrupts.h" + // USB Device #define USB_VID 0x2341 // arduino LLC vid #define USB_PID_LEONARDO 0x0034 diff --git a/hardware/arduino/sam/cores/arduino/wiring.c b/hardware/arduino/sam/cores/arduino/wiring.c index 431761b44..a934c50f5 100644 --- a/hardware/arduino/sam/cores/arduino/wiring.c +++ b/hardware/arduino/sam/cores/arduino/wiring.c @@ -49,13 +49,6 @@ void delay( uint32_t ms ) yield(); } -void delayMicroseconds( uint32_t us ) -{ - uint32_t start = micros(); - while ((micros() - start) < us) - ; -} - #if defined ( __ICCARM__ ) /* IAR Ewarm 5.41+ */ extern signed int putchar( signed int c ) ; /** diff --git a/hardware/arduino/sam/cores/arduino/wiring.h b/hardware/arduino/sam/cores/arduino/wiring.h index ad13cac66..3c58cf06c 100644 --- a/hardware/arduino/sam/cores/arduino/wiring.h +++ b/hardware/arduino/sam/cores/arduino/wiring.h @@ -62,8 +62,16 @@ extern void delay( uint32_t dwMs ) ; * * \param dwUs the number of microseconds to pause (uint32_t) */ -extern void delayMicroseconds( uint32_t dwUs ) ; - +static inline void delayMicroseconds(uint32_t) __attribute__((always_inline, unused)); +static inline void delayMicroseconds(uint32_t usec){ + uint32_t n = usec * (VARIANT_MCK / 3000000); + asm volatile( + "L_%=_delayMicroseconds:" "\n\t" + "subs %0, #1" "\n\t" + "bge L_%=_delayMicroseconds" "\n" + : "+r" (n) : + ); +} #ifdef __cplusplus } diff --git a/hardware/arduino/sam/variants/arduino_due_x/variant.h b/hardware/arduino/sam/variants/arduino_due_x/variant.h index 11893cfe8..d34a656d2 100644 --- a/hardware/arduino/sam/variants/arduino_due_x/variant.h +++ b/hardware/arduino/sam/variants/arduino_due_x/variant.h @@ -19,6 +19,16 @@ #ifndef _VARIANT_ARDUINO_DUE_X_ #define _VARIANT_ARDUINO_DUE_X_ +/*---------------------------------------------------------------------------- + * Definitions + *----------------------------------------------------------------------------*/ + +/** Frequency of the board main oscillator */ +#define VARIANT_MAINOSC 12000000 + +/** Master clock frequency */ +#define VARIANT_MCK 84000000 + /*---------------------------------------------------------------------------- * Headers *----------------------------------------------------------------------------*/ @@ -40,23 +50,6 @@ extern "C"{ # include /** RedHat Newlib minimal stub */ #endif -/*---------------------------------------------------------------------------- - * Definitions - *----------------------------------------------------------------------------*/ - -/*----------------------------------------------------------------------------*/ - -#define ArduinoDueX_DevEd - -/** Name of the board */ -#define VARIANT_NAME "Arduino_DueX_Dev_Ed" - -/** Frequency of the board main oscillator */ -#define VARIANT_MAINOSC 12000000 - -/** Master clock frequency */ -#define VARIANT_MCK 84000000 - /*---------------------------------------------------------------------------- * Pins *----------------------------------------------------------------------------*/