From aae20139b90521cf1d1b17fdcb3ff9d42ecdf937 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Mon, 22 Feb 2010 11:44:34 +0000
Subject: [PATCH] Add drivers for the EVK1101 - begin full port to the AVR32
 UC3B line of AVRs.

---
 LUFA/Common/Atomic.h                          |  99 +++++++++++++
 LUFA/Common/BoardTypes.h                      |   3 +
 LUFA/Common/Common.h                          |  21 ++-
 LUFA/Drivers/Board/BUMBLEB/Joystick.h         |   4 +-
 LUFA/Drivers/Board/Buttons.h                  |   4 +-
 LUFA/Drivers/Board/Dataflash.h                |   2 +
 LUFA/Drivers/Board/EVK1101/Buttons.h          |  99 +++++++++++++
 LUFA/Drivers/Board/EVK1101/Joystick.h         | 117 +++++++++++++++
 LUFA/Drivers/Board/EVK1101/LEDs.h             | 138 ++++++++++++++++++
 LUFA/Drivers/Board/Joystick.h                 |   4 +-
 LUFA/Drivers/Board/LEDs.h                     |  16 +-
 LUFA/Drivers/Board/Temperature.h              |   6 +-
 LUFA/Drivers/Peripheral/{ => AVRU4U6U7}/SPI.h |   2 +-
 .../Peripheral/{ => AVRU4U6U7}/Serial.h       |   0
 LUFA/ManPages/DeviceSupport.txt               |   2 +
 LUFA/Scheduler/Scheduler.h                    |  10 +-
 16 files changed, 509 insertions(+), 18 deletions(-)
 create mode 100644 LUFA/Common/Atomic.h
 create mode 100644 LUFA/Drivers/Board/EVK1101/Buttons.h
 create mode 100644 LUFA/Drivers/Board/EVK1101/Joystick.h
 create mode 100644 LUFA/Drivers/Board/EVK1101/LEDs.h
 rename LUFA/Drivers/Peripheral/{ => AVRU4U6U7}/SPI.h (96%)
 rename LUFA/Drivers/Peripheral/{ => AVRU4U6U7}/Serial.h (100%)

diff --git a/LUFA/Common/Atomic.h b/LUFA/Common/Atomic.h
new file mode 100644
index 000000000..81ac10cc6
--- /dev/null
+++ b/LUFA/Common/Atomic.h
@@ -0,0 +1,99 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2010.
+
+  dean [at] fourwalledcubicle [dot] com
+      www.fourwalledcubicle.com
+*/
+
+/*
+  Copyright 2010  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
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *
+ *  Atomic block header for the 32-bit AVRs, modelled on the 8-bit AVR's util/atomic.h
+ *  header.
+ *
+ *  \note Do not include this file directly, rather include the Common.h header file instead to gain this file's
+ *        functionality on the 32-bit AVRs.
+ */
+
+#ifndef __ATOMIC_H__
+#define __ATOMIC_H__
+
+	/* Includes: */
+		#include <avr32/io.h>
+		#include <stdint.h>
+		#include <stdbool.h>
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			#define ATOMIC_BLOCK(type) for ( type, __ToDo = __iCliRetVal(); \
+									   __ToDo ; __ToDo = 0 )
+			#define NONATOMIC_BLOCK(type) for ( type, __ToDo = __iSeiRetVal(); \
+										  __ToDo ;  __ToDo = 0 )
+			#define ATOMIC_RESTORESTATE uint8_t sreg_save \
+				__attribute__((__cleanup__(__iRestore))) = 0 /* TODO */
+			#define ATOMIC_FORCEON uint8_t sreg_save \
+				__attribute__((__cleanup__(__iSeiParam))) = 0
+			#define NONATOMIC_RESTORESTATE uint8_t sreg_save \
+				__attribute__((__cleanup__(__iRestore))) = 0 /* TODO */
+			#define NONATOMIC_FORCEOFF uint8_t sreg_save \
+				__attribute__((__cleanup__(__iCliParam))) = 0
+
+	/* Private Interface - For use in library only: */
+	#if !defined(__DOXYGEN__)
+		/* Inline Functions: */
+			static __inline__ uint8_t __iSeiRetVal(void)
+			{
+				((avr32_sr_t*)AVR32_SR_T)->gm = true;
+				return 1;
+			}
+
+			static __inline__ uint8_t __iCliRetVal(void)
+			{
+				((avr32_sr_t*)AVR32_SR_T)->gm = false;
+				return 1;
+			}
+
+			static __inline__ void __iSeiParam(const uint8_t *__s)
+			{
+				((avr32_sr_t*)AVR32_SR_T)->gm = true;
+				__asm__ volatile ("" ::: "memory");
+				(void)__s;
+			}
+
+			static __inline__ void __iCliParam(const uint8_t *__s)
+			{
+				((avr32_sr_t*)AVR32_SR_T)->gm = false;
+				__asm__ volatile ("" ::: "memory");
+				(void)__s;
+			}
+
+			static __inline__ void __iRestore(const uint8_t *__s)
+			{
+				((avr32_sr_t*)AVR32_SR_T)->gm = *__s;
+				__asm__ volatile ("" ::: "memory");
+			}
+	#endif
+
+#endif
diff --git a/LUFA/Common/BoardTypes.h b/LUFA/Common/BoardTypes.h
index 10e31ac1b..43b692dbd 100644
--- a/LUFA/Common/BoardTypes.h
+++ b/LUFA/Common/BoardTypes.h
@@ -94,6 +94,9 @@
 			 *  such as the Joystick driver, where the removal would adversely affect the code's operation is still disallowed. */
 			#define BOARD_NONE          10
 			
