173#ifdef HAL_SPDIFRX_MODULE_ENABLED
175#if defined(STM32F446xx)
181#define SPDIFRX_TIMEOUT_VALUE 10U
196static void SPDIFRX_ReceiveControlFlow_IT(SPDIFRX_HandleTypeDef *hspdif);
197static void SPDIFRX_ReceiveDataFlow_IT(SPDIFRX_HandleTypeDef *hspdif);
198static HAL_StatusTypeDef SPDIFRX_WaitOnFlagUntilTimeout(SPDIFRX_HandleTypeDef *hspdif, uint32_t Flag,
199 FlagStatus Status, uint32_t Timeout, uint32_t tickstart);
256 assert_param(IS_SPDIFRX_INPUT_SELECT(hspdif->Init.InputSelection));
257 assert_param(IS_SPDIFRX_MAX_RETRIES(hspdif->Init.Retries));
258 assert_param(IS_SPDIFRX_WAIT_FOR_ACTIVITY(hspdif->Init.WaitForActivity));
259 assert_param(IS_SPDIFRX_CHANNEL(hspdif->Init.ChannelSelection));
260 assert_param(IS_SPDIFRX_DATA_FORMAT(hspdif->Init.DataFormat));
261 assert_param(IS_PREAMBLE_TYPE_MASK(hspdif->Init.PreambleTypeMask));
262 assert_param(IS_CHANNEL_STATUS_MASK(hspdif->Init.ChannelStatusMask));
263 assert_param(IS_VALIDITY_MASK(hspdif->Init.ValidityBitMask));
264 assert_param(IS_PARITY_ERROR_MASK(hspdif->Init.ParityErrorMask));
266#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
267 if (hspdif->State == HAL_SPDIFRX_STATE_RESET)
272 hspdif->RxHalfCpltCallback = HAL_SPDIFRX_RxHalfCpltCallback;
273 hspdif->RxCpltCallback = HAL_SPDIFRX_RxCpltCallback;
274 hspdif->CxHalfCpltCallback = HAL_SPDIFRX_CxHalfCpltCallback;
275 hspdif->CxCpltCallback = HAL_SPDIFRX_CxCpltCallback;
276 hspdif->ErrorCallback = HAL_SPDIFRX_ErrorCallback;
278 if (hspdif->MspInitCallback == NULL)
280 hspdif->MspInitCallback = HAL_SPDIFRX_MspInit;
284 hspdif->MspInitCallback(hspdif);
287 if (hspdif->State == HAL_SPDIFRX_STATE_RESET)
292 HAL_SPDIFRX_MspInit(hspdif);
297 hspdif->State = HAL_SPDIFRX_STATE_BUSY;
300 __HAL_SPDIFRX_IDLE(hspdif);
303 tmpreg = hspdif->Instance->CR;
305 tmpreg &= ~(SPDIFRX_CR_RXSTEO | SPDIFRX_CR_DRFMT | SPDIFRX_CR_PMSK |
306 SPDIFRX_CR_VMSK | SPDIFRX_CR_CUMSK | SPDIFRX_CR_PTMSK |
307 SPDIFRX_CR_CHSEL | SPDIFRX_CR_NBTR | SPDIFRX_CR_WFA |
311 tmpreg |= (hspdif->Init.StereoMode |
312 hspdif->Init.InputSelection |
313 hspdif->Init.Retries |
314 hspdif->Init.WaitForActivity |
315 hspdif->Init.ChannelSelection |
316 hspdif->Init.DataFormat |
317 hspdif->Init.PreambleTypeMask |
318 hspdif->Init.ChannelStatusMask |
319 hspdif->Init.ValidityBitMask |
320 hspdif->Init.ParityErrorMask
324 hspdif->Instance->CR = tmpreg;
326 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
329 hspdif->State = HAL_SPDIFRX_STATE_READY;
348 assert_param(IS_SPDIFRX_ALL_INSTANCE(hspdif->Instance));
350 hspdif->State = HAL_SPDIFRX_STATE_BUSY;
353 __HAL_SPDIFRX_IDLE(hspdif);
355#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
356 if (hspdif->MspDeInitCallback == NULL)
358 hspdif->MspDeInitCallback = HAL_SPDIFRX_MspDeInit;
362 hspdif->MspDeInitCallback(hspdif);
365 HAL_SPDIFRX_MspDeInit(hspdif);
368 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
371 hspdif->State = HAL_SPDIFRX_STATE_RESET;
384__weak
void HAL_SPDIFRX_MspInit(SPDIFRX_HandleTypeDef *hspdif)
399__weak
void HAL_SPDIFRX_MspDeInit(SPDIFRX_HandleTypeDef *hspdif)
409#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
426HAL_StatusTypeDef HAL_SPDIFRX_RegisterCallback(SPDIFRX_HandleTypeDef *hspdif, HAL_SPDIFRX_CallbackIDTypeDef CallbackID,
427 pSPDIFRX_CallbackTypeDef pCallback)
431 if (pCallback == NULL)
434 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_INVALID_CALLBACK;
440 if (HAL_SPDIFRX_STATE_READY == hspdif->State)
444 case HAL_SPDIFRX_RX_HALF_CB_ID :
445 hspdif->RxHalfCpltCallback = pCallback;
448 case HAL_SPDIFRX_RX_CPLT_CB_ID :
449 hspdif->RxCpltCallback = pCallback;
452 case HAL_SPDIFRX_CX_HALF_CB_ID :
453 hspdif->CxHalfCpltCallback = pCallback;
456 case HAL_SPDIFRX_CX_CPLT_CB_ID :
457 hspdif->CxCpltCallback = pCallback;
460 case HAL_SPDIFRX_ERROR_CB_ID :
461 hspdif->ErrorCallback = pCallback;
464 case HAL_SPDIFRX_MSPINIT_CB_ID :
465 hspdif->MspInitCallback = pCallback;
468 case HAL_SPDIFRX_MSPDEINIT_CB_ID :
469 hspdif->MspDeInitCallback = pCallback;
474 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_INVALID_CALLBACK;
480 else if (HAL_SPDIFRX_STATE_RESET == hspdif->State)
484 case HAL_SPDIFRX_MSPINIT_CB_ID :
485 hspdif->MspInitCallback = pCallback;
488 case HAL_SPDIFRX_MSPDEINIT_CB_ID :
489 hspdif->MspDeInitCallback = pCallback;
494 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_INVALID_CALLBACK;
503 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_INVALID_CALLBACK;
529 HAL_SPDIFRX_CallbackIDTypeDef CallbackID)
536 if (HAL_SPDIFRX_STATE_READY == hspdif->State)
540 case HAL_SPDIFRX_RX_HALF_CB_ID :
541 hspdif->RxHalfCpltCallback = HAL_SPDIFRX_RxHalfCpltCallback;
544 case HAL_SPDIFRX_RX_CPLT_CB_ID :
545 hspdif->RxCpltCallback = HAL_SPDIFRX_RxCpltCallback;
548 case HAL_SPDIFRX_CX_HALF_CB_ID :
549 hspdif->CxHalfCpltCallback = HAL_SPDIFRX_CxHalfCpltCallback;
552 case HAL_SPDIFRX_CX_CPLT_CB_ID :
553 hspdif->CxCpltCallback = HAL_SPDIFRX_CxCpltCallback;
556 case HAL_SPDIFRX_ERROR_CB_ID :
557 hspdif->ErrorCallback = HAL_SPDIFRX_ErrorCallback;
562 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_INVALID_CALLBACK;
568 else if (HAL_SPDIFRX_STATE_RESET == hspdif->State)
572 case HAL_SPDIFRX_MSPINIT_CB_ID :
573 hspdif->MspInitCallback = HAL_SPDIFRX_MspInit;
576 case HAL_SPDIFRX_MSPDEINIT_CB_ID :
577 hspdif->MspDeInitCallback = HAL_SPDIFRX_MspDeInit;
582 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_INVALID_CALLBACK;
591 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_INVALID_CALLBACK;
609HAL_StatusTypeDef HAL_SPDIFRX_SetDataFormat(SPDIFRX_HandleTypeDef *hspdif, SPDIFRX_SetDataFormatTypeDef sDataFormat)
621 assert_param(IS_SPDIFRX_DATA_FORMAT(sDataFormat.DataFormat));
622 assert_param(IS_PREAMBLE_TYPE_MASK(sDataFormat.PreambleTypeMask));
623 assert_param(IS_CHANNEL_STATUS_MASK(sDataFormat.ChannelStatusMask));
624 assert_param(IS_VALIDITY_MASK(sDataFormat.ValidityBitMask));
625 assert_param(IS_PARITY_ERROR_MASK(sDataFormat.ParityErrorMask));
628 tmpreg = hspdif->Instance->CR;
630 if (((tmpreg & SPDIFRX_STATE_RCV) == SPDIFRX_STATE_RCV) &&
631 (((tmpreg & SPDIFRX_CR_DRFMT) != sDataFormat.DataFormat) ||
632 ((tmpreg & SPDIFRX_CR_RXSTEO) != sDataFormat.StereoMode)))
637 tmpreg &= ~(SPDIFRX_CR_RXSTEO | SPDIFRX_CR_DRFMT | SPDIFRX_CR_PMSK |
638 SPDIFRX_CR_VMSK | SPDIFRX_CR_CUMSK | SPDIFRX_CR_PTMSK);
641 tmpreg |= (sDataFormat.StereoMode |
642 sDataFormat.DataFormat |
643 sDataFormat.PreambleTypeMask |
644 sDataFormat.ChannelStatusMask |
645 sDataFormat.ValidityBitMask |
646 sDataFormat.ParityErrorMask);
648 hspdif->Instance->CR = tmpreg;
708HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size,
712 uint16_t sizeCounter = Size;
713 uint32_t *pTmpBuf = pData;
715 if ((pData == NULL) || (Size == 0U))
720 if (hspdif->State == HAL_SPDIFRX_STATE_READY)
725 hspdif->State = HAL_SPDIFRX_STATE_BUSY;
728 __HAL_SPDIFRX_SYNC(hspdif);
734 if (SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_SYNCD, RESET, Timeout, tickstart) !=
HAL_OK)
740 __HAL_SPDIFRX_RCV(hspdif);
743 while (sizeCounter > 0U)
749 if (SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_RXNE, RESET, Timeout, tickstart) !=
HAL_OK)
754 (*pTmpBuf) = hspdif->Instance->DR;
760 hspdif->State = HAL_SPDIFRX_STATE_READY;
782HAL_StatusTypeDef HAL_SPDIFRX_ReceiveControlFlow(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size,
786 uint16_t sizeCounter = Size;
787 uint32_t *pTmpBuf = pData;
789 if ((pData == NULL) || (Size == 0U))
794 if (hspdif->State == HAL_SPDIFRX_STATE_READY)
799 hspdif->State = HAL_SPDIFRX_STATE_BUSY;
802 __HAL_SPDIFRX_SYNC(hspdif);
808 if (SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_SYNCD, RESET, Timeout, tickstart) !=
HAL_OK)
814 __HAL_SPDIFRX_RCV(hspdif);
817 while (sizeCounter > 0U)
823 if (SPDIFRX_WaitOnFlagUntilTimeout(hspdif, SPDIFRX_FLAG_CSRNE, RESET, Timeout, tickstart) !=
HAL_OK)
828 (*pTmpBuf) = hspdif->Instance->CSR;
834 hspdif->State = HAL_SPDIFRX_STATE_READY;
854HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow_IT(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size)
856 uint32_t count = SPDIFRX_TIMEOUT_VALUE * (SystemCoreClock / 24U / 1000U);
858 const HAL_SPDIFRX_StateTypeDef tempState = hspdif->State;
860 if ((tempState == HAL_SPDIFRX_STATE_READY) || (tempState == HAL_SPDIFRX_STATE_BUSY_CX))
862 if ((pData == NULL) || (Size == 0U))
870 hspdif->pRxBuffPtr = pData;
871 hspdif->RxXferSize = Size;
872 hspdif->RxXferCount = Size;
874 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
877 hspdif->State = HAL_SPDIFRX_STATE_BUSY_RX;
880 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
883 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
886 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_RXNE);
888 if ((SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != SPDIFRX_STATE_RCV)
891 __HAL_SPDIFRX_SYNC(hspdif);
900 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_RXNE);
901 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
902 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
903 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
904 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SBLKIE);
905 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SYNCDIE);
906 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_IFEIE);
908 hspdif->State = HAL_SPDIFRX_STATE_READY;
916 }
while (__HAL_SPDIFRX_GET_FLAG(hspdif, SPDIFRX_FLAG_SYNCD) == RESET);
919 __HAL_SPDIFRX_RCV(hspdif);
940HAL_StatusTypeDef HAL_SPDIFRX_ReceiveControlFlow_IT(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size)
942 uint32_t count = SPDIFRX_TIMEOUT_VALUE * (SystemCoreClock / 24U / 1000U);
944 const HAL_SPDIFRX_StateTypeDef tempState = hspdif->State;
946 if ((tempState == HAL_SPDIFRX_STATE_READY) || (tempState == HAL_SPDIFRX_STATE_BUSY_RX))
948 if ((pData == NULL) || (Size == 0U))
956 hspdif->pCsBuffPtr = pData;
957 hspdif->CsXferSize = Size;
958 hspdif->CsXferCount = Size;
960 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
963 hspdif->State = HAL_SPDIFRX_STATE_BUSY_CX;
966 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
969 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
972 __HAL_SPDIFRX_ENABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
974 if ((SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != SPDIFRX_STATE_RCV)
977 __HAL_SPDIFRX_SYNC(hspdif);
986 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_RXNE);
987 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
988 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
989 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
990 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SBLKIE);
991 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SYNCDIE);
992 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_IFEIE);
994 hspdif->State = HAL_SPDIFRX_STATE_READY;
1002 }
while (__HAL_SPDIFRX_GET_FLAG(hspdif, SPDIFRX_FLAG_SYNCD) == RESET);
1005 __HAL_SPDIFRX_RCV(hspdif);
1026HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow_DMA(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size)
1028 uint32_t count = SPDIFRX_TIMEOUT_VALUE * (SystemCoreClock / 24U / 1000U);
1030 const HAL_SPDIFRX_StateTypeDef tempState = hspdif->State;
1032 if ((pData == NULL) || (Size == 0U))
1037 if ((tempState == HAL_SPDIFRX_STATE_READY) || (tempState == HAL_SPDIFRX_STATE_BUSY_CX))
1042 hspdif->pRxBuffPtr = pData;
1043 hspdif->RxXferSize = Size;
1044 hspdif->RxXferCount = Size;
1046 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
1047 hspdif->State = HAL_SPDIFRX_STATE_BUSY_RX;
1050 hspdif->hdmaDrRx->XferHalfCpltCallback = SPDIFRX_DMARxHalfCplt;
1053 hspdif->hdmaDrRx->XferCpltCallback = SPDIFRX_DMARxCplt;
1056 hspdif->hdmaDrRx->XferErrorCallback = SPDIFRX_DMAError;
1059 if (
HAL_DMA_Start_IT(hspdif->hdmaDrRx, (uint32_t)&hspdif->Instance->DR, (uint32_t)hspdif->pRxBuffPtr, Size) !=
1063 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_DMA;
1066 hspdif->State = HAL_SPDIFRX_STATE_ERROR;
1075 hspdif->Instance->CR |= SPDIFRX_CR_RXDMAEN;
1077 if ((SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != SPDIFRX_STATE_RCV)
1080 __HAL_SPDIFRX_SYNC(hspdif);
1089 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_RXNE);
1090 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
1091 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
1092 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
1093 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SBLKIE);
1094 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SYNCDIE);
1095 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_IFEIE);
1097 hspdif->State = HAL_SPDIFRX_STATE_READY;
1105 }
while (__HAL_SPDIFRX_GET_FLAG(hspdif, SPDIFRX_FLAG_SYNCD) == RESET);
1108 __HAL_SPDIFRX_RCV(hspdif);
1129HAL_StatusTypeDef HAL_SPDIFRX_ReceiveControlFlow_DMA(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size)
1131 uint32_t count = SPDIFRX_TIMEOUT_VALUE * (SystemCoreClock / 24U / 1000U);
1133 const HAL_SPDIFRX_StateTypeDef tempState = hspdif->State;
1135 if ((pData == NULL) || (Size == 0U))
1140 if ((tempState == HAL_SPDIFRX_STATE_READY) || (tempState == HAL_SPDIFRX_STATE_BUSY_RX))
1142 hspdif->pCsBuffPtr = pData;
1143 hspdif->CsXferSize = Size;
1144 hspdif->CsXferCount = Size;
1149 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_NONE;
1150 hspdif->State = HAL_SPDIFRX_STATE_BUSY_CX;
1153 hspdif->hdmaCsRx->XferHalfCpltCallback = SPDIFRX_DMACxHalfCplt;
1156 hspdif->hdmaCsRx->XferCpltCallback = SPDIFRX_DMACxCplt;
1159 hspdif->hdmaCsRx->XferErrorCallback = SPDIFRX_DMAError;
1162 if (
HAL_DMA_Start_IT(hspdif->hdmaCsRx, (uint32_t)&hspdif->Instance->CSR, (uint32_t)hspdif->pCsBuffPtr, Size) !=
1166 hspdif->ErrorCode = HAL_SPDIFRX_ERROR_DMA;
1169 hspdif->State = HAL_SPDIFRX_STATE_ERROR;
1178 hspdif->Instance->CR |= SPDIFRX_CR_CBDMAEN;
1180 if ((SPDIFRX->CR & SPDIFRX_CR_SPDIFEN) != SPDIFRX_STATE_RCV)
1183 __HAL_SPDIFRX_SYNC(hspdif);
1192 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_RXNE);
1193 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
1194 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
1195 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
1196 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SBLKIE);
1197 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SYNCDIE);
1198 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_IFEIE);
1200 hspdif->State = HAL_SPDIFRX_STATE_READY;
1208 }
while (__HAL_SPDIFRX_GET_FLAG(hspdif, SPDIFRX_FLAG_SYNCD) == RESET);
1211 __HAL_SPDIFRX_RCV(hspdif);
1236 hspdif->Instance->CR &= (uint16_t)(~SPDIFRX_CR_RXDMAEN);
1237 hspdif->Instance->CR &= (uint16_t)(~SPDIFRX_CR_CBDMAEN);
1240 if (hspdif->hdmaDrRx != NULL)
1244 if (hspdif->hdmaCsRx != NULL)
1250 __HAL_SPDIFRX_IDLE(hspdif);
1252 hspdif->State = HAL_SPDIFRX_STATE_READY;
1265void HAL_SPDIFRX_IRQHandler(SPDIFRX_HandleTypeDef *hspdif)
1267 uint32_t itFlag = hspdif->Instance->SR;
1268 uint32_t itSource = hspdif->Instance->IMR;
1271 if (((itFlag & SPDIFRX_FLAG_RXNE) == SPDIFRX_FLAG_RXNE) && ((itSource & SPDIFRX_IT_RXNE) == SPDIFRX_IT_RXNE))
1273 __HAL_SPDIFRX_CLEAR_IT(hspdif, SPDIFRX_IT_RXNE);
1274 SPDIFRX_ReceiveDataFlow_IT(hspdif);
1278 if (((itFlag & SPDIFRX_FLAG_CSRNE) == SPDIFRX_FLAG_CSRNE) && ((itSource & SPDIFRX_IT_CSRNE) == SPDIFRX_IT_CSRNE))
1280 __HAL_SPDIFRX_CLEAR_IT(hspdif, SPDIFRX_IT_CSRNE);
1281 SPDIFRX_ReceiveControlFlow_IT(hspdif);
1285 if (((itFlag & SPDIFRX_FLAG_OVR) == SPDIFRX_FLAG_OVR) && ((itSource & SPDIFRX_IT_OVRIE) == SPDIFRX_IT_OVRIE))
1287 __HAL_SPDIFRX_CLEAR_IT(hspdif, SPDIFRX_IT_OVRIE);
1290 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_OVR;
1293 HAL_SPDIFRX_ErrorCallback(hspdif);
1297 if (((itFlag & SPDIFRX_FLAG_PERR) == SPDIFRX_FLAG_PERR) && ((itSource & SPDIFRX_IT_PERRIE) == SPDIFRX_IT_PERRIE))
1299 __HAL_SPDIFRX_CLEAR_IT(hspdif, SPDIFRX_IT_PERRIE);
1302 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_PE;
1305 HAL_SPDIFRX_ErrorCallback(hspdif);
1314__weak
void HAL_SPDIFRX_RxHalfCpltCallback(SPDIFRX_HandleTypeDef *hspdif)
1329__weak
void HAL_SPDIFRX_RxCpltCallback(SPDIFRX_HandleTypeDef *hspdif)
1344__weak
void HAL_SPDIFRX_CxHalfCpltCallback(SPDIFRX_HandleTypeDef *hspdif)
1359__weak
void HAL_SPDIFRX_CxCpltCallback(SPDIFRX_HandleTypeDef *hspdif)
1374__weak
void HAL_SPDIFRX_ErrorCallback(SPDIFRX_HandleTypeDef *hspdif)
1408HAL_SPDIFRX_StateTypeDef HAL_SPDIFRX_GetState(SPDIFRX_HandleTypeDef
const *
const hspdif)
1410 return hspdif->State;
1418uint32_t HAL_SPDIFRX_GetError(SPDIFRX_HandleTypeDef
const *
const hspdif)
1420 return hspdif->ErrorCode;
1434 SPDIFRX_HandleTypeDef *hspdif = (SPDIFRX_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
1439 hspdif->Instance->CR &= (uint16_t)(~SPDIFRX_CR_RXDMAEN);
1440 hspdif->RxXferCount = 0;
1441 hspdif->State = HAL_SPDIFRX_STATE_READY;
1443#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
1444 hspdif->RxCpltCallback(hspdif);
1446 HAL_SPDIFRX_RxCpltCallback(hspdif);
1457 SPDIFRX_HandleTypeDef *hspdif = (SPDIFRX_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
1459#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
1460 hspdif->RxHalfCpltCallback(hspdif);
1462 HAL_SPDIFRX_RxHalfCpltCallback(hspdif);
1474 SPDIFRX_HandleTypeDef *hspdif = (SPDIFRX_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
1477 hspdif->Instance->CR &= (uint16_t)(~SPDIFRX_CR_CBDMAEN);
1478 hspdif->CsXferCount = 0;
1480 hspdif->State = HAL_SPDIFRX_STATE_READY;
1481#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
1482 hspdif->CxCpltCallback(hspdif);
1484 HAL_SPDIFRX_CxCpltCallback(hspdif);
1495 SPDIFRX_HandleTypeDef *hspdif = (SPDIFRX_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
1497#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
1498 hspdif->CxHalfCpltCallback(hspdif);
1500 HAL_SPDIFRX_CxHalfCpltCallback(hspdif);
1511 SPDIFRX_HandleTypeDef *hspdif = (SPDIFRX_HandleTypeDef *)((
DMA_HandleTypeDef *)hdma)->Parent;
1514 hspdif->Instance->CR &= (uint16_t)(~(SPDIFRX_CR_RXDMAEN | SPDIFRX_CR_CBDMAEN));
1515 hspdif->RxXferCount = 0;
1517 hspdif->State = HAL_SPDIFRX_STATE_READY;
1520 hspdif->ErrorCode |= HAL_SPDIFRX_ERROR_DMA;
1522#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
1524 hspdif->ErrorCallback(hspdif);
1527 HAL_SPDIFRX_ErrorCallback(hspdif);
1536static void SPDIFRX_ReceiveDataFlow_IT(SPDIFRX_HandleTypeDef *hspdif)
1539 (*hspdif->pRxBuffPtr) = hspdif->Instance->DR;
1540 hspdif->pRxBuffPtr++;
1541 hspdif->RxXferCount--;
1543 if (hspdif->RxXferCount == 0U)
1546 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE | SPDIFRX_IT_PERRIE | SPDIFRX_IT_RXNE);
1548 hspdif->State = HAL_SPDIFRX_STATE_READY;
1553#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
1554 hspdif->RxCpltCallback(hspdif);
1556 HAL_SPDIFRX_RxCpltCallback(hspdif);
1566static void SPDIFRX_ReceiveControlFlow_IT(SPDIFRX_HandleTypeDef *hspdif)
1569 (*hspdif->pCsBuffPtr) = hspdif->Instance->CSR;
1570 hspdif->pCsBuffPtr++;
1571 hspdif->CsXferCount--;
1573 if (hspdif->CsXferCount == 0U)
1576 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
1578 hspdif->State = HAL_SPDIFRX_STATE_READY;
1583#if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
1584 hspdif->CxCpltCallback(hspdif);
1586 HAL_SPDIFRX_CxCpltCallback(hspdif);
1600static HAL_StatusTypeDef SPDIFRX_WaitOnFlagUntilTimeout(SPDIFRX_HandleTypeDef *hspdif, uint32_t Flag,
1601 FlagStatus Status, uint32_t Timeout, uint32_t tickstart)
1604 while (__HAL_SPDIFRX_GET_FLAG(hspdif, Flag) == Status)
1609 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
1613 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_RXNE);
1614 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_CSRNE);
1615 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_PERRIE);
1616 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_OVRIE);
1617 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SBLKIE);
1618 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_SYNCDIE);
1619 __HAL_SPDIFRX_DISABLE_IT(hspdif, SPDIFRX_IT_IFEIE);
1621 hspdif->State = HAL_SPDIFRX_STATE_READY;
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
#define __HAL_DMA_DISABLE(__HANDLE__)
Disable the specified DMA Stream.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define assert_param(expr)
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef
HAL Status structures definition
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_LOCK(__HANDLE__)
DMA handle Structure definition.