Mark build test makefiles as being incompatible with parallel make builds, as they...
[pub/USBasp.git] / Projects / AVRISP-MKII / Lib / ISP / ISPTarget.h
index 967849a..4c0ea82 100644 (file)
@@ -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
 
                #include <LUFA/Drivers/USB/USB.h>
                #include <LUFA/Drivers/Peripheral/SPI.h>
-               
-               #include "../V2ProtocolParams.h"
 
+               #include "../V2Protocol.h"
+               #include "ISPProtocol.h"
+               #include "Config/AppConfig.h"
+               
        /* Preprocessor Checks: */
                #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1))
                        #undef ENABLE_ISP_PROTOCOL
-                       
+
                        #if !defined(ENABLE_XPROG_PROTOCOL)
                                #define ENABLE_XPROG_PROTOCOL
                        #endif
                #endif
 
        /* Macros: */
-               /** Low level device command to issue an extended FLASH address, for devices with other 128KB of FLASH. */
+               /** Low level device command to issue an extended FLASH address, for devices with over 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)
+
+               /** 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) / 2 / freq) - 1)
+
+               /** ISP rescue clock speed in Hz, for clocking targets with incorrectly set fuses. */
+               #define ISP_RESCUE_CLOCK_SPEED        4000000
 
        /* External Variables: */
                extern bool HardwareSPIMode;
 
        /* Function Prototypes: */
-               void    ISPTarget_Init(void);
-               void    ISPTarget_ShutDown(void);
+               void    ISPTarget_EnableTargetISP(void);
+               void    ISPTarget_DisableTargetISP(void);
+               void    ISPTarget_ConfigureRescueClock(void);
+               void    ISPTarget_ConfigureSoftwareSPI(const uint8_t SCKDuration);
                uint8_t ISPTarget_TransferSoftSPIByte(const uint8_t Byte);
                void    ISPTarget_ChangeTargetResetLine(const bool ResetTarget);
                uint8_t ISPTarget_WaitWhileTargetBusy(void);
                 */
                static inline uint8_t ISPTarget_ReceiveByte(void)
                {
+                       #if !defined(INVERTED_ISP_MISO)
                        if (HardwareSPIMode)
                          return SPI_ReceiveByte();
                        else
                          return ISPTarget_TransferSoftSPIByte(0x00);
+                       #else
+                       if (HardwareSPIMode)
+                         return ~SPI_ReceiveByte();
+                       else
+                         return ~ISPTarget_TransferSoftSPIByte(0x00);
+                       #endif
                }
 
                /** Sends and receives a byte of ISP data to and from the attached target, using the
                 */
                static inline uint8_t ISPTarget_TransferByte(const uint8_t Byte)
                {
+                       #if !defined(INVERTED_ISP_MISO)
                        if (HardwareSPIMode)
                          return SPI_TransferByte(Byte);
                        else
                          return ISPTarget_TransferSoftSPIByte(Byte);
+                       #else
+                       if (HardwareSPIMode)
+                         return ~SPI_TransferByte(Byte);
+                       else
+                         return ~ISPTarget_TransferSoftSPIByte(Byte);
+                       #endif
                }
 
 #endif
+