Add a few parameters needed for parallel programming: assignment of
PAGEL and BS2 signals and the disposition of the reset pin ('dedicated' or 'io'). git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@202 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
parent
e4b8507952
commit
8aa98920ef
16
avr.c
16
avr.c
|
@ -57,6 +57,7 @@ AVRPART * avr_new_part(void)
|
||||||
|
|
||||||
p->id[0] = 0;
|
p->id[0] = 0;
|
||||||
p->desc[0] = 0;
|
p->desc[0] = 0;
|
||||||
|
p->reset_disposition = RESET_DEDICATED;
|
||||||
|
|
||||||
p->mem = lcreat(NULL, 0);
|
p->mem = lcreat(NULL, 0);
|
||||||
|
|
||||||
|
@ -1053,6 +1054,15 @@ void avr_mem_display(char * prefix, FILE * f, AVRMEM * m, int type,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char * reset_disp_str(int r)
|
||||||
|
{
|
||||||
|
switch (r) {
|
||||||
|
case RESET_DEDICATED : return "dedicated";
|
||||||
|
case RESET_IO : return "possible i/o";
|
||||||
|
default : return "<invalid>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void avr_display(FILE * f, AVRPART * p, char * prefix, int verbose)
|
void avr_display(FILE * f, AVRPART * p, char * prefix, int verbose)
|
||||||
{
|
{
|
||||||
|
@ -1065,9 +1075,15 @@ void avr_display(FILE * f, AVRPART * p, char * prefix, int verbose)
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"%sAVR Part : %s\n"
|
"%sAVR Part : %s\n"
|
||||||
"%sChip Erase delay : %d us\n"
|
"%sChip Erase delay : %d us\n"
|
||||||
|
"%sPAGEL : P%02X\n"
|
||||||
|
"%sBS2 : P%02X\n"
|
||||||
|
"%sRESET disposition : %s\n"
|
||||||
"%sMemory Detail :\n\n",
|
"%sMemory Detail :\n\n",
|
||||||
prefix, p->desc,
|
prefix, p->desc,
|
||||||
prefix, p->chip_erase_delay,
|
prefix, p->chip_erase_delay,
|
||||||
|
prefix, p->pagel,
|
||||||
|
prefix, p->bs2,
|
||||||
|
prefix, reset_disp_str(p->reset_disposition),
|
||||||
prefix);
|
prefix);
|
||||||
|
|
||||||
px = prefix;
|
px = prefix;
|
||||||
|
|
|
@ -1082,6 +1082,9 @@ part
|
||||||
desc = "ATMEGA128";
|
desc = "ATMEGA128";
|
||||||
devicecode = 0xB2;
|
devicecode = 0xB2;
|
||||||
chip_erase_delay = 9000;
|
chip_erase_delay = 9000;
|
||||||
|
pagel = 0xD7;
|
||||||
|
bs2 = 0xA0;
|
||||||
|
reset = dedicated;
|
||||||
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
|
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
|
||||||
"x x x x x x x x x x x x x x x x";
|
"x x x x x x x x x x x x x x x x";
|
||||||
|
|
||||||
|
@ -1089,6 +1092,8 @@ part
|
||||||
"x x x x x x x x x x x x x x x x";
|
"x x x x x x x x x x x x x x x x";
|
||||||
|
|
||||||
memory "eeprom"
|
memory "eeprom"
|
||||||
|
paged = no; /* leave this "no" */
|
||||||
|
page_size = 8; /* for parallel programming */
|
||||||
size = 4096;
|
size = 4096;
|
||||||
min_write_delay = 9000;
|
min_write_delay = 9000;
|
||||||
max_write_delay = 9000;
|
max_write_delay = 9000;
|
||||||
|
|
|
@ -51,6 +51,11 @@ enum {
|
||||||
AVR_CMDBIT_OUTPUT /* this bit is an output bit */
|
AVR_CMDBIT_OUTPUT /* this bit is an output bit */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum { /* these are assigned to reset_disposition of AVRPART */
|
||||||
|
RESET_DEDICATED, /* reset pin is dedicated */
|
||||||
|
RESET_IO /* reset pin might be configured as an I/O pin */
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* serial programming instruction bit specifications
|
* serial programming instruction bit specifications
|
||||||
*/
|
*/
|
||||||
|
@ -72,6 +77,10 @@ typedef struct avrpart {
|
||||||
char id[AVR_IDLEN]; /* short part name */
|
char id[AVR_IDLEN]; /* short part name */
|
||||||
int devicecode; /* Atmel STK500 device code */
|
int devicecode; /* Atmel STK500 device code */
|
||||||
int chip_erase_delay; /* microseconds */
|
int chip_erase_delay; /* microseconds */
|
||||||
|
unsigned char pagel; /* for parallel programming */
|
||||||
|
unsigned char bs2; /* for parallel programming */
|
||||||
|
int reset_disposition; /* see RESET_ enums */
|
||||||
|
|
||||||
OPCODE * op[AVR_OP_MAX]; /* opcodes */
|
OPCODE * op[AVR_OP_MAX]; /* opcodes */
|
||||||
|
|
||||||
LISTID mem; /* avr memory definitions */
|
LISTID mem; /* avr memory definitions */
|
||||||
|
|
|
@ -62,20 +62,25 @@ static int parse_cmdbits(OPCODE * op);
|
||||||
|
|
||||||
%token K_PAGE_SIZE
|
%token K_PAGE_SIZE
|
||||||
%token K_PAGED
|
%token K_PAGED
|
||||||
|
|
||||||
|
%token K_BS2
|
||||||
%token K_BUFF
|
%token K_BUFF
|
||||||
%token K_CHIP_ERASE_DELAY
|
%token K_CHIP_ERASE_DELAY
|
||||||
|
%token K_DEDICATED
|
||||||
%token K_DESC
|
%token K_DESC
|
||||||
%token K_DEVICECODE
|
%token K_DEVICECODE
|
||||||
%token K_EEPROM
|
%token K_EEPROM
|
||||||
%token K_ERRLED
|
%token K_ERRLED
|
||||||
%token K_FLASH
|
%token K_FLASH
|
||||||
%token K_ID
|
%token K_ID
|
||||||
|
%token K_IO
|
||||||
%token K_LOADPAGE
|
%token K_LOADPAGE
|
||||||
%token K_MAX_WRITE_DELAY
|
%token K_MAX_WRITE_DELAY
|
||||||
%token K_MIN_WRITE_DELAY
|
%token K_MIN_WRITE_DELAY
|
||||||
%token K_MISO
|
%token K_MISO
|
||||||
%token K_MOSI
|
%token K_MOSI
|
||||||
%token K_NUM_PAGES
|
%token K_NUM_PAGES
|
||||||
|
%token K_PAGEL
|
||||||
%token K_PAR
|
%token K_PAR
|
||||||
%token K_PART
|
%token K_PART
|
||||||
%token K_PGMLED
|
%token K_PGMLED
|
||||||
|
@ -331,6 +336,10 @@ part_parms :
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
reset_disposition :
|
||||||
|
K_DEDICATED | K_IO
|
||||||
|
;
|
||||||
|
|
||||||
part_parm :
|
part_parm :
|
||||||
K_ID TKN_EQUAL TKN_STRING
|
K_ID TKN_EQUAL TKN_STRING
|
||||||
{
|
{
|
||||||
|
@ -359,6 +368,28 @@ part_parm :
|
||||||
free_token($3);
|
free_token($3);
|
||||||
} |
|
} |
|
||||||
|
|
||||||
|
K_PAGEL TKN_EQUAL TKN_NUMBER
|
||||||
|
{
|
||||||
|
current_part->pagel = $3->value.number;
|
||||||
|
free_token($3);
|
||||||
|
} |
|
||||||
|
|
||||||
|
K_BS2 TKN_EQUAL TKN_NUMBER
|
||||||
|
{
|
||||||
|
current_part->bs2 = $3->value.number;
|
||||||
|
free_token($3);
|
||||||
|
} |
|
||||||
|
|
||||||
|
K_RESET TKN_EQUAL reset_disposition
|
||||||
|
{
|
||||||
|
if ($3->primary == K_DEDICATED)
|
||||||
|
current_part->reset_disposition = RESET_DEDICATED;
|
||||||
|
else if ($3->primary == K_IO)
|
||||||
|
current_part->reset_disposition = RESET_IO;
|
||||||
|
|
||||||
|
free_token($3);
|
||||||
|
} |
|
||||||
|
|
||||||
/*
|
/*
|
||||||
K_EEPROM { current_mem = AVR_M_EEPROM; }
|
K_EEPROM { current_mem = AVR_M_EEPROM; }
|
||||||
mem_specs |
|
mem_specs |
|
||||||
|
|
4
lexer.l
4
lexer.l
|
@ -117,14 +117,17 @@ SIGN [+-]
|
||||||
|
|
||||||
bank_size { yylval=NULL; return K_PAGE_SIZE; }
|
bank_size { yylval=NULL; return K_PAGE_SIZE; }
|
||||||
banked { yylval=NULL; return K_PAGED; }
|
banked { yylval=NULL; return K_PAGED; }
|
||||||
|
bs2 { yylval=NULL; return K_BS2; }
|
||||||
buff { yylval=NULL; return K_BUFF; }
|
buff { yylval=NULL; return K_BUFF; }
|
||||||
chip_erase_delay { yylval=NULL; return K_CHIP_ERASE_DELAY; }
|
chip_erase_delay { yylval=NULL; return K_CHIP_ERASE_DELAY; }
|
||||||
|
dedicated { yylval=new_token(K_DEDICATED); return K_DEDICATED; }
|
||||||
desc { yylval=NULL; return K_DESC; }
|
desc { yylval=NULL; return K_DESC; }
|
||||||
devicecode { yylval=NULL; return K_DEVICECODE; }
|
devicecode { yylval=NULL; return K_DEVICECODE; }
|
||||||
eeprom { yylval=NULL; return K_EEPROM; }
|
eeprom { yylval=NULL; return K_EEPROM; }
|
||||||
errled { yylval=NULL; return K_ERRLED; }
|
errled { yylval=NULL; return K_ERRLED; }
|
||||||
flash { yylval=NULL; return K_FLASH; }
|
flash { yylval=NULL; return K_FLASH; }
|
||||||
id { yylval=NULL; return K_ID; }
|
id { yylval=NULL; return K_ID; }
|
||||||
|
io { yylval=new_token(K_IO); return K_IO; }
|
||||||
max_write_delay { yylval=NULL; return K_MAX_WRITE_DELAY; }
|
max_write_delay { yylval=NULL; return K_MAX_WRITE_DELAY; }
|
||||||
min_write_delay { yylval=NULL; return K_MIN_WRITE_DELAY; }
|
min_write_delay { yylval=NULL; return K_MIN_WRITE_DELAY; }
|
||||||
miso { yylval=NULL; return K_MISO; }
|
miso { yylval=NULL; return K_MISO; }
|
||||||
|
@ -133,6 +136,7 @@ num_banks { yylval=NULL; return K_NUM_PAGES; }
|
||||||
num_pages { yylval=NULL; return K_NUM_PAGES; }
|
num_pages { yylval=NULL; return K_NUM_PAGES; }
|
||||||
page_size { yylval=NULL; return K_PAGE_SIZE; }
|
page_size { yylval=NULL; return K_PAGE_SIZE; }
|
||||||
paged { yylval=NULL; return K_PAGED; }
|
paged { yylval=NULL; return K_PAGED; }
|
||||||
|
pagel { yylval=NULL; return K_PAGEL; }
|
||||||
part { yylval=NULL; return K_PART; }
|
part { yylval=NULL; return K_PART; }
|
||||||
pgmled { yylval=NULL; return K_PGMLED; }
|
pgmled { yylval=NULL; return K_PGMLED; }
|
||||||
par { yylval=NULL; return K_PAR; }
|
par { yylval=NULL; return K_PAR; }
|
||||||
|
|
Loading…
Reference in New Issue