/** * @brief Stops audio Codec playing. It powers down the codec. * @param CodecPdwnMode: selects the power down mode. * @arg CODEC_PDWN_SW: only mutes the audio codec. When resuming from this * mode the codec keeps the prvious initialization (no need to re-Initialize * the codec registers). * @arg CODEC_PDWN_HW: Physically power down the codec. When resuming from this * mode, the codec is set to default configuration (user should re-Initialize * the codec in order to play again the audio stream). * @retval o if correct communication, else wrong communication */ uint32_t Codec_Stop(uint32_t CodecPdwnMode) { uint32_t counter = 0; /* Mute the output first */ Codec_Mute(AUDIO_MUTE_ON); if (CodecPdwnMode == CODEC_PDWN_SW) { /* Power down the DAC and the speaker (PMDAC and PMSPK bits)*/ counter += Codec_WriteRegister(0x02, 0x9F); } else /* CODEC_PDWN_HW */ { /* Power down the DAC components */ counter += Codec_WriteRegister(0x02, 0x9F); /* Wait at least 100ms */ Delay(0xFFF); /* Reset The pin */ IOE_WriteIOPin(AUDIO_RESET_PIN, BitReset); } return counter; }
/******************************************************************************* * Function Name : CODEC_PowerDown * Description : Power down the Audio Codec. * Input : - CodecPowerDown_Mode: could be CodecPowerDown_SW for software * power down (by register writing), CodecPowerDown_HW just shut * down the codec physically. * Output : None * Return : None *******************************************************************************/ void CODEC_PowerDown(uint32_t CodecPowerDown_Mode) { if (CodecPowerDown_Mode == CodecPowerDown_SW) { /* Power down the DAC and the speaker (PMDAC and PMSPK bits)*/ CODEC_WriteRegister(0x02, 0x9F); } else /* CodecPowerDown_HW */ { /* Mute the output first */ CODEC_WriteRegister(0x1A, 0x80); CODEC_WriteRegister(0x1B, 0x80); /* Power down the DAC components */ CODEC_WriteRegister(0x02, 0x9F); /* Wait at least 100µs */ CODEC_Delay(0xFFF); /* Reset The pin */ IOE_WriteIOPin(AUDIO_RESET_PIN, BitReset); } }
/** * @brief Initializes and Configures the two IO_Expanders Functionalities * (IOs, Touch Screen ..) and configures all STM3210C-EVAL necessary * hardware (GPIOs, APB clocks ..). * @param None * @retval IOE_OK if all initializations done correctly. Other value if error. */ uint8_t IOE_Config(void) { /* Configure the needed pins */ IOE_GPIO_Config(); /* Configure the I2C peripheral */ IOE_I2C_Config(); /* Read IO Expander 1 ID */ if(IOE_IsOperational(IOE_1_ADDR)) { return IOE1_NOT_OPERATIONAL; } if(IOE_IsOperational(IOE_2_ADDR)) { return IOE2_NOT_OPERATIONAL; } /* Generate IOExpander Software reset */ IOE_Reset(IOE_1_ADDR); IOE_Reset(IOE_2_ADDR); /* ---------------------- IO Expander 1 configuration --------------------- */ /* Enable the GPIO, Touch Screen and ADC functionalities */ IOE_FnctCmd(IOE_1_ADDR, IOE_IO_FCT | IOE_TS_FCT | IOE_ADC_FCT, ENABLE); /* Configure the VBAT pin in output mode pin*/ IOE_IOPinConfig(IOE_1_ADDR, VBAT_DIV_PIN , Direction_OUT); /* ENABLE the alternate function for IN1 pin */ IOE_IOAFConfig(IOE_1_ADDR, VBAT_DIV_PIN, ENABLE); /* Apply the default state for the out pins */ IOE_WriteIOPin(VBAT_DIV_PIN, BitReset); /* Configure the MEMS interrupt pins in Input mode */ IOE_IOPinConfig(IOE_2_ADDR, (uint32_t)(MEMS_INT1_PIN | MEMS_INT2_PIN), Direction_IN); /* ENABLE the alternate function for the Joystick pins */ IOE_IOAFConfig(IOE_2_ADDR, (uint32_t)(MEMS_INT1_PIN | MEMS_INT2_PIN), ENABLE); /* Configure the IOs to detect Falling and Rising Edges */ IOE_IOEdgeConfig(IOE_2_ADDR, (uint32_t)(MEMS_INT1_PIN | MEMS_INT2_PIN), (uint32_t)(EDGE_FALLING | EDGE_RISING)); /* Touch Screen controller configuration */ IOE_TS_Config(); /* ------------------------------------------------------------------------ */ /* ---------------------- IO Expander 2 configuration --------------------- */ /* Enable the GPIO, Temperature Sensor and ADC functionalities */ IOE_FnctCmd(IOE_2_ADDR, IOE_IO_FCT | IOE_TEMPSENS_FCT | IOE_ADC_FCT, ENABLE); /* Configure the Audio Codec Reset pin in output mode pin*/ IOE_IOPinConfig(IOE_2_ADDR, (uint32_t)(AUDIO_RESET_PIN), Direction_OUT); IOE_IOPinConfig(IOE_2_ADDR, (uint32_t)(MII_INT_PIN), Direction_IN); /* ENABLE the alternate function for IN1 pin */ IOE_IOAFConfig(IOE_2_ADDR, (uint32_t)(AUDIO_RESET_PIN | MII_INT_PIN), ENABLE); /* Apply the default state for the out pins */ IOE_WriteIOPin(AUDIO_RESET_PIN, BitReset); IOE_WriteIOPin(MII_INT_PIN, BitReset); /* Configure the Joystick pins in Input mode */ IOE_IOPinConfig(IOE_2_ADDR, JOY_IO_PINS , Direction_IN); /* ENABLE the alternate function for the Joystick pins */ IOE_IOAFConfig(IOE_2_ADDR, JOY_IO_PINS, ENABLE); /* Configure the IOs to detect Falling and Rising Edges */ IOE_IOEdgeConfig(IOE_2_ADDR, JOY_IO_PINS, (uint8_t)(EDGE_FALLING | EDGE_RISING)); /* Temperature Sensor module configuration */ IOE_TempSens_Config(); /* ------------------------------------------------------------------------ */ /* Configuration is OK */ return IOE_OK; }