diff --git a/adc.c b/adc.c index d48d73e..53ede93 100644 --- a/adc.c +++ b/adc.c @@ -68,15 +68,13 @@ uint16_t adc_single_read(uint32_t chsel) VNA_ADC->CFGR1 = ADC_CFGR1_RES_12BIT; VNA_ADC->CHSELR = chsel; - 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; + /* ADC conversion start.*/ + VNA_ADC->CR |= ADC_CR_ADSTART; + + while (VNA_ADC->CR & ADC_CR_ADSTART) + ; + + return VNA_ADC->DR; } int16_t adc_vbat_read(void) diff --git a/ui.c b/ui.c index f9c05f9..f78b0e4 100644 --- a/ui.c +++ b/ui.c @@ -196,9 +196,11 @@ 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); @@ -209,12 +211,16 @@ touch_measure_y(void) palClearPad(GPIOB, GPIOB_XN); palSetPad(GPIOA, GPIOA_XP); - return adc_single_read(ADC_TOUCH_Y); + do{ + v+= adc_single_read(ADC_TOUCH_Y); + }while(--i); + return v/TOUCH_MEASURE_COUNT; } 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); @@ -225,7 +231,10 @@ touch_measure_x(void) palSetPad(GPIOB, GPIOB_YN); palClearPad(GPIOA, GPIOA_YP); - return adc_single_read(ADC_TOUCH_X); + do{ + v+= adc_single_read(ADC_TOUCH_X); + }while(--i); + return v/TOUCH_MEASURE_COUNT; } void