+			/** Selects the EVK1101 specific board drivers, including Temperature, Button, Dataflash, Joystick and LED drivers. */
+			#define BOARD_EVK1101       11
+
 			#if !defined(__DOXYGEN__)
 				#define BOARD_          BOARD_NONE
 				
diff --git a/LUFA/Common/Common.h b/LUFA/Common/Common.h
index 2ddb58c8c..4052480dd 100644
--- a/LUFA/Common/Common.h
+++ b/LUFA/Common/Common.h
@@ -56,8 +56,17 @@
 #define __COMMON_H__
 
 	/* Includes: */
-		#include <avr/io.h>
-	
+		#if defined(__AVR32__)
+			#include <avr32/io.h>
+			#include <stdint.h>
+
+			#include "Atomic.h"
+
+			#define PROGMEM
+		#else
+			#include <avr/io.h>
+		#endif
+
 		#include "FunctionAttributes.h"
 		#include "BoardTypes.h"
 
@@ -179,6 +188,14 @@
 				}
 			}
 
+		/* Type Defines: */
+			#if defined(__AVR32__)
+				typedef uint32_t uintN_t;
+				typedef int32_t intN_t;
+			#else
+				typedef uint8_t uintN_t;
+				typedef int8_t intN_t;
+			#endif
 #endif
 
 /** @} */
diff --git a/LUFA/Drivers/Board/BUMBLEB/Joystick.h b/LUFA/Drivers/Board/BUMBLEB/Joystick.h
index 5d57ec559..180967759 100644
--- a/LUFA/Drivers/Board/BUMBLEB/Joystick.h
+++ b/LUFA/Drivers/Board/BUMBLEB/Joystick.h
@@ -30,7 +30,7 @@
 
 /** \file
  *
- *  Board specific joystick driver header for the USBKEY. The BUMBLEB third-party board does not include any on-board
+ *  Board specific joystick driver header for the BUMBLEB. The BUMBLEB third-party board does not include any on-board
  *  peripherals, but does have an officially recommended external peripheral layout for buttons, LEDs and a Joystick.
  *
  *  \note This file should not be included directly. It is automatically included as needed by the joystick driver
@@ -40,7 +40,7 @@
 /** \ingroup Group_Joystick
  *  @defgroup Group_Joystick_BUMBLEB BUMBLEB
  *
- *  Board specific joystick driver header for the USBKEY. The BUMBLEB third-party board does not include any on-board
+ *  Board specific joystick driver header for the BUMBLEB. The BUMBLEB third-party board does not include any on-board
  *  peripherals, but does have an officially recommended external peripheral layout for buttons, LEDs and a Joystick.
  *
  *  \note This file should not be included directly. It is automatically included as needed by the joystick driver
diff --git a/LUFA/Drivers/Board/Buttons.h b/LUFA/Drivers/Board/Buttons.h
index d908fd43a..f50977706 100644
--- a/LUFA/Drivers/Board/Buttons.h
+++ b/LUFA/Drivers/Board/Buttons.h
@@ -86,6 +86,8 @@
 		#include "EVK527/Buttons.h"
 	#elif (BOARD == BOARD_USER)
 		#include "Board/Buttons.h"
+	#elif (BOARD == BOARD_EVK1101)
+		#include "EVK1101/Buttons.h"
 	#else
 		#error The selected board does not contain any GPIO buttons.
 	#endif
@@ -103,7 +105,7 @@
 		 *
 		 *  \return Mask indicating which board buttons are currently pressed
 		 */
