aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
diff options
context:
space:
mode:
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