Fixed AVRISP PDI race condition where the guard time between direction changes could...
[pub/USBasp.git] / LUFA / DriverStubs / Dataflash.h
index 0bef94e..8df7b95 100644 (file)
@@ -9,13 +9,13 @@
 /*\r
   Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\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
+  Permission to use, copy, modify, distribute, and sell this \r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in \r
+  all 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 without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
                        /** Total number of pages inside each of the board's dataflash ICs. */\r
                        #define DATAFLASH_PAGES                      // TODO: Replace with the total number of pages inside one of the Dataflash ICs\r
 \r
                        /** Total number of pages inside each of the board's dataflash ICs. */\r
                        #define DATAFLASH_PAGES                      // TODO: Replace with the total number of pages inside one of the Dataflash ICs\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 * DATAFLASH_TOTALCHIPS))\r
+                                 return;\r
+\r
+                               // TODO: If more than one dataflash chip, select the correct chip from the page address here\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
+                               // TODO: If more than one dataflash chip, adjust absolute page address to be correct for the current chip,\r
+                               //       also the shifts may need to be altered to suit the dataflash model being used                          \r
+                               Dataflash_SendByte(PageAddress >> 5);\r
+                               Dataflash_SendByte((PageAddress << 3) | (BufferByte >> 8));\r
+                               Dataflash_SendByte(BufferByte);\r
+                       }\r
+                       \r
 #endif\r
 #endif\r