From 77689358894e45e63e5d48aa519c04fcb773a9ac Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Wed, 30 Apr 2014 20:36:42 +1000 Subject: [PATCH] Fix LED driver for the Arduino Leonardo board. --- LUFA/DoxygenPages/ChangeLog.txt | 1 + LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h | 30 ++++++++++++------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt index 2fd980f465..b5f70add7c 100644 --- a/LUFA/DoxygenPages/ChangeLog.txt +++ b/LUFA/DoxygenPages/ChangeLog.txt @@ -11,6 +11,7 @@ * - Core: * - Fixed device class driver pipe configuration routines returning success with a partially constructed instance * when a pipe configuration failed (thanks to Helge Suess) + * - Fixed incorrect LED driver definitions for the Arduino Leonardo board (thanks to Zoltán Szőke) * * \section Sec_ChangeLog140302 Version 140302 * New: diff --git a/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h b/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h index 28a4802676..c3361906e0 100644 --- a/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h +++ b/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.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) { - PINB = (LEDMask & LEDS_PORTB_LEDS); - PIND = (LEDMask & LEDS_PORTD_LEDS); - PINC = (LEDMask & LEDS_PORTC_LEDS); + PORTB ^= (LEDMask & LEDS_PORTB_LEDS); + PORTD ^= (LEDMask & LEDS_PORTD_LEDS); + PORTC ^= (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