/** * @brief Stops an ongoing conversion. * @details This function stops the currently ongoing conversion and returns * the driver in the @p ADC_READY state. If there was no conversion * being processed then the function does nothing. * * @param[in] adcp pointer to the @p ADCDriver object * * @api */ void adcStopConversion(ADCDriver *adcp) { osalDbgCheck(adcp != NULL); osalSysLock(); osalDbgAssert((adcp->state == ADC_READY) || (adcp->state == ADC_ACTIVE), "invalid state"); if (adcp->state != ADC_READY) { adc_lld_stop_conversion(adcp); adcp->grpp = NULL; adcp->state = ADC_READY; _adc_reset_s(adcp); } osalSysUnlock(); }
/** * @brief Stops an ongoing conversion. * @details This function stops the currently ongoing conversion and returns * the driver in the @p ADC_READY state. If there was no conversion * being processed then the function does nothing. * * @param[in] adcp pointer to the @p ADCDriver object * * @iclass */ void adcStopConversionI(ADCDriver *adcp) { osalDbgCheckClassI(); osalDbgCheck(adcp != NULL); osalDbgAssert((adcp->state == ADC_READY) || (adcp->state == ADC_ACTIVE) || (adcp->state == ADC_COMPLETE), "invalid state"); if (adcp->state != ADC_READY) { adc_lld_stop_conversion(adcp); adcp->grpp = NULL; adcp->state = ADC_READY; _adc_reset_i(adcp); } }
/** * @brief Stops an ongoing conversion. * * @param[in] adcp pointer to the @p ADCDriver object */ void adcStopConversion(ADCDriver *adcp) { chDbgCheck(adcp != NULL, "adcStopConversion"); chSysLock(); chDbgAssert((adcp->ad_state == ADC_READY) || (adcp->ad_state == ADC_RUNNING) || (adcp->ad_state == ADC_COMPLETE), "adcStopConversion(), #1", "invalid state"); if (adcp->ad_state == ADC_RUNNING) { adc_lld_stop_conversion(adcp); adcp->ad_grpp = NULL; adcp->ad_state = ADC_READY; chSemResetI(&adcp->ad_sem, 0); chSchRescheduleS(); } else adcp->ad_state = ADC_READY; chSysUnlock(); }