Implement and document HVSP and PP modes for the AVR Dragon.
git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@677 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
parent
4e81a6be72
commit
31f93ccb59
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2006-11-01 Joerg Wunsch <j@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
* avrdude.conf.in: Implement HVSP and PP modes for the AVR Dragon.
|
||||||
|
* config_gram.y: (Ditto.)
|
||||||
|
* jtagmkII.c: (Ditto.)
|
||||||
|
* jtagmkII_private.h: (Ditto.)
|
||||||
|
* lexer.l: (Ditto.)
|
||||||
|
* stk500v2.c: (Ditto.)
|
||||||
|
* stk500v2.h: (Ditto.)
|
||||||
|
* avrdude.1: Document the HVSP and PP support for the Dragon.
|
||||||
|
* doc/avrdude.texi: (Ditto.)
|
||||||
|
|
||||||
2006-10-27 Joerg Wunsch <j@uriah.heep.sax.de>
|
2006-10-27 Joerg Wunsch <j@uriah.heep.sax.de>
|
||||||
|
|
||||||
* jtagmkI.c: Implement a flags field in struct serdev, and populate it
|
* jtagmkI.c: Implement a flags field in struct serdev, and populate it
|
||||||
|
|
2
NEWS
2
NEWS
|
@ -7,7 +7,7 @@ Approximate change log for AVRDUDE by version.
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Current:
|
Current:
|
||||||
|
|
||||||
* Add support for the AVR Dragon (JTAG and ISP mode).
|
* Add support for the AVR Dragon (all modes: ISP, JTAG, HVSP, PP).
|
||||||
|
|
||||||
|
|
||||||
Version 5.2:
|
Version 5.2:
|
||||||
|
|
|
@ -114,8 +114,7 @@ Atmel's JTAG ICE (both mkI and mkII) is supported as well to up- or download mem
|
||||||
areas from/to an AVR target (no support for on-chip debugging).
|
areas from/to an AVR target (no support for on-chip debugging).
|
||||||
For the JTAG ICE mkII, both JTAG and ISP mode are supported.
|
For the JTAG ICE mkII, both JTAG and ISP mode are supported.
|
||||||
.Pp
|
.Pp
|
||||||
The AVR Dragon is supported in JTAG and ISP mode.
|
The AVR Dragon is supported in all modes (ISP, JTAG, HVSP, PP).
|
||||||
(High-voltage programming is not yet supported.)
|
|
||||||
When used in JTAG mode, the AVR Dragon behaves similar to a
|
When used in JTAG mode, the AVR Dragon behaves similar to a
|
||||||
JTAG ICE mkII, so all device-specific comments for that device
|
JTAG ICE mkII, so all device-specific comments for that device
|
||||||
will apply as well.
|
will apply as well.
|
||||||
|
|
|
@ -18,7 +18,8 @@
|
||||||
# type = par | stk500 | stk500v2 | stk500pp | stk500hvsp | stk500generic |
|
# type = par | stk500 | stk500v2 | stk500pp | stk500hvsp | stk500generic |
|
||||||
# avr910 | butterfly | usbasp |
|
# avr910 | butterfly | usbasp |
|
||||||
# jtagmki | jtagmkii | jtagmkii_isp |
|
# jtagmki | jtagmkii | jtagmkii_isp |
|
||||||
# dragon_jtag | dragon_isp; # programmer type
|
# dragon_jtag | dragon_isp | dragon_pp |
|
||||||
|
# dragon_hvsp; # programmer type
|
||||||
# baudrate = <num> ; # baudrate for avr910-programmer
|
# baudrate = <num> ; # baudrate for avr910-programmer
|
||||||
# vcc = <num1> [, <num2> ... ] ; # pin number(s)
|
# vcc = <num1> [, <num2> ... ] ; # pin number(s)
|
||||||
# reset = <num> ; # pin number
|
# reset = <num> ; # pin number
|
||||||
|
@ -458,6 +459,22 @@ programmer
|
||||||
type = dragon_isp;
|
type = dragon_isp;
|
||||||
;
|
;
|
||||||
|
|
||||||
|
# AVR Dragon in PP mode
|
||||||
|
programmer
|
||||||
|
id = "dragon_pp";
|
||||||
|
desc = "Atmel AVR Dragon in PP mode";
|
||||||
|
baudrate = 115200;
|
||||||
|
type = dragon_pp;
|
||||||
|
;
|
||||||
|
|
||||||
|
# AVR Dragon in HVSP mode
|
||||||
|
programmer
|
||||||
|
id = "dragon_hvsp";
|
||||||
|
desc = "Atmel AVR Dragon in HVSP mode";
|
||||||
|
baudrate = 115200;
|
||||||
|
type = dragon_hvsp;
|
||||||
|
;
|
||||||
|
|
||||||
programmer
|
programmer
|
||||||
id = "pavr";
|
id = "pavr";
|
||||||
desc = "Jason Kyle's pAVR Serial Programmer";
|
desc = "Jason Kyle's pAVR Serial Programmer";
|
||||||
|
|
|
@ -88,8 +88,10 @@ static int parse_cmdbits(OPCODE * op);
|
||||||
%token K_DEFAULT_SERIAL
|
%token K_DEFAULT_SERIAL
|
||||||
%token K_DESC
|
%token K_DESC
|
||||||
%token K_DEVICECODE
|
%token K_DEVICECODE
|
||||||
|
%token K_DRAGON_HVSP
|
||||||
%token K_DRAGON_ISP
|
%token K_DRAGON_ISP
|
||||||
%token K_DRAGON_JTAG
|
%token K_DRAGON_JTAG
|
||||||
|
%token K_DRAGON_PP
|
||||||
%token K_STK500_DEVCODE
|
%token K_STK500_DEVCODE
|
||||||
%token K_AVR910_DEVCODE
|
%token K_AVR910_DEVCODE
|
||||||
%token K_EEPROM
|
%token K_EEPROM
|
||||||
|
@ -439,6 +441,12 @@ prog_parm :
|
||||||
}
|
}
|
||||||
} |
|
} |
|
||||||
|
|
||||||
|
K_TYPE TKN_EQUAL K_DRAGON_HVSP {
|
||||||
|
{
|
||||||
|
stk500v2_dragon_hvsp_initpgm(current_prog);
|
||||||
|
}
|
||||||
|
} |
|
||||||
|
|
||||||
K_TYPE TKN_EQUAL K_DRAGON_ISP {
|
K_TYPE TKN_EQUAL K_DRAGON_ISP {
|
||||||
{
|
{
|
||||||
stk500v2_dragon_isp_initpgm(current_prog);
|
stk500v2_dragon_isp_initpgm(current_prog);
|
||||||
|
@ -451,6 +459,12 @@ prog_parm :
|
||||||
}
|
}
|
||||||
} |
|
} |
|
||||||
|
|
||||||
|
K_TYPE TKN_EQUAL K_DRAGON_PP {
|
||||||
|
{
|
||||||
|
stk500v2_dragon_pp_initpgm(current_prog);
|
||||||
|
}
|
||||||
|
} |
|
||||||
|
|
||||||
K_DESC TKN_EQUAL TKN_STRING {
|
K_DESC TKN_EQUAL TKN_STRING {
|
||||||
strncpy(current_prog->desc, $3->value.string, PGM_DESCLEN);
|
strncpy(current_prog->desc, $3->value.string, PGM_DESCLEN);
|
||||||
current_prog->desc[PGM_DESCLEN-1] = 0;
|
current_prog->desc[PGM_DESCLEN-1] = 0;
|
||||||
|
|
|
@ -184,7 +184,7 @@ Only the memory programming functionality of the JTAG ICE is supported
|
||||||
by AVRDUDE.
|
by AVRDUDE.
|
||||||
For the JTAG ICE mkII, both JTAG and ISP mode are supported.
|
For the JTAG ICE mkII, both JTAG and ISP mode are supported.
|
||||||
|
|
||||||
The AVR Dragon is supported in JTAG and ISP mode.
|
The AVR Dragon is supported in all modes (ISP, JTAG, HVSP, PP).
|
||||||
(High-voltage programming is not yet supported.)
|
(High-voltage programming is not yet supported.)
|
||||||
When used in JTAG mode, the AVR Dragon behaves similar to a
|
When used in JTAG mode, the AVR Dragon behaves similar to a
|
||||||
JTAG ICE mkII, so all device-specific comments for that device
|
JTAG ICE mkII, so all device-specific comments for that device
|
||||||
|
@ -385,6 +385,14 @@ Brian Dean's Programmer,@*
|
||||||
Atmel Butterfly Development Board
|
Atmel Butterfly Development Board
|
||||||
@item @code{dt006} @tab
|
@item @code{dt006} @tab
|
||||||
Dontronics DT006
|
Dontronics DT006
|
||||||
|
@item @code{dragon_hvsp} @tab
|
||||||
|
AVR Dragon in high-voltage serial programming mode
|
||||||
|
@item @code{dragon_isp} @tab
|
||||||
|
AVR Dragon in ISP mode
|
||||||
|
@item @code{dragon_jtag} @tab
|
||||||
|
AVR Dragon in JTAG mode
|
||||||
|
@item @code{dragon_pp} @tab
|
||||||
|
AVR Dragon in (high-voltage) parallel programming mode
|
||||||
@item @code{jtagmkI} @tab
|
@item @code{jtagmkI} @tab
|
||||||
Atmel JTAG ICE mkI, running at 115200 Bd
|
Atmel JTAG ICE mkI, running at 115200 Bd
|
||||||
@item @code{jtag1} @tab
|
@item @code{jtag1} @tab
|
||||||
|
|
|
@ -232,7 +232,7 @@ static void jtagmkII_prmsg(PROGRAMMER * pgm, unsigned char * data, size_t len)
|
||||||
switch (data[1]) {
|
switch (data[1]) {
|
||||||
case EMULATOR_MODE_DEBUGWIRE: fprintf(stderr, ": DebugWire"); break;
|
case EMULATOR_MODE_DEBUGWIRE: fprintf(stderr, ": DebugWire"); break;
|
||||||
case EMULATOR_MODE_JTAG: fprintf(stderr, ": JTAG"); break;
|
case EMULATOR_MODE_JTAG: fprintf(stderr, ": JTAG"); break;
|
||||||
case EMULATOR_MODE_UNKNOWN: fprintf(stderr, ": Unknown"); break;
|
case EMULATOR_MODE_HV: fprintf(stderr, ": HVSP/PP"); break;
|
||||||
case EMULATOR_MODE_SPI: fprintf(stderr, ": SPI"); break;
|
case EMULATOR_MODE_SPI: fprintf(stderr, ": SPI"); break;
|
||||||
}
|
}
|
||||||
putc('\n', stderr);
|
putc('\n', stderr);
|
||||||
|
@ -674,7 +674,7 @@ int jtagmkII_getsync(PROGRAMMER * pgm, int mode) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: jtagmkII_getsync(): Using a %zu-byte device descriptor\n",
|
"%s: jtagmkII_getsync(): Using a %zu-byte device descriptor\n",
|
||||||
progname, device_descriptor_length);
|
progname, device_descriptor_length);
|
||||||
if (mode == EMULATOR_MODE_SPI) {
|
if (mode == EMULATOR_MODE_SPI || mode == EMULATOR_MODE_HV) {
|
||||||
device_descriptor_length = 0;
|
device_descriptor_length = 0;
|
||||||
if (hwver == 0 && fwver < FWVER(4, 14)) {
|
if (hwver == 0 && fwver < FWVER(4, 14)) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
|
|
@ -177,7 +177,7 @@
|
||||||
#define PAR_EMULATOR_MODE 0x03
|
#define PAR_EMULATOR_MODE 0x03
|
||||||
# define EMULATOR_MODE_DEBUGWIRE 0x00
|
# define EMULATOR_MODE_DEBUGWIRE 0x00
|
||||||
# define EMULATOR_MODE_JTAG 0x01
|
# define EMULATOR_MODE_JTAG 0x01
|
||||||
# define EMULATOR_MODE_UNKNOWN 0x02
|
# define EMULATOR_MODE_HV 0x02 /* HVSP or PP mode of AVR Dragon */
|
||||||
# define EMULATOR_MODE_SPI 0x03
|
# define EMULATOR_MODE_SPI 0x03
|
||||||
#define PAR_IREG 0x04
|
#define PAR_IREG 0x04
|
||||||
#define PAR_BAUD_RATE 0x05
|
#define PAR_BAUD_RATE 0x05
|
||||||
|
|
2
lexer.l
2
lexer.l
|
@ -135,8 +135,10 @@ default_parallel { yylval=NULL; return K_DEFAULT_PARALLEL; }
|
||||||
default_programmer { yylval=NULL; return K_DEFAULT_PROGRAMMER; }
|
default_programmer { yylval=NULL; return K_DEFAULT_PROGRAMMER; }
|
||||||
default_serial { yylval=NULL; return K_DEFAULT_SERIAL; }
|
default_serial { yylval=NULL; return K_DEFAULT_SERIAL; }
|
||||||
devicecode { yylval=NULL; return K_DEVICECODE; }
|
devicecode { yylval=NULL; return K_DEVICECODE; }
|
||||||
|
dragon_hvsp { yylval=NULL; return K_DRAGON_HVSP; }
|
||||||
dragon_isp { yylval=NULL; return K_DRAGON_ISP; }
|
dragon_isp { yylval=NULL; return K_DRAGON_ISP; }
|
||||||
dragon_jtag { yylval=NULL; return K_DRAGON_JTAG; }
|
dragon_jtag { yylval=NULL; return K_DRAGON_JTAG; }
|
||||||
|
dragon_pp { yylval=NULL; return K_DRAGON_PP; }
|
||||||
eecr { yylval=NULL; return K_EECR; }
|
eecr { yylval=NULL; return K_EECR; }
|
||||||
eeprom { yylval=NULL; return K_EEPROM; }
|
eeprom { yylval=NULL; return K_EEPROM; }
|
||||||
enablepageprogramming { yylval=NULL; return K_ENABLEPAGEPROGRAMMING; }
|
enablepageprogramming { yylval=NULL; return K_ENABLEPAGEPROGRAMMING; }
|
||||||
|
|
165
stk500v2.c
165
stk500v2.c
|
@ -131,10 +131,12 @@ struct jtagispentry
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct jtagispentry jtagispcmds[] = {
|
static struct jtagispentry jtagispcmds[] = {
|
||||||
|
/* generic */
|
||||||
{ CMD_SET_PARAMETER, 2 },
|
{ CMD_SET_PARAMETER, 2 },
|
||||||
{ CMD_GET_PARAMETER, 3 },
|
{ CMD_GET_PARAMETER, 3 },
|
||||||
{ CMD_OSCCAL, 2 },
|
{ CMD_OSCCAL, 2 },
|
||||||
{ CMD_LOAD_ADDRESS, 2 },
|
{ CMD_LOAD_ADDRESS, 2 },
|
||||||
|
/* ISP mode */
|
||||||
{ CMD_ENTER_PROGMODE_ISP, 2 },
|
{ CMD_ENTER_PROGMODE_ISP, 2 },
|
||||||
{ CMD_LEAVE_PROGMODE_ISP, 2 },
|
{ CMD_LEAVE_PROGMODE_ISP, 2 },
|
||||||
{ CMD_CHIP_ERASE_ISP, 2 },
|
{ CMD_CHIP_ERASE_ISP, 2 },
|
||||||
|
@ -148,7 +150,37 @@ static struct jtagispentry jtagispcmds[] = {
|
||||||
{ CMD_READ_LOCK_ISP, 4 },
|
{ CMD_READ_LOCK_ISP, 4 },
|
||||||
{ CMD_READ_SIGNATURE_ISP, 4 },
|
{ CMD_READ_SIGNATURE_ISP, 4 },
|
||||||
{ CMD_READ_OSCCAL_ISP, 4 },
|
{ CMD_READ_OSCCAL_ISP, 4 },
|
||||||
{ CMD_SPI_MULTI, SZ_SPI_MULTI }
|
{ CMD_SPI_MULTI, SZ_SPI_MULTI },
|
||||||
|
/* all HV modes */
|
||||||
|
{ CMD_SET_CONTROL_STACK, 2 },
|
||||||
|
/* HVSP mode */
|
||||||
|
{ CMD_ENTER_PROGMODE_HVSP, 2 },
|
||||||
|
{ CMD_LEAVE_PROGMODE_HVSP, 2 },
|
||||||
|
{ CMD_CHIP_ERASE_HVSP, 2 },
|
||||||
|
{ CMD_PROGRAM_FLASH_HVSP, 2 },
|
||||||
|
{ CMD_READ_FLASH_HVSP, SZ_READ_FLASH_EE },
|
||||||
|
{ CMD_PROGRAM_EEPROM_HVSP, 2 },
|
||||||
|
{ CMD_READ_EEPROM_HVSP, SZ_READ_FLASH_EE },
|
||||||
|
{ CMD_PROGRAM_FUSE_HVSP, 2 },
|
||||||
|
{ CMD_READ_FUSE_HVSP, 3 },
|
||||||
|
{ CMD_PROGRAM_LOCK_HVSP, 2 },
|
||||||
|
{ CMD_READ_LOCK_HVSP, 3 },
|
||||||
|
{ CMD_READ_SIGNATURE_HVSP, 3 },
|
||||||
|
{ CMD_READ_OSCCAL_HVSP, 3 },
|
||||||
|
/* PP mode */
|
||||||
|
{ CMD_ENTER_PROGMODE_PP, 2 },
|
||||||
|
{ CMD_LEAVE_PROGMODE_PP, 2 },
|
||||||
|
{ CMD_CHIP_ERASE_PP, 2 },
|
||||||
|
{ CMD_PROGRAM_FLASH_PP, 2 },
|
||||||
|
{ CMD_READ_FLASH_PP, SZ_READ_FLASH_EE },
|
||||||
|
{ CMD_PROGRAM_EEPROM_PP, 2 },
|
||||||
|
{ CMD_READ_EEPROM_PP, SZ_READ_FLASH_EE },
|
||||||
|
{ CMD_PROGRAM_FUSE_PP, 2 },
|
||||||
|
{ CMD_READ_FUSE_PP, 3 },
|
||||||
|
{ CMD_PROGRAM_LOCK_PP, 2 },
|
||||||
|
{ CMD_READ_LOCK_PP, 3 },
|
||||||
|
{ CMD_READ_SIGNATURE_PP, 3 },
|
||||||
|
{ CMD_READ_OSCCAL_PP, 3 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int stk500v2_getparm(PROGRAMMER * pgm, unsigned char parm, unsigned char * value);
|
static int stk500v2_getparm(PROGRAMMER * pgm, unsigned char parm, unsigned char * value);
|
||||||
|
@ -2260,6 +2292,73 @@ static int stk500v2_dragon_isp_open(PROGRAMMER * pgm, char * port)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wrapper functions for the AVR Dragon in HV mode. This mode
|
||||||
|
* uses the normal JTAG ICE mkII packet stream to communicate with the
|
||||||
|
* ICE, but then encapsulates AVRISP mkII commands using
|
||||||
|
* CMND_ISP_PACKET.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open an AVR Dragon in HV mode (HVSP or parallel).
|
||||||
|
*/
|
||||||
|
static int stk500v2_dragon_hv_open(PROGRAMMER * pgm, char * port)
|
||||||
|
{
|
||||||
|
long baud;
|
||||||
|
|
||||||
|
if (verbose >= 2)
|
||||||
|
fprintf(stderr, "%s: stk500v2_dragon_hv_open()\n", progname);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The JTAG ICE mkII always starts with a baud rate of 19200 Bd upon
|
||||||
|
* attaching. If the config file or command-line parameters specify
|
||||||
|
* a higher baud rate, we switch to it later on, after establishing
|
||||||
|
* the connection with the ICE.
|
||||||
|
*/
|
||||||
|
baud = 19200;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the port name starts with "usb", divert the serial routines
|
||||||
|
* to the USB ones. The serial_open() function for USB overrides
|
||||||
|
* the meaning of the "baud" parameter to be the USB device ID to
|
||||||
|
* search for.
|
||||||
|
*/
|
||||||
|
if (strncmp(port, "usb", 3) == 0) {
|
||||||
|
#if defined(HAVE_LIBUSB)
|
||||||
|
serdev = &usb_serdev;
|
||||||
|
baud = USB_DEVICE_AVRDRAGON;
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "avrdude was compiled without usb support.\n");
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(pgm->port, port);
|
||||||
|
pgm->fd = serial_open(port, baud);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* drain any extraneous input
|
||||||
|
*/
|
||||||
|
stk500v2_drain(pgm, 0);
|
||||||
|
|
||||||
|
if (jtagmkII_getsync(pgm, EMULATOR_MODE_HV) != 0) {
|
||||||
|
fprintf(stderr, "%s: failed to sync with the JTAG ICE mkII in HV mode\n",
|
||||||
|
progname);
|
||||||
|
pgm->close(pgm); /* sign off correctly */
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
pgmtype = PGMTYPE_JTAGICE_MKII;
|
||||||
|
|
||||||
|
if (pgm->bitclock != 0.0) {
|
||||||
|
if (pgm->set_sck_period(pgm, pgm->bitclock) != 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void stk500v2_initpgm(PROGRAMMER * pgm)
|
void stk500v2_initpgm(PROGRAMMER * pgm)
|
||||||
{
|
{
|
||||||
strcpy(pgm->type, "STK500V2");
|
strcpy(pgm->type, "STK500V2");
|
||||||
|
@ -2409,3 +2508,67 @@ void stk500v2_dragon_isp_initpgm(PROGRAMMER * pgm)
|
||||||
pgm->set_sck_period = stk500v2_set_sck_period_mk2;
|
pgm->set_sck_period = stk500v2_set_sck_period_mk2;
|
||||||
pgm->page_size = 256;
|
pgm->page_size = 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void stk500v2_dragon_pp_initpgm(PROGRAMMER * pgm)
|
||||||
|
{
|
||||||
|
strcpy(pgm->type, "DRAGON_PP");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mandatory functions
|
||||||
|
*/
|
||||||
|
pgm->initialize = stk500pp_initialize;
|
||||||
|
pgm->display = stk500v2_display;
|
||||||
|
pgm->enable = stk500v2_enable;
|
||||||
|
pgm->disable = stk500pp_disable;
|
||||||
|
pgm->program_enable = stk500pp_program_enable;
|
||||||
|
pgm->chip_erase = stk500pp_chip_erase;
|
||||||
|
pgm->cmd = stk500hv_cmd;
|
||||||
|
pgm->open = stk500v2_dragon_hv_open;
|
||||||
|
pgm->close = jtagmkII_close;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* optional functions
|
||||||
|
*/
|
||||||
|
pgm->read_byte = stk500pp_read_byte;
|
||||||
|
pgm->write_byte = stk500pp_write_byte;
|
||||||
|
pgm->paged_write = stk500pp_paged_write;
|
||||||
|
pgm->paged_load = stk500pp_paged_load;
|
||||||
|
pgm->print_parms = stk500v2_print_parms;
|
||||||
|
pgm->set_vtarget = stk500v2_set_vtarget;
|
||||||
|
pgm->set_varef = stk500v2_set_varef;
|
||||||
|
pgm->set_fosc = stk500v2_set_fosc;
|
||||||
|
pgm->set_sck_period = stk500v2_set_sck_period_mk2;
|
||||||
|
pgm->page_size = 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
void stk500v2_dragon_hvsp_initpgm(PROGRAMMER * pgm)
|
||||||
|
{
|
||||||
|
strcpy(pgm->type, "DRAGON_HVSP");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mandatory functions
|
||||||
|
*/
|
||||||
|
pgm->initialize = stk500hvsp_initialize;
|
||||||
|
pgm->display = stk500v2_display;
|
||||||
|
pgm->enable = stk500v2_enable;
|
||||||
|
pgm->disable = stk500hvsp_disable;
|
||||||
|
pgm->program_enable = stk500hvsp_program_enable;
|
||||||
|
pgm->chip_erase = stk500hvsp_chip_erase;
|
||||||
|
pgm->cmd = stk500hv_cmd;
|
||||||
|
pgm->open = stk500v2_dragon_hv_open;
|
||||||
|
pgm->close = jtagmkII_close;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* optional functions
|
||||||
|
*/
|
||||||
|
pgm->read_byte = stk500hvsp_read_byte;
|
||||||
|
pgm->write_byte = stk500hvsp_write_byte;
|
||||||
|
pgm->paged_write = stk500hvsp_paged_write;
|
||||||
|
pgm->paged_load = stk500hvsp_paged_load;
|
||||||
|
pgm->print_parms = stk500v2_print_parms;
|
||||||
|
pgm->set_vtarget = stk500v2_set_vtarget;
|
||||||
|
pgm->set_varef = stk500v2_set_varef;
|
||||||
|
pgm->set_fosc = stk500v2_set_fosc;
|
||||||
|
pgm->set_sck_period = stk500v2_set_sck_period_mk2;
|
||||||
|
pgm->page_size = 256;
|
||||||
|
}
|
||||||
|
|
|
@ -27,7 +27,9 @@ void stk500v2_initpgm (PROGRAMMER * pgm);
|
||||||
void stk500hvsp_initpgm (PROGRAMMER * pgm);
|
void stk500hvsp_initpgm (PROGRAMMER * pgm);
|
||||||
void stk500pp_initpgm (PROGRAMMER * pgm);
|
void stk500pp_initpgm (PROGRAMMER * pgm);
|
||||||
void stk500v2_jtagmkII_initpgm(PROGRAMMER * pgm);
|
void stk500v2_jtagmkII_initpgm(PROGRAMMER * pgm);
|
||||||
|
void stk500v2_dragon_hvsp_initpgm(PROGRAMMER * pgm);
|
||||||
void stk500v2_dragon_isp_initpgm(PROGRAMMER * pgm);
|
void stk500v2_dragon_isp_initpgm(PROGRAMMER * pgm);
|
||||||
|
void stk500v2_dragon_pp_initpgm(PROGRAMMER * pgm);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue