Mark build test makefiles as being incompatible with parallel make builds, as they...
[pub/USBasp.git] / Projects / AVRISP-MKII / Lib / ISP / ISPTarget.h
index e183dee..4c0ea82 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2011.
+     Copyright (C) Dean Camera, 2012.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2011  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
   software and its documentation for any purpose is hereby granted
 #define _ISP_TARGET_
 
        /* Includes: */
-               #include <LUFA/Common/Common.h>
-               #include <LUFA/Drivers/USB/USB.h>
-               
-               #if defined(ENABLE_ISP_PROTOCOL) || defined(__DOXYGEN__)
-                       #include <LUFA/Drivers/Peripheral/SPI.h> // TODO: FIXME
-               #endif
-               
-               #if (ARCH == ARCH_AVR8)
-                       #include <avr/io.h>
-                       #include <avr/pgmspace.h>
-               #elif (ARCH == ARCH_UC3)
-                       #include <avr32/io.h>                   
-               #endif
+               #include <avr/io.h>
+               #include <avr/pgmspace.h>
+               #include <util/delay.h>
 
-               #include "../V2ProtocolParams.h"
+               #include <LUFA/Drivers/USB/USB.h>
+               #include <LUFA/Drivers/Peripheral/SPI.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
@@ -63,7 +58,7 @@
                #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. */
@@ -79,7 +74,7 @@
                void    ISPTarget_EnableTargetISP(void);
                void    ISPTarget_DisableTargetISP(void);
                void    ISPTarget_ConfigureRescueClock(void);
-               void    ISPTarget_ConfigureSoftwareISP(const uint8_t SCKDuration);
+               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);
@@ -91,7 +86,6 @@
                                                      const uint8_t ReadMemCommand);
 
        /* Inline Functions: */
-               #if defined(ENABLE_ISP_PROTOCOL) || defined(__DOXYGEN__)
                /** Sends a byte of ISP data to the attached target, using the appropriate SPI hardware or
                 *  software routines depending on the selected ISP speed.
                 *
                 */
                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
 
 #endif