Add script reading bootloader flags
[pub/lufa.git] / Projects / AVRISP-MKII / Lib / ISP / ISPProtocol.h
index a264654..d47a72d 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2012.
+     Copyright (C) Dean Camera, 2021.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2021  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
 
        /* Includes: */
                #include <avr/io.h>
+               #include <util/atomic.h>
                #include <util/delay.h>
 
                #include <LUFA/Drivers/USB/USB.h>
 
                #include "../V2Protocol.h"
                #include "Config/AppConfig.h"
-               
+
+       /* Macros: */
+               /** Calibration clock frequency for target OSCCAL calibration, see AVR053 application note. */
+           #define ISPPROTOCOL_CALIB_CLOCK_HZ            32768
+
+               /** Internal timer ticks per calibration clock cycle, see AVR053 application note. */
+           #define ISPPROTOCOL_CALIB_TICKS               ( (F_CPU + ISPPROTOCOL_CALIB_CLOCK_HZ) / (2 * ISPPROTOCOL_CALIB_CLOCK_HZ) )
+
+           /** Per AVR053, calibration guaranteed to take 1024 cycles (2048 half-cycles) or fewer;
+            *  add some cycles for response delay (5-10 after success) and response itself.
+                */
+           #define ISPPROTOCOL_CALIB_HALF_CYCLE_LIMIT    (2*1024 + 50)
+
+           /** Per AVR053, target will toggle I/O pin 8 times to indicate a successful clock calibration.
+                */
+           #define ISPPROTOCOL_CALIB_SUCCESS_TOGGLE_NUM  8
+
        /* Preprocessor Checks: */
                #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1))
                        #undef ENABLE_ISP_PROTOCOL
@@ -73,6 +90,7 @@
                void ISPProtocol_ProgramMemory(const uint8_t V2Command);
                void ISPProtocol_ReadMemory(const uint8_t V2Command);
                void ISPProtocol_ChipErase(void);
+               void ISPProtocol_Calibrate(void);
                void ISPProtocol_ReadFuseLockSigOSCCAL(const uint8_t V2Command);
                void ISPProtocol_WriteFuseLock(const uint8_t V2Command);
                void ISPProtocol_SPIMulti(void);