From 244c86429b6eea1f86c5bcca070889d6adbc15b0 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 30 Aug 2009 03:51:44 +0000 Subject: [PATCH] Move ADC VTARGET sampling to a new V2Params_UpdateParamValues() in the AVRISP project so that there is a central place where all non-PC set target values can be updated easily. --- Projects/AVRISP/AVRISP.c | 9 +++------ Projects/AVRISP/Lib/V2ProtocolParams.c | 17 +++++++++++++++-- Projects/AVRISP/Lib/V2ProtocolParams.h | 7 ++++++- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Projects/AVRISP/AVRISP.c b/Projects/AVRISP/AVRISP.c index ce16aebfa8..e4d467f545 100644 --- a/Projects/AVRISP/AVRISP.c +++ b/Projects/AVRISP/AVRISP.c @@ -46,7 +46,7 @@ int main(void) { SetupHardware(); - V2Params_LoadEEPROMParamValues(); + V2Params_LoadNonVolatileParamValues(); LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); @@ -54,11 +54,8 @@ int main(void) { Process_AVRISP_Commands(); - #if defined(ADC) - /* Update VTARGET parameter with the latest ADC conversion of VTARGET on supported AVR models */ - V2Params_SetParameterValue(PARAM_VTARGET, ((5 * 10 * ADC_GetResult()) / 1024)); - #endif - + V2Params_UpdateParamValues(); + USB_USBTask(); } } diff --git a/Projects/AVRISP/Lib/V2ProtocolParams.c b/Projects/AVRISP/Lib/V2ProtocolParams.c index 9914c085e5..2d646a93cc 100644 --- a/Projects/AVRISP/Lib/V2ProtocolParams.c +++ b/Projects/AVRISP/Lib/V2ProtocolParams.c @@ -85,12 +85,25 @@ static ParameterItem_t ParameterTable[] = /** Loads saved non-volatile parameter values from the EEPROM into the parameter table, as needed. */ -void V2Params_LoadEEPROMParamValues(void) +void V2Params_LoadNonVolatileParamValues(void) { - /* Target RESET line polarity is a non-volatile value, retrieve current parameter value from EEPROM */ + /* Target RESET line polarity is a non-volatile value, retrieve current parameter value from EEPROM - + * NB: Cannot call V2Protocol_SetParameterValue() here, as that will cause another EEPROM write! + */ V2Params_GetParamFromTable(PARAM_RESET_POLARITY)->ParamValue = eeprom_read_byte(&EEPROM_Rest_Polarity); } +/** Updates any parameter values that are sourced from hardware rather than explicitly set by the host, such as + * VTARGET levels from the ADC on supported AVR models. + */ +void V2Params_UpdateParamValues(void) +{ + #if defined(ADC) + /* Update VTARGET parameter with the latest ADC conversion of VTARGET on supported AVR models */ + V2Params_GetParamFromTable(PARAM_VTARGET)->ParamValue = ((5 * 10 * ADC_GetResult()) / 1024); + #endif +} + /** Retrieves the host PC read/write privellages for a given parameter in the parameter table. This should * be called before calls to \ref V2Params_GetParameterValue() or \ref V2Params_SetParameterValue() when * getting or setting parameter values in response to requests from the host. diff --git a/Projects/AVRISP/Lib/V2ProtocolParams.h b/Projects/AVRISP/Lib/V2ProtocolParams.h index 9c0f044c24..9ad84e7a33 100644 --- a/Projects/AVRISP/Lib/V2ProtocolParams.h +++ b/Projects/AVRISP/Lib/V2ProtocolParams.h @@ -42,6 +42,10 @@ #include + #if defined(ADC) + #include + #endif + #include "V2Protocol.h" #include "V2ProtocolConstants.h" @@ -62,7 +66,8 @@ } ParameterItem_t; /* Function Prototypes: */ - void V2Params_LoadEEPROMParamValues(void); + void V2Params_LoadNonVolatileParamValues(void); + void V2Params_UpdateParamValues(void); uint8_t V2Params_GetParameterPrivellages(uint8_t ParamID); uint8_t V2Params_GetParameterValue(uint8_t ParamID);