mirror of
https://github.com/mariusgreuel/avrdude.git
synced 2025-12-13 17:34:56 +00:00
Rework of bitbanging functions setpin, getpin, highpulsepin to make simplier use of new pindefs data in pgm structure
* linuxgpio.c, bitbang.c, buspirate.c, par.c, pgm.h, term.c, serbb_*.c: changed interface of setpin, getpin, highpulsepin to take pin function as parameter (not the real number, which can be found by pgm->pinno[function]) git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1252 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
38
par.c
38
par.c
@@ -74,7 +74,7 @@ static struct ppipins_t ppipins[] = {
|
||||
|
||||
#define NPINS (sizeof(ppipins)/sizeof(struct ppipins_t))
|
||||
|
||||
static int par_setpin(PROGRAMMER * pgm, int pin, int value)
|
||||
static int par_setpin_internal(PROGRAMMER * pgm, int pin, int value)
|
||||
{
|
||||
int inverted;
|
||||
|
||||
@@ -103,23 +103,30 @@ static int par_setpin(PROGRAMMER * pgm, int pin, int value)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void par_setmany(PROGRAMMER * pgm, unsigned int pinset, int value)
|
||||
static int par_setpin(PROGRAMMER * pgm, int pinfunc, int value)
|
||||
{
|
||||
return par_setpin_internal(pgm, pgm->pinno[pinfunc], value);
|
||||
}
|
||||
|
||||
static void par_setmany(PROGRAMMER * pgm, int pinfunc, int value)
|
||||
{
|
||||
int pin, mask;
|
||||
int pinset = pgm->pinno[pinfunc];
|
||||
|
||||
/* mask is anything non-pin - needs to be applied to each par_setpin to preserve inversion */
|
||||
mask = pinset & (~PIN_MASK);
|
||||
|
||||
for (pin = 1; pin <= 17; pin++) {
|
||||
if (pinset & (1 << pin))
|
||||
par_setpin(pgm, pin | mask, value);
|
||||
par_setpin_internal(pgm, pin | mask, value);
|
||||
}
|
||||
}
|
||||
|
||||
static int par_getpin(PROGRAMMER * pgm, int pin)
|
||||
static int par_getpin(PROGRAMMER * pgm, int pinfunc)
|
||||
{
|
||||
int value;
|
||||
int inverted;
|
||||
int pin = pgm->pinno[pinfunc];
|
||||
|
||||
inverted = pin & PIN_INVERSE;
|
||||
pin &= PIN_MASK;
|
||||
@@ -144,9 +151,10 @@ static int par_getpin(PROGRAMMER * pgm, int pin)
|
||||
}
|
||||
|
||||
|
||||
static int par_highpulsepin(PROGRAMMER * pgm, int pin)
|
||||
static int par_highpulsepin(PROGRAMMER * pgm, int pinfunc)
|
||||
{
|
||||
int inverted;
|
||||
int pin = pgm->pinno[pinfunc];
|
||||
|
||||
inverted = pin & PIN_INVERSE;
|
||||
pin &= PIN_MASK;
|
||||
@@ -185,7 +193,7 @@ static int par_highpulsepin(PROGRAMMER * pgm, int pin)
|
||||
*/
|
||||
static void par_powerup(PROGRAMMER * pgm)
|
||||
{
|
||||
par_setmany(pgm, pgm->pinno[PPI_AVR_VCC], 1); /* power up */
|
||||
par_setmany(pgm, PPI_AVR_VCC, 1); /* power up */
|
||||
usleep(100000);
|
||||
}
|
||||
|
||||
@@ -195,12 +203,12 @@ static void par_powerup(PROGRAMMER * pgm)
|
||||
*/
|
||||
static void par_powerdown(PROGRAMMER * pgm)
|
||||
{
|
||||
par_setmany(pgm, pgm->pinno[PPI_AVR_VCC], 0); /* power down */
|
||||
par_setmany(pgm, PPI_AVR_VCC, 0); /* power down */
|
||||
}
|
||||
|
||||
static void par_disable(PROGRAMMER * pgm)
|
||||
{
|
||||
par_setmany(pgm, pgm->pinno[PPI_AVR_BUFF], 1); /* turn off */
|
||||
par_setmany(pgm, PPI_AVR_BUFF, 1); /* turn off */
|
||||
}
|
||||
|
||||
static void par_enable(PROGRAMMER * pgm)
|
||||
@@ -216,13 +224,13 @@ static void par_enable(PROGRAMMER * pgm)
|
||||
* and not via the buffer chip.
|
||||
*/
|
||||
|
||||
par_setpin(pgm, pgm->pinno[PIN_AVR_RESET], 0);
|
||||
par_setpin(pgm, PIN_AVR_RESET, 0);
|
||||
usleep(1);
|
||||
|
||||
/*
|
||||
* enable the 74367 buffer, if connected; this signal is active low
|
||||
*/
|
||||
par_setmany(pgm, pgm->pinno[PPI_AVR_BUFF], 0);
|
||||
par_setmany(pgm, PPI_AVR_BUFF, 0);
|
||||
}
|
||||
|
||||
static int par_open(PROGRAMMER * pgm, char * port)
|
||||
@@ -269,18 +277,18 @@ static void par_close(PROGRAMMER * pgm)
|
||||
ppi_setall(&pgm->fd, PPIDATA, pgm->ppidata);
|
||||
ppi_setall(&pgm->fd, PPICTRL, pgm->ppictrl);
|
||||
|
||||
par_setmany(pgm, pgm->pinno[PPI_AVR_BUFF], 1);
|
||||
par_setmany(pgm, PPI_AVR_BUFF, 1);
|
||||
|
||||
/*
|
||||
* Handle exit specs.
|
||||
*/
|
||||
switch (pgm->exit_reset) {
|
||||
case EXIT_RESET_ENABLED:
|
||||
par_setpin(pgm, pgm->pinno[PIN_AVR_RESET], 0);
|
||||
par_setpin(pgm, PIN_AVR_RESET, 0);
|
||||
break;
|
||||
|
||||
case EXIT_RESET_DISABLED:
|
||||
par_setpin(pgm, pgm->pinno[PIN_AVR_RESET], 1);
|
||||
par_setpin(pgm, PIN_AVR_RESET, 1);
|
||||
break;
|
||||
|
||||
case EXIT_RESET_UNSPEC:
|
||||
@@ -304,11 +312,11 @@ static void par_close(PROGRAMMER * pgm)
|
||||
|
||||
switch (pgm->exit_vcc) {
|
||||
case EXIT_VCC_ENABLED:
|
||||
par_setmany(pgm, pgm->pinno[PPI_AVR_VCC], 1);
|
||||
par_setmany(pgm, PPI_AVR_VCC, 1);
|
||||
break;
|
||||
|
||||
case EXIT_VCC_DISABLED:
|
||||
par_setmany(pgm, pgm->pinno[PPI_AVR_VCC], 0);
|
||||
par_setmany(pgm, PPI_AVR_VCC, 0);
|
||||
break;
|
||||
|
||||
case EXIT_VCC_UNSPEC:
|
||||
|
||||
Reference in New Issue
Block a user