diff --git a/BuildTests/BoardDriverTest/BoardDeviceMap.cfg b/BuildTests/BoardDriverTest/BoardDeviceMap.cfg
index b58be0e54a..3fee2f1e3f 100644
--- a/BuildTests/BoardDriverTest/BoardDeviceMap.cfg
+++ b/BuildTests/BoardDriverTest/BoardDeviceMap.cfg
@@ -72,6 +72,7 @@ BOARD_XPLAIN_REV1 = AVR8 : at90usb1287 :
BOARD_STANGE_ISP = AVR8 : at90usb162 :
BOARD_U2S = AVR8 : atmega32u2 :
BOARD_YUN = AVR8 : atmega32u4 :
+BOARD_MICRO = AVR8 : atmega32u4 :
#
# ----------------- XMEGA Boards -----------------
BOARD_A3BU_XPLAINED = XMEGA : atxmega256a3bu :
diff --git a/LUFA/Common/BoardTypes.h b/LUFA/Common/BoardTypes.h
index 2f703f5ed3..06ff4ddb4a 100644
--- a/LUFA/Common/BoardTypes.h
+++ b/LUFA/Common/BoardTypes.h
@@ -234,9 +234,12 @@
/** Selects the U2S specific board drivers, including the Button and LEDs drivers. */
#define BOARD_U2S 56
- /** Selects the YUN specific board drivers, including the driver for the board LEDs. */
+ /** Selects the Arduino YUN specific board drivers, including the driver for the board LEDs. */
#define BOARD_YUN 57
+ /** Selects the Arduino Micro specific board drivers, including the driver for the board LEDs. */
+ #define BOARD_MICRO 58
+
#if !defined(__DOXYGEN__)
#define BOARD_ BOARD_NONE
diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt
index f335401d05..521e46b295 100644
--- a/LUFA/DoxygenPages/ChangeLog.txt
+++ b/LUFA/DoxygenPages/ChangeLog.txt
@@ -12,6 +12,7 @@
* - Updated the BUILD build system module to add a new COMPILER_PATH optional variable
* - Added Serial_IsSendReady() and Serial_IsSendComplete() functions to the Serial hardware peripheral driver
* - Added support for the Arduino Yun board (ATMEGA32U4 coprocessor)
+ * - Added support for the Arduino Micro board
* - Library Applications:
* - Added new Dual MIDI class driver device demo
*
diff --git a/LUFA/DoxygenPages/DeviceSupport.txt b/LUFA/DoxygenPages/DeviceSupport.txt
index 4855dc7786..2a4b9c3354 100644
--- a/LUFA/DoxygenPages/DeviceSupport.txt
+++ b/LUFA/DoxygenPages/DeviceSupport.txt
@@ -96,8 +96,9 @@
* \section Sec_AVR8Support_ThirdParty Supported Third Party Boards
* Currently supported third-party boards (see \ref Group_BoardTypes for makefile \c BOARD constant names):
* - Adafruit U4 Breakout Board
- * - Arduino Uno
* - Arduino Leonardo
+ * - Arduino Micro
+ * - Arduino Uno
* - Arduino Yun
* - Bitwizard Multio and Big-Multio
* - Busware BUI
diff --git a/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h b/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h
index c3361906e0..ea7d41c01c 100644
--- a/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h
+++ b/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h
@@ -46,7 +46,7 @@
*
Name | Color | Info | Active Level | Port Pin |
* LEDS_LED1 | Yellow | RX | Low | PORTB.0 |
* LEDS_LED2 | Yellow | TX | Low | PORTD.5 |
- * LEDS_LED1 | Yellow | General Indicator | High | PORTC.7 |
+ * LEDS_LED3 | Yellow | General Indicator | High | PORTC.7 |
*
*
* @{
@@ -98,9 +98,9 @@
static inline void LEDs_Init(void)
{
DDRB |= LEDS_PORTB_LEDS;
- PORTB &= LEDS_PORTB_LEDS;
+ PORTB |= LEDS_PORTB_LEDS;
DDRD |= LEDS_PORTD_LEDS;
- PORTD &= LEDS_PORTD_LEDS;
+ PORTD |= LEDS_PORTD_LEDS;
DDRC |= LEDS_PORTC_LEDS;
PORTC &= ~LEDS_PORTC_LEDS;
}
@@ -117,44 +117,44 @@
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
- PORTB |= (LEDMask & LEDS_PORTB_LEDS);
- PORTD |= (LEDMask & LEDS_PORTD_LEDS);
+ PORTB &= ~(LEDMask & LEDS_PORTB_LEDS);
+ PORTD &= ~(LEDMask & LEDS_PORTD_LEDS);
PORTC |= (LEDMask & LEDS_PORTC_LEDS);
}
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
- PORTB &= ~(LEDMask & LEDS_PORTB_LEDS);
- PORTD &= ~(LEDMask & LEDS_PORTD_LEDS);
+ PORTB |= (LEDMask & LEDS_PORTB_LEDS);
+ PORTD |= (LEDMask & LEDS_PORTD_LEDS);
PORTC &= ~(LEDMask & LEDS_PORTC_LEDS);
}
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
- PORTB = ((PORTB & ~LEDS_PORTB_LEDS) | (LEDMask & LEDS_PORTB_LEDS));
- PORTD = ((PORTD & ~LEDS_PORTD_LEDS) | (LEDMask & LEDS_PORTD_LEDS));
+ PORTB = ((PORTB | LEDS_PORTB_LEDS) & ~(LEDMask & LEDS_PORTB_LEDS));
+ PORTD = ((PORTD | LEDS_PORTD_LEDS) & ~(LEDMask & LEDS_PORTD_LEDS));
PORTC = ((PORTC & ~LEDS_PORTC_LEDS) | (LEDMask & LEDS_PORTC_LEDS));
}
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,
const uint8_t ActiveMask)
{
- PORTB = ((PORTB & ~(LEDMask & LEDS_PORTB_LEDS)) | (ActiveMask & LEDS_PORTB_LEDS));
- PORTD = ((PORTD & ~(LEDMask & LEDS_PORTD_LEDS)) | (ActiveMask & LEDS_PORTD_LEDS));
- PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) | (ActiveMask & LEDS_PORTC_LEDS));
+ PORTB = ((PORTB | (LEDMask & LEDS_PORTB_LEDS)) & ~(ActiveMask & LEDS_PORTB_LEDS));
+ PORTD = ((PORTD | (LEDMask & LEDS_PORTD_LEDS)) & ~(ActiveMask & LEDS_PORTD_LEDS));
+ PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) | (ActiveMask & LEDS_PORTC_LEDS));
}
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
- PORTB ^= (LEDMask & LEDS_PORTB_LEDS);
- PORTD ^= (LEDMask & LEDS_PORTD_LEDS);
- PORTC ^= (LEDMask & LEDS_PORTC_LEDS);
+ PINB = (LEDMask & LEDS_PORTB_LEDS);
+ PIND = (LEDMask & LEDS_PORTD_LEDS);
+ PINC = (LEDMask & LEDS_PORTC_LEDS);
}
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
- return ((PORTB & LEDS_PORTB_LEDS) | (PORTD & LEDS_PORTD_LEDS) | (PORTC & LEDS_PORTC_LEDS));
+ return ((~PORTB & LEDS_PORTB_LEDS) | (~PORTD & LEDS_PORTD_LEDS) | (PORTC & LEDS_PORTC_LEDS));
}
#endif
diff --git a/LUFA/Drivers/Board/AVR8/YUN/LEDs.h b/LUFA/Drivers/Board/AVR8/YUN/LEDs.h
index f916d105c0..bcdd47f9b4 100644
--- a/LUFA/Drivers/Board/AVR8/YUN/LEDs.h
+++ b/LUFA/Drivers/Board/AVR8/YUN/LEDs.h
@@ -46,14 +46,14 @@
* Name | Color | Info | Active Level | Port Pin |
* LEDS_LED1 | Yellow | RX | Low | PORTB.0 |
* LEDS_LED2 | Yellow | TX | Low | PORTD.5 |
- * LEDS_LED1 | Red | General Indicator | High | PORTC.7 |
+ * LEDS_LED3 | Red | General Indicator | High | PORTC.7 |
*
*
* @{
*/
-#ifndef __LEDS_LEONARDO_H__
-#define __LEDS_LEONARDO_H__
+#ifndef __LEDS_YUN_H__
+#define __LEDS_YUN_H__
/* Includes: */
#include "../../../../Common/Common.h"
@@ -98,9 +98,9 @@
static inline void LEDs_Init(void)
{
DDRB |= LEDS_PORTB_LEDS;
- PORTB &= LEDS_PORTB_LEDS;
+ PORTB |= LEDS_PORTB_LEDS;
DDRD |= LEDS_PORTD_LEDS;
- PORTD &= LEDS_PORTD_LEDS;
+ PORTD |= LEDS_PORTD_LEDS;
DDRC |= LEDS_PORTC_LEDS;
PORTC &= ~LEDS_PORTC_LEDS;
}
@@ -117,44 +117,44 @@
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
- PORTB |= (LEDMask & LEDS_PORTB_LEDS);
- PORTD |= (LEDMask & LEDS_PORTD_LEDS);
+ PORTB &= ~(LEDMask & LEDS_PORTB_LEDS);
+ PORTD &= ~(LEDMask & LEDS_PORTD_LEDS);
PORTC |= (LEDMask & LEDS_PORTC_LEDS);
}
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
- PORTB &= ~(LEDMask & LEDS_PORTB_LEDS);
- PORTD &= ~(LEDMask & LEDS_PORTD_LEDS);
+ PORTB |= (LEDMask & LEDS_PORTB_LEDS);
+ PORTD |= (LEDMask & LEDS_PORTD_LEDS);
PORTC &= ~(LEDMask & LEDS_PORTC_LEDS);
}
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
- PORTB = ((PORTB & ~LEDS_PORTB_LEDS) | (LEDMask & LEDS_PORTB_LEDS));
- PORTD = ((PORTD & ~LEDS_PORTD_LEDS) | (LEDMask & LEDS_PORTD_LEDS));
+ PORTB = ((PORTB | LEDS_PORTB_LEDS) & ~(LEDMask & LEDS_PORTB_LEDS));
+ PORTD = ((PORTD | LEDS_PORTD_LEDS) & ~(LEDMask & LEDS_PORTD_LEDS));
PORTC = ((PORTC & ~LEDS_PORTC_LEDS) | (LEDMask & LEDS_PORTC_LEDS));
}
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,
const uint8_t ActiveMask)
{
- PORTB = ((PORTB & ~(LEDMask & LEDS_PORTB_LEDS)) | (ActiveMask & LEDS_PORTB_LEDS));
- PORTD = ((PORTD & ~(LEDMask & LEDS_PORTD_LEDS)) | (ActiveMask & LEDS_PORTD_LEDS));
- PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) | (ActiveMask & LEDS_PORTC_LEDS));
+ PORTB = ((PORTB | (LEDMask & LEDS_PORTB_LEDS)) & ~(ActiveMask & LEDS_PORTB_LEDS));
+ PORTD = ((PORTD | (LEDMask & LEDS_PORTD_LEDS)) & ~(ActiveMask & LEDS_PORTD_LEDS));
+ PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) | (ActiveMask & LEDS_PORTC_LEDS));
}
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
- PORTB ^= (LEDMask & LEDS_PORTB_LEDS);
- PORTD ^= (LEDMask & LEDS_PORTD_LEDS);
- PORTC ^= (LEDMask & LEDS_PORTC_LEDS);
+ PINB = (LEDMask & LEDS_PORTB_LEDS);
+ PIND = (LEDMask & LEDS_PORTD_LEDS);
+ PINC = (LEDMask & LEDS_PORTC_LEDS);
}
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
- return ((PORTB & LEDS_PORTB_LEDS) | (PORTD & LEDS_PORTD_LEDS) | (PORTC & LEDS_PORTC_LEDS));
+ return ((~PORTB & LEDS_PORTB_LEDS) | (~PORTD & LEDS_PORTD_LEDS) | (PORTC & LEDS_PORTC_LEDS));
}
#endif
diff --git a/LUFA/Drivers/Board/Board.h b/LUFA/Drivers/Board/Board.h
index e7e57dc94d..27f495361a 100644
--- a/LUFA/Drivers/Board/Board.h
+++ b/LUFA/Drivers/Board/Board.h
@@ -155,6 +155,8 @@
#include "AVR8/U2S/Board.h"
#elif (BOARD == BOARD_YUN)
#include "AVR8/YUN/Board.h"
+ #elif (BOARD == BOARD_MICRO)
+ #include "AVR8/MICRO/Board.h"
#else
#include "Board/Board.h"
#endif
diff --git a/LUFA/Drivers/Board/LEDs.h b/LUFA/Drivers/Board/LEDs.h
index cb80a5e096..392714a4e6 100644
--- a/LUFA/Drivers/Board/LEDs.h
+++ b/LUFA/Drivers/Board/LEDs.h
@@ -205,6 +205,8 @@
#include "AVR8/U2S/LEDs.h"
#elif (BOARD == BOARD_YUN)
#include "AVR8/YUN/LEDs.h"
+ #elif (BOARD == BOARD_MICRO)
+ #include "AVR8/MICRO/LEDs.h"
#else
#include "Board/LEDs.h"
#endif