/** * @brief Deactivates the DAC peripheral. * * @param[in] dacp pointer to the @p DACDriver object * * @notapi */ void dac_lld_stop(DACDriver *dacp) { /* If in ready state then disables the DAC clock.*/ if (dacp->state == DAC_READY) { /* DMA disable.*/ dmaStreamRelease(dacp->dma); #if STM32_DAC_USE_CHN1 if (&DACD1 == dacp) { dacp->dac->CR &= ~STM32_DAC_CR_EN; /* DAC1 disable.*/ } #endif #if STM32_DAC_USE_CHN2 if (&DACD2 == dacp) { dacp->dac->CR &= ~STM32_DAC_CR_EN << 16; /* DAC1 disable.*/ } #endif #if STM32_DAC_USE_CHN3 if (&DACD3 == dacp) { dacp->dac->CR &= ~STM32_DAC_CR_EN; /* DAC2 disable.*/ rccDisableDAC2(FALSE); /* DAC Clock disable.*/ } #endif dacp->tim->CR1 &= ~TIM_CR1_CEN; /* Disable associated timer */ dacp->state = DAC_STOP; if (!(DAC1->CR & (STM32_DAC_CR_EN | STM32_DAC_CR_EN << 16))) { /* DAC Clock disable only if all channels are off.*/ rccDisableDAC1(FALSE); } } }
/** * @brief Deactivates the DAC peripheral. * * @param[in] dacp pointer to the @p DACDriver object * * @notapi */ void dac_lld_stop(DACDriver *dacp) { /* If in ready state then disables the DAC clock.*/ if (dacp->state == DAC_READY) { /* Disabling DAC.*/ dacp->params->dac->CR &= dacp->params->regmask; #if STM32_DAC_USE_DAC1_CH1 if (&DACD1 == dacp) { if ((dacp->params->dac->CR & DAC_CR_EN2) == 0U) { rccDisableDAC1(false); } } #endif #if STM32_DAC_USE_DAC1_CH2 if (&DACD2 == dacp) { if ((dacp->params->dac->CR & DAC_CR_EN1) == 0U) { rccDisableDAC1(false); } } #endif #if STM32_DAC_USE_DAC2_CH1 if (&DACD3 == dacp) { if ((dacp->params->dac->CR & DAC_CR_EN2) == 0U) { rccDisableDAC2(false); } } #endif #if STM32_DAC_USE_DAC2_CH2 if (&DACD4 == dacp) { if ((dacp->params->dac->CR & DAC_CR_EN1) == 0U) { rccDisableDAC2(false); } } #endif } }