/**
  * @brief DMA SPDIFRX receive process (Data flow) complete callback
  * @param hdma  DMA handle
  * @retval None
  */
static void SPDIFRX_DMARxCplt(DMA_HandleTypeDef *hdma)
{
  SPDIFRX_HandleTypeDef* hspdif = ( SPDIFRX_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;

  /* Disable Rx DMA Request */
  hspdif->Instance->CR &= (uint16_t)(~SPDIFRX_CR_RXDMAEN);
  hspdif->RxXferCount = 0U;

  hspdif->State = HAL_SPDIFRX_STATE_READY;
  HAL_SPDIFRX_RxCpltCallback(hspdif);
}
/**
  * @brief Receive an amount of data (Data Flow) with Interrupt
  * @param hspdif: SPDIFRX handle
  * @retval None
  */
static void SPDIFRX_ReceiveDataFlow_IT(SPDIFRX_HandleTypeDef *hspdif)
{
  /* Receive data */
  (*hspdif->pRxBuffPtr++) = hspdif->Instance->DR;
  hspdif->RxXferCount--;

  if(hspdif->RxXferCount == 0)
  {
    /* Disable RXNE/PE and OVR interrupts */
    __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE | SPDIFRX_IT_PERRIE | SPDIFRX_IT_RXNE);

    hspdif->State = HAL_SPDIFRX_STATE_READY;

    /* Process Unlocked */
    __HAL_UNLOCK(hspdif);

    HAL_SPDIFRX_RxCpltCallback(hspdif);
  }
}