Minor updates to the Benito programmer - remove redundant PORT register manipulations.
[pub/USBasp.git] / LUFA / Drivers / Board / Dataflash.h
index aa0c089..acdcc4c 100644 (file)
  *  directory.\r
  */\r
  \r
  *  directory.\r
  */\r
  \r
+/** \ingroup Group_BoardDrivers\r
+ *  @defgroup Group_Dataflash Dataflash Driver - LUFA/Drivers/Board/Dataflash.h\r
+ *\r
+ *  \section Sec_Dependencies Module Source Dependencies\r
+ *  The following files must be built with any user project that uses this module:\r
+ *    - None\r
+ *\r
+ *  \section Module Description\r
+ *  Dataflash driver. This module provides an easy to use interface for the Dataflash ICs located on many boards,\r
+ *  for the storage of large amounts of data into the Dataflash's non-volatile memory.\r
+ *\r
+ *  If the BOARD value is set to BOARD_USER, this will include the /Board/Dataflash.h file in the user project\r
+ *  directory. Otherwise, it will include the appropriate built in board driver header file.\r
+ *\r
+ *  @{\r
+ */\r
\r
 #ifndef __DATAFLASH_H__\r
 #define __DATAFLASH_H__\r
 \r
 #ifndef __DATAFLASH_H__\r
 #define __DATAFLASH_H__\r
 \r
@@ -50,7 +67,7 @@
        #endif\r
 \r
        /* Includes: */\r
        #endif\r
 \r
        /* Includes: */\r
-       #include "../AT90USBXXX/SPI.h"\r
+       #include "../Peripheral/SPI.h"\r
        #include "../../Common/Common.h"\r
                \r
        /* Enable C linkage for C++ Compilers: */\r
        #include "../../Common/Common.h"\r
                \r
        /* Enable C linkage for C++ Compilers: */\r
 \r
        /* Public Interface - May be used in end-application: */\r
                /* Macros: */\r
 \r
        /* Public Interface - May be used in end-application: */\r
                /* Macros: */\r
-                       /** Returns the mask of the currently selected Dataflash chip, either DATAFLASH_NO_CHIP or a\r
-                        *  DATAFLASH_CHIPn mask (where n is the chip number).\r
-                        */\r
-                       #define Dataflash_GetSelectedChip()          (DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK)\r
-\r
-                       /** Selects the dataflash chip given as a chip mask, in the form of DATAFLASH_CHIPn (where n\r
-                        *  is the chip number).\r
+                       #if !defined(__DOXYGEN__)\r
+                               #define __GET_DATAFLASH_MASK2(x, y) x ## y\r
+                               #define __GET_DATAFLASH_MASK(x)     __GET_DATAFLASH_MASK2(DATAFLASH_CHIP,x)\r
+                       #endif\r
+       \r
+                       /* Retrieves the Dataflash chip select mask for the given Dataflash chip index.\r
+                        *\r
+                        * \param index  Index of the dataflash chip mask to retrieve\r
                         */\r
                         */\r
-                       #define Dataflash_SelectChip(mask)   MACROS{ DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT \\r
-                                                                    & ~DATAFLASH_CHIPCS_MASK) | mask);              }MACROE\r
+                       #define DATAFLASH_CHIP_MASK(index)      __GET_DATAFLASH_MASK(index)\r
                        \r
                        \r
-                       /** Deselects the current dataflash chip, so that no dataflash is selected. */\r
-                       #define Dataflash_DeselectChip()             Dataflash_SelectChip(DATAFLASH_NO_CHIP)\r
+               /* Pseudo-Function Macros: */\r
+                       #if defined(__DOXYGEN__)\r
+                               /** Determines the currently selected dataflash chip.\r
+                                *\r
+                                *  \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected\r
+                                *  or a DATAFLASH_CHIPn mask (where n is the chip number).\r
+                                */\r
+                               static inline uint8_t Dataflash_GetSelectedChip(void);\r
+\r
+                               /** Selects the given dataflash chip.\r
+                                *\r
+                                *  \param[in]  ChipMask  Mask of the Dataflash IC to select, in the form of DATAFLASH_CHIPn mask (where n is\r
+                                *              the chip number).\r
+                                */\r
+                               static inline void Dataflash_SelectChip(uint8_t ChipMask);\r
+\r
+                               /** Deselects the current dataflash chip, so that no dataflash is selected. */\r
+                               static inline void Dataflash_DeselectChip(void);\r
+                       #else\r
+                               #define Dataflash_GetSelectedChip()          (DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK)\r
 \r
 \r
