* 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
#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
\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
- #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
- /** 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
+ #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
- * \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
/** 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
#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
- * \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
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
* 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
- * \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
#endif\r
\r
#endif\r
+\r
+/** @} */\r