aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/Board/Dataflash.h
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-07-22 15:38:12 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-07-22 15:38:12 +0000
commit9b0e4b8356eb79003a806d010f4b00123350ed90 (patch)
treebf3c74f3cf45da2990995252dd74226fe793d755 /LUFA/Drivers/Board/Dataflash.h
parent2461ae508c32914ff8aa0920ed99d4fceb18b141 (diff)
downloadlufa-9b0e4b8356eb79003a806d010f4b00123350ed90.tar.gz
lufa-9b0e4b8356eb79003a806d010f4b00123350ed90.tar.bz2
lufa-9b0e4b8356eb79003a806d010f4b00123350ed90.zip
Convert over internal pseudo-function macros to true inline functions for added type-safety and compile-checking.
Diffstat (limited to 'LUFA/Drivers/Board/Dataflash.h')
-rw-r--r--LUFA/Drivers/Board/Dataflash.h131
1 files changed, 52 insertions, 79 deletions
diff --git a/LUFA/Drivers/Board/Dataflash.h b/LUFA/Drivers/Board/Dataflash.h
index c09c4a899..a3975e105 100644
--- a/LUFA/Drivers/Board/Dataflash.h
+++ b/LUFA/Drivers/Board/Dataflash.h
@@ -70,7 +70,7 @@
/* Includes: */
#include "../Peripheral/SPI.h"
#include "../../Common/Common.h"
-
+
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
@@ -91,34 +91,59 @@
*/
#define DATAFLASH_CHIP_MASK(index) __GET_DATAFLASH_MASK(index)
- /* Pseudo-Function Macros: */
- #if defined(__DOXYGEN__)
- /** 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).
- */
- static inline uint8_t Dataflash_GetSelectedChip(void);
-
- /** 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
- * the chip number).
- */
- static inline void Dataflash_SelectChip(uint8_t ChipMask);
-
- /** Deselects the current dataflash chip, so that no dataflash is selected. */
- static inline void Dataflash_DeselectChip(void);
- #else
- #define Dataflash_GetSelectedChip() (DATAFLASH_CHIPCS_PORT & DATAFLASH_CHIPCS_MASK)
+ /* Inline Functions: */
+ /** Initializes the dataflash driver so that commands and data may be sent to an attached dataflash IC.
+ * The AVR's SPI driver MUST be initialized before any of the dataflash commands are used.
+ */
+ static inline void Dataflash_Init(void);
- #define Dataflash_SelectChip(mask) MACROS{ DATAFLASH_CHIPCS_PORT = ((DATAFLASH_CHIPCS_PORT \
- & ~DATAFLASH_CHIPCS_MASK) | (mask)); }MACROE
-
- #define Dataflash_DeselectChip() Dataflash_SelectChip(DATAFLASH_NO_CHIP)
- #endif
+ /** 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).
+ */
+ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
+
+ /** 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
+ * the chip number).
+ */
+ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE;
+
+ /** Deselects the current dataflash chip, so that no dataflash is selected. */
+ static inline void Dataflash_DeselectChip(void) ATTR_ALWAYS_INLINE;
+
+ /** Selects a dataflash IC from the given page number, which should range from 0 to
+ * ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). For boards containing only one
+ * dataflash IC, this will select DATAFLASH_CHIP1. If the given page number is outside
+ * the total number of pages contained in the boards dataflash ICs, all dataflash ICs
+ * are deselected.
+ *
+ * \param[in] PageAddress Address of the page to manipulate, ranging from
+ * ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
+ */
+ static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress);
- /* Inline Functions: */
+ /** Toggles the select line of the currently selected dataflash IC, so that it is ready to receive
+ * a new command.
+ */
+ static inline void Dataflash_ToggleSelectedChipCS(void);
+
+ /** Spin-loops while the currently selected dataflash is busy executing a command, such as a main
+ * memory page program or main memory to buffer transfer.
+ */
+ static inline void Dataflash_WaitWhileBusy(void);
+
+ /** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with
+ * dataflash commands which require a complete 24-byte address.
+ *
+ * \param[in] PageAddress Page address within the selected dataflash IC
+ * \param[in] BufferByte Address within the dataflash's buffer
+ */
+ static inline void Dataflash_SendAddressBytes(uint16_t PageAddress,
+ const uint16_t BufferByte);
+
/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
@@ -171,58 +196,6 @@
#else
#error The selected board does not contain a dataflash IC.
#endif
-
- /* Inline Functions: */
- /** Initializes the dataflash driver so that commands and data may be sent to an attached dataflash IC.
- * The AVR's SPI driver MUST be initialized before any of the dataflash commands are used.
- */
- static inline void Dataflash_Init(void)
- {
- DATAFLASH_CHIPCS_DDR |= DATAFLASH_CHIPCS_MASK;
- DATAFLASH_CHIPCS_PORT |= DATAFLASH_CHIPCS_MASK;
- }
-
- /** Toggles the select line of the currently selected dataflash IC, so that it is ready to receive
- * a new command.
- */
- static inline void Dataflash_ToggleSelectedChipCS(void)
- {
- uint8_t SelectedChipMask = Dataflash_GetSelectedChip();
-
- Dataflash_DeselectChip();
- Dataflash_SelectChip(SelectedChipMask);
- }
-
- /** Spin-loops while the currently selected dataflash is busy executing a command, such as a main
- * memory page program or main memory to buffer transfer.
- */
- static inline void Dataflash_WaitWhileBusy(void)
- {
- Dataflash_ToggleSelectedChipCS();
- Dataflash_SendByte(DF_CMD_GETSTATUS);
- while (!(Dataflash_ReceiveByte() & DF_STATUS_READY));
- Dataflash_ToggleSelectedChipCS();
- }
-
- /** Selects a dataflash IC from the given page number, which should range from 0 to
- * ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). For boards containing only one
- * dataflash IC, this will select DATAFLASH_CHIP1. If the given page number is outside
- * the total number of pages contained in the boards dataflash ICs, all dataflash ICs
- * are deselected.
- *
- * \param[in] PageAddress Address of the page to manipulate, ranging from
- * ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
- */
- static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress);
-
- /** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with
- * dataflash commands which require a complete 24-byte address.
- *
- * \param[in] PageAddress Page address within the selected dataflash IC.
- * \param[in] BufferByte Address within the dataflash's buffer.
- */
- static inline void Dataflash_SendAddressBytes(uint16_t PageAddress,
- const uint16_t BufferByte);
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)