Added support for the Atmel EVK527 board hardware.
[pub/lufa.git] / LUFA / Drivers / Board / EVK527 / Dataflash.h
diff --git a/LUFA/Drivers/Board/EVK527/Dataflash.h b/LUFA/Drivers/Board/EVK527/Dataflash.h
new file mode 100644 (file)
index 0000000..b0cb951
--- /dev/null
@@ -0,0 +1,116 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Board specific Dataflash driver header for the EVK527.\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the dataflash driver\r
+ *        dispatch header located in LUFA/Drivers/Board/Dataflash.h.\r
+ */\r
+\r
+/** \ingroup Group_Dataflash\r
+ *  @defgroup Group_Dataflash_EVK527 EVK527\r
+ *\r
+ *  @{\r
+ */\r
+\r
+#ifndef __DATAFLASH_EVK527_H__\r
+#define __DATAFLASH_EVK527_H__\r
+\r
+       /* Includes: */\r
+               #include "AT45DB321C.h"         \r
+\r
+       /* Preprocessor Checks: */\r
+               #if !defined(INCLUDE_FROM_DATAFLASH_H)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/Board/Dataflash.h instead.\r
+               #endif\r
+\r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Macros: */\r
+                       #define DATAFLASH_CHIPCS_MASK                (1 << 6)\r
+                       #define DATAFLASH_CHIPCS_DDR                 DDRE\r
+                       #define DATAFLASH_CHIPCS_PORT                PORTE\r
+       #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** Constant indicating the total number of dataflash ICs mounted on the selected board. */\r
+                       #define DATAFLASH_TOTALCHIPS                 1\r
+\r
+                       /** Mask for no dataflash chip selected. */\r
+                       #define DATAFLASH_NO_CHIP                    DATAFLASH_CHIPCS_MASK\r
+\r
+                       /** Mask for the first dataflash chip selected. */\r
+                       #define DATAFLASH_CHIP1                      0\r
+                       \r
+                       /** Internal main memory page size for the board's dataflash IC. */\r
+                       #define DATAFLASH_PAGE_SIZE                  512\r
+\r
+                       /** Total number of pages inside the board's dataflash IC. */\r
+                       #define DATAFLASH_PAGES                      8192\r
+\r
+               /* Inline Functions: */\r
+                       /** Selects a dataflash IC from the given page number, which should range from 0 to\r
+                        *  ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). For boards containing only one\r
+                        *  dataflash IC, this will select DATAFLASH_CHIP1. If the given page number is outside\r
+                        *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs\r
+                        *  are deselected.\r
+                        *\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
+                               Dataflash_DeselectChip();\r
+                               \r
+                               if (PageAddress >= DATAFLASH_PAGES)\r
+                                 return;\r
+\r
+                               Dataflash_SelectChip(DATAFLASH_CHIP1);\r
+                       }\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[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
+                               Dataflash_SendByte(PageAddress >> 5);\r
+                               Dataflash_SendByte((PageAddress << 3) | (BufferByte >> 8));\r
+                               Dataflash_SendByte(BufferByte);\r
+                       }\r
+                       \r
+#endif\r
+\r
+/** @} */\r