X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/4d131de85b386b1ae948032e06831b0250e89070..e471f7c78dd78ec6a9d432cead81e94a16af9261:/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h diff --git a/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h b/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h index 1e34a3953..2610736b6 100644 --- a/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h +++ b/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h @@ -42,6 +42,12 @@ * * Board specific Dataflash driver header for the Atmel USBKEY board. * + * + * + * + * + *
NameInfoSelect PinSPI Port
DATAFLASH_CHIP1AT45DB642D (8MB)PORTE.0SPI0
DATAFLASH_CHIP2AT45DB642D (8MB)PORTE.1SPI0
+ * * @{ */ @@ -51,6 +57,7 @@ /* Includes: */ #include "../../../../Common/Common.h" #include "../../../Misc/AT45DB642D.h" + #include "../../../Peripheral/SPI.h" /* Preprocessor Checks: */ #if !defined(__INCLUDE_FROM_DATAFLASH_H) @@ -60,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 @@ -71,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 @@ -130,23 +137,23 @@ /** 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. * - * \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; 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. */ @@ -172,10 +179,14 @@ if (PageAddress >= (DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS)) return; - if (PageAddress & 0x01) - Dataflash_SelectChip(DATAFLASH_CHIP2); - else - Dataflash_SelectChip(DATAFLASH_CHIP1); + #if (DATAFLASH_TOTALCHIPS == 2) + if (PageAddress & 0x01) + Dataflash_SelectChip(DATAFLASH_CHIP2); + else + Dataflash_SelectChip(DATAFLASH_CHIP1); + #else + Dataflash_SelectChip(DATAFLASH_CHIP1); + #endif } /** Toggles the select line of the currently selected dataflash IC, so that it is ready to receive @@ -209,8 +220,10 @@ static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte) { - PageAddress >>= 1; - + #if (DATAFLASH_TOTALCHIPS == 2) + PageAddress >>= 1; + #endif + Dataflash_SendByte(PageAddress >> 5); Dataflash_SendByte((PageAddress << 3) | (BufferByte >> 8)); Dataflash_SendByte(BufferByte);