/*
LUFA Library
- Copyright (C) Dean Camera, 2011.
+ Copyright (C) Dean Camera, 2012.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
- Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
this software.
*/
+/** \dir
+ * \brief Common library header files.
+ *
+ * This folder contains header files which are common to all parts of the LUFA library. They may be used freely in
+ * user applications.
+ */
+
/** \file
* \brief Common library convenience headers, macros and functions.
*
#include <string.h>
#include <stddef.h>
- #if defined(USE_LUFA_CONFIG_HEADER)
- #include "LUFAConfig.h"
- #endif
-
#include "Architectures.h"
#include "BoardTypes.h"
#include "ArchitectureSpecific.h"
#include "CompilerSpecific.h"
#include "Attributes.h"
+ #if defined(USE_LUFA_CONFIG_HEADER)
+ #include "LUFAConfig.h"
+ #endif
+
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
+ #include <math.h>
#include <util/delay.h>
typedef uint8_t uint_reg_t;
#include "Endianness.h"
#elif (ARCH == ARCH_UC3)
#include <avr32/io.h>
+ #include <math.h>
// === TODO: Find abstracted way to handle these ===
- #define PROGMEM const
+ #define PROGMEM
#define pgm_read_byte(x) *x
#define memcmp_P(...) memcmp(__VA_ARGS__)
#define memcpy_P(...) memcpy(__VA_ARGS__)
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
+ #include <math.h>
#include <util/delay.h>
typedef uint8_t uint_reg_t;
/** Convenience macro to determine the larger of two values.
*
- * \note This macro should only be used with operands that do not have side effects from being evaluated
- * multiple times.
+ * \attention This macro should only be used with operands that do not have side effects from being evaluated
+ * multiple times.
*
* \param[in] x First value to compare
* \param[in] y First value to compare
/** Convenience macro to determine the smaller of two values.
*
- * \note This macro should only be used with operands that do not have side effects from being evaluated
- * multiple times.
+ * \attention This macro should only be used with operands that do not have side effects from being evaluated
+ * multiple times.
*
* \param[in] x First value to compare
* \param[in] y First value to compare
*
* \ingroup Group_GlobalInt
*
- * \param Name Unique name of the interrupt service routine.
+ * \param[in] Name Unique name of the interrupt service routine.
*/
#define ISR(Name, ...) void Name (void) __attribute__((__interrupt__)) __VA_ARGS__; void Name (void)
#endif
while (Milliseconds--)
{
__builtin_mtsr(AVR32_COUNT, 0);
- while (__builtin_mfsr(AVR32_COUNT) < (F_CPU / 1000));
+ while ((uint32_t)__builtin_mfsr(AVR32_COUNT) < (F_CPU / 1000));
}
#elif (ARCH == ARCH_XMEGA)
if (GCC_IS_COMPILE_CONST(Milliseconds))
#elif (ARCH == ARCH_XMEGA)
return SREG;
#endif
-
- GCC_MEMORY_BARRIER();
}
/** Sets the global interrupt enable state of the microcontroller to the mask passed into the function.