diff --git a/avrdude/Makefile b/avrdude/Makefile index 95e2618d..06e08b90 100644 --- a/avrdude/Makefile +++ b/avrdude/Makefile @@ -30,8 +30,8 @@ all : ${TARGET} ${TARGET} : ${OBJS} ${CC} ${LDFLAGS} -o ${TARGET} ${OBJS} ${LIBS} -main.o : avr.h fileio.h ppi.h term.h -avr.o : avr.h ppi.h +main.o : avr.h fileio.h ppi.h term.h pindefs.h +avr.o : avr.h ppi.h pindefs.h fileio.o : fileio.h avr.h ppi.o : ppi.h term.o : term.h avr.h diff --git a/avrdude/avr.c b/avrdude/avr.c index 88d93754..5413a91d 100644 --- a/avrdude/avr.c +++ b/avrdude/avr.c @@ -35,6 +35,7 @@ #include "avr.h" +#include "pindefs.h" #include "ppi.h" @@ -172,6 +173,8 @@ unsigned char avr_read_byte ( int fd, struct avrpart * p, /* order here is very important, AVR_EEPROM, AVR_FLASH, AVR_FLASH+1 */ static unsigned char cmdbyte[3] = { 0xa0, 0x20, 0x28 }; + LED_ON(fd, PIN_LED_PGM); + offset = 0; if (memtype == AVR_FLASH) { @@ -186,6 +189,8 @@ unsigned char avr_read_byte ( int fd, struct avrpart * p, avr_cmd(fd, cmd, res); + LED_OFF(fd, PIN_LED_PGM); + return res[3]; } @@ -244,6 +249,8 @@ int avr_write_byte ( int fd, struct avrpart * p, AVRMEM memtype, return 0; } + LED_ON(fd, PIN_LED_PGM); + offset = 0; caddr = addr; @@ -285,10 +292,12 @@ int avr_write_byte ( int fd, struct avrpart * p, AVRMEM memtype, * we couldn't write the data, indicate our displeasure by * returning an error code */ + LED_OFF(fd, PIN_LED_PGM); return -1; } } + LED_OFF(fd, PIN_LED_PGM); return 0; } @@ -310,6 +319,8 @@ int avr_write ( int fd, struct avrpart * p, AVRMEM memtype, int size ) unsigned short i; unsigned char data; + LED_OFF(fd, PIN_LED_ERR); + buf = p->mem[memtype]; wsize = p->memsize[memtype]; if (size < wsize) { @@ -331,6 +342,7 @@ int avr_write ( int fd, struct avrpart * p, AVRMEM memtype, int size ) if (rc) { fprintf(stderr, " ***failed; "); fprintf(stderr, "\n"); + LED_ON(fd, PIN_LED_ERR); } } @@ -365,10 +377,14 @@ int avr_chip_erase ( int fd, struct avrpart * p ) unsigned char data[4] = {0xac, 0x80, 0x00, 0x00}; unsigned char res[4]; + LED_ON(fd, PIN_LED_PGM); + avr_cmd(fd, data, res); usleep(p->chip_erase_delay); avr_initialize(fd, p); + LED_OFF(fd, PIN_LED_PGM); + return 0; } diff --git a/avrdude/avr.h b/avrdude/avr.h index a77adca5..d3c8edda 100644 --- a/avrdude/avr.h +++ b/avrdude/avr.h @@ -34,20 +34,6 @@ #include - -#define PPI_AVR_VCC 0x0f /* ppi pins 2-5, data reg bits 0-3 */ -#define PIN_AVR_BUFF 6 -#define PIN_AVR_RESET 7 -#define PIN_AVR_SCK 8 -#define PIN_AVR_MOSI 9 -#define PIN_AVR_MISO 10 -#define PIN_LED_ERR 1 -#define PIN_LED_RDY 14 -#define PIN_LED_PGM 16 -#define PIN_LED_VFY 17 - - - /* * AVR memory designations; the order of these is important, these are * used as indexes into statically initialized data, don't change them diff --git a/avrdude/main.c b/avrdude/main.c index 2a365eaf..37686c56 100644 --- a/avrdude/main.c +++ b/avrdude/main.c @@ -81,6 +81,7 @@ #include "avr.h" #include "fileio.h" +#include "pindefs.h" #include "ppi.h" #include "term.h" @@ -105,12 +106,6 @@ void usage ( void ) " %s[-i filename] [-m memtype] [-o filename] [-P parallel] [-t]\n\n", progname, progbuf); -#if 0 - fprintf(stderr, " Valid Parts for the -p option are:\n"); - avr_list_parts(stderr, " "); - fprintf(stderr, "\n"); -#endif - } @@ -407,6 +402,19 @@ int main ( int argc, char * argv [] ) ppidata &= ~ppiclrbits; ppidata |= ppisetbits; + /* + * turn off all the status leds + */ + LED_OFF(fd, PIN_LED_RDY); + LED_OFF(fd, PIN_LED_ERR); + LED_OFF(fd, PIN_LED_PGM); + LED_OFF(fd, PIN_LED_VFY); + + /* + * enable the 74367 buffer, if connected; this signal is active low + */ + ppi_setpin(fd, PIN_AVR_BUFF, 0); + /* * initialize the chip in preperation for accepting commands */ @@ -417,6 +425,9 @@ int main ( int argc, char * argv [] ) goto main_exit; } + /* indicate ready */ + LED_ON(fd, PIN_LED_RDY); + fprintf ( stderr, "%s: AVR device initialized and ready to accept instructions\n", progname ); @@ -556,6 +567,8 @@ int main ( int argc, char * argv [] ) * verify that the in memory file (p->flash or p->eeprom) is the * same as what is on the chip */ + LED_ON(fd, PIN_LED_VFY); + fprintf(stderr, "%s: verifying %s memory against %s:\n", progname, avr_memtstr(memtype), inputf); fprintf(stderr, "%s: reading on-chip %s data:\n", @@ -564,6 +577,7 @@ int main ( int argc, char * argv [] ) if (rc < 0) { fprintf(stderr, "%s: failed to read all of %s memory, rc=%d\n", progname, avr_memtstr(memtype), rc); + LED_ON(fd, PIN_LED_ERR); exitrc = 1; goto main_exit; } @@ -573,12 +587,15 @@ int main ( int argc, char * argv [] ) if (rc < 0) { fprintf(stderr, "%s: verification error; content mismatch\n", progname); + LED_ON(fd, PIN_LED_ERR); exitrc = 1; goto main_exit; } fprintf(stderr, "%s: %d bytes of %s verified\n", progname, rc, avr_memtstr(memtype)); + + LED_OFF(fd, PIN_LED_VFY); } @@ -592,6 +609,11 @@ int main ( int argc, char * argv [] ) avr_powerdown(fd); ppi_setall(fd, PPIDATA, ppidata); + /* + * disable the 74367 buffer, if connected; this signal is active low + */ + ppi_setpin(fd, PIN_AVR_BUFF, 1); + close(fd); fprintf(stderr, "\n%s done. Thank you.\n\n", progname); diff --git a/avrdude/pindefs.h b/avrdude/pindefs.h new file mode 100644 index 00000000..10c60309 --- /dev/null +++ b/avrdude/pindefs.h @@ -0,0 +1,49 @@ +/* + * Copyright 2000 Brian S. Dean + * All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BRIAN S. DEAN ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BRIAN S. DEAN BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + */ + +/* $Id$ */ + +#ifndef __pindefs_h__ +#define __pindefs_h__ + +#define PPI_AVR_VCC 0x0f /* ppi pins 2-5, data reg bits 0-3 */ +#define PIN_AVR_BUFF 6 +#define PIN_AVR_RESET 7 +#define PIN_AVR_SCK 8 +#define PIN_AVR_MOSI 9 +#define PIN_AVR_MISO 10 +#define PIN_LED_ERR 1 +#define PIN_LED_RDY 14 +#define PIN_LED_PGM 16 +#define PIN_LED_VFY 17 + +#define LED_ON(fd,pin) ppi_setpin(fd,pin,0) +#define LED_OFF(fd,pin) ppi_setpin(fd,pin,1) + +#endif diff --git a/avrdude/ppi.c b/avrdude/ppi.c index 286f613b..e15573d4 100644 --- a/avrdude/ppi.c +++ b/avrdude/ppi.c @@ -310,8 +310,7 @@ int ppi_getpinreg ( int pin ) */ int ppi_sense ( int fd ) { - unsigned int r, pr; - unsigned int v; + unsigned int pr; int count; char buf[128]; int i;