-		static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+		static inline uintN_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
 	#endif
 
 #endif
diff --git a/LUFA/Drivers/Board/Dataflash.h b/LUFA/Drivers/Board/Dataflash.h
index 762142c33..c0f314a3e 100644
--- a/LUFA/Drivers/Board/Dataflash.h
+++ b/LUFA/Drivers/Board/Dataflash.h
@@ -167,6 +167,8 @@
 				#include "EVK527/Dataflash.h"
 			#elif (BOARD == BOARD_USER)
 				#include "Board/Dataflash.h"
+			#elif (BOARD = BOARD_EVK1101)
+				#include "EVK1101/Dataflash.h"
 			#else
 				#error The selected board does not contain a dataflash IC.
 			#endif
diff --git a/LUFA/Drivers/Board/EVK1101/Buttons.h b/LUFA/Drivers/Board/EVK1101/Buttons.h
new file mode 100644
index 000000000..b827787c7
--- /dev/null
+++ b/LUFA/Drivers/Board/EVK1101/Buttons.h
@@ -0,0 +1,99 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2010.
+              
+  dean [at] fourwalledcubicle [dot] com
+      www.fourwalledcubicle.com
+*/
+
+/*
+  Copyright 2010  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
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *
+ *  Board specific Buttons driver header for the EVK1101.
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the Buttons driver
+ *        dispatch header located in LUFA/Drivers/Board/Buttons.h.
+ */
+
+/** \ingroup Group_Buttons
+ *  @defgroup Group_Buttons_EVK1101 EVK1101
+ *
+ *  Board specific Buttons driver header for the EVK1101.
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the Buttons driver
+ *        dispatch header located in LUFA/Drivers/Board/Buttons.h.
+ *
+ *  @{
+ */
+
+#ifndef __BUTTONS_EVK1101_H__
+#define __BUTTONS_EVK1101_H__
+
+	/* Includes: */
+		#include <avr32/io.h>
+		#include <stdbool.h>
+
+		#include "../../../Common/Common.h"
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_BUTTONS_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead.
+		#endif
+		
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Button mask for the first button on the board. */
+			#define BUTTONS_BUTTON1      (1UL << 2)
+	
+			/** Button mask for the second button on the board. */
+			#define BUTTONS_BUTTON2      (1UL << 3)
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void Buttons_Init(void)
+			{
+				AVR32_GPIO.port[1].gpers = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2);
+				AVR32_GPIO.port[1].puers = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2);
+			}
+
+			static inline uint32_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint32_t Buttons_GetStatus(void)
+			{
+				return (~AVR32_GPIO.port[1].pvr & (BUTTONS_BUTTON1 | BUTTONS_BUTTON2));
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+			
+#endif
+
+/** @} */
diff --git a/LUFA/Drivers/Board/EVK1101/Joystick.h b/LUFA/Drivers/Board/EVK1101/Joystick.h
new file mode 100644
index 000000000..0bcc59c94
--- /dev/null
+++ b/LUFA/Drivers/Board/EVK1101/Joystick.h
@@ -0,0 +1,117 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2010.
+              
+  dean [at] fourwalledcubicle [dot] com
+      www.fourwalledcubicle.com
+*/
+
+/*
+  Copyright 2010  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
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *
+ *  Board specific joystick driver header for the EVK1101.
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the joystick driver
+ *        dispatch header located in LUFA/Drivers/Board/Joystick.h.
+ */
+
+/** \ingroup Group_Joystick
+ *  @defgroup Group_Joystick_EVK1101 EVK1101
+ *
+ *  Board specific joystick driver header for the EVK1101.
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the joystick driver
+ *        dispatch header located in LUFA/Drivers/Board/Joystick.h.
+ *
+ *  @{
+ */
+
+#ifndef __JOYSTICK_EVK1101_H__
+#define __JOYSTICK_EVK1101_H__
+
+	/* Includes: */
+		#include <avr32/io.h>
+
+		#include "../../../Common/Common.h"
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_JOYSTICK_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/Joystick.h instead.
+		#endif
+
+	/* Private Interface - For use in library only: */
+	#if !defined(__DOXYGEN__)
+		/* Macros: */
+			#define JOY_MASK_PA              (1 << 13)
+			#define JOY_MASK_PB              ((1 << 6) | (1 << 7) | (1 << 8) | (1 << 9))
+	#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Mask for the joystick being pushed in the left direction. */
+			#define JOY_LEFT                  (1UL << 6)
+
+			/** Mask for the joystick being pushed in the upward direction. */
+			#define JOY_UP                    (1UL << 7)
+
+			/** Mask for the joystick being pushed in the right direction. */
+			#define JOY_RIGHT                 (1UL << 8)
+
+			/** Mask for the joystick being pushed in the downward direction. */
+			#define JOY_DOWN                  (1UL << 9)
+
+			/** Mask for the joystick being pushed inward. */
+			#define JOY_PRESS                 (1UL << 13)
+			
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void Joystick_Init(void)
+			{
+				AVR32_GPIO.port[0].gpers = JOY_MASK_PA;
+				AVR32_GPIO.port[0].puers = JOY_MASK_PA;
+				AVR32_GPIO.port[1].gpers = JOY_MASK_PB;
+				AVR32_GPIO.port[1].puers = JOY_MASK_PB;
+			}
+			
+			static inline uint32_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint32_t Joystick_GetStatus(void)
+			{
+				return ((~AVR32_GPIO.port[1].pvr & JOY_MASK_PB) |
+				        (~AVR32_GPIO.port[0].pvr & JOY_MASK_PA));
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
+/** @} */
diff --git a/LUFA/Drivers/Board/EVK1101/LEDs.h b/LUFA/Drivers/Board/EVK1101/LEDs.h
new file mode 100644
index 000000000..f19e464d7
--- /dev/null
+++ b/LUFA/Drivers/Board/EVK1101/LEDs.h
@@ -0,0 +1,138 @@
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2010.
+              
+  dean [at] fourwalledcubicle [dot] com
+      www.fourwalledcubicle.com
+*/
+
+/*
+  Copyright 2010  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
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *
+ *  Board specific LED driver header for the EVK1101.
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the LEDs driver
+ *        dispatch header located in LUFA/Drivers/Board/LEDs.h.
+ */
+
+/** \ingroup Group_LEDs
+ *  @defgroup Group_LEDs_EVK1101 EVK1101
+ *
+ *  Board specific LED driver header for the EVK1101.
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the LEDs driver
+ *        dispatch header located in LUFA/Drivers/Board/LEDs.h.
+ *
+ *  @{
+ */
+
+#ifndef __LEDS_EVK1101_H__
+#define __LEDS_EVK1101_H__
+
+	/* Includes: */
+		#include <avr32/io.h>
+
+		#include "../../../Common/Common.h"
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_LEDS_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead.
+		#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** LED mask for the first LED on the board. */
+			#define LEDS_LED1        (1UL << 7)
+
+			/** LED mask for the second LED on the board. */
+			#define LEDS_LED2        (1UL << 8)
+
+			/** LED mask for the third LED on the board. */
+			#define LEDS_LED3        (1UL << 21)
+
+			/** LED mask for the fourth LED on the board. */
+			#define LEDS_LED4        (1UL << 22)
+
+			/** LED mask for all the LEDs on the board. */
+			#define LEDS_ALL_LEDS    (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4)
+
+			/** LED mask for the none of the board LEDs */
+			#define LEDS_NO_LEDS     0
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void LEDs_Init(void)
+			{
+				AVR32_GPIO.port[0].gpers = LEDS_ALL_LEDS;
+				AVR32_GPIO.port[0].oders = LEDS_ALL_LEDS;
+				AVR32_GPIO.port[0].ovrs  = LEDS_ALL_LEDS;
+			}
+			
+			static inline void LEDs_TurnOnLEDs(const uint32_t LEDMask)
+			{
+				AVR32_GPIO.port[0].ovrc = LEDMask;
+			}
+
+			static inline void LEDs_TurnOffLEDs(const uint32_t LEDMask)
+			{
+				AVR32_GPIO.port[0].ovrs = LEDMask;
+			}
+
+			static inline void LEDs_SetAllLEDs(const uint32_t LEDMask)
+			{
+				AVR32_GPIO.port[0].ovrs = LEDS_ALL_LEDS;
+				AVR32_GPIO.port[0].ovrc = LEDMask;
+			}
+			
+			static inline void LEDs_ChangeLEDs(const uint32_t LEDMask, const uint32_t ActiveMask)
+			{
+				AVR32_GPIO.port[0].ovrs = LEDMask;
+				AVR32_GPIO.port[0].ovrc = ActiveMask;
+			}
+			
+			static inline void LEDs_ToggleLEDs(const uint32_t LEDMask)
+			{
+				AVR32_GPIO.port[0].ovrt = LEDMask;
+			}
+			
+			static inline uint32_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint32_t LEDs_GetLEDs(void)
+			{
+				return (AVR32_GPIO.port[0].ovr & LEDS_ALL_LEDS);
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+		
+#endif
+
+/** @} */
diff --git a/LUFA/Drivers/Board/Joystick.h b/LUFA/Drivers/Board/Joystick.h
index 39375a265..b14e98986 100644
--- a/LUFA/Drivers/Board/Joystick.h
+++ b/LUFA/Drivers/Board/Joystick.h
@@ -83,6 +83,8 @@
 		#include "EVK527/Joystick.h"
 	#elif (BOARD == BOARD_USER)
 		#include "Board/Joystick.h"
+	#elif (BOARD == BOARD_EVK1101)
+		#include "EVK1101/Joystick.h"
 	#else
 		#error The selected board does not contain a joystick.
 	#endif
@@ -100,7 +102,7 @@
 		 *  \return Mask indicating the joystick direction - see corresponding board specific Joystick.h file
 		 *          for direction masks
 		 */
-		static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+		static inline uintN_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
 	#endif
 
 #endif
diff --git a/LUFA/Drivers/Board/LEDs.h b/LUFA/Drivers/Board/LEDs.h
index 94fbf3cf7..1def9ea90 100644
--- a/LUFA/Drivers/Board/LEDs.h
+++ b/LUFA/Drivers/Board/LEDs.h
@@ -84,7 +84,7 @@
 		static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) {};
 		static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask) {};
 		static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) {};
