Lines Matching refs:hsai

261 static void SAI_FillFifo(SAI_HandleTypeDef *hsai);
262 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode);
263 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
264 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
266 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai);
267 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai);
268 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai);
269 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai);
270 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai);
271 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai);
272 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai);
333 HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasiz… in HAL_SAI_InitProtocol() argument
346 status = SAI_InitI2S(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
350 status = SAI_InitPCM(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
359 status = HAL_SAI_Init(hsai); in HAL_SAI_InitProtocol()
372 HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) in HAL_SAI_Init() argument
378 if (hsai == NULL) in HAL_SAI_Init()
384 assert_param(IS_SAI_ALL_INSTANCE(hsai->Instance)); in HAL_SAI_Init()
387 assert_param(IS_SAI_AUDIO_FREQUENCY(hsai->Init.AudioFrequency)); in HAL_SAI_Init()
388 assert_param(IS_SAI_BLOCK_PROTOCOL(hsai->Init.Protocol)); in HAL_SAI_Init()
389 assert_param(IS_SAI_BLOCK_MODE(hsai->Init.AudioMode)); in HAL_SAI_Init()
390 assert_param(IS_SAI_BLOCK_DATASIZE(hsai->Init.DataSize)); in HAL_SAI_Init()
391 assert_param(IS_SAI_BLOCK_FIRST_BIT(hsai->Init.FirstBit)); in HAL_SAI_Init()
392 assert_param(IS_SAI_BLOCK_CLOCK_STROBING(hsai->Init.ClockStrobing)); in HAL_SAI_Init()
393 assert_param(IS_SAI_BLOCK_SYNCHRO(hsai->Init.Synchro)); in HAL_SAI_Init()
394 assert_param(IS_SAI_BLOCK_MCK_OUTPUT(hsai->Init.MckOutput)); in HAL_SAI_Init()
395 assert_param(IS_SAI_BLOCK_OUTPUT_DRIVE(hsai->Init.OutputDrive)); in HAL_SAI_Init()
396 assert_param(IS_SAI_BLOCK_NODIVIDER(hsai->Init.NoDivider)); in HAL_SAI_Init()
397 assert_param(IS_SAI_BLOCK_FIFO_THRESHOLD(hsai->Init.FIFOThreshold)); in HAL_SAI_Init()
398 assert_param(IS_SAI_MONO_STEREO_MODE(hsai->Init.MonoStereoMode)); in HAL_SAI_Init()
399 assert_param(IS_SAI_BLOCK_COMPANDING_MODE(hsai->Init.CompandingMode)); in HAL_SAI_Init()
400 assert_param(IS_SAI_BLOCK_TRISTATE_MANAGEMENT(hsai->Init.TriState)); in HAL_SAI_Init()
401 assert_param(IS_SAI_BLOCK_SYNCEXT(hsai->Init.SynchroExt)); in HAL_SAI_Init()
402 assert_param(IS_SAI_BLOCK_MCK_OVERSAMPLING(hsai->Init.MckOverSampling)); in HAL_SAI_Init()
405 assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); in HAL_SAI_Init()
406 assert_param(IS_SAI_BLOCK_ACTIVE_FRAME(hsai->FrameInit.ActiveFrameLength)); in HAL_SAI_Init()
407 assert_param(IS_SAI_BLOCK_FS_DEFINITION(hsai->FrameInit.FSDefinition)); in HAL_SAI_Init()
408 assert_param(IS_SAI_BLOCK_FS_POLARITY(hsai->FrameInit.FSPolarity)); in HAL_SAI_Init()
409 assert_param(IS_SAI_BLOCK_FS_OFFSET(hsai->FrameInit.FSOffset)); in HAL_SAI_Init()
412 assert_param(IS_SAI_BLOCK_FIRSTBIT_OFFSET(hsai->SlotInit.FirstBitOffset)); in HAL_SAI_Init()
413 assert_param(IS_SAI_BLOCK_SLOT_SIZE(hsai->SlotInit.SlotSize)); in HAL_SAI_Init()
414 assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); in HAL_SAI_Init()
415 assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); in HAL_SAI_Init()
418 assert_param(IS_FUNCTIONAL_STATE(hsai->Init.PdmInit.Activation)); in HAL_SAI_Init()
419 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
421 assert_param(IS_SAI_PDM_MIC_PAIRS_NUMBER(hsai->Init.PdmInit.MicPairsNbr)); in HAL_SAI_Init()
422 assert_param(IS_SAI_PDM_CLOCK_ENABLE(hsai->Init.PdmInit.ClockEnable)); in HAL_SAI_Init()
424 if ((hsai->Instance != SAI1_Block_A) || in HAL_SAI_Init()
425 (hsai->Init.AudioMode != SAI_MODEMASTER_RX) || in HAL_SAI_Init()
426 (hsai->Init.Protocol != SAI_FREE_PROTOCOL)) in HAL_SAI_Init()
432 if (hsai->State == HAL_SAI_STATE_RESET) in HAL_SAI_Init()
435 hsai->Lock = HAL_UNLOCKED; in HAL_SAI_Init()
439 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_Init()
440 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_Init()
441 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_Init()
442 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_Init()
443 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_Init()
446 if (hsai->MspInitCallback == NULL) in HAL_SAI_Init()
448 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_Init()
450 hsai->MspInitCallback(hsai); in HAL_SAI_Init()
453 HAL_SAI_MspInit(hsai); in HAL_SAI_Init()
458 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Init()
463 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_Init()
467 switch (hsai->Init.Synchro) in HAL_SAI_Init()
482 if (hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) in HAL_SAI_Init()
495 if (hsai->Init.NoDivider == SAI_MASTERDIVIDER_DISABLE) in HAL_SAI_Init()
500 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
505 else if (hsai->Init.Protocol == SAI_AC97_PROTOCOL) in HAL_SAI_Init()
513 tmpframelength = hsai->FrameInit.FrameLength; in HAL_SAI_Init()
517 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmpframelength); in HAL_SAI_Init()
523 tmposr = (hsai->Init.MckOverSampling == SAI_MCK_OVERSAMPLING_ENABLE) ? 2U : 1U; in HAL_SAI_Init()
525 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmposr * 256U); in HAL_SAI_Init()
527 hsai->Init.Mckdiv = tmpval / 10U; in HAL_SAI_Init()
532 hsai->Init.Mckdiv += 1U; in HAL_SAI_Init()
536 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
538 hsai->Init.Mckdiv = hsai->Init.Mckdiv >> 1; in HAL_SAI_Init()
543 assert_param(IS_SAI_BLOCK_MASTER_DIVIDER(hsai->Init.Mckdiv)); in HAL_SAI_Init()
546 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in HAL_SAI_Init()
549 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? 0U : SAI_xCR1_CKSTR; in HAL_SAI_Init()
554 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? SAI_xCR1_CKSTR : 0U; in HAL_SAI_Init()
559 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
565 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
566 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
568 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
569 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ in HAL_SAI_Init()
570 hsai->Init.MckOverSampling | hsai->Init.MckOutput); in HAL_SAI_Init()
573 hsai->Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); in HAL_SAI_Init()
574hsai->Instance->CR2 |= (hsai->Init.FIFOThreshold | hsai->Init.CompandingMode | hsai->Init.TriState… in HAL_SAI_Init()
577 hsai->Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \ in HAL_SAI_Init()
579 hsai->Instance->FRCR |= ((hsai->FrameInit.FrameLength - 1U) | in HAL_SAI_Init()
580 hsai->FrameInit.FSOffset | in HAL_SAI_Init()
581 hsai->FrameInit.FSDefinition | in HAL_SAI_Init()
582 hsai->FrameInit.FSPolarity | in HAL_SAI_Init()
583 ((hsai->FrameInit.ActiveFrameLength - 1U) << 8)); in HAL_SAI_Init()
587 hsai->Instance->SLOTR &= (~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \ in HAL_SAI_Init()
590 hsai->Instance->SLOTR |= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize | \ in HAL_SAI_Init()
591 … (hsai->SlotInit.SlotActive << 16) | ((hsai->SlotInit.SlotNumber - 1U) << 8); in HAL_SAI_Init()
594 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_Init()
598 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
601 SAI1->PDMCR = (hsai->Init.PdmInit.ClockEnable | in HAL_SAI_Init()
602 ((hsai->Init.PdmInit.MicPairsNbr - 1U) << SAI_PDMCR_MICNBR_Pos)); in HAL_SAI_Init()
608 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Init()
611 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Init()
614 __HAL_UNLOCK(hsai); in HAL_SAI_Init()
625 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_DeInit() argument
628 if (hsai == NULL) in HAL_SAI_DeInit()
633 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_DeInit()
636 hsai->Instance->IMR = 0; in HAL_SAI_DeInit()
637 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_DeInit()
640 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DeInit()
643 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DeInit()
646 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
652 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DeInit()
655 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_DeInit()
666 if (hsai->MspDeInitCallback == NULL) in HAL_SAI_DeInit()
668 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_DeInit()
670 hsai->MspDeInitCallback(hsai); in HAL_SAI_DeInit()
672 HAL_SAI_MspDeInit(hsai); in HAL_SAI_DeInit()
676 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_DeInit()
679 hsai->State = HAL_SAI_STATE_RESET; in HAL_SAI_DeInit()
682 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
693 __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspInit() argument
696 UNUSED(hsai); in HAL_SAI_MspInit()
709 __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspDeInit() argument
712 UNUSED(hsai); in HAL_SAI_MspDeInit()
736 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_RegisterCallback() argument
745 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
751 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_RegisterCallback()
756 hsai->RxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
759 hsai->RxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
762 hsai->TxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
765 hsai->TxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
768 hsai->ErrorCallback = pCallback; in HAL_SAI_RegisterCallback()
771 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
774 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
778 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
784 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_RegisterCallback()
789 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
792 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
796 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
805 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
828 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_UnRegisterCallback() argument
833 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_UnRegisterCallback()
838 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_UnRegisterCallback()
841 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
844 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_UnRegisterCallback()
847 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
850 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_UnRegisterCallback()
853 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
856 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
860 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
866 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_UnRegisterCallback()
871 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
874 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
878 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
887 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
950 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t… in HAL_SAI_Transmit() argument
960 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit()
963 __HAL_LOCK(hsai); in HAL_SAI_Transmit()
965 hsai->XferSize = Size; in HAL_SAI_Transmit()
966 hsai->XferCount = Size; in HAL_SAI_Transmit()
967 hsai->pBuffPtr = pData; in HAL_SAI_Transmit()
968 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit()
969 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit()
972 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit()
975 SAI_FillFifo(hsai); in HAL_SAI_Transmit()
977 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit()
980 while (hsai->XferCount > 0U) in HAL_SAI_Transmit()
983 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) in HAL_SAI_Transmit()
985 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit()
987 hsai->Instance->DR = *hsai->pBuffPtr; in HAL_SAI_Transmit()
988 hsai->pBuffPtr++; in HAL_SAI_Transmit()
990 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit()
992 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
993 hsai->pBuffPtr++; in HAL_SAI_Transmit()
994 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
995 hsai->pBuffPtr++; in HAL_SAI_Transmit()
996 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1000 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1001 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1002 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1003 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1004 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in HAL_SAI_Transmit()
1005 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1006 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in HAL_SAI_Transmit()
1007 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1008 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1010 hsai->XferCount--; in HAL_SAI_Transmit()
1018 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit()
1021 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Transmit()
1025 (void) SAI_Disable(hsai); in HAL_SAI_Transmit()
1028 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Transmit()
1031 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1034 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1041 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1044 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1063 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SAI_Receive() argument
1073 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive()
1076 __HAL_LOCK(hsai); in HAL_SAI_Receive()
1078 hsai->pBuffPtr = pData; in HAL_SAI_Receive()
1079 hsai->XferSize = Size; in HAL_SAI_Receive()
1080 hsai->XferCount = Size; in HAL_SAI_Receive()
1081 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive()
1082 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive()
1085 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive()
1088 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive()
1092 while (hsai->XferCount > 0U) in HAL_SAI_Receive()
1094 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Receive()
1096 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive()
1098 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in HAL_SAI_Receive()
1099 hsai->pBuffPtr++; in HAL_SAI_Receive()
1101 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive()
1103 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1104 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1105 hsai->pBuffPtr++; in HAL_SAI_Receive()
1106 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1107 hsai->pBuffPtr++; in HAL_SAI_Receive()
1111 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1112 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1113 hsai->pBuffPtr++; in HAL_SAI_Receive()
1114 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1115 hsai->pBuffPtr++; in HAL_SAI_Receive()
1116 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in HAL_SAI_Receive()
1117 hsai->pBuffPtr++; in HAL_SAI_Receive()
1118 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in HAL_SAI_Receive()
1119 hsai->pBuffPtr++; in HAL_SAI_Receive()
1121 hsai->XferCount--; in HAL_SAI_Receive()
1129 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Receive()
1132 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Receive()
1136 (void) SAI_Disable(hsai); in HAL_SAI_Receive()
1139 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Receive()
1142 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1145 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1152 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1155 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1173 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_IT() argument
1180 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_IT()
1183 __HAL_LOCK(hsai); in HAL_SAI_Transmit_IT()
1185 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_IT()
1186 hsai->XferSize = Size; in HAL_SAI_Transmit_IT()
1187 hsai->XferCount = Size; in HAL_SAI_Transmit_IT()
1188 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_IT()
1189 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_IT()
1191 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_IT()
1193 hsai->InterruptServiceRoutine = SAI_Transmit_IT8Bit; in HAL_SAI_Transmit_IT()
1195 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_IT()
1197 hsai->InterruptServiceRoutine = SAI_Transmit_IT16Bit; in HAL_SAI_Transmit_IT()
1201 hsai->InterruptServiceRoutine = SAI_Transmit_IT32Bit; in HAL_SAI_Transmit_IT()
1205 SAI_FillFifo(hsai); in HAL_SAI_Transmit_IT()
1208 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Transmit_IT()
1211 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_IT()
1214 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_IT()
1217 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_IT()
1235 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_IT() argument
1242 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_IT()
1245 __HAL_LOCK(hsai); in HAL_SAI_Receive_IT()
1247 hsai->pBuffPtr = pData; in HAL_SAI_Receive_IT()
1248 hsai->XferSize = Size; in HAL_SAI_Receive_IT()
1249 hsai->XferCount = Size; in HAL_SAI_Receive_IT()
1250 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_IT()
1251 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_IT()
1253 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_IT()
1255 hsai->InterruptServiceRoutine = SAI_Receive_IT8Bit; in HAL_SAI_Receive_IT()
1257 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_IT()
1259 hsai->InterruptServiceRoutine = SAI_Receive_IT16Bit; in HAL_SAI_Receive_IT()
1263 hsai->InterruptServiceRoutine = SAI_Receive_IT32Bit; in HAL_SAI_Receive_IT()
1267 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Receive_IT()
1270 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_IT()
1273 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_IT()
1277 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_IT()
1293 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAPause() argument
1296 __HAL_LOCK(hsai); in HAL_SAI_DMAPause()
1299 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAPause()
1302 __HAL_UNLOCK(hsai); in HAL_SAI_DMAPause()
1313 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAResume() argument
1316 __HAL_LOCK(hsai); in HAL_SAI_DMAResume()
1319 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_DMAResume()
1322 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_DMAResume()
1325 __HAL_SAI_ENABLE(hsai); in HAL_SAI_DMAResume()
1329 __HAL_UNLOCK(hsai); in HAL_SAI_DMAResume()
1340 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAStop() argument
1345 __HAL_LOCK(hsai); in HAL_SAI_DMAStop()
1348 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DMAStop()
1354 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAStop()
1357 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_DMAStop()
1359 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_DMAStop()
1362 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1365 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1371 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_DMAStop()
1373 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_DMAStop()
1376 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1379 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1385 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DMAStop()
1388 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DMAStop()
1391 __HAL_UNLOCK(hsai); in HAL_SAI_DMAStop()
1402 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) in HAL_SAI_Abort() argument
1407 __HAL_LOCK(hsai); in HAL_SAI_Abort()
1410 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Abort()
1416 if ((hsai->Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN) in HAL_SAI_Abort()
1419 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_Abort()
1422 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_Abort()
1424 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_Abort()
1427 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1430 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1436 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_Abort()
1438 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_Abort()
1441 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1444 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1451 hsai->Instance->IMR = 0; in HAL_SAI_Abort()
1452 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Abort()
1455 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Abort()
1458 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Abort()
1461 __HAL_UNLOCK(hsai); in HAL_SAI_Abort()
1474 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_DMA() argument
1484 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_DMA()
1489 __HAL_LOCK(hsai); in HAL_SAI_Transmit_DMA()
1491 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_DMA()
1492 hsai->XferSize = Size; in HAL_SAI_Transmit_DMA()
1493 hsai->XferCount = Size; in HAL_SAI_Transmit_DMA()
1494 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_DMA()
1495 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_DMA()
1498 hsai->hdmatx->XferHalfCpltCallback = SAI_DMATxHalfCplt; in HAL_SAI_Transmit_DMA()
1501 hsai->hdmatx->XferCpltCallback = SAI_DMATxCplt; in HAL_SAI_Transmit_DMA()
1504 hsai->hdmatx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Transmit_DMA()
1507 hsai->hdmatx->XferAbortCallback = NULL; in HAL_SAI_Transmit_DMA()
1511 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_DMA()
1515 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_DMA()
1525 if ((hsai->hdmatx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SAI_Transmit_DMA()
1527 if (hsai->hdmatx->LinkedListQueue != NULL) in HAL_SAI_Transmit_DMA()
1530 hsai->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = dmaSrcSize; in HAL_SAI_Transmit_DMA()
1533hsai->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)hsai->pBu… in HAL_SAI_Transmit_DMA()
1536hsai->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)&hsai->In… in HAL_SAI_Transmit_DMA()
1538 status = HAL_DMAEx_List_Start_IT(hsai->hdmatx); in HAL_SAI_Transmit_DMA()
1542 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1548 …status = HAL_DMA_Start_IT(hsai->hdmatx, (uint32_t)hsai->pBuffPtr, (uint32_t)&hsai->Instance->DR, d… in HAL_SAI_Transmit_DMA()
1553 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1558 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Transmit_DMA()
1561 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Transmit_DMA()
1564 while ((hsai->Instance->SR & SAI_xSR_FLVL) == SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Transmit_DMA()
1570 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit_DMA()
1573 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1580 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_DMA()
1583 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_DMA()
1587 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1605 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_DMA() argument
1614 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_DMA()
1619 __HAL_LOCK(hsai); in HAL_SAI_Receive_DMA()
1621 hsai->pBuffPtr = pData; in HAL_SAI_Receive_DMA()
1622 hsai->XferSize = Size; in HAL_SAI_Receive_DMA()
1623 hsai->XferCount = Size; in HAL_SAI_Receive_DMA()
1624 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_DMA()
1625 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_DMA()
1628 hsai->hdmarx->XferHalfCpltCallback = SAI_DMARxHalfCplt; in HAL_SAI_Receive_DMA()
1631 hsai->hdmarx->XferCpltCallback = SAI_DMARxCplt; in HAL_SAI_Receive_DMA()
1634 hsai->hdmarx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Receive_DMA()
1637 hsai->hdmarx->XferAbortCallback = NULL; in HAL_SAI_Receive_DMA()
1641 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_DMA()
1645 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_DMA()
1655 if ((hsai->hdmarx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SAI_Receive_DMA()
1657 if (hsai->hdmarx->LinkedListQueue != NULL) in HAL_SAI_Receive_DMA()
1660 hsai->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = dmaSrcSize; in HAL_SAI_Receive_DMA()
1663hsai->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)&hsai->In… in HAL_SAI_Receive_DMA()
1666hsai->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)hsai->pBu… in HAL_SAI_Receive_DMA()
1668 status = HAL_DMAEx_List_Start_IT(hsai->hdmarx); in HAL_SAI_Receive_DMA()
1672 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1678 …status = HAL_DMA_Start_IT(hsai->hdmarx, (uint32_t)&hsai->Instance->DR, (uint32_t)hsai->pBuffPtr, d… in HAL_SAI_Receive_DMA()
1683 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1688 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Receive_DMA()
1691 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Receive_DMA()
1694 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_DMA()
1697 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_DMA()
1701 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1718 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) in HAL_SAI_EnableTxMuteMode() argument
1722 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableTxMuteMode()
1724 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_EnableTxMuteMode()
1725 SET_BIT(hsai->Instance->CR2, SAI_xCR2_MUTE | (uint32_t)val); in HAL_SAI_EnableTxMuteMode()
1737 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableTxMuteMode() argument
1739 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableTxMuteMode()
1741 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_DisableTxMuteMode()
1755 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t … in HAL_SAI_EnableRxMuteMode() argument
1759 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableRxMuteMode()
1762 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); in HAL_SAI_EnableRxMuteMode()
1763 SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); in HAL_SAI_EnableRxMuteMode()
1764 hsai->mutecallback = callback; in HAL_SAI_EnableRxMuteMode()
1766 __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_EnableRxMuteMode()
1778 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableRxMuteMode() argument
1780 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableRxMuteMode()
1783 hsai->mutecallback = NULL; in HAL_SAI_DisableRxMuteMode()
1785 __HAL_SAI_DISABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_DisableRxMuteMode()
1797 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) in HAL_SAI_IRQHandler() argument
1799 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_IRQHandler()
1801 uint32_t itflags = hsai->Instance->SR; in HAL_SAI_IRQHandler()
1802 uint32_t itsources = hsai->Instance->IMR; in HAL_SAI_IRQHandler()
1803 uint32_t cr1config = hsai->Instance->CR1; in HAL_SAI_IRQHandler()
1809 hsai->InterruptServiceRoutine(hsai); in HAL_SAI_IRQHandler()
1815 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in HAL_SAI_IRQHandler()
1817 tmperror = ((hsai->State == HAL_SAI_STATE_BUSY_RX) ? HAL_SAI_ERROR_OVR : HAL_SAI_ERROR_UDR); in HAL_SAI_IRQHandler()
1819 hsai->ErrorCode |= tmperror; in HAL_SAI_IRQHandler()
1823 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1825 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1832 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_MUTEDET); in HAL_SAI_IRQHandler()
1834 if (hsai->mutecallback != NULL) in HAL_SAI_IRQHandler()
1837 hsai->mutecallback(); in HAL_SAI_IRQHandler()
1844 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_AFSDET); in HAL_SAI_IRQHandler()
1847 hsai->ErrorCode |= HAL_SAI_ERROR_AFSDET; in HAL_SAI_IRQHandler()
1853 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1856 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1859 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1862 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1866 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1868 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1872 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1875 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1878 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1881 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1885 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1887 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1896 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1900 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1902 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1910 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_LFSDET); in HAL_SAI_IRQHandler()
1913 hsai->ErrorCode |= HAL_SAI_ERROR_LFSDET; in HAL_SAI_IRQHandler()
1919 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1922 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1925 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1928 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1932 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1934 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1938 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1941 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1944 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1947 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1951 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1953 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1962 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1966 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1968 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1976 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_WCKCFG); in HAL_SAI_IRQHandler()
1979 hsai->ErrorCode |= HAL_SAI_ERROR_WCKCFG; in HAL_SAI_IRQHandler()
1985 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1988 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1991 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1994 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1998 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2000 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2004 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
2007 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2010 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
2013 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2017 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2019 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2028 hsai->Instance->IMR = 0U; in HAL_SAI_IRQHandler()
2029 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_IRQHandler()
2031 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_IRQHandler()
2034 hsai->XferCount = 0U; in HAL_SAI_IRQHandler()
2038 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2040 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2048 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_CNRDY); in HAL_SAI_IRQHandler()
2050 hsai->ErrorCode |= HAL_SAI_ERROR_CNREADY; in HAL_SAI_IRQHandler()
2054 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2056 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2072 __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxCpltCallback() argument
2075 UNUSED(hsai); in HAL_SAI_TxCpltCallback()
2088 __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxHalfCpltCallback() argument
2091 UNUSED(hsai); in HAL_SAI_TxHalfCpltCallback()
2104 __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxCpltCallback() argument
2107 UNUSED(hsai); in HAL_SAI_RxCpltCallback()
2120 __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxHalfCpltCallback() argument
2123 UNUSED(hsai); in HAL_SAI_RxHalfCpltCallback()
2136 __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_ErrorCallback() argument
2139 UNUSED(hsai); in HAL_SAI_ErrorCallback()
2171 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetState() argument
2173 return hsai->State; in HAL_SAI_GetState()
2182 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetError() argument
2184 return hsai->ErrorCode; in HAL_SAI_GetError()
2211 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitI2S() argument
2215 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitI2S()
2216 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitI2S()
2218 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitI2S()
2221 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitI2S()
2226 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitI2S()
2228 hsai->FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; in SAI_InitI2S()
2229 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitI2S()
2230 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitI2S()
2231 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitI2S()
2241 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; in SAI_InitI2S()
2242 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitI2S()
2247 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitI2S()
2248 hsai->FrameInit.FSOffset = SAI_FS_FIRSTBIT; in SAI_InitI2S()
2255 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2256 hsai->FrameInit.FrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2257 hsai->FrameInit.ActiveFrameLength = 16U * (nbslot / 2U); in SAI_InitI2S()
2258 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitI2S()
2261 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2262 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2263 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2264 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2267 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitI2S()
2268 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2269 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2270 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2273 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitI2S()
2274 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2275 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2276 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2286 hsai->SlotInit.FirstBitOffset = 16; in SAI_InitI2S()
2290 hsai->SlotInit.FirstBitOffset = 8; in SAI_InitI2S()
2306 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitPCM() argument
2310 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitPCM()
2311 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitPCM()
2313 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitPCM()
2316 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitPCM()
2321 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitPCM()
2323 hsai->FrameInit.FSDefinition = SAI_FS_STARTFRAME; in SAI_InitPCM()
2324 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitPCM()
2325 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitPCM()
2326 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitPCM()
2327 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitPCM()
2328 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitPCM()
2332 hsai->FrameInit.ActiveFrameLength = 1; in SAI_InitPCM()
2337 hsai->FrameInit.ActiveFrameLength = 13; in SAI_InitPCM()
2343 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2344 hsai->FrameInit.FrameLength = 16U * nbslot; in SAI_InitPCM()
2345 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitPCM()
2348 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2349 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2350 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2353 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitPCM()
2354 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2355 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2358 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitPCM()
2359 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2360 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2376 static void SAI_FillFifo(SAI_HandleTypeDef *hsai) in SAI_FillFifo() argument
2381 while (((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) && (hsai->XferCount > 0U)) in SAI_FillFifo()
2383 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in SAI_FillFifo()
2385 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_FillFifo()
2386 hsai->pBuffPtr++; in SAI_FillFifo()
2388 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in SAI_FillFifo()
2390 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2391 hsai->pBuffPtr++; in SAI_FillFifo()
2392 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2393 hsai->pBuffPtr++; in SAI_FillFifo()
2394 hsai->Instance->DR = temp; in SAI_FillFifo()
2398 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2399 hsai->pBuffPtr++; in SAI_FillFifo()
2400 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2401 hsai->pBuffPtr++; in SAI_FillFifo()
2402 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_FillFifo()
2403 hsai->pBuffPtr++; in SAI_FillFifo()
2404 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_FillFifo()
2405 hsai->pBuffPtr++; in SAI_FillFifo()
2406 hsai->Instance->DR = temp; in SAI_FillFifo()
2408 hsai->XferCount--; in SAI_FillFifo()
2419 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode) in SAI_InterruptFlag() argument
2428 if ((hsai->Init.Protocol == SAI_AC97_PROTOCOL) && in SAI_InterruptFlag()
2429 ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODEMASTER_RX))) in SAI_InterruptFlag()
2434 if ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InterruptFlag()
2452 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) in SAI_Disable() argument
2458 __HAL_SAI_DISABLE(hsai); in SAI_Disable()
2466 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in SAI_Disable()
2471 } while ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) != 0U); in SAI_Disable()
2482 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT8Bit() argument
2484 if (hsai->XferCount == 0U) in SAI_Transmit_IT8Bit()
2488 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT8Bit()
2489 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT8Bit()
2491 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2493 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2499 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_Transmit_IT8Bit()
2500 hsai->pBuffPtr++; in SAI_Transmit_IT8Bit()
2501 hsai->XferCount--; in SAI_Transmit_IT8Bit()
2511 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT16Bit() argument
2513 if (hsai->XferCount == 0U) in SAI_Transmit_IT16Bit()
2517 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT16Bit()
2518 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT16Bit()
2520 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2522 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2529 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT16Bit()
2530 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2531 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT16Bit()
2532 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2533 hsai->Instance->DR = temp; in SAI_Transmit_IT16Bit()
2534 hsai->XferCount--; in SAI_Transmit_IT16Bit()
2544 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT32Bit() argument
2546 if (hsai->XferCount == 0U) in SAI_Transmit_IT32Bit()
2550 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT32Bit()
2551 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT32Bit()
2553 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2555 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2562 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT32Bit()
2563 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2564 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT32Bit()
2565 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2566 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_Transmit_IT32Bit()
2567 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2568 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_Transmit_IT32Bit()
2569 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2570 hsai->Instance->DR = temp; in SAI_Transmit_IT32Bit()
2571 hsai->XferCount--; in SAI_Transmit_IT32Bit()
2581 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT8Bit() argument
2584 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in SAI_Receive_IT8Bit()
2585 hsai->pBuffPtr++; in SAI_Receive_IT8Bit()
2586 hsai->XferCount--; in SAI_Receive_IT8Bit()
2589 if (hsai->XferCount == 0U) in SAI_Receive_IT8Bit()
2592 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT8Bit()
2595 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT8Bit()
2597 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT8Bit()
2599 hsai->RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2601 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2612 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT16Bit() argument
2617 temp = hsai->Instance->DR; in SAI_Receive_IT16Bit()
2618 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT16Bit()
2619 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2620 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT16Bit()
2621 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2622 hsai->XferCount--; in SAI_Receive_IT16Bit()
2625 if (hsai->XferCount == 0U) in SAI_Receive_IT16Bit()
2628 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT16Bit()
2631 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT16Bit()
2633 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT16Bit()
2635 hsai->RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2637 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2648 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT32Bit() argument
2653 temp = hsai->Instance->DR; in SAI_Receive_IT32Bit()
2654 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT32Bit()
2655 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2656 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT32Bit()
2657 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2658 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in SAI_Receive_IT32Bit()
2659 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2660 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in SAI_Receive_IT32Bit()
2661 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2662 hsai->XferCount--; in SAI_Receive_IT32Bit()
2665 if (hsai->XferCount == 0U) in SAI_Receive_IT32Bit()
2668 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT32Bit()
2671 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT32Bit()
2673 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT32Bit()
2675 hsai->RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2677 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2690 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxCplt() local
2695 hsai->XferCount = 0; in SAI_DMATxCplt()
2698 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMATxCplt()
2701 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMATxCplt()
2703 hsai->State = HAL_SAI_STATE_READY; in SAI_DMATxCplt()
2707 hsai->TxCpltCallback(hsai); in SAI_DMATxCplt()
2709 HAL_SAI_TxCpltCallback(hsai); in SAI_DMATxCplt()
2721 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxHalfCplt() local
2724 hsai->TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2726 HAL_SAI_TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2738 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxCplt() local
2744 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMARxCplt()
2745 hsai->XferCount = 0; in SAI_DMARxCplt()
2748 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMARxCplt()
2750 hsai->State = HAL_SAI_STATE_READY; in SAI_DMARxCplt()
2754 hsai->RxCpltCallback(hsai); in SAI_DMARxCplt()
2756 HAL_SAI_RxCpltCallback(hsai); in SAI_DMARxCplt()
2768 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxHalfCplt() local
2771 hsai->RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2773 HAL_SAI_RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2785 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAError() local
2788 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in SAI_DMAError()
2791 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAError()
2795 (void) SAI_Disable(hsai); in SAI_DMAError()
2798 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAError()
2801 hsai->XferCount = 0U; in SAI_DMAError()
2805 hsai->ErrorCallback(hsai); in SAI_DMAError()
2807 HAL_SAI_ErrorCallback(hsai); in SAI_DMAError()
2819 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAAbort() local
2822 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAAbort()
2825 hsai->Instance->IMR = 0U; in SAI_DMAAbort()
2826 hsai->Instance->CLRFR = 0xFFFFFFFFU; in SAI_DMAAbort()
2828 if (hsai->ErrorCode != HAL_SAI_ERROR_WCKCFG) in SAI_DMAAbort()
2832 (void) SAI_Disable(hsai); in SAI_DMAAbort()
2835 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in SAI_DMAAbort()
2838 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAAbort()
2841 hsai->XferCount = 0U; in SAI_DMAAbort()
2845 hsai->ErrorCallback(hsai); in SAI_DMAAbort()
2847 HAL_SAI_ErrorCallback(hsai); in SAI_DMAAbort()