From d42f20773bdab7cb88b2173e841c38e13897f7f4 Mon Sep 17 00:00:00 2001 From: true Date: Fri, 2 Aug 2024 17:33:20 -0700 Subject: [PATCH] fix ADC lockup while reading --- firmware/retro_tech_fw/user/src/adc.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/firmware/retro_tech_fw/user/src/adc.c b/firmware/retro_tech_fw/user/src/adc.c index 1032455..8485a95 100644 --- a/firmware/retro_tech_fw/user/src/adc.c +++ b/firmware/retro_tech_fw/user/src/adc.c @@ -81,17 +81,19 @@ void adc_convert() void adc_read() { - while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); - adc_val[adc_val_idx++] = ADC_GetConversionValue(ADC1); - adc_val_idx &= 0x0f; - if (!adc_val_idx) adc_calc_avg(); + if (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)) { + adc_val[adc_val_idx++] = ADC_GetConversionValue(ADC1); + adc_val_idx &= 0x0f; + if (!adc_val_idx) adc_calc_avg(); - if (ADC1->CTLR1 & ADC_JAUTO) { - while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC)); - lsens_val = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1); + if (ADC1->CTLR1 & ADC_JAUTO) { + if (ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC)) { + lsens_val = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1); - // reset LSENS - ADC_AutoInjectedConvCmd(ADC1, DISABLE); + // reset LSENS + ADC_AutoInjectedConvCmd(ADC1, DISABLE); + } + } } }