diff -ur avrdude.cvs/usbasp.c avrdude.new/usbasp.c --- avrdude.cvs/usbasp.c 2007-11-07 22:36:12.000000000 +0200 +++ avrdude.new/usbasp.c 2008-03-29 22:32:26.000000000 +0200 @@ -227,7 +227,51 @@ { unsigned char temp[4]; + double clock = pgm->bitclock*1e+6; + double freq = 0; memset(temp, 0, sizeof(temp)); + + /* set ISP SCK speed index */ + if (clock > 1500.0) { + temp[0] = ISP_SCK_0_5; + freq = 0.5; + } else if (clock > 750.0) { + temp[0] = ISP_SCK_1; + freq = 1; + } else if (clock > 375.0) { + temp[0] = ISP_SCK_2; + freq = 2; + } else if (clock > 187.5) { + temp[0] = ISP_SCK_4; + freq = 4; + } else if (clock > 93.75) { + temp[0] = ISP_SCK_8; + freq = 8; + } else if (clock > 46.88) { + temp[0] = ISP_SCK_16; + freq = 16; + } else if (clock > 20.96) { + temp[0] = ISP_SCK_32; + freq = 32; + } else if (clock > 8.0) { + temp[0] = ISP_SCK_93_75; + freq = 93.75; + } else if (clock > 4.0) { + temp[0] = ISP_SCK_187_5; + freq = 187.5; + } else if (clock > 2.0) { + temp[0] = ISP_SCK_375; + freq = 375; + } else if (clock > 1.0) { + temp[0] = ISP_SCK_750; + freq = 750; + } else if (clock > 0.5) { + temp[0] = ISP_SCK_1500; + freq = 1500; + } + if (freq > 0) + fprintf(stderr, "%s: USBasp: using %g kHz SCK\n", progname, freq); + usbasp_transmit(pgm, 1, USBASP_FUNC_CONNECT, temp, temp, sizeof(temp)); usleep(100000); diff -ur avrdude.cvs/usbasp.h avrdude.new/usbasp.h --- avrdude.cvs/usbasp.h 2007-07-24 19:43:25.000000000 +0300 +++ avrdude.new/usbasp.h 2008-03-29 22:24:34.000000000 +0200 @@ -51,6 +51,23 @@ #define USB_ERROR_ACCESS 2 #define USB_ERROR_IO 3 +/* ISP SCK speed indexes */ +/* software ISP modes */ +#define ISP_SCK_0_5 23 /* 500 Hz */ +#define ISP_SCK_1 24 /* 1 kHz */ +#define ISP_SCK_2 25 /* 2 kHz */ +#define ISP_SCK_4 26 /* 4 kHz */ +#define ISP_SCK_8 27 /* 8 kHz */ +#define ISP_SCK_16 28 /* 16 kHz */ +#define ISP_SCK_32 29 /* 32 kHz */ +/* hardware ISP modes */ +#define ISP_SCK_93_75 30 /* 93.75 kHz */ +#define ISP_SCK_187_5 31 /* 187.5 kHz */ +#define ISP_SCK_375 32 /* 375 kHz */ +#define ISP_SCK_750 33 /* 750 kHz */ +#define ISP_SCK_1500 34 /* 1.5 MHz */ + + #ifdef __cplusplus extern "C" { #endif