#define __LUFA_COMMON_H__
/* Macros: */
- #if !defined(__DOXYGEN__)
- #define __INCLUDE_FROM_COMMON_H
- #endif
+ #define __INCLUDE_FROM_COMMON_H
/* Includes: */
#include <stdint.h>
typedef uint8_t uint_reg_t;
- #define ARCH_LITTLE_ENDIAN
+ #define ARCH_HAS_EEPROM_ADDRESS_SPACE
+ #define ARCH_HAS_FLASH_ADDRESS_SPACE
+ #define ARCH_HAS_MULTI_ADDRESS_SPACE
+ #define ARCH_LITTLE_ENDIAN
+
#include "Endianness.h"
- #elif (ARCH == ARCH_UC3B)
+ #elif (ARCH == ARCH_UC3)
#include <avr32/io.h>
// === TODO: Find abstracted way to handle these ===
#define _delay_ms(x)
#define memcmp_P(...) memcmp(__VA_ARGS__)
#define memcpy_P(...) memcpy(__VA_ARGS__)
- #define USE_RAM_DESCRIPTORS
// ==================================================
typedef uint32_t uint_reg_t;
#define ARCH_BIG_ENDIAN
+
#include "Endianness.h"
#else
#error Unknown device architecture specified.
*/
#define GCC_FORCE_POINTER_ACCESS(StructPtr) __asm__ __volatile__("" : "=b" (StructPtr) : "0" (StructPtr))
+ /** Forces GCC to create a memory barrier, ensuring that memory accesses are not reordered past the barrier point.
+ * This can be used before ordering-critical operations, to ensure that the compiler does not re-order the resulting
+ * assembly output in an unexpected manner on sections of code that are ordering-specific.
+ */
+ #define GCC_MEMORY_BARRIER() __asm__ __volatile__("" ::: "memory");
+
/* Inline Functions: */
/** Function to reverse the individual bits in a byte - i.e. bit 7 is moved to bit 0, bit 6 to bit 1,
* etc.