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.
  *
+ *  
+ *    | Name | Info | Select Pin | SPI Port | 
+ *    | DATAFLASH_CHIP1 | AT45DB642D (8MB) | PORTE.0 | SPI0 | 
+ *    | DATAFLASH_CHIP2 | AT45DB642D (8MB) | PORTE.1 | SPI0 | 
+ *  
+ *
  *  @{
  */
 
@@ -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);