aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-07-29 07:09:57 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-07-29 07:09:57 +0000
commitde5b16909a7d9cdedc5194cf74de9ec2e59b4d60 (patch)
treebc033f4da14ae37f3b785dbb978690d7c40491a8 /Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
parent9a97f16b07ea15e327b0d01be238b06623b033d6 (diff)
downloadlufa-de5b16909a7d9cdedc5194cf74de9ec2e59b4d60.tar.gz
lufa-de5b16909a7d9cdedc5194cf74de9ec2e59b4d60.tar.bz2
lufa-de5b16909a7d9cdedc5194cf74de9ec2e59b4d60.zip
Added support to the AVRISP-MKII project for ISP speeds slower than 125KHz via a new software SPI driver.
Added new SPI_ORDER_* data order masks to the SPI peripheral driver.
Diffstat (limited to 'Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h')
-rw-r--r--Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h59
1 files changed, 53 insertions, 6 deletions
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
index 869e0e58b..967849abd 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
@@ -56,21 +56,68 @@
#endif
/* Macros: */
- /** Total number of allowable ISP programming speeds supported by the device. */
- #define TOTAL_ISP_PROGRAMMING_SPEEDS 7
-
/** Low level device command to issue an extended FLASH address, for devices with other 128KB of FLASH. */
#define LOAD_EXTENDED_ADDRESS_CMD 0x4D
+ /** Macro to convert an ISP frequency to a number of timer clock cycles for the software SPI driver */
+ #define TIMER_COMP(freq) ((((F_CPU / 8) / freq) / 2) - 1)
+
+ /* External Variables: */
+ extern bool HardwareSPIMode;
+
/* Function Prototypes: */
- uint8_t ISPTarget_GetSPIPrescalerMask(void);
+ void ISPTarget_Init(void);
+ void ISPTarget_ShutDown(void);
+ uint8_t ISPTarget_TransferSoftSPIByte(const uint8_t Byte);
void ISPTarget_ChangeTargetResetLine(const bool ResetTarget);
+ uint8_t ISPTarget_WaitWhileTargetBusy(void);
+ void ISPTarget_LoadExtendedAddress(void);
uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode,
const uint16_t PollAddress,
const uint8_t PollValue,
const uint8_t DelayMS,
const uint8_t ReadMemCommand);
- uint8_t ISPTarget_WaitWhileTargetBusy(void);
- void ISPTarget_LoadExtendedAddress(void);
+
+ /* Inline Functions: */
+ /** Sends a byte of ISP data to the attached target, using the appropriate SPI hardware or
+ * software routines depending on the selected ISP speed.
+ *
+ * \param[in] Byte Byte of data to send to the attached target
+ */
+ static inline void ISPTarget_SendByte(const uint8_t Byte)
+ {
+ if (HardwareSPIMode)
+ SPI_SendByte(Byte);
+ else
+ ISPTarget_TransferSoftSPIByte(Byte);
+ }
+
+ /** Receives a byte of ISP data from the attached target, using the appropriate
+ * SPI hardware or software routines depending on the selected ISP speed.
+ *
+ * \return Received byte of data from the attached target
+ */
+ static inline uint8_t ISPTarget_ReceiveByte(void)
+ {
+ if (HardwareSPIMode)
+ return SPI_ReceiveByte();
+ else
+ return ISPTarget_TransferSoftSPIByte(0x00);
+ }
+
+ /** Sends and receives a byte of ISP data to and from the attached target, using the
+ * appropriate SPI hardware or software routines depending on the selected ISP speed.
+ *
+ * \param[in] Byte Byte of data to send to the attached target
+ *
+ * \return Received byte of data from the attached target
+ */
+ static inline uint8_t ISPTarget_TransferByte(const uint8_t Byte)
+ {
+ if (HardwareSPIMode)
+ return SPI_TransferByte(Byte);
+ else
+ return ISPTarget_TransferSoftSPIByte(Byte);
+ }
#endif