Add basic hardware mapping information for all supported boards.
[pub/USBasp.git] / LUFA / Drivers / Board / AVR8 / XPLAIN / Dataflash.h
index 113505a..9647cc1 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2011.
+     Copyright (C) Dean Camera, 2012.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -29,7 +29,7 @@
 */
 
 /** \file
 */
 
 /** \file
- *  \brief Board specific Dataflash driver header for the Atmel XPLAIN.
+ *  \brief Board specific Dataflash driver header for the original Atmel XPLAIN.
  *  \copydetails Group_Dataflash_XPLAIN
  *
  *  \note This file should not be included directly. It is automatically included as needed by the dataflash driver
  *  \copydetails Group_Dataflash_XPLAIN
  *
  *  \note This file should not be included directly. It is automatically included as needed by the dataflash driver
  */
 
 /** \ingroup Group_Dataflash
  */
 
 /** \ingroup Group_Dataflash
+ *  \defgroup Group_Dataflash_XPLAIN_REV1 XPLAIN_REV1
+ *  \brief Board specific Dataflash driver header for the original Atmel XPLAIN, revision 1.
+ *
+ *  See \ref Group_Dataflash_XPLAIN for more details.
+ */
+
+/** \ingroup Group_Dataflash
  *  \defgroup Group_Dataflash_XPLAIN XPLAIN
  *  \defgroup Group_Dataflash_XPLAIN XPLAIN
- *  \brief Board specific Dataflash driver header for the Atmel XPLAIN.
+ *  \brief Board specific Dataflash driver header for the original Atmel XPLAIN.
+ *
+ *  \note For the first revision XPLAIN board, compile with <code>BOARD = BOARD_XPLAIN_REV1</code>.
  *
  *  Board specific Dataflash driver header for the Atmel XPLAIN.
  *
  *
  *  Board specific Dataflash driver header for the Atmel XPLAIN.
  *
+ *  <b>Revision 1 Boards</b>:
+ *  <table>
+ *    <tr><th>Name</th><th>Info</th><th>Select Pin</th><th>SPI Port</th></tr>
+ *    <tr><td>DATAFLASH_CHIP1</td><td>AT45DB041D (512KB)</td><td>PORTB.5</td><td>SPI0</td></tr>
+ *  </table>
+ *
+ *  <b>Other Board Revisions</b>:
+ *  <table>
+ *    <tr><th>Name</th><th>Info</th><th>Select Pin</th><th>SPI Port</th></tr>
+ *    <tr><td>DATAFLASH_CHIP1</td><td>AT45DB642D (8MB)</td><td>PORTB.5</td><td>SPI0</td></tr>
+ *  </table>
+ *
  *  @{
  */
 
  *  @{
  */
 
@@ -50,7 +71,9 @@
 
        /* Includes: */
                #include "../../../../Common/Common.h"
 
        /* Includes: */
                #include "../../../../Common/Common.h"
+               
                #include "../../../Misc/AT45DB642D.h"
                #include "../../../Misc/AT45DB642D.h"
+               #include "../../../Peripheral/SPI.h"
 
        /* Preprocessor Checks: */
                #if !defined(__INCLUDE_FROM_DATAFLASH_H)
 
        /* Preprocessor Checks: */
                #if !defined(__INCLUDE_FROM_DATAFLASH_H)
                        /** Mask for the first dataflash chip selected. */
                        #define DATAFLASH_CHIP1                      0
 
                        /** Mask for the first dataflash chip selected. */
                        #define DATAFLASH_CHIP1                      0
 
-                       #if (BOARD == BOARD_XPLAIN_REV1)
-                               #define DATAFLASH_PAGE_SIZE              256
-
-                               #define DATAFLASH_PAGES                  2048
-                       #else
+                       #if ((BOARD != BOARD_XPLAIN_REV1) || defined(__DOXYGEN__))
                                /** Internal main memory page size for the board's dataflash ICs. */
                                #define DATAFLASH_PAGE_SIZE              1024
 
                                /** Total number of pages inside each of the board's dataflash ICs. */
                                #define DATAFLASH_PAGES                  8192
                                /** Internal main memory page size for the board's dataflash ICs. */
                                #define DATAFLASH_PAGE_SIZE              1024
 
                                /** Total number of pages inside each of the board's dataflash ICs. */
                                #define DATAFLASH_PAGES                  8192
+                       #else
+                               #define DATAFLASH_PAGE_SIZE              256
+
+                               #define DATAFLASH_PAGES                  2048
                        #endif
 
                /* Inline Functions: */
                        #endif
 
                /* Inline Functions: */
                                DATAFLASH_CHIPCS_PORT |= DATAFLASH_CHIPCS_MASK;
                        }
 
                                DATAFLASH_CHIPCS_PORT |= DATAFLASH_CHIPCS_MASK;
                        }
 
+                       /** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
+                        *
+                        *  \param[in] Byte  Byte of data to send to the dataflash
+                        *
+                        *  \return Last response byte from the dataflash
+                        */
+                       static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
+                       static inline uint8_t Dataflash_TransferByte(const uint8_t Byte)
+                       {
+                               return SPI_TransferByte(Byte);
+                       }
+
+                       /** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
+                        *
+                        *  \param[in] Byte  Byte of data to send to the dataflash
+                        */
+                       static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
+                       static inline void Dataflash_SendByte(const uint8_t Byte)
+                       {
+                               SPI_SendByte(Byte);
+                       }
+
+                       /** Sends a dummy byte to the currently selected dataflash IC, and returns the next byte from the dataflash.
+                        *
+                        *  \return Last response byte from the dataflash
+                        */
+                       static inline uint8_t Dataflash_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
+                       static inline uint8_t Dataflash_ReceiveByte(void)
+                       {
+                               return SPI_ReceiveByte();
+                       }
+
                        /** Determines the currently selected dataflash chip.
                         *
                         *  \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected
                        /** Determines the currently selected dataflash chip.
                         *
                         *  \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected