X-Git-Url: http://git.linex4red.de/pub/USBaspLoader.git/blobdiff_plain/8ce9055cc4df6de93528cf3e12a4b69d5fcc1a19..90ff396e7d83b2ae713535226633feea6ed604da:/firmware/bootloaderconfig.h diff --git a/firmware/bootloaderconfig.h b/firmware/bootloaderconfig.h index 58b44ca..e0ba814 100644 --- a/firmware/bootloaderconfig.h +++ b/firmware/bootloaderconfig.h @@ -11,7 +11,7 @@ #ifndef __bootloaderconfig_h_included__ #define __bootloaderconfig_h_included__ -#include +#include "../misc/iofixes.h" /* General Description: @@ -57,7 +57,7 @@ these macros are defined, the boot loader usees them. * "B", the registers PORTB, PINB and DDRB will be used. */ #ifndef USB_CFG_INTPORT_BIT - #if (defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) + #if (defined(__AVR_ATmega640__) || defined (__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)) #define USB_CFG_INTPORT_BIT 0 #else #define USB_CFG_INTPORT_BIT 2 @@ -334,8 +334,10 @@ these macros are defined, the boot loader usees them. * as soon as the programming software disconnects. */ -#ifndef BOOTLOADER_LOOPCYCLES_TIMEOUT -# define BOOTLOADER_LOOPCYCLES_TIMEOUT 0 +#ifdef CONFIG_BOOTLOADER_LOOPCYCLES_TIMEOUT +# define BOOTLOADER_LOOPCYCLES_TIMEOUT (CONFIG_BOOTLOADER_LOOPCYCLES_TIMEOUT) +#else +# define BOOTLOADER_LOOPCYCLES_TIMEOUT (0) #endif /* * When greater than "0", "BOOTLOADER_LOOPCYCLES_TIMEOUT" @@ -358,15 +360,26 @@ these macros are defined, the boot loader usees them. */ #ifdef CONFIG_HAVE__BOOTLOADER_ALWAYSENTERPROGRAMMODE +# if (BOOTLOADER_CAN_EXIT) +# define BOOTLOADER_ALWAYSENTERPROGRAMMODE 1 +# else +# define BOOTLOADER_ALWAYSENTERPROGRAMMODE 0 +# endif +#else +# define BOOTLOADER_ALWAYSENTERPROGRAMMODE 0 #endif /* * Ignore bootLoaderCondition() (BUT NOT bootLoaderConditionSimple()) * and always enter the program-mode. * This is helpful to emulate behaviour of Arduino bootloaders + * + * However, this feature may be dangerous, since bootloader may never exit. + * So it is enabled, only if "CONFIG_NO__BOOTLOADER_CAN_EXIT" is disabled. + * */ #ifdef CONFIG_HAVE__BOOTLOADER_IGNOREPROGBUTTON -# if ( (defined(CONFIG_HAVE__BOOTLOADER_ALWAYSENTERPROGRAMMODE)) && (defined(BOOTLOADER_CAN_EXIT)) && (BOOTLOADER_LOOPCYCLES_TIMEOUT >= 8) ) +# if ( (BOOTLOADER_ALWAYSENTERPROGRAMMODE) && (defined(BOOTLOADER_CAN_EXIT)) && (BOOTLOADER_LOOPCYCLES_TIMEOUT >= 8) ) # define BOOTLOADER_IGNOREPROGBUTTON 1 # else # define BOOTLOADER_IGNOREPROGBUTTON 0 @@ -386,6 +399,18 @@ these macros are defined, the boot loader usees them. * can be soldered otherwise. */ +#ifdef CONFIG_NO__BOOTLOADER_ADDITIONALDEVICEWAIT +# define HAVE_BOOTLOADER_ADDITIONALMSDEVICEWAIT 0 +#else +# define HAVE_BOOTLOADER_ADDITIONALMSDEVICEWAIT 50 +#endif +/* + * When enabling "HAVE_BOOTLOADER_ADDITIONALMSDEVICEWAIT", then + * the bootloader will alway delay its bootup by the configured + * number of milliseconds. + * This gives the pullups additional time to charge up. + */ + //#define SIGNATURE_BYTES 0x1e, 0x93, 0x07, 0 /* ATMega8 */ /* This macro defines the signature bytes returned by the emulated USBasp to * the programmer software. They should match the actual device at least in @@ -461,7 +486,7 @@ static inline void bootLoaderExit(void) static volatile uint8_t __BOOTLOADERENTRY_FROMSOFTWARE__bootup_RAMEND_doesmatch __attribute__ ((section(".noinit"))); static volatile uint8_t __BOOTLOADERENTRY_FROMSOFTWARE__bootup_MCUCSR __attribute__ ((section(".noinit"))); -# ifdef CONFIG_HAVE__BOOTLOADER_ALWAYSENTERPROGRAMMODE +# if (BOOTLOADER_ALWAYSENTERPROGRAMMODE) # define bootLoaderCondition() (true) # else static inline bool bootLoaderCondition(void) @@ -477,7 +502,7 @@ static inline bool bootLoaderCondition(void) } # endif #else -# ifdef CONFIG_HAVE__BOOTLOADER_ALWAYSENTERPROGRAMMODE +# if (BOOTLOADER_ALWAYSENTERPROGRAMMODE) # define bootLoaderCondition() (true) # else # define bootLoaderCondition bootLoaderConditionSimple