-		static inline uint8_t LEDs_GetLEDs(void) { return 0; }
+		static inline uintN_t LEDs_GetLEDs(void) { return 0; }
 	#elif (BOARD == BOARD_USBKEY)
 		#include "USBKEY/LEDs.h"
 	#elif (BOARD == BOARD_STK525)
@@ -105,6 +105,8 @@
 		#include "EVK527/LEDs.h"		
 	#elif (BOARD == BOARD_USER)
 		#include "Board/LEDs.h"
+	#elif (BOARD == BOARD_EVK1101)
+		#include "EVK1101/LEDs.h"
 	#endif
 	
 	#if !defined(LEDS_LED1)
@@ -134,20 +136,20 @@
 		 *
 		 *  \param[in] LEDMask  Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 		 */
-		static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask);
+		static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask);
 
 		/** Turns off the LEDs specified in the given LED mask.
 		 *
 		 *  \param[in] LEDMask  Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 		 */
-		static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask);
+		static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask);
 
 		/** Turns off all LEDs not specified in the given LED mask, and turns on all the LEDs in the given LED
 		 *  mask.
 		 *
 		 *  \param[in] LEDMask  Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 		 */
-		static inline void LEDs_SetAllLEDs(const uint8_t LEDMask);
+		static inline void LEDs_SetAllLEDs(const uintN_t LEDMask);
 
 		/** Turns off all LEDs in the LED mask that are not set in the active mask, and turns on all the LEDs
 		 *  specified in both the LED and active masks.
@@ -155,20 +157,20 @@
 		 *  \param[in] LEDMask     Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 		 *  \param[in] ActiveMask  Mask of whether the LEDs in the LED mask should be turned on or off
 		 */
