diff --git a/adc.c b/adc.c index 53ede93..d48d73e 100644 --- a/adc.c +++ b/adc.c @@ -68,13 +68,15 @@ uint16_t adc_single_read(uint32_t chsel) VNA_ADC->CFGR1 = ADC_CFGR1_RES_12BIT; VNA_ADC->CHSELR = chsel; - /* ADC conversion start.*/ - VNA_ADC->CR |= ADC_CR_ADSTART; - - while (VNA_ADC->CR & ADC_CR_ADSTART) - ; - - return VNA_ADC->DR; + uint32_t result = 0; + uint32_t count = 1<<3; // Average count + do{ + VNA_ADC->CR |= ADC_CR_ADSTART; // ADC conversion start. + while (VNA_ADC->CR & ADC_CR_ADSTART) + ; + result+=VNA_ADC->DR; + }while(--count); + return result>>3; } int16_t adc_vbat_read(void) diff --git a/ui.c b/ui.c index f78b0e4..f9c05f9 100644 --- a/ui.c +++ b/ui.c @@ -196,11 +196,9 @@ static int btn_wait_release(void) } // ADC read count for measure X and Y (better be 2^n) -#define TOUCH_MEASURE_COUNT 8 static int touch_measure_y(void) { - int v = 0, i = TOUCH_MEASURE_COUNT; // open Y line palSetPadMode(GPIOB, GPIOB_YN, PAL_MODE_INPUT_PULLDOWN); palSetPadMode(GPIOA, GPIOA_YP, PAL_MODE_INPUT_PULLDOWN); @@ -211,16 +209,12 @@ touch_measure_y(void) palClearPad(GPIOB, GPIOB_XN); palSetPad(GPIOA, GPIOA_XP); - do{ - v+= adc_single_read(ADC_TOUCH_Y); - }while(--i); - return v/TOUCH_MEASURE_COUNT; + return adc_single_read(ADC_TOUCH_Y); } static int touch_measure_x(void) { - int v = 0, i = TOUCH_MEASURE_COUNT; // Set X line as input palSetPadMode(GPIOB, GPIOB_XN, PAL_MODE_INPUT_PULLDOWN); palSetPadMode(GPIOA, GPIOA_XP, PAL_MODE_INPUT_PULLDOWN); @@ -231,10 +225,7 @@ touch_measure_x(void) palSetPad(GPIOB, GPIOB_YN); palClearPad(GPIOA, GPIOA_YP); - do{ - v+= adc_single_read(ADC_TOUCH_X); - }while(--i); - return v/TOUCH_MEASURE_COUNT; + return adc_single_read(ADC_TOUCH_X); } void