+                               #define Dataflash_SelectChip(mask)   MACROS{ DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT \\r
+                                                                                                                        & ~DATAFLASH_CHIPCS_MASK) | mask);              }MACROE\r
+                               \r
+                               #define Dataflash_DeselectChip()             Dataflash_SelectChip(DATAFLASH_NO_CHIP)\r
+                       #endif\r
+                       \r
                /* Inline Functions: */\r
                        /** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.\r
                         *\r
                /* Inline Functions: */\r
                        /** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.\r
                         *\r
-                        *  \param Byte of data to send to the dataflash\r
+                        *  \param[in] Byte of data to send to the dataflash\r
                         *\r
                         *  \return Last response byte from the dataflash\r
                         */\r
                         *\r
                         *  \return Last response byte from the dataflash\r
                         */\r
 \r
                        /** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.\r
                         *\r
 \r
                        /** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.\r
                         *\r
-                        *  \param Byte of data to send to the dataflash\r
+                        *  \param[in] Byte of data to send to the dataflash\r
                         */\r
                        static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
                        static inline void Dataflash_SendByte(const uint8_t Byte)\r
                         */\r
                        static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
                        static inline void Dataflash_SendByte(const uint8_t Byte)\r
                        #else\r
                                #error The selected board does not contain a dataflash IC.\r
                        #endif\r
                        #else\r
                                #error The selected board does not contain a dataflash IC.\r
                        #endif\r
-\r
+               \r
                /* Inline Functions: */\r
                        /** Initializes the dataflash driver (including the SPI driver) so that commands and data may be\r
                         *  sent to an attached dataflash IC.\r
                         *\r
                /* Inline Functions: */\r
                        /** Initializes the dataflash driver (including the SPI driver) so that commands and data may be\r
                         *  sent to an attached dataflash IC.\r
                         *\r
-                        *  \param PrescalerMask  SPI prescaler mask, see SPI.h documentation\r
+                        *  \param[in] PrescalerMask  SPI prescaler mask, see SPI.h documentation\r
                         */\r
                        static inline void Dataflash_Init(const uint8_t PrescalerMask)\r
                        {\r
                         */\r
                        static inline void Dataflash_Init(const uint8_t PrescalerMask)\r
                        {\r
                                Dataflash_ToggleSelectedChipCS();\r
                                Dataflash_SendByte(DF_CMD_GETSTATUS);\r
                                while (!(Dataflash_ReceiveByte() & DF_STATUS_READY));\r
                                Dataflash_ToggleSelectedChipCS();\r
                                Dataflash_SendByte(DF_CMD_GETSTATUS);\r
                                while (!(Dataflash_ReceiveByte() & DF_STATUS_READY));\r
+                               Dataflash_ToggleSelectedChipCS();                               \r
                        }\r
 \r
                        /** Selects a dataflash IC from the given page number, which should range from 0 to\r
                        }\r
 \r
                        /** Selects a dataflash IC from the given page number, which should range from 0 to\r
                         *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs\r
                         *  are deselected.\r
                         *\r
                         *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs\r
                         *  are deselected.\r
                         *\r
-                        *  \param PageAddress  Address of the page to manipulate, ranging from\r
-                        *                      ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).\r
+                        *  \param[in] PageAddress  Address of the page to manipulate, ranging from\r
+                        *                          ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).\r
                         */\r
                        static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress);\r
 \r
                        /** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with\r
                         *  dataflash commands which require a complete 24-byte address.\r
                         *\r
                         */\r
                        static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress);\r
 \r
                        /** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with\r
                         *  dataflash commands which require a complete 24-byte address.\r
                         *\r
-                        *  \param PageAddress  Page address within the selected dataflash IC\r
-                        *  \param BufferByte   Address within the dataflash's buffer\r
+                        *  \param[in] PageAddress  Page address within the selected dataflash IC\r
+                        *  \param[in] BufferByte   Address within the dataflash's buffer\r
                         */\r
                        static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte);\r
 \r
                         */\r
                        static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte);\r
 \r
                #endif\r
        \r
 #endif\r
                #endif\r
        \r
 #endif\r
+\r
+/** @} */\r