/** * @brief Deactivates the I2C peripheral. * * @param[in] i2cp pointer to the @p I2CDriver object * * @notapi */ void i2c_lld_stop(I2CDriver *i2cp) { /* If not in stopped state then disables the I2C clock.*/ if (i2cp->state != I2C_STOP) { /* I2C disable.*/ i2c_lld_abort_operation(i2cp); dmaStreamRelease(i2cp->dmatx); dmaStreamRelease(i2cp->dmarx); #if STM32_I2C_USE_I2C1 if (&I2CD1 == i2cp) { nvicDisableVector(I2C1_EV_IRQn); nvicDisableVector(I2C1_ER_IRQn); rccDisableI2C1(FALSE); } #endif #if STM32_I2C_USE_I2C2 if (&I2CD2 == i2cp) { nvicDisableVector(I2C2_EV_IRQn); nvicDisableVector(I2C2_ER_IRQn); rccDisableI2C2(FALSE); } #endif #if STM32_I2C_USE_I2C3 if (&I2CD3 == i2cp) { nvicDisableVector(I2C3_EV_IRQn); nvicDisableVector(I2C3_ER_IRQn); rccDisableI2C3(FALSE); } #endif } }
void i2c_t::Standby() { if (ii2c == I2C1) { rccResetI2C1(); rccDisableI2C1(FALSE); } else if (ii2c == I2C2) { rccResetI2C2(); rccDisableI2C2(FALSE); } else if (ii2c == I2C3) { rccResetI2C3(); rccDisableI2C3(FALSE); } // Disable GPIOs PinSetupAnalog(IPGpio, ISclPin); PinSetupAnalog(IPGpio, ISdaPin); }
/** * @brief Deactivates the I2C peripheral. * * @param[in] i2cp pointer to the @p I2CDriver object * * @notapi */ void i2c_lld_stop(I2CDriver *i2cp) { /* If not in stopped state then disables the I2C clock.*/ if (i2cp->state != I2C_STOP) { /* I2C disable.*/ i2c_lld_abort_operation(i2cp); #if STM32_I2C_USE_DMA == TRUE dmaStreamRelease(i2cp->dmatx); dmaStreamRelease(i2cp->dmarx); #endif #if STM32_I2C_USE_I2C1 if (&I2CD1 == i2cp) { #if defined(STM32_I2C1_GLOBAL_NUMBER) || defined(__DOXYGEN__) nvicDisableVector(STM32_I2C1_GLOBAL_NUMBER); #elif defined(STM32_I2C1_EVENT_NUMBER) && defined(STM32_I2C1_ERROR_NUMBER) nvicDisableVector(STM32_I2C1_EVENT_NUMBER); nvicDisableVector(STM32_I2C1_ERROR_NUMBER); #else #error "I2C1 interrupt numbers not defined" #endif rccDisableI2C1(FALSE); } #endif #if STM32_I2C_USE_I2C2 if (&I2CD2 == i2cp) { #if defined(STM32_I2C2_GLOBAL_NUMBER) || defined(__DOXYGEN__) nvicDisableVector(STM32_I2C2_GLOBAL_NUMBER); #elif defined(STM32_I2C2_EVENT_NUMBER) && defined(STM32_I2C2_ERROR_NUMBER) nvicDisableVector(STM32_I2C2_EVENT_NUMBER); nvicDisableVector(STM32_I2C2_ERROR_NUMBER); #else #error "I2C2 interrupt numbers not defined" #endif rccDisableI2C2(FALSE); } #endif #if STM32_I2C_USE_I2C3 if (&I2CD3 == i2cp) { #if defined(STM32_I2C3_GLOBAL_NUMBER) || defined(__DOXYGEN__) nvicDisableVector(STM32_I2C3_GLOBAL_NUMBER); #elif defined(STM32_I2C3_EVENT_NUMBER) && defined(STM32_I2C3_ERROR_NUMBER) nvicDisableVector(STM32_I2C3_EVENT_NUMBER); nvicDisableVector(STM32_I2C3_ERROR_NUMBER); #else #error "I2C3 interrupt numbers not defined" #endif rccDisableI2C3(FALSE); } #endif #if STM32_I2C_USE_I2C4 if (&I2CD4 == i2cp) { #if defined(STM32_I2C4_GLOBAL_NUMBER) || defined(__DOXYGEN__) nvicDisableVector(STM32_I2C4_GLOBAL_NUMBER); #elif defined(STM32_I2C4_EVENT_NUMBER) && defined(STM32_I2C4_ERROR_NUMBER) nvicDisableVector(STM32_I2C4_EVENT_NUMBER); nvicDisableVector(STM32_I2C4_ERROR_NUMBER); #else #error "I2C4 interrupt numbers not defined" #endif rccDisableI2C4(FALSE); } #endif } }