Add script reading bootloader flags
[pub/lufa.git] / Projects / AVRISP-MKII / Lib / ISP / ISPProtocol.h
index 15215e7..d47a72d 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
+     Copyright (C) Dean Camera, 2021.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2010  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
@@ -18,7 +18,7 @@
   advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
-  The author disclaim all warranties with regard to this
+  The author disclaims all warranties with regard to this
   software, including all implied warranties of merchantability
   and fitness.  In no event shall the author be liable for any
   special, indirect or consequential damages or any damages
 
        /* 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))
@@ -72,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);