Fix LED driver for the Arduino Leonardo board.

pull/1469/head
Dean Camera 11 years ago
parent 7ad97a3d5d
commit 7768935889

@ -11,6 +11,7 @@
* - Core: * - Core:
* - Fixed device class driver pipe configuration routines returning success with a partially constructed instance * - Fixed device class driver pipe configuration routines returning success with a partially constructed instance
* when a pipe configuration failed (thanks to Helge Suess) * 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 * \section Sec_ChangeLog140302 Version 140302
* <b>New:</b> * <b>New:</b>

@ -98,9 +98,9 @@
static inline void LEDs_Init(void) static inline void LEDs_Init(void)
{ {
DDRB |= LEDS_PORTB_LEDS; DDRB |= LEDS_PORTB_LEDS;
PORTB |= LEDS_PORTB_LEDS; PORTB &= LEDS_PORTB_LEDS;
DDRD |= LEDS_PORTD_LEDS; DDRD |= LEDS_PORTD_LEDS;
PORTD |= LEDS_PORTD_LEDS; PORTD &= LEDS_PORTD_LEDS;
DDRC |= LEDS_PORTC_LEDS; DDRC |= LEDS_PORTC_LEDS;
PORTC &= ~LEDS_PORTC_LEDS; PORTC &= ~LEDS_PORTC_LEDS;
} }
@ -117,44 +117,44 @@
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask) static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{ {
PORTB &= ~(LEDMask & LEDS_PORTB_LEDS); PORTB |= (LEDMask & LEDS_PORTB_LEDS);
PORTD &= ~(LEDMask & LEDS_PORTD_LEDS); PORTD |= (LEDMask & LEDS_PORTD_LEDS);
PORTC |= (LEDMask & LEDS_PORTC_LEDS); PORTC |= (LEDMask & LEDS_PORTC_LEDS);
} }
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask) static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{ {
PORTB |= (LEDMask & LEDS_PORTB_LEDS); PORTB &= ~(LEDMask & LEDS_PORTB_LEDS);
PORTD |= (LEDMask & LEDS_PORTD_LEDS); PORTD &= ~(LEDMask & LEDS_PORTD_LEDS);
PORTC &= ~(LEDMask & LEDS_PORTC_LEDS); PORTC &= ~(LEDMask & LEDS_PORTC_LEDS);
} }
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{ {
PORTB = ((PORTB | LEDS_PORTB_LEDS) & ~(LEDMask & LEDS_PORTB_LEDS)); PORTB = ((PORTB & ~LEDS_PORTB_LEDS) | (LEDMask & LEDS_PORTB_LEDS));
PORTD = ((PORTD | LEDS_PORTD_LEDS) & ~(LEDMask & LEDS_PORTD_LEDS)); PORTD = ((PORTD & ~LEDS_PORTD_LEDS) | (LEDMask & LEDS_PORTD_LEDS));
PORTC = ((PORTC & ~LEDS_PORTC_LEDS) | (LEDMask & LEDS_PORTC_LEDS)); PORTC = ((PORTC & ~LEDS_PORTC_LEDS) | (LEDMask & LEDS_PORTC_LEDS));
} }
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,
const uint8_t ActiveMask) const uint8_t ActiveMask)
{ {
PORTB = ((PORTB | (LEDMask & LEDS_PORTB_LEDS)) & ~(ActiveMask & LEDS_PORTB_LEDS)); PORTB = ((PORTB & ~(LEDMask & LEDS_PORTB_LEDS)) | (ActiveMask & LEDS_PORTB_LEDS));
PORTD = ((PORTD | (LEDMask & LEDS_PORTD_LEDS)) & ~(ActiveMask & LEDS_PORTD_LEDS)); PORTD = ((PORTD & ~(LEDMask & LEDS_PORTD_LEDS)) | (ActiveMask & LEDS_PORTD_LEDS));
PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) | (ActiveMask & LEDS_PORTC_LEDS)); PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) | (ActiveMask & LEDS_PORTC_LEDS));
} }
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{ {
PINB = (LEDMask & LEDS_PORTB_LEDS); PORTB ^= (LEDMask & LEDS_PORTB_LEDS);
PIND = (LEDMask & LEDS_PORTD_LEDS); PORTD ^= (LEDMask & LEDS_PORTD_LEDS);
PINC = (LEDMask & LEDS_PORTC_LEDS); PORTC ^= (LEDMask & LEDS_PORTC_LEDS);
} }
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void) 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 #endif

Loading…
Cancel
Save