From da676f0f705904df15202f34b14c99f279eda339 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 5 Feb 2012 15:50:09 +0000 Subject: [PATCH] Add support for the Micropendous (Arduino-like) series of boards (revisions 1 and 2). --- LUFA/Common/BoardTypes.h | 6 ++ LUFA/DoxygenPages/ChangeLog.txt | 2 +- .../Drivers/Board/AVR8/MICROPENDOUS/Buttons.h | 20 +++++++ LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h | 56 +++++++++++++++---- LUFA/Drivers/Board/Buttons.h | 1 + LUFA/Drivers/Board/LEDs.h | 3 +- 6 files changed, 75 insertions(+), 13 deletions(-) diff --git a/LUFA/Common/BoardTypes.h b/LUFA/Common/BoardTypes.h index 85885177cc..e21709b2af 100644 --- a/LUFA/Common/BoardTypes.h +++ b/LUFA/Common/BoardTypes.h @@ -189,6 +189,12 @@ /** Selects the Micropendous DIP specific board drivers, including the Button. */ #define BOARD_MICROPENDOUS_DIP 41 + /** Selects the Micropendous (Arduino-like) revision 1 specific board drivers, including the Button and LED drivers. */ + #define BOARD_MICROPENDOUS_REV1 42 + + /** Selects the Micropendous (Arduino-like) revision 2 specific board drivers, including the Button and LED drivers. */ + #define BOARD_MICROPENDOUS_REV2 43 + #if !defined(__DOXYGEN__) #define BOARD_ BOARD_NONE diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt index ac9b543f76..8360f0671a 100644 --- a/LUFA/DoxygenPages/ChangeLog.txt +++ b/LUFA/DoxygenPages/ChangeLog.txt @@ -17,7 +17,7 @@ * - Added new USB_Host_GetDescriptor(), USB_Host_GetDeviceConfiguration() and USB_Host_GetInterfaceAltSetting() functions * - Added new CALLBACK_Audio_Device_GetSetInterfaceProperty() callback to the Audio Device Class driver * - Added new LEDs_Disable(), Buttons_Disable() and Joystick_Disable() functions to the board hardware drivers - * - Added support for the Micropendous family of boards + * - Added support for the Micropendous family of boards (Arduino-like revisions 1 and 2, DIP, 32U2, A, 1, 2, 3 and 4) * - Added INVERTED_VBUS_ENABLE_LINE and NO_AUTO_VBUS_MANAGEMENT compile time options (thanks to Opendous Inc.) * - Library Applications: * - Added User Application APIs to the CDC and DFU class bootloaders diff --git a/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h index cb426586f9..5c5825afbe 100644 --- a/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h +++ b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h @@ -78,6 +78,20 @@ * See \ref Group_Buttons_MICROPENDOUS_32U2 for more details. */ +/** \ingroup Group_Buttons + * \defgroup Group_Buttons_MICROPENDOUS_REV1 MICROPENDOUS_REV1 + * \brief Board specific Button driver header for the Micropendous Arduino-like Revision 1 (https://code.google.com/p/micropendous/wiki/Micropendous). + * + * See \ref Group_Buttons_MICROPENDOUS_32U2 for more details. + */ + +/** \ingroup Group_Buttons + * \defgroup Group_Buttons_MICROPENDOUS_REV2 MICROPENDOUS_REV2 + * \brief Board specific Button driver header for the Micropendous Arduino-like Revision 2 (https://code.google.com/p/micropendous/wiki/Micropendous). + * + * See \ref Group_Buttons_MICROPENDOUS_32U2 for more details. + */ + /** \ingroup Group_Buttons * \defgroup Group_Buttons_MICROPENDOUS_32U2 MICROPENDOUS_32U2 * \brief Board specific Buttons driver header for the Micropendous 32U2. @@ -128,6 +142,12 @@ #elif (BOARD == BOARD_MICROPENDOUS_DIP) #define _BOARD_BUTTON1_MASK (1 << 2) #define _BOARD_BUTTON_PORTLETTER E + #elif (BOARD == BOARD_MICROPENDOUS_REV1) + #define _BOARD_BUTTON1_MASK (1 << 2) + #define _BOARD_BUTTON_PORTLETTER E + #elif (BOARD == BOARD_MICROPENDOUS_REV2) + #define _BOARD_BUTTON1_MASK (1 << 2) + #define _BOARD_BUTTON_PORTLETTER E #endif #define _BOARD_BUTTON_CONCAT2(Reg, Letter) Reg ## Letter diff --git a/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h index 17a8b9f7ac..649d961e9b 100644 --- a/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h +++ b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h @@ -36,6 +36,20 @@ * dispatch header located in LUFA/Drivers/Board/LEDs.h. */ +/** \ingroup Group_LEDs + * \defgroup Group_LEDs_MICROPENDOUS_REV1 MICROPENDOUS_REV1 + * \brief Board specific LED driver header for the Micropendous Arduino-like Revision 1 (https://code.google.com/p/micropendous/wiki/Micropendous). + * + * See \ref Group_LEDs_MICROPENDOUS_32U2 for more details. + */ + +/** \ingroup Group_LEDs + * \defgroup Group_LEDs_MICROPENDOUS_REV2 MICROPENDOUS_REV2 + * \brief Board specific LED driver header for the Micropendous Arduino-like Revision 2 (https://code.google.com/p/micropendous/wiki/Micropendous). + * + * See \ref Group_LEDs_MICROPENDOUS_32U2 for more details. + */ + /** \ingroup Group_LEDs * \defgroup Group_LEDs_MICROPENDOUS_32U2 MICROPENDOUS_32U2 * \brief Board specific LED driver header for the Micropendous 32U2. @@ -61,10 +75,30 @@ #error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead. #endif + /* Private Interface - For use in library only: */ + #if !defined(__DOXYGEN__) + #if (BOARD == BOARD_MICROPENDOUS_32U2) + #define _BOARD_LED1_MASK (1 << 6) + #define _BOARD_LED_PORTLETTER D + #elif (BOARD == BOARD_MICROPENDOUS_REV1) + #define _BOARD_LED1_MASK (1 << 1) + #define _BOARD_LED_PORTLETTER B + #elif (BOARD == BOARD_MICROPENDOUS_REV2) + #define _BOARD_LED1_MASK (1 << 1) + #define _BOARD_LED_PORTLETTER B + #endif + + #define _BOARD_LED_CONCAT2(Reg, Letter) Reg ## Letter + #define _BOARD_LED_CONCAT(Reg, Letter) _BOARD_LED_CONCAT2(Reg, Letter) + + #define _BOARD_LED_PORT _BOARD_LED_CONCAT(PORT, _BOARD_LED_PORTLETTER) + #define _BOARD_LED_DDR _BOARD_LED_CONCAT(DDR, _BOARD_LED_PORTLETTER) + #endif + /* Public Interface - May be used in end-application: */ /* Macros: */ /** LED mask for the first LED on the board. */ - #define LEDS_LED1 (1 << 6) + #define LEDS_LED1 _BOARD_LED1_MASK /** LED mask for all the LEDs on the board. */ #define LEDS_ALL_LEDS LEDS_LED1 @@ -76,46 +110,46 @@ #if !defined(__DOXYGEN__) static inline void LEDs_Init(void) { - DDRD |= LEDS_ALL_LEDS; - PORTD &= ~LEDS_ALL_LEDS; + _BOARD_LED_DDR |= LEDS_ALL_LEDS; + _BOARD_LED_PORT &= ~LEDS_ALL_LEDS; } static inline void LEDs_Disable(void) { - DDRD &= ~LEDS_ALL_LEDS; - PORTD &= ~LEDS_ALL_LEDS; + _BOARD_LED_DDR &= ~LEDS_ALL_LEDS; + _BOARD_LED_PORT &= ~LEDS_ALL_LEDS; } static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask) { - PORTD |= LEDMask; + _BOARD_LED_PORT |= LEDMask; } static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask) { - PORTD &= ~LEDMask; + _BOARD_LED_PORT &= ~LEDMask; } static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) { - PORTD = ((PORTF & ~LEDS_ALL_LEDS) | LEDMask); + _BOARD_LED_PORT = ((PORTF & ~LEDS_ALL_LEDS) | LEDMask); } static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask) { - PORTD = ((PORTF & ~LEDMask) | ActiveMask); + _BOARD_LED_PORT = ((PORTF & ~LEDMask) | ActiveMask); } static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) { - PORTD ^= LEDMask; + _BOARD_LED_PORT ^= LEDMask; } static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; static inline uint8_t LEDs_GetLEDs(void) { - return (PORTD & LEDS_ALL_LEDS); + return (_BOARD_LED_PORT & LEDS_ALL_LEDS); } #endif diff --git a/LUFA/Drivers/Board/Buttons.h b/LUFA/Drivers/Board/Buttons.h index 2b430baac7..6ea072ccb1 100644 --- a/LUFA/Drivers/Board/Buttons.h +++ b/LUFA/Drivers/Board/Buttons.h @@ -138,6 +138,7 @@ #elif ((BOARD == BOARD_MICROPENDOUS_32U2) || (BOARD == BOARD_MICROPENDOUS_A) || \ (BOARD == BOARD_MICROPENDOUS_1) || (BOARD == BOARD_MICROPENDOUS_2) || \ (BOARD == BOARD_MICROPENDOUS_3) || (BOARD == BOARD_MICROPENDOUS_4) || \ + (BOARD == BOARD_MICROPENDOUS_REV1) || (BOARD == BOARD_MICROPENDOUS_REV2) || \ (BOARD == BOARD_MICROPENDOUS_DIP)) #include "AVR8/MICROPENDOUS/Buttons.h" #else diff --git a/LUFA/Drivers/Board/LEDs.h b/LUFA/Drivers/Board/LEDs.h index d1836dad47..94421a2c86 100644 --- a/LUFA/Drivers/Board/LEDs.h +++ b/LUFA/Drivers/Board/LEDs.h @@ -175,7 +175,8 @@ #include "XMEGA/A3BU_XPLAINED/LEDs.h" #elif ((BOARD == BOARD_USB2AX) || (BOARD == BOARD_USB2AX_V3)) #include "AVR8/USB2AX/LEDs.h" - #elif (BOARD == BOARD_MICROPENDOUS_32U2) + #elif ((BOARD == BOARD_MICROPENDOUS_REV1) || (BOARD == BOARD_MICROPENDOUS_REV2) || \ + (BOARD == BOARD_MICROPENDOUS_32U2)) #include "AVR8/MICROPENDOUS/LEDs.h" #else #include "Board/LEDs.h"