From f3049d958e4ef6cc919ff5f1302c1b384fed6bbf Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Wed, 19 Sep 2012 19:12:52 +0000 Subject: [PATCH] Fixed incorrect Dataflash functionality in the USBKEY board if the driver is modified for a single Dataflash chip (thanks to Jonathan Oakley). --- BuildTests/BoardDriverTest/Board/Dataflash.h | 8 ++++---- LUFA/CodeTemplates/DriverStubs/Dataflash.h | 10 +++++----- LUFA/DoxygenPages/ChangeLog.txt | 1 + LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h | 12 ++++++------ LUFA/Drivers/Board/AVR8/STK525/Dataflash.h | 12 ++++++------ LUFA/Drivers/Board/AVR8/STK526/Dataflash.h | 12 ++++++------ LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h | 14 +++++++------- LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h | 12 ++++++------ LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h | 4 ++-- LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h | 4 ++-- 10 files changed, 45 insertions(+), 44 deletions(-) diff --git a/BuildTests/BoardDriverTest/Board/Dataflash.h b/BuildTests/BoardDriverTest/Board/Dataflash.h index 72561e55b2..08a70240d8 100644 --- a/BuildTests/BoardDriverTest/Board/Dataflash.h +++ b/BuildTests/BoardDriverTest/Board/Dataflash.h @@ -66,13 +66,13 @@ #define DATAFLASH_TOTALCHIPS 1 // TODO: Replace with the number of Dataflashes on the board, max 2 /** Mask for no dataflash chip selected. */ - #define DATAFLASH_NO_CHIP DATAFLASH_CHIPCS_MASK + #define DATAFLASH_NO_CHIP 0 /** Mask for the first dataflash chip selected. */ - #define DATAFLASH_CHIP1 // TODO: Replace with mask to hold /CS of first Dataflash low, and all others high + #define DATAFLASH_CHIP1 // TODO: Replace with mask with the pin attached to the first Dataflash /CS set /** Mask for the second dataflash chip selected. */ - #define DATAFLASH_CHIP2 // TODO: Replace with mask to hold /CS of second Dataflash low, and all others high + #define DATAFLASH_CHIP2 // TODO: Replace with mask with the pin attached to the second Dataflash /CS set /** Internal main memory page size for the board's dataflash ICs. */ #define DATAFLASH_PAGE_SIZE // TODO: Replace with the page size for the Dataflash ICs @@ -134,7 +134,7 @@ /** Selects the given dataflash chip. * - * \param[in] ChipMask Mask of the Dataflash IC to select, in the form of DATAFLASH_CHIPn mask (where n is + * \param[in] ChipMask Mask of the Dataflash IC to select, in the form of a \c DATAFLASH_CHIPn mask (where n is * the chip number). */ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE; diff --git a/LUFA/CodeTemplates/DriverStubs/Dataflash.h b/LUFA/CodeTemplates/DriverStubs/Dataflash.h index 1d5864724c..46ff599ef6 100644 --- a/LUFA/CodeTemplates/DriverStubs/Dataflash.h +++ b/LUFA/CodeTemplates/DriverStubs/Dataflash.h @@ -66,13 +66,13 @@ #define DATAFLASH_TOTALCHIPS 1 // TODO: Replace with the number of Dataflashes on the board, max 2 /** Mask for no dataflash chip selected. */ - #define DATAFLASH_NO_CHIP DATAFLASH_CHIPCS_MASK + #define DATAFLASH_NO_CHIP 0 /** Mask for the first dataflash chip selected. */ - #define DATAFLASH_CHIP1 // TODO: Replace with mask to hold /CS of first Dataflash low, and all others high + #define DATAFLASH_CHIP1 // TODO: Replace with mask with the pin attached to the first Dataflash /CS set /** Mask for the second dataflash chip selected. */ - #define DATAFLASH_CHIP2 // TODO: Replace with mask to hold /CS of second Dataflash low, and all others high + #define DATAFLASH_CHIP2 // TODO: Replace with mask with the pin attached to the second Dataflash /CS set /** Internal main memory page size for the board's dataflash ICs. */ #define DATAFLASH_PAGE_SIZE // TODO: Replace with the page size for the Dataflash ICs @@ -130,7 +130,7 @@ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Dataflash_GetSelectedChip(void) { - return (DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); + return (~DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); } /** Selects the given dataflash chip. @@ -141,7 +141,7 @@ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE; static inline void Dataflash_SelectChip(const uint8_t ChipMask) { - DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT & ~DATAFLASH_CHIPCS_MASK) | ChipMask); + DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT | DATAFLASH_CHIPCS_MASK) & ~ChipMask); } /** Deselects the current dataflash chip, so that no dataflash is selected. */ diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt index e92f026cf0..bb6621f1fe 100644 --- a/LUFA/DoxygenPages/ChangeLog.txt +++ b/LUFA/DoxygenPages/ChangeLog.txt @@ -31,6 +31,7 @@ * - Fixed logic hole breaking USB operations on a USB controller with only one supported USB mode and no USB_DEVICE_ONLY or USB_HOST_ONLY * configuration token set * - Fixed possible rounding in the VERSION_BCD() macros for some 0.01 step increments (thanks to Oliver Zander) + * - Fixed incorrect Dataflash functionality in the USBKEY board if the driver is modified for a single Dataflash chip (thanks to Jonathan Oakley) * - Library Applications: * - Fixed broken RESET_TOGGLES_LIBUSB_COMPAT compile time option in the AVRISP-MKII project * - Fixed incompatibility in the CDC class bootloader on some systems (thanks to Sylvain Munaut) diff --git a/LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h b/LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h index 5f114b16de..20625d07f8 100644 --- a/LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h +++ b/LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h @@ -66,7 +66,7 @@ /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Macros: */ - #define DATAFLASH_CHIPCS_MASK (1 << 6) + #define DATAFLASH_CHIPCS_MASK DATAFLASH_CHIP1 #define DATAFLASH_CHIPCS_DDR DDRE #define DATAFLASH_CHIPCS_PORT PORTE #endif @@ -77,10 +77,10 @@ #define DATAFLASH_TOTALCHIPS 1 /** Mask for no dataflash chip selected. */ - #define DATAFLASH_NO_CHIP DATAFLASH_CHIPCS_MASK + #define DATAFLASH_NO_CHIP 0 /** Mask for the first dataflash chip selected. */ - #define DATAFLASH_CHIP1 0 + #define DATAFLASH_CHIP1 (1 << 6) /** Internal main memory page size for the board's dataflash IC. */ #define DATAFLASH_PAGE_SIZE 512 @@ -133,12 +133,12 @@ /** Determines the currently selected dataflash chip. * * \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected - * or a DATAFLASH_CHIPn mask (where n is the chip number). + * or a DATAFLASH_CHIPn mask (where n is the chip number). */ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Dataflash_GetSelectedChip(void) { - return (DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); + return (~DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); } /** Selects the given dataflash chip. @@ -149,7 +149,7 @@ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE; static inline void Dataflash_SelectChip(const uint8_t ChipMask) { - DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT & ~DATAFLASH_CHIPCS_MASK) | ChipMask); + DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT | DATAFLASH_CHIPCS_MASK) & ~ChipMask); } /** Deselects the current dataflash chip, so that no dataflash is selected. */ diff --git a/LUFA/Drivers/Board/AVR8/STK525/Dataflash.h b/LUFA/Drivers/Board/AVR8/STK525/Dataflash.h index 74b724fde0..0b8239a0de 100644 --- a/LUFA/Drivers/Board/AVR8/STK525/Dataflash.h +++ b/LUFA/Drivers/Board/AVR8/STK525/Dataflash.h @@ -66,7 +66,7 @@ /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Macros: */ - #define DATAFLASH_CHIPCS_MASK (1 << 4) + #define DATAFLASH_CHIPCS_MASK DATAFLASH_CHIP1 #define DATAFLASH_CHIPCS_DDR DDRB #define DATAFLASH_CHIPCS_PORT PORTB #endif @@ -77,10 +77,10 @@ #define DATAFLASH_TOTALCHIPS 1 /** Mask for no dataflash chip selected. */ - #define DATAFLASH_NO_CHIP DATAFLASH_CHIPCS_MASK + #define DATAFLASH_NO_CHIP 0 /** Mask for the first dataflash chip selected. */ - #define DATAFLASH_CHIP1 0 + #define DATAFLASH_CHIP1 (1 << 4) /** Internal main memory page size for the board's dataflash IC. */ #define DATAFLASH_PAGE_SIZE 512 @@ -133,12 +133,12 @@ /** Determines the currently selected dataflash chip. * * \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected - * or a DATAFLASH_CHIPn mask (where n is the chip number). + * or a DATAFLASH_CHIPn mask (where n is the chip number). */ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Dataflash_GetSelectedChip(void) { - return (DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); + return (~DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); } /** Selects the given dataflash chip. @@ -149,7 +149,7 @@ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE; static inline void Dataflash_SelectChip(const uint8_t ChipMask) { - DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT & ~DATAFLASH_CHIPCS_MASK) | ChipMask); + DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT | DATAFLASH_CHIPCS_MASK) & ~ChipMask); } /** Deselects the current dataflash chip, so that no dataflash is selected. */ diff --git a/LUFA/Drivers/Board/AVR8/STK526/Dataflash.h b/LUFA/Drivers/Board/AVR8/STK526/Dataflash.h index 75b0eddb40..3fd604bd10 100644 --- a/LUFA/Drivers/Board/AVR8/STK526/Dataflash.h +++ b/LUFA/Drivers/Board/AVR8/STK526/Dataflash.h @@ -66,7 +66,7 @@ /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Macros: */ - #define DATAFLASH_CHIPCS_MASK (1 << 2) + #define DATAFLASH_CHIPCS_MASK DATAFLASH_CHIP1 #define DATAFLASH_CHIPCS_DDR DDRC #define DATAFLASH_CHIPCS_PORT PORTC #endif @@ -77,10 +77,10 @@ #define DATAFLASH_TOTALCHIPS 1 /** Mask for no dataflash chip selected. */ - #define DATAFLASH_NO_CHIP DATAFLASH_CHIPCS_MASK + #define DATAFLASH_NO_CHIP 0 /** Mask for the first dataflash chip selected. */ - #define DATAFLASH_CHIP1 0 + #define DATAFLASH_CHIP1 (1 << 2) /** Internal main memory page size for the board's dataflash IC. */ #define DATAFLASH_PAGE_SIZE 1024 @@ -133,12 +133,12 @@ /** Determines the currently selected dataflash chip. * * \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected - * or a DATAFLASH_CHIPn mask (where n is the chip number). + * or a DATAFLASH_CHIPn mask (where n is the chip number). */ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Dataflash_GetSelectedChip(void) { - return (DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); + return (~DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); } /** Selects the given dataflash chip. @@ -149,7 +149,7 @@ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE; static inline void Dataflash_SelectChip(const uint8_t ChipMask) { - DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT & ~DATAFLASH_CHIPCS_MASK) | ChipMask); + DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT | DATAFLASH_CHIPCS_MASK) & ~ChipMask); } /** Deselects the current dataflash chip, so that no dataflash is selected. */ diff --git a/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h b/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h index 5625e9a37b..f3cb45db88 100644 --- a/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h +++ b/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h @@ -67,7 +67,7 @@ /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Macros: */ - #define DATAFLASH_CHIPCS_MASK ((1 << 1) | (1 << 0)) + #define DATAFLASH_CHIPCS_MASK (DATAFLASH_CHIP1 | DATAFLASH_CHIP2) #define DATAFLASH_CHIPCS_DDR DDRE #define DATAFLASH_CHIPCS_PORT PORTE #endif @@ -78,13 +78,13 @@ #define DATAFLASH_TOTALCHIPS 2 /** Mask for no dataflash chip selected. */ - #define DATAFLASH_NO_CHIP DATAFLASH_CHIPCS_MASK + #define DATAFLASH_NO_CHIP 0 /** Mask for the first dataflash chip selected. */ - #define DATAFLASH_CHIP1 (1 << 1) + #define DATAFLASH_CHIP1 (1 << 0) /** Mask for the second dataflash chip selected. */ - #define DATAFLASH_CHIP2 (1 << 0) + #define DATAFLASH_CHIP2 (1 << 1) /** Internal main memory page size for the board's dataflash ICs. */ #define DATAFLASH_PAGE_SIZE 1024 @@ -137,12 +137,12 @@ /** Determines the currently selected dataflash chip. * * \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected - * or a DATAFLASH_CHIPn mask (where n is the chip number). + * or a DATAFLASH_CHIPn mask (where n is the chip number). */ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Dataflash_GetSelectedChip(void) { - return (DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); + return (~DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); } /** Selects the given dataflash chip. @@ -153,7 +153,7 @@ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE; static inline void Dataflash_SelectChip(const uint8_t ChipMask) { - DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT & ~DATAFLASH_CHIPCS_MASK) | ChipMask); + DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT | DATAFLASH_CHIPCS_MASK) & ~ChipMask); } /** Deselects the current dataflash chip, so that no dataflash is selected. */ diff --git a/LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h b/LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h index a20c51947d..950d4a287d 100644 --- a/LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h +++ b/LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h @@ -83,7 +83,7 @@ /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Macros: */ - #define DATAFLASH_CHIPCS_MASK (1 << 5) + #define DATAFLASH_CHIPCS_MASK DATAFLASH_CHIP1 #define DATAFLASH_CHIPCS_DDR DDRB #define DATAFLASH_CHIPCS_PORT PORTB #endif @@ -94,10 +94,10 @@ #define DATAFLASH_TOTALCHIPS 1 /** Mask for no dataflash chip selected. */ - #define DATAFLASH_NO_CHIP DATAFLASH_CHIPCS_MASK + #define DATAFLASH_NO_CHIP 0 /** Mask for the first dataflash chip selected. */ - #define DATAFLASH_CHIP1 0 + #define DATAFLASH_CHIP1 (1 << 5) #if ((BOARD != BOARD_XPLAIN_REV1) || defined(__DOXYGEN__)) /** Internal main memory page size for the board's dataflash ICs. */ @@ -156,12 +156,12 @@ /** Determines the currently selected dataflash chip. * * \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected - * or a DATAFLASH_CHIPn mask (where n is the chip number). + * or a DATAFLASH_CHIPn mask (where n is the chip number). */ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Dataflash_GetSelectedChip(void) { - return (DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); + return (~DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK); } /** Selects the given dataflash chip. @@ -172,7 +172,7 @@ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE; static inline void Dataflash_SelectChip(const uint8_t ChipMask) { - DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT & ~DATAFLASH_CHIPCS_MASK) | ChipMask); + DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT | DATAFLASH_CHIPCS_MASK) & ~ChipMask); } /** Deselects the current dataflash chip, so that no dataflash is selected. */ diff --git a/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h b/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h index 14274ae611..6d84d0bd2d 100644 --- a/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h +++ b/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h @@ -66,7 +66,7 @@ /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Macros: */ - #define DATAFLASH_CHIPCS_MASK (1 << 4) + #define DATAFLASH_CHIPCS_MASK DATAFLASH_CHIP1 #define DATAFLASH_CHIPCS_PORT PORTF #endif @@ -134,7 +134,7 @@ /** Determines the currently selected dataflash chip. * * \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected - * or a DATAFLASH_CHIPn mask (where n is the chip number). + * or a DATAFLASH_CHIPn mask (where n is the chip number). */ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Dataflash_GetSelectedChip(void) diff --git a/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h b/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h index f8997d2d6b..90b3bb651a 100644 --- a/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h +++ b/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h @@ -66,7 +66,7 @@ /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Macros: */ - #define DATAFLASH_CHIPCS_MASK (1 << 2) + #define DATAFLASH_CHIPCS_MASK DATAFLASH_CHIP1 #define DATAFLASH_CHIPCS_PORT PORTD #endif @@ -136,7 +136,7 @@ /** Determines the currently selected dataflash chip. * * \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected - * or a DATAFLASH_CHIPn mask (where n is the chip number). + * or a DATAFLASH_CHIPn mask (where n is the chip number). */ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Dataflash_GetSelectedChip(void)