/** * @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); } }