-		static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask);
+		static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask);
 		
 		/** Toggles all LEDs in the LED mask, leaving all others in their current states.
 		 *
 		 *  \param[in] LEDMask Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
 		 */
-		static inline void LEDs_ToggleLEDs(const uint8_t LEDMask);
+		static inline void LEDs_ToggleLEDs(const uintN_t LEDMask);
 
 		/** Returns the status of all the board LEDs; set LED masks in the return value indicate that the
 		 *  corresponding LED is on.
 		 *
 		 *  \return Mask of the board LEDs which are currently turned on
 		 */
-		static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
+		static inline uintN_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
 	#endif
 
 #endif
diff --git a/LUFA/Drivers/Board/Temperature.h b/LUFA/Drivers/Board/Temperature.h
index 7a5af367b..12e6df137 100644
--- a/LUFA/Drivers/Board/Temperature.h
+++ b/LUFA/Drivers/Board/Temperature.h
@@ -53,7 +53,11 @@
 #define __TEMPERATURE_H__
 
 	/* Includes: */
-		#include <avr/pgmspace.h>
+		#if defined(__AVR32__)
+			#include <stdint.h>
+		#else
+			#include <avr/pgmspace.h>
+		#endif
 
 		#include "../../Common/Common.h"
 		#include "../Peripheral/ADC.h"
diff --git a/LUFA/Drivers/Peripheral/SPI.h b/LUFA/Drivers/Peripheral/AVRU4U6U7/SPI.h
similarity index 96%
rename from LUFA/Drivers/Peripheral/SPI.h
rename to LUFA/Drivers/Peripheral/AVRU4U6U7/SPI.h
index 6416ceae6..25503b6c3 100644
--- a/LUFA/Drivers/Peripheral/SPI.h
+++ b/LUFA/Drivers/Peripheral/AVRU4U6U7/SPI.h
@@ -106,7 +106,7 @@
 			#define SPI_MODE_MASTER                (1 << MSTR)
 
 		/* Inline Functions: */
-			/** Initializes the SPI subsystem, ready for transfers. Must be called before calling any other
+			/** Initialises the SPI subsystem, ready for transfers. Must be called before calling any other
 			 *  SPI routines.
 			 *
 			 *  \param[in] SPIOptions  SPI Options, a mask consisting of one of each of the SPI_SPEED_*,
diff --git a/LUFA/Drivers/Peripheral/Serial.h b/LUFA/Drivers/Peripheral/AVRU4U6U7/Serial.h
similarity index 100%
rename from LUFA/Drivers/Peripheral/Serial.h
rename to LUFA/Drivers/Peripheral/AVRU4U6U7/Serial.h
diff --git a/LUFA/ManPages/DeviceSupport.txt b/LUFA/ManPages/DeviceSupport.txt
index 0902b90a2..14022e214 100644
--- a/LUFA/ManPages/DeviceSupport.txt
+++ b/LUFA/ManPages/DeviceSupport.txt
@@ -20,11 +20,13 @@
  *   - AT90USB647 (USB Host and Device)
  *   - AT90USB1286 (USB Device Only)
  *   - AT90USB1287 (USB Host and Device)
+ *   - AT32UC3B0256 (EXPERIMENTAL)
  *
  *  Currently supported Atmel boards:
  *   - AT90USBKEY
  *   - ATAVRUSBRF01
  *   - EVK527
+ *   - EVK1101 (EXPERIMENTAL)
  *   - RZUSBSTICK
  *   - STK525
  *   - STK526
diff --git a/LUFA/Scheduler/Scheduler.h b/LUFA/Scheduler/Scheduler.h
index f71736fd5..084fb1e8c 100644
--- a/LUFA/Scheduler/Scheduler.h
+++ b/LUFA/Scheduler/Scheduler.h
@@ -86,12 +86,16 @@
 #define __SCHEDULER_H__
 
 	/* Includes: */
-		#include <avr/io.h>
+	#if defined(__AVR32__)
+		#include <avr32/io.h>
 		#include <stdbool.h>
-		
+	#else
+		#include <avr/io.h>
 		#include <util/atomic.h>
+		#include <stdbool.h>
+	#endif
 
-		#include "../Common/Common.h"
+	#include "../Common/Common.h"
 
 	/* Enable C linkage for C++ Compilers: */
 		#if defined(__cplusplus)
-- 
GitLab