/** * @brief Enables or disables the Mute mode for the selected SAI block. * * @note This function has a meaning only when the audio block is transmitter * @note Mute mode is applied for an entire frame for all the valid slot * It becomes active at the end of an audio frame when set somewhere in a frame. * Mute mode exit occurs at the end of the frame in which the bit MUTE has been set. * * @param SAI_Block_x: where x can be A or B to select the SAI Block peripheral. * @param NewState: new state of the SAIx block. * This parameter can be: ENABLE or DISABLE. * @retval None */ void SAI_MuteModeCmd(SAI_Block_TypeDef* SAI_Block_x, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_SAI_BLOCK_PERIPH(SAI_Block_x)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Enable the selected SAI block mute mode */ SAI_Block_x->CR2 |= SAI_xCR2_MUTE; } else { /* Disable the selected SAI SS output */ SAI_Block_x->CR2 &= ~(SAI_xCR2_MUTE); } }
/** * @brief Enables or disables the specified SAI Block peripheral. * @param SAI_Block_x: where x can be A or B to select the SAI Block peripheral. * @param NewState: new state of the SAI_Block_x peripheral. * This parameter can be: ENABLE or DISABLE. * @retval None */ void SAI_Cmd(SAI_Block_TypeDef* SAI_Block_x, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_SAI_BLOCK_PERIPH(SAI_Block_x)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Enable the selected SAI peripheral */ SAI_Block_x->CR1 |= SAI_xCR1_SAIEN; } else { /* Disable the selected SAI peripheral */ SAI_Block_x->CR1 &= ~(SAI_xCR1_SAIEN); } }
/** * @brief Enables or disables the specified SAI Block interrupts. * @param SAI_Block_x: where x can be A or B to select the SAI Block peripheral. * @param SAI_IT: specifies the SAI interrupt source to be enabled or disabled. * This parameter can be one of the following values: * @arg SAI_IT_FREQ: FIFO Request interrupt mask * @arg SAI_IT_MUTEDET: MUTE detection interrupt mask * @arg SAI_IT_OVRUDR: overrun/underrun interrupt mask * @arg SAI_IT_AFSDET: anticipated frame synchronization detection * interrupt mask * @arg SAI_IT_LFSDET: late frame synchronization detection interrupt * mask * @arg SAI_IT_CNRDY: codec not ready interrupt mask * @arg SAI_IT_WCKCFG: wrong clock configuration interrupt mask * @param NewState: new state of the specified SAI interrupt. * This parameter can be: ENABLE or DISABLE. * @retval None */ void SAI_ITConfig(SAI_Block_TypeDef* SAI_Block_x, uint32_t SAI_IT, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_SAI_BLOCK_PERIPH(SAI_Block_x)); assert_param(IS_FUNCTIONAL_STATE(NewState)); assert_param(IS_SAI_BLOCK_CONFIG_IT(SAI_IT)); if (NewState != DISABLE) { /* Enable the selected SAI Block interrupt */ SAI_Block_x->IMR |= SAI_IT; } else { /* Disable the selected SAI Block interrupt */ SAI_Block_x->IMR &= ~(SAI_IT); } }
/** * @brief Returns the status of EN bit for the specified SAI Block x. * @param SAI_Block_x: where x can be A or B to select the SAI Block peripheral. * * @note After disabling a SAI Block, it is recommended to check (or wait until) * the SAI Block is effectively disabled. If a Block is disabled while * an audio frame transfer is ongoing, the current frame will be * transferred and the block will be effectively disabled only at * the end of audio frame. * * @retval Current state of the DMAy Streamx (ENABLE or DISABLE). */ FunctionalState SAI_GetCmdStatus(SAI_Block_TypeDef* SAI_Block_x) { FunctionalState state = DISABLE; /* Check the parameters */ assert_param(IS_SAI_BLOCK_PERIPH(SAI_Block_x)); if ((SAI_Block_x->CR1 & (uint32_t)SAI_xCR1_SAIEN) != 0) { /* The selected SAI Block x EN bit is set (audio frame transfer is ongoing) */ state = ENABLE; } else { /* The selected SAI Block x EN bit is cleared (SAI Block is disabled and all transfers are complete) */ state = DISABLE; } return state; }
/** * @brief Checks whether the specified SAI block x flag is set or not. * @param SAI_Block_x: where x can be A or B to select the SAI Block peripheral. * @param SAI_FLAG: specifies the SAI block flag to check. * This parameter can be one of the following values: * @arg SAI_FLAG_FREQ: FIFO Request flag. * @arg SAI_FLAG_MUTEDET: MUTE detection flag. * @arg SAI_FLAG_OVRUDR: overrun/underrun flag. * @arg SAI_FLAG_WCKCFG: wrong clock configuration flag. * @arg SAI_FLAG_CNRDY: codec not ready flag. * @arg SAI_FLAG_AFSDET: anticipated frame synchronization detection flag. * @arg SAI_FLAG_LFSDET: late frame synchronization detection flag. * @retval The new state of SAI_FLAG (SET or RESET). */ FlagStatus SAI_GetFlagStatus(SAI_Block_TypeDef* SAI_Block_x, uint32_t SAI_FLAG) { FlagStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_SAI_BLOCK_PERIPH(SAI_Block_x)); assert_param(IS_SAI_BLOCK_GET_FLAG(SAI_FLAG)); /* Check the status of the specified SAI flag */ if ((SAI_Block_x->SR & SAI_FLAG) != (uint32_t)RESET) { /* SAI_FLAG is set */ bitstatus = SET; } else { /* SAI_FLAG is reset */ bitstatus = RESET; } /* Return the SAI_FLAG status */ return bitstatus; }