X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/41c1fb38434c006fa88b0071f81d65b2330940fc..b04de2f2f4bb14c968ebcc765ec93c5d1591aa0d:/LUFA/CodeTemplates/DriverStubs/Dataflash.h diff --git a/LUFA/CodeTemplates/DriverStubs/Dataflash.h b/LUFA/CodeTemplates/DriverStubs/Dataflash.h index 31b5fed32..9fcc25f9b 100644 --- a/LUFA/CodeTemplates/DriverStubs/Dataflash.h +++ b/LUFA/CodeTemplates/DriverStubs/Dataflash.h @@ -1,21 +1,21 @@ /* LUFA Library - Copyright (C) Dean Camera, 2010. - + Copyright (C) Dean Camera, 2012. + dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -49,7 +49,7 @@ #if !defined(__INCLUDE_FROM_DATAFLASH_H) #error Do not include this file directly. Include LUFA/Drivers/Board/Dataflash.h instead. #endif - + /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Macros: */ @@ -57,7 +57,7 @@ #define DATAFLASH_CHIPCS_DDR // TODO: Replace with the DDR register name for the board's Dataflash ICs #define DATAFLASH_CHIPCS_PORT // TODO: Replace with the PORT register name for the board's Dataflash ICs #endif - + /* Public Interface - May be used in end-application: */ /* Macros: */ /** Constant indicating the total number of dataflash ICs mounted on the selected board. */ @@ -71,7 +71,7 @@ /** Mask for the second dataflash chip selected. */ #define DATAFLASH_CHIP2 // TODO: Replace with mask to hold /CS of second Dataflash low, and all others high - + /** Internal main memory page size for the board's dataflash ICs. */ #define DATAFLASH_PAGE_SIZE // TODO: Replace with the page size for the Dataflash ICs @@ -79,15 +79,47 @@ #define DATAFLASH_PAGES // TODO: Replace with the total number of pages inside one of the Dataflash ICs /* Inline Functions: */ - /** Initialises 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. + /** Initializes the dataflash driver so that commands and data may be sent to an attached dataflash IC. + * The microcontroller'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; } - + + /** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash. + * + * \param[in] Byte Byte of data to send to the dataflash + * + * \return Last response byte from the dataflash + */ + static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE; + static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) + { + // TODO + } + + /** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash. + * + * \param[in] Byte Byte of data to send to the dataflash + */ + static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE; + static inline void Dataflash_SendByte(const uint8_t Byte) + { + // TODO + } + + /** Sends a dummy byte to the currently selected dataflash IC, and returns the next byte from the dataflash. + * + * \return Last response byte from the dataflash + */ + static inline uint8_t Dataflash_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; + static inline uint8_t Dataflash_ReceiveByte(void) + { + // TODO + } + /** Determines the currently selected dataflash chip. * * \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected @@ -124,12 +156,12 @@ * are deselected. * * \param[in] PageAddress Address of the page to manipulate, ranging from - * ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). + * 0 to ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). */ static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress) { Dataflash_DeselectChip(); - + if (PageAddress >= (DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS)) return; @@ -149,11 +181,11 @@ 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. */ @@ -162,11 +194,11 @@ Dataflash_ToggleSelectedChipCS(); Dataflash_SendByte(DF_CMD_GETSTATUS); while (!(Dataflash_ReceiveByte() & DF_STATUS_READY)); - Dataflash_ToggleSelectedChipCS(); + Dataflash_ToggleSelectedChipCS(); } /** 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. + * dataflash commands which require a complete 24-bit address. * * \param[in] PageAddress Page address within the selected dataflash IC * \param[in] BufferByte Address within the dataflash's buffer @@ -176,10 +208,11 @@ #if (DATAFLASH_TOTALCHIPS == 2) PageAddress >>= 1; #endif - + Dataflash_SendByte(PageAddress >> 5); Dataflash_SendByte((PageAddress << 3) | (BufferByte >> 8)); Dataflash_SendByte(BufferByte); } - + #endif +