/** * ADC1+2 interrupt hander */ void adc1_2_irq_handler(void) { uint8_t channel = 0; uint16_t value = 0; struct adc_buf * buf; #ifdef USE_AD1 // Clear Injected End Of Conversion ADC_ClearITPendingBit(ADC1, ADC_IT_JEOC); for(channel = 0; channel < NB_ADC1_CHANNELS; channel++) { buf = adc1_buffers[channel]; if(buf) { value = ADC_GetInjectedConversionValue(ADC1, adc_injected_channels[channel]); adc_push_sample(buf, value); } } adc_new_data_trigger = 1; #endif #ifdef USE_AD2 // Clear Injected End Of Conversion ADC_ClearITPendingBit(ADC2, ADC_IT_JEOC); for(channel = 0; channel < NB_ADC2_CHANNELS; channel++) { buf = adc2_buffers[channel]; if(buf) { value = ADC_GetInjectedConversionValue(ADC2, adc_injected_channels[channel]); adc_push_sample(buf, value); } } adc_new_data_trigger = 1; #endif }
/** * ADC1+2 interrupt hander */ void adc1_2_isr(void) { uint8_t channel = 0; uint16_t value = 0; struct adc_buf * buf; #ifdef USE_AD1 // Clear Injected End Of Conversion ADC_SR(ADC1) &= ~ADC_SR_JEOC; for(channel = 0; channel < NB_ADC1_CHANNELS; channel++) { buf = adc1_buffers[channel]; if(buf) { value = *adc_injected_channels[channel]; adc_push_sample(buf, value); } } adc_new_data_trigger = 1; #endif #ifdef USE_AD2 // Clear Injected End Of Conversion ADC_SR(ADC2) &= ~ADC_SR_JEOC; for(channel = 0; channel < NB_ADC2_CHANNELS; channel++) { buf = adc2_buffers[channel]; if(buf) { value = *adc_injected_channels[channel]; adc_push_sample(buf, value); } } adc_new_data_trigger = 1; #endif }
void adc_isr(void) #endif { uint8_t channel = 0; uint16_t value = 0; struct adc_buf * buf; #if USE_ADC_WATCHDOG /* We need adc sampling fast enough to detect battery plug out, but we did not need to get actual actual value so fast. So timer fire adc conversion fast, at least 500 hz, but we inject adc value in sampling buffer only at 50hz */ const uint32_t timeStampDiff = get_sys_time_msec() - adc_watchdog.timeStamp; const bool_t shouldAccumulateValue = timeStampDiff > 20; if (shouldAccumulateValue) adc_watchdog.timeStamp = get_sys_time_msec(); if (adc_watchdog.cb != NULL) { if (adc_awd(adc_watchdog.adc)) { ADC_SR(adc_watchdog.adc) &= ~ADC_SR_AWD; // clear int flag adc_watchdog.cb(); } } #endif #if USE_AD1 // Clear Injected End Of Conversion if (adc_eoc_injected(ADC1)){ ADC_SR(ADC1) &= ~ADC_SR_JEOC; #if USE_ADC_WATCHDOG if (shouldAccumulateValue) { #endif for (channel = 0; channel < nb_adc1_channels; channel++) { buf = adc1_buffers[channel]; if (buf) { value = adc_read_injected(ADC1, channel+1); adc_push_sample(buf, value); } } #if USE_ADC_WATCHDOG } #endif #if !USE_AD2 && !USE_AD3 adc_new_data_trigger = TRUE; #endif } #endif #if USE_AD2 if (adc_eoc_injected(ADC2)){ ADC_SR(ADC2) &= ~ADC_SR_JEOC; #if USE_ADC_WATCHDOG if (shouldAccumulateValue) { #endif for (channel = 0; channel < nb_adc2_channels; channel++) { buf = adc2_buffers[channel]; if (buf) { value = adc_read_injected(ADC2, channel+1); adc_push_sample(buf, value); } } #if USE_ADC_WATCHDOG } #endif #if !USE_AD3 adc_new_data_trigger = TRUE; #endif } #endif #if USE_AD3 if (adc_eoc_injected(ADC3)){ ADC_SR(ADC3) &= ~ADC_SR_JEOC; #if USE_ADC_WATCHDOG if (shouldAccumulateValue) { #endif for (channel = 0; channel < nb_adc3_channels; channel++) { buf = adc3_buffers[channel]; if (buf) { value = adc_read_injected(ADC3, channel+1); adc_push_sample(buf, value); } } #if USE_ADC_WATCHDOG } #endif adc_new_data_trigger = TRUE; } #endif return; }
void adc_isr(void) #endif { uint8_t channel = 0; uint16_t value = 0; struct adc_buf * buf; #if USE_ADC_WATCHDOG if (adc_watchdog.cb != NULL) { if (adc_awd(adc_watchdog.adc)) { ADC_SR(adc_watchdog.adc) &= ~ADC_SR_AWD; // clear int flag adc_watchdog.cb(); } } #endif #if USE_AD1 // Clear Injected End Of Conversion if (ADC_SR(ADC1) & ADC_SR_JEOC){ ADC_SR(ADC1) &= ~ADC_SR_JEOC; for (channel = 0; channel < nb_adc1_channels; channel++) { buf = adc1_buffers[channel]; if (buf) { value = *(&ADC_JDR1(ADC1)+channel); adc_push_sample(buf, value); } } #if !USE_AD2 && !USE_AD3 adc_new_data_trigger = TRUE; #endif } #endif #if USE_AD2 if (ADC_SR(ADC2) & ADC_SR_JEOC){ ADC_SR(ADC2) &= ~ADC_SR_JEOC; for (channel = 0; channel < nb_adc2_channels; channel++) { buf = adc2_buffers[channel]; if (buf) { value = *(&ADC_JDR1(ADC2)+channel); adc_push_sample(buf, value); } } #if !USE_AD3 adc_new_data_trigger = TRUE; #endif } #endif #if USE_AD3 if (ADC_SR(ADC3) & ADC_SR_JEOC){ ADC_SR(ADC3) &= ~ADC_SR_JEOC; for (channel = 0; channel < nb_adc3_channels; channel++) { buf = adc3_buffers[channel]; if (buf) { value = *(&ADC_JDR1(ADC3)+channel); adc_push_sample(buf, value); } } adc_new_data_trigger = TRUE; } #endif return; }