mirror of
https://github.com/avrdudes/avrdude.git
synced 2026-09-29 20:38:44 +03:00
Last (?) tidying according review from MCUdude and stefanrueger
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
This commit is contained in:
@@ -1085,16 +1085,22 @@ static int jtagmkI_get_sck_period(const PROGRAMMER *pgm, double *v) {
|
||||
*v = 500e3;
|
||||
else if (dur == JTAG_BITRATE_250_kHz)
|
||||
*v = 250e3;
|
||||
else
|
||||
else if (dur == JTAG_BITRATE_125_kHz)
|
||||
*v = 125e3;
|
||||
else { // something went wrong
|
||||
pmsg_error("wrong JTAG_BITRATE ID %02X\n", dur);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int jtagmkI_get_vtarget(const PROGRAMMER *pgm, double *v) {
|
||||
unsigned char vtarget = 0;
|
||||
if (jtagmkI_getparm(pgm, PARM_OCD_VTARGET, &vtarget) < 0)
|
||||
return - 1;
|
||||
if (jtagmkI_getparm(pgm, PARM_OCD_VTARGET, &vtarget) < 0) {
|
||||
pmsg_error("jtagmkI_getparm PARM_OCD_VTARGET failed\n");
|
||||
return -1;
|
||||
}
|
||||
*v = 6.25 * (unsigned)vtarget / 255.0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
56
src/stk500.c
56
src/stk500.c
@@ -1190,8 +1190,10 @@ static int stk500_set_vtarget(const PROGRAMMER *pgm, double v) {
|
||||
|
||||
if (uaref > utarg) {
|
||||
pmsg_warning("reducing V[aref] from %.1f to %.1f\n", uaref / 10.0, v);
|
||||
if ((rc = stk500_setparm(pgm, Parm_STK_VADJUST, utarg)) != 0)
|
||||
if ((rc = stk500_setparm(pgm, Parm_STK_VADJUST, utarg)) != 0) {
|
||||
pmsg_error("cannot set V[aref]\n");
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
return stk500_setparm(pgm, Parm_STK_VTARGET, utarg);
|
||||
}
|
||||
@@ -1228,7 +1230,10 @@ static int stk500_set_varef(const PROGRAMMER *pgm, unsigned int chan /* unused *
|
||||
"V[target] = %.1f\n", utarg/10.0);
|
||||
return -1;
|
||||
}
|
||||
return stk500_setparm(pgm, Parm_STK_VADJUST, uaref);
|
||||
|
||||
if ((rc = stk500_setparm(pgm, Parm_STK_VADJUST, uaref)) < 0)
|
||||
pmsg_error("cannot set V[aref]\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
@@ -1253,7 +1258,7 @@ static int stk500_set_fosc(const PROGRAMMER *pgm, double v) {
|
||||
1, 8, 32, 64, 128, 256, 1024
|
||||
};
|
||||
size_t idx;
|
||||
int rc;
|
||||
int rc = 0;
|
||||
|
||||
prescale = cmatch = 0;
|
||||
if (v > 0.0) {
|
||||
@@ -1287,31 +1292,39 @@ static int stk500_set_fosc(const PROGRAMMER *pgm, double v) {
|
||||
}
|
||||
}
|
||||
|
||||
if ((rc = stk500_setparm(pgm, Parm_STK_OSC_PSCALE, prescale)) != 0
|
||||
|| (rc = stk500_setparm(pgm, Parm_STK_OSC_CMATCH, cmatch)) != 0)
|
||||
if ((rc = stk500_setparm(pgm, Parm_STK_OSC_PSCALE, prescale)) != 0 ) {
|
||||
pmsg_error("cannot set Parm_STK_OSC_PSCALE\n");
|
||||
return rc;
|
||||
|
||||
}
|
||||
|
||||
if ((rc = stk500_setparm(pgm, Parm_STK_OSC_CMATCH, cmatch)) != 0) {
|
||||
pmsg_error("cannot set Parm_STK_OSC_CMATCH\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int stk500_get_fosc(const PROGRAMMER *pgm, double *v) {
|
||||
unsigned prescale=0, cmatch=0;
|
||||
double fosc = 0;
|
||||
static unsigned ps[] = {
|
||||
1, 8, 32, 64, 128, 256, 1024
|
||||
};
|
||||
int rc;
|
||||
|
||||
if ((rc = stk500_getparm(pgm, Parm_STK_OSC_PSCALE, &prescale)) != 0
|
||||
|| (rc = stk500_getparm(pgm, Parm_STK_OSC_CMATCH, &cmatch)) != 0)
|
||||
if ((rc = stk500_getparm(pgm, Parm_STK_OSC_PSCALE, &prescale)) != 0) {
|
||||
pmsg_error("cannot get Parm_STK_OSC_PSCALE\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
if ((rc = stk500_getparm(pgm, Parm_STK_OSC_CMATCH, &cmatch)) != 0) {
|
||||
pmsg_error("cannot get Parm_STK_OSC_CMATCH\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
*v = !prescale ? 0 : PDATA(pgm)->xtal / ((cmatch + 1) * 2 * ps[prescale - 1]);
|
||||
|
||||
if (prescale) {
|
||||
fosc = PDATA(pgm)->xtal / ((cmatch + 1) * 2 * ps[prescale - 1]);
|
||||
} else
|
||||
fosc = 0;
|
||||
*v = fosc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1326,11 +1339,12 @@ static int stk500_get_fosc(const PROGRAMMER *pgm, double *v) {
|
||||
static int stk500_set_sck_period(const PROGRAMMER *pgm, double v) {
|
||||
int dur;
|
||||
double min, max;
|
||||
int rv = 0;
|
||||
|
||||
min = 8.0 / PDATA(pgm)->xtal;
|
||||
max = 255 * min;
|
||||
dur = v / min + 0.5;
|
||||
|
||||
|
||||
if (v < min) {
|
||||
dur = 1;
|
||||
pmsg_warning("p = %.1f us too small, using %.1f us\n",
|
||||
@@ -1340,8 +1354,12 @@ static int stk500_set_sck_period(const PROGRAMMER *pgm, double v) {
|
||||
pmsg_warning("p = %.1f us too large, using %.1f us\n",
|
||||
v/1e-6, dur*min/1e-6);
|
||||
}
|
||||
|
||||
return stk500_setparm(pgm, Parm_STK_SCK_DURATION, dur);
|
||||
|
||||
if ((rv = stk500_setparm(pgm, Parm_STK_SCK_DURATION, dur)) < 0) {
|
||||
pmsg_error("cannot set Parm_STK_SCK_DURATION\n");
|
||||
return rv;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1349,8 +1367,8 @@ static int stk500_get_sck_period(const PROGRAMMER *pgm, double *v) {
|
||||
unsigned dur;
|
||||
int rv = 0;
|
||||
|
||||
if ((rv = stk500_getparm(pgm, Parm_STK_SCK_DURATION, &dur))< 0) {
|
||||
pmsg_error("cannot obtain sck duration\n");
|
||||
if ((rv = stk500_getparm(pgm, Parm_STK_SCK_DURATION, &dur)) < 0) {
|
||||
pmsg_error("cannot obtain Parm_STK_SCK_DURATION\n");
|
||||
return rv;
|
||||
}
|
||||
*v = dur * 8.0 / PDATA(pgm)->xtal;
|
||||
|
||||
@@ -301,10 +301,7 @@ void stk500v2_setup(PROGRAMMER * pgm)
|
||||
memset(pgm->cookie, 0, sizeof(struct pdata));
|
||||
PDATA(pgm)->command_sequence = 1;
|
||||
PDATA(pgm)->boot_start = ULONG_MAX;
|
||||
if (str_starts(pgmid, "scratchmonkey"))
|
||||
PDATA(pgm)->xtal = SCRATCHMONKEY_XTAL;
|
||||
else
|
||||
PDATA(pgm)->xtal = STK500V2_XTAL;
|
||||
PDATA(pgm)->xtal = str_starts(pgmid, "scratchmonkey") ? SCRATCHMONKEY_XTAL : STK500V2_XTAL;
|
||||
}
|
||||
|
||||
static void stk500v2_jtagmkII_setup(PROGRAMMER * pgm)
|
||||
@@ -3719,11 +3716,14 @@ static double stk500v2_vtarget_value(const PROGRAMMER *pgm) {
|
||||
jtagmkII_getparm(pgmcp, PAR_OCD_VTARGET, vtarget_jtag);
|
||||
pgm_free(pgmcp);
|
||||
return b2_to_u16(vtarget_jtag) / 1000.0;
|
||||
} else if (PDATA(pgm)->pgmtype != PGMTYPE_JTAGICE3) {
|
||||
}
|
||||
|
||||
if (PDATA(pgm)->pgmtype != PGMTYPE_JTAGICE3) {
|
||||
unsigned char vtarget = 0;
|
||||
stk500v2_getparm(pgm, PARAM_VTARGET, &vtarget);
|
||||
return vtarget / 10.0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3736,13 +3736,11 @@ static double stk500v2_sck_duration_value(const PROGRAMMER *pgm) {
|
||||
case PGMTYPE_STK500:
|
||||
stk500v2_getparm(pgm, PARAM_SCK_DURATION, &sck_duration);
|
||||
return stk500v2_sck_to_us(pgm, sck_duration);
|
||||
break;
|
||||
|
||||
case PGMTYPE_AVRISP_MKII:
|
||||
case PGMTYPE_JTAGICE_MKII:
|
||||
stk500v2_getparm(pgm, PARAM_SCK_DURATION, &sck_duration);
|
||||
return 1.0e6 / avrispmkIIfreqs[sck_duration];
|
||||
break;
|
||||
|
||||
case PGMTYPE_JTAGICE3:
|
||||
{
|
||||
@@ -3754,16 +3752,13 @@ static double stk500v2_sck_duration_value(const PROGRAMMER *pgm) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case PGMTYPE_STK600:
|
||||
stk500v2_getparm2(pgm, PARAM2_SCK_DURATION, &sck_stk600);
|
||||
return (sck_stk600 + 1) / 8.0;
|
||||
break;
|
||||
|
||||
default:
|
||||
return sck_duration * 8.0e6 / PDATA(pgm)->xtal + 0.05;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -3771,7 +3766,6 @@ static double stk500v2_sck_duration_value(const PROGRAMMER *pgm) {
|
||||
|
||||
static double stk500v2_varef_value(const PROGRAMMER *pgm) {
|
||||
unsigned char vadjust = 0;
|
||||
|
||||
if (stk500v2_getparm(pgm, PARAM_VADJUST, &vadjust) < 0)
|
||||
return 0;
|
||||
return vadjust / 10.0;
|
||||
@@ -3808,30 +3802,27 @@ static double stk500v2_fosc_value(const PROGRAMMER *pgm) {
|
||||
return 0.0;
|
||||
if (osc_pscale == 0)
|
||||
return 0.0;
|
||||
else {
|
||||
prescale = 1;
|
||||
fosc = PDATA(pgm)->xtal / 2;
|
||||
|
||||
switch (osc_pscale) {
|
||||
case 2: prescale = 8; break;
|
||||
case 3: prescale = 32; break;
|
||||
case 4: prescale = 64; break;
|
||||
case 5: prescale = 128; break;
|
||||
case 6: prescale = 256; break;
|
||||
case 7: prescale = 1024; break;
|
||||
}
|
||||
fosc /= prescale;
|
||||
fosc /= (osc_cmatch + 1);
|
||||
return fosc;
|
||||
prescale = 1;
|
||||
fosc = PDATA(pgm)->xtal / 2;
|
||||
|
||||
switch (osc_pscale) {
|
||||
case 2: prescale = 8; break;
|
||||
case 3: prescale = 32; break;
|
||||
case 4: prescale = 64; break;
|
||||
case 5: prescale = 128; break;
|
||||
case 6: prescale = 256; break;
|
||||
case 7: prescale = 1024; break;
|
||||
}
|
||||
break;
|
||||
fosc /= prescale;
|
||||
fosc /= (osc_cmatch + 1);
|
||||
return fosc;
|
||||
|
||||
case PGMTYPE_AVRISP_MKII:
|
||||
case PGMTYPE_JTAGICE_MKII:
|
||||
if (stk500v2_getparm(pgm, PARAM_SCK_DURATION, &sck_duration) < 0)
|
||||
return 0.0;
|
||||
return 1e6 / avrispmkIIfreqs[sck_duration];
|
||||
break;
|
||||
|
||||
case PGMTYPE_STK600:
|
||||
if (stk500v2_getparm2(pgm, PARAM2_CLOCK_CONF, &clock_conf) < 0)
|
||||
@@ -3840,14 +3831,10 @@ static double stk500v2_fosc_value(const PROGRAMMER *pgm) {
|
||||
dac = (clock_conf & 0x0ffc) >> 2u;
|
||||
fosc = pow(2, (double)oct) * 2078.0 / (2 - (double)dac / 1024.0);
|
||||
return fosc;
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0.0;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
|
||||
@@ -3887,7 +3874,7 @@ static void stk500v2_print_parms1(const PROGRAMMER *pgm, const char *p, FILE *fp
|
||||
|
||||
case PGMTYPE_AVRISP_MKII:
|
||||
case PGMTYPE_JTAGICE_MKII:
|
||||
fmsg_out(fp, "%sSCK period : %.2f us\n", p, stk500v2_sck_duration_value(pgm));
|
||||
fmsg_out(fp, "%sSCK period : %.1f us\n", p, stk500v2_sck_duration_value(pgm));
|
||||
break;
|
||||
|
||||
case PGMTYPE_JTAGICE3:
|
||||
@@ -3896,7 +3883,7 @@ static void stk500v2_print_parms1(const PROGRAMMER *pgm, const char *p, FILE *fp
|
||||
cmd[0] = CMD_GET_SCK;
|
||||
if (stk500v2_jtag3_send(pgm, cmd, 1) >= 0 && stk500v2_jtag3_recv(pgm, cmd, 4) >= 2) {
|
||||
unsigned int sck = cmd[1] | (cmd[2] << 8);
|
||||
fmsg_out(fp, "%sSCK period : %.2f us\n", p, (1E6 / (1000.0 * sck)));
|
||||
fmsg_out(fp, "%sSCK period : %.1f us\n", p, (1E6 / (1000.0 * sck)));
|
||||
}
|
||||
PROGRAMMER *pgmcp = pgm_dup(pgm);
|
||||
pgmcp->cookie = PDATA(pgm)->chained_pdata;
|
||||
@@ -3911,10 +3898,10 @@ static void stk500v2_print_parms1(const PROGRAMMER *pgm, const char *p, FILE *fp
|
||||
|
||||
case PGMTYPE_STK600:
|
||||
if (pgm->extra_features & HAS_VAREF_ADJ) {
|
||||
fmsg_out(fp, "%sVaref 0 : %.2f V\n", p, stk600_varef_0_value(pgm));
|
||||
fmsg_out(fp, "%sVaref 1 : %.2f V\n", p, stk600_varef_1_value(pgm));
|
||||
fmsg_out(fp, "%sVaref 0 : %.2f V\n", p, stk600_varef_0_value(pgm));
|
||||
fmsg_out(fp, "%sVaref 1 : %.2f V\n", p, stk600_varef_1_value(pgm));
|
||||
}
|
||||
fmsg_out(fp, "%sSCK period : %.2f us\n", p, stk500v2_sck_duration_value(pgm));
|
||||
fmsg_out(fp, "%sSCK period : %.1f us\n", p, stk500v2_sck_duration_value(pgm));
|
||||
if (pgm->extra_features & HAS_FOSC_ADJ) {
|
||||
f = stk500v2_sck_duration_value(pgm);
|
||||
f = f_to_kHz_MHz(f, &unit);
|
||||
@@ -3923,7 +3910,7 @@ static void stk500v2_print_parms1(const PROGRAMMER *pgm, const char *p, FILE *fp
|
||||
break;
|
||||
|
||||
default:
|
||||
fmsg_out(fp, "%sSCK period : %.1f us\n", p, stk500v2_sck_duration_value(pgm));
|
||||
fmsg_out(fp, "%sSCK period : %.1f us\n", p, stk500v2_sck_duration_value(pgm));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user