Lines Matching refs:hsai

259 static void SAI_FillFifo(SAI_HandleTypeDef *hsai);
260 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode);
261 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
262 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
264 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai);
265 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai);
266 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai);
267 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai);
268 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai);
269 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai);
270 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai);
331 HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasiz… in HAL_SAI_InitProtocol() argument
344 status = SAI_InitI2S(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
348 status = SAI_InitPCM(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
357 status = HAL_SAI_Init(hsai); in HAL_SAI_InitProtocol()
370 HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) in HAL_SAI_Init() argument
379 if (hsai == NULL) in HAL_SAI_Init()
385 assert_param(IS_SAI_ALL_INSTANCE(hsai->Instance)); in HAL_SAI_Init()
388 assert_param(IS_SAI_AUDIO_FREQUENCY(hsai->Init.AudioFrequency)); in HAL_SAI_Init()
389 assert_param(IS_SAI_BLOCK_PROTOCOL(hsai->Init.Protocol)); in HAL_SAI_Init()
390 assert_param(IS_SAI_BLOCK_MODE(hsai->Init.AudioMode)); in HAL_SAI_Init()
391 assert_param(IS_SAI_BLOCK_DATASIZE(hsai->Init.DataSize)); in HAL_SAI_Init()
392 assert_param(IS_SAI_BLOCK_FIRST_BIT(hsai->Init.FirstBit)); in HAL_SAI_Init()
393 assert_param(IS_SAI_BLOCK_CLOCK_STROBING(hsai->Init.ClockStrobing)); in HAL_SAI_Init()
394 assert_param(IS_SAI_BLOCK_SYNCHRO(hsai->Init.Synchro)); 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()
404 assert_param(IS_SAI_BLOCK_MCK_OVERSAMPLING(hsai->Init.MckOverSampling)); in HAL_SAI_Init()
409 assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); in HAL_SAI_Init()
410 assert_param(IS_SAI_BLOCK_ACTIVE_FRAME(hsai->FrameInit.ActiveFrameLength)); in HAL_SAI_Init()
411 assert_param(IS_SAI_BLOCK_FS_DEFINITION(hsai->FrameInit.FSDefinition)); in HAL_SAI_Init()
412 assert_param(IS_SAI_BLOCK_FS_POLARITY(hsai->FrameInit.FSPolarity)); in HAL_SAI_Init()
413 assert_param(IS_SAI_BLOCK_FS_OFFSET(hsai->FrameInit.FSOffset)); in HAL_SAI_Init()
416 assert_param(IS_SAI_BLOCK_FIRSTBIT_OFFSET(hsai->SlotInit.FirstBitOffset)); in HAL_SAI_Init()
417 assert_param(IS_SAI_BLOCK_SLOT_SIZE(hsai->SlotInit.SlotSize)); in HAL_SAI_Init()
418 assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); in HAL_SAI_Init()
419 assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); in HAL_SAI_Init()
424 assert_param(IS_FUNCTIONAL_STATE(hsai->Init.PdmInit.Activation)); in HAL_SAI_Init()
425 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
427 assert_param(IS_SAI_PDM_MIC_PAIRS_NUMBER(hsai->Init.PdmInit.MicPairsNbr)); in HAL_SAI_Init()
428 assert_param(IS_SAI_PDM_CLOCK_ENABLE(hsai->Init.PdmInit.ClockEnable)); in HAL_SAI_Init()
430 if ((hsai->Instance != SAI1_Block_A) || in HAL_SAI_Init()
431 (hsai->Init.AudioMode != SAI_MODEMASTER_RX) || in HAL_SAI_Init()
432 (hsai->Init.Protocol != SAI_FREE_PROTOCOL)) in HAL_SAI_Init()
440 if (hsai->State == HAL_SAI_STATE_RESET) in HAL_SAI_Init()
443 hsai->Lock = HAL_UNLOCKED; in HAL_SAI_Init()
447 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_Init()
448 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_Init()
449 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_Init()
450 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_Init()
451 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_Init()
454 if (hsai->MspInitCallback == NULL) in HAL_SAI_Init()
456 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_Init()
458 hsai->MspInitCallback(hsai); in HAL_SAI_Init()
461 HAL_SAI_MspInit(hsai); in HAL_SAI_Init()
466 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Init()
471 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_Init()
476 switch (hsai->Init.SynchroExt) in HAL_SAI_Init()
493 switch (hsai->Init.Synchro) in HAL_SAI_Init()
516 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
528 if (hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) in HAL_SAI_Init()
539 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
565 if (hsai->Init.NoDivider == SAI_MASTERDIVIDER_DISABLE) in HAL_SAI_Init()
570 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
575 else if (hsai->Init.Protocol == SAI_AC97_PROTOCOL) in HAL_SAI_Init()
583 tmpframelength = hsai->FrameInit.FrameLength; in HAL_SAI_Init()
587 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmpframelength); in HAL_SAI_Init()
593 tmposr = (hsai->Init.MckOverSampling == SAI_MCK_OVERSAMPLING_ENABLE) ? 2U : 1U; in HAL_SAI_Init()
595 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmposr * 256U); in HAL_SAI_Init()
597 hsai->Init.Mckdiv = tmpval / 10U; in HAL_SAI_Init()
602 hsai->Init.Mckdiv += 1U; in HAL_SAI_Init()
610 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * 2U * 256U); in HAL_SAI_Init()
611 hsai->Init.Mckdiv = tmpval / 10U; in HAL_SAI_Init()
616 hsai->Init.Mckdiv += 1U; in HAL_SAI_Init()
622 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
624 hsai->Init.Mckdiv = hsai->Init.Mckdiv >> 1; in HAL_SAI_Init()
628 assert_param(IS_SAI_BLOCK_MASTER_DIVIDER(hsai->Init.Mckdiv)); in HAL_SAI_Init()
631 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in HAL_SAI_Init()
634 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? 0U : SAI_xCR1_CKSTR; in HAL_SAI_Init()
639 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? SAI_xCR1_CKSTR : 0U; in HAL_SAI_Init()
646 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
651 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
652 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
654 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
655 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ in HAL_SAI_Init()
656 hsai->Init.MckOverSampling); in HAL_SAI_Init()
658 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
663 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
664 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
666 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
667 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20)); in HAL_SAI_Init()
672 hsai->Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); in HAL_SAI_Init()
673hsai->Instance->CR2 |= (hsai->Init.FIFOThreshold | hsai->Init.CompandingMode | hsai->Init.TriState… in HAL_SAI_Init()
676 hsai->Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \ in HAL_SAI_Init()
678 hsai->Instance->FRCR |= ((hsai->FrameInit.FrameLength - 1U) | in HAL_SAI_Init()
679 hsai->FrameInit.FSOffset | in HAL_SAI_Init()
680 hsai->FrameInit.FSDefinition | in HAL_SAI_Init()
681 hsai->FrameInit.FSPolarity | in HAL_SAI_Init()
682 ((hsai->FrameInit.ActiveFrameLength - 1U) << 8)); in HAL_SAI_Init()
686 hsai->Instance->SLOTR &= (~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \ in HAL_SAI_Init()
689 hsai->Instance->SLOTR |= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize | \ in HAL_SAI_Init()
690 … (hsai->SlotInit.SlotActive << 16) | ((hsai->SlotInit.SlotNumber - 1U) << 8); in HAL_SAI_Init()
695 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_Init()
699 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
702 SAI1->PDMCR = (hsai->Init.PdmInit.ClockEnable | in HAL_SAI_Init()
703 ((hsai->Init.PdmInit.MicPairsNbr - 1U) << SAI_PDMCR_MICNBR_Pos)); in HAL_SAI_Init()
711 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Init()
714 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Init()
717 __HAL_UNLOCK(hsai); in HAL_SAI_Init()
728 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_DeInit() argument
731 if (hsai == NULL) in HAL_SAI_DeInit()
736 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_DeInit()
739 hsai->Instance->IMR = 0; in HAL_SAI_DeInit()
740 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_DeInit()
743 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DeInit()
746 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DeInit()
749 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
755 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DeInit()
760 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_DeInit()
773 if (hsai->MspDeInitCallback == NULL) in HAL_SAI_DeInit()
775 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_DeInit()
777 hsai->MspDeInitCallback(hsai); in HAL_SAI_DeInit()
779 HAL_SAI_MspDeInit(hsai); in HAL_SAI_DeInit()
783 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_DeInit()
786 hsai->State = HAL_SAI_STATE_RESET; in HAL_SAI_DeInit()
789 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
800 __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspInit() argument
803 UNUSED(hsai); in HAL_SAI_MspInit()
816 __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspDeInit() argument
819 UNUSED(hsai); in HAL_SAI_MspDeInit()
843 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_RegisterCallback() argument
852 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
858 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_RegisterCallback()
863 hsai->RxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
866 hsai->RxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
869 hsai->TxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
872 hsai->TxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
875 hsai->ErrorCallback = pCallback; in HAL_SAI_RegisterCallback()
878 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
881 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
885 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
891 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_RegisterCallback()
896 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
899 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
903 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
912 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
935 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_UnRegisterCallback() argument
940 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_UnRegisterCallback()
945 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_UnRegisterCallback()
948 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
951 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_UnRegisterCallback()
954 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
957 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_UnRegisterCallback()
960 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
963 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
967 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
973 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_UnRegisterCallback()
978 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
981 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
985 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
994 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
1057 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t… in HAL_SAI_Transmit() argument
1067 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit()
1070 __HAL_LOCK(hsai); in HAL_SAI_Transmit()
1072 hsai->XferSize = Size; in HAL_SAI_Transmit()
1073 hsai->XferCount = Size; in HAL_SAI_Transmit()
1074 hsai->pBuffPtr = pData; in HAL_SAI_Transmit()
1075 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit()
1076 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit()
1079 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit()
1082 SAI_FillFifo(hsai); in HAL_SAI_Transmit()
1084 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit()
1087 while (hsai->XferCount > 0U) in HAL_SAI_Transmit()
1090 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) in HAL_SAI_Transmit()
1092 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit()
1094 hsai->Instance->DR = *hsai->pBuffPtr; in HAL_SAI_Transmit()
1095 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1097 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit()
1099 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1100 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1101 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1102 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1103 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1107 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1108 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1109 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1110 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1111 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in HAL_SAI_Transmit()
1112 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1113 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in HAL_SAI_Transmit()
1114 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1115 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1117 hsai->XferCount--; in HAL_SAI_Transmit()
1125 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit()
1128 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Transmit()
1132 (void) SAI_Disable(hsai); in HAL_SAI_Transmit()
1135 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Transmit()
1138 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1141 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1148 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1151 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1170 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SAI_Receive() argument
1180 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive()
1183 __HAL_LOCK(hsai); in HAL_SAI_Receive()
1185 hsai->pBuffPtr = pData; in HAL_SAI_Receive()
1186 hsai->XferSize = Size; in HAL_SAI_Receive()
1187 hsai->XferCount = Size; in HAL_SAI_Receive()
1188 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive()
1189 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive()
1192 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive()
1195 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive()
1199 while (hsai->XferCount > 0U) in HAL_SAI_Receive()
1201 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Receive()
1203 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive()
1205 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in HAL_SAI_Receive()
1206 hsai->pBuffPtr++; in HAL_SAI_Receive()
1208 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive()
1210 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1211 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1212 hsai->pBuffPtr++; in HAL_SAI_Receive()
1213 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1214 hsai->pBuffPtr++; in HAL_SAI_Receive()
1218 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1219 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1220 hsai->pBuffPtr++; in HAL_SAI_Receive()
1221 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1222 hsai->pBuffPtr++; in HAL_SAI_Receive()
1223 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in HAL_SAI_Receive()
1224 hsai->pBuffPtr++; in HAL_SAI_Receive()
1225 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in HAL_SAI_Receive()
1226 hsai->pBuffPtr++; in HAL_SAI_Receive()
1228 hsai->XferCount--; in HAL_SAI_Receive()
1236 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Receive()
1239 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Receive()
1243 (void) SAI_Disable(hsai); in HAL_SAI_Receive()
1246 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Receive()
1249 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1252 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1259 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1262 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1280 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_IT() argument
1287 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_IT()
1290 __HAL_LOCK(hsai); in HAL_SAI_Transmit_IT()
1292 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_IT()
1293 hsai->XferSize = Size; in HAL_SAI_Transmit_IT()
1294 hsai->XferCount = Size; in HAL_SAI_Transmit_IT()
1295 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_IT()
1296 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_IT()
1298 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_IT()
1300 hsai->InterruptServiceRoutine = SAI_Transmit_IT8Bit; in HAL_SAI_Transmit_IT()
1302 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_IT()
1304 hsai->InterruptServiceRoutine = SAI_Transmit_IT16Bit; in HAL_SAI_Transmit_IT()
1308 hsai->InterruptServiceRoutine = SAI_Transmit_IT32Bit; in HAL_SAI_Transmit_IT()
1312 SAI_FillFifo(hsai); in HAL_SAI_Transmit_IT()
1315 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Transmit_IT()
1318 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_IT()
1321 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_IT()
1324 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_IT()
1342 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_IT() argument
1349 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_IT()
1352 __HAL_LOCK(hsai); in HAL_SAI_Receive_IT()
1354 hsai->pBuffPtr = pData; in HAL_SAI_Receive_IT()
1355 hsai->XferSize = Size; in HAL_SAI_Receive_IT()
1356 hsai->XferCount = Size; in HAL_SAI_Receive_IT()
1357 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_IT()
1358 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_IT()
1360 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_IT()
1362 hsai->InterruptServiceRoutine = SAI_Receive_IT8Bit; in HAL_SAI_Receive_IT()
1364 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_IT()
1366 hsai->InterruptServiceRoutine = SAI_Receive_IT16Bit; in HAL_SAI_Receive_IT()
1370 hsai->InterruptServiceRoutine = SAI_Receive_IT32Bit; in HAL_SAI_Receive_IT()
1374 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Receive_IT()
1377 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_IT()
1380 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_IT()
1384 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_IT()
1400 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAPause() argument
1403 __HAL_LOCK(hsai); in HAL_SAI_DMAPause()
1406 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAPause()
1409 __HAL_UNLOCK(hsai); in HAL_SAI_DMAPause()
1420 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAResume() argument
1423 __HAL_LOCK(hsai); in HAL_SAI_DMAResume()
1426 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_DMAResume()
1429 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_DMAResume()
1432 __HAL_SAI_ENABLE(hsai); in HAL_SAI_DMAResume()
1436 __HAL_UNLOCK(hsai); in HAL_SAI_DMAResume()
1447 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAStop() argument
1452 __HAL_LOCK(hsai); in HAL_SAI_DMAStop()
1455 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DMAStop()
1461 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAStop()
1464 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_DMAStop()
1468 (void) HAL_DMA_Abort(hsai->hdmatx); in HAL_SAI_DMAStop()
1472 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_DMAStop()
1476 (void) HAL_DMA_Abort(hsai->hdmarx); in HAL_SAI_DMAStop()
1480 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DMAStop()
1483 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DMAStop()
1486 __HAL_UNLOCK(hsai); in HAL_SAI_DMAStop()
1497 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) in HAL_SAI_Abort() argument
1502 __HAL_LOCK(hsai); in HAL_SAI_Abort()
1505 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Abort()
1511 if ((hsai->Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN) in HAL_SAI_Abort()
1514 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_Abort()
1517 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_Abort()
1521 (void) HAL_DMA_Abort(hsai->hdmatx); in HAL_SAI_Abort()
1525 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_Abort()
1529 (void) HAL_DMA_Abort(hsai->hdmarx); in HAL_SAI_Abort()
1534 hsai->Instance->IMR = 0; in HAL_SAI_Abort()
1535 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Abort()
1538 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Abort()
1541 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Abort()
1544 __HAL_UNLOCK(hsai); in HAL_SAI_Abort()
1557 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_DMA() argument
1566 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_DMA()
1569 __HAL_LOCK(hsai); in HAL_SAI_Transmit_DMA()
1571 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_DMA()
1572 hsai->XferSize = Size; in HAL_SAI_Transmit_DMA()
1573 hsai->XferCount = Size; in HAL_SAI_Transmit_DMA()
1574 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_DMA()
1575 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_DMA()
1578 hsai->hdmatx->XferHalfCpltCallback = SAI_DMATxHalfCplt; in HAL_SAI_Transmit_DMA()
1581 hsai->hdmatx->XferCpltCallback = SAI_DMATxCplt; in HAL_SAI_Transmit_DMA()
1584 hsai->hdmatx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Transmit_DMA()
1587 hsai->hdmatx->XferAbortCallback = NULL; in HAL_SAI_Transmit_DMA()
1590 …if (HAL_DMA_Start_IT(hsai->hdmatx, (uint32_t)hsai->pBuffPtr, (uint32_t)&hsai->Instance->DR, hsai->… in HAL_SAI_Transmit_DMA()
1592 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1597 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Transmit_DMA()
1600 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Transmit_DMA()
1603 while ((hsai->Instance->SR & SAI_xSR_FLVL) == SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Transmit_DMA()
1609 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit_DMA()
1612 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1619 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_DMA()
1622 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_DMA()
1626 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1644 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_DMA() argument
1652 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_DMA()
1655 __HAL_LOCK(hsai); in HAL_SAI_Receive_DMA()
1657 hsai->pBuffPtr = pData; in HAL_SAI_Receive_DMA()
1658 hsai->XferSize = Size; in HAL_SAI_Receive_DMA()
1659 hsai->XferCount = Size; in HAL_SAI_Receive_DMA()
1660 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_DMA()
1661 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_DMA()
1664 hsai->hdmarx->XferHalfCpltCallback = SAI_DMARxHalfCplt; in HAL_SAI_Receive_DMA()
1667 hsai->hdmarx->XferCpltCallback = SAI_DMARxCplt; in HAL_SAI_Receive_DMA()
1670 hsai->hdmarx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Receive_DMA()
1673 hsai->hdmarx->XferAbortCallback = NULL; in HAL_SAI_Receive_DMA()
1676 …if (HAL_DMA_Start_IT(hsai->hdmarx, (uint32_t)&hsai->Instance->DR, (uint32_t)hsai->pBuffPtr, hsai->… in HAL_SAI_Receive_DMA()
1678 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1683 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Receive_DMA()
1686 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Receive_DMA()
1689 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_DMA()
1692 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_DMA()
1696 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1713 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) in HAL_SAI_EnableTxMuteMode() argument
1717 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableTxMuteMode()
1719 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_EnableTxMuteMode()
1720 SET_BIT(hsai->Instance->CR2, SAI_xCR2_MUTE | (uint32_t)val); in HAL_SAI_EnableTxMuteMode()
1732 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableTxMuteMode() argument
1734 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableTxMuteMode()
1736 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_DisableTxMuteMode()
1750 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t … in HAL_SAI_EnableRxMuteMode() argument
1754 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableRxMuteMode()
1757 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); in HAL_SAI_EnableRxMuteMode()
1758 SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); in HAL_SAI_EnableRxMuteMode()
1759 hsai->mutecallback = callback; in HAL_SAI_EnableRxMuteMode()
1761 __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_EnableRxMuteMode()
1773 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableRxMuteMode() argument
1775 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableRxMuteMode()
1778 hsai->mutecallback = NULL; in HAL_SAI_DisableRxMuteMode()
1780 __HAL_SAI_DISABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_DisableRxMuteMode()
1792 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) in HAL_SAI_IRQHandler() argument
1794 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_IRQHandler()
1796 uint32_t itflags = hsai->Instance->SR; in HAL_SAI_IRQHandler()
1797 uint32_t itsources = hsai->Instance->IMR; in HAL_SAI_IRQHandler()
1798 uint32_t cr1config = hsai->Instance->CR1; in HAL_SAI_IRQHandler()
1804 hsai->InterruptServiceRoutine(hsai); in HAL_SAI_IRQHandler()
1810 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in HAL_SAI_IRQHandler()
1812 tmperror = ((hsai->State == HAL_SAI_STATE_BUSY_RX) ? HAL_SAI_ERROR_OVR : HAL_SAI_ERROR_UDR); in HAL_SAI_IRQHandler()
1814 hsai->ErrorCode |= tmperror; in HAL_SAI_IRQHandler()
1817 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1819 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1826 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_MUTEDET); in HAL_SAI_IRQHandler()
1828 if (hsai->mutecallback != NULL) in HAL_SAI_IRQHandler()
1831 hsai->mutecallback(); in HAL_SAI_IRQHandler()
1838 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_AFSDET); in HAL_SAI_IRQHandler()
1841 hsai->ErrorCode |= HAL_SAI_ERROR_AFSDET; in HAL_SAI_IRQHandler()
1847 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1850 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1853 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1856 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1860 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1862 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1866 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1869 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1872 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1875 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1879 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1881 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1890 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1894 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1896 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1904 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_LFSDET); in HAL_SAI_IRQHandler()
1907 hsai->ErrorCode |= HAL_SAI_ERROR_LFSDET; in HAL_SAI_IRQHandler()
1913 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1916 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1919 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1922 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1926 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1928 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1932 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1935 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1938 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1941 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1945 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1947 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1956 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1960 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1962 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1970 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_WCKCFG); in HAL_SAI_IRQHandler()
1973 hsai->ErrorCode |= HAL_SAI_ERROR_WCKCFG; in HAL_SAI_IRQHandler()
1979 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1982 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1985 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1988 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1992 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1994 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1998 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
2001 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2004 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
2007 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2011 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2013 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2022 hsai->Instance->IMR = 0U; in HAL_SAI_IRQHandler()
2023 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_IRQHandler()
2025 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_IRQHandler()
2028 hsai->XferCount = 0U; in HAL_SAI_IRQHandler()
2032 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2034 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2042 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_CNRDY); in HAL_SAI_IRQHandler()
2044 hsai->ErrorCode |= HAL_SAI_ERROR_CNREADY; in HAL_SAI_IRQHandler()
2047 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2049 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2065 __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxCpltCallback() argument
2068 UNUSED(hsai); in HAL_SAI_TxCpltCallback()
2081 __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxHalfCpltCallback() argument
2084 UNUSED(hsai); in HAL_SAI_TxHalfCpltCallback()
2097 __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxCpltCallback() argument
2100 UNUSED(hsai); in HAL_SAI_RxCpltCallback()
2113 __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxHalfCpltCallback() argument
2116 UNUSED(hsai); in HAL_SAI_RxHalfCpltCallback()
2129 __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_ErrorCallback() argument
2132 UNUSED(hsai); in HAL_SAI_ErrorCallback()
2164 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetState() argument
2166 return hsai->State; in HAL_SAI_GetState()
2175 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetError() argument
2177 return hsai->ErrorCode; in HAL_SAI_GetError()
2204 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitI2S() argument
2208 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitI2S()
2209 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitI2S()
2211 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitI2S()
2214 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitI2S()
2219 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitI2S()
2221 hsai->FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; in SAI_InitI2S()
2222 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitI2S()
2223 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitI2S()
2224 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitI2S()
2234 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; in SAI_InitI2S()
2235 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitI2S()
2240 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitI2S()
2241 hsai->FrameInit.FSOffset = SAI_FS_FIRSTBIT; in SAI_InitI2S()
2248 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2249 hsai->FrameInit.FrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2250 hsai->FrameInit.ActiveFrameLength = 16U * (nbslot / 2U); in SAI_InitI2S()
2251 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitI2S()
2254 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2255 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2256 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2257 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2260 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitI2S()
2261 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2262 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2263 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2266 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitI2S()
2267 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2268 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2269 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2279 hsai->SlotInit.FirstBitOffset = 16; in SAI_InitI2S()
2283 hsai->SlotInit.FirstBitOffset = 8; in SAI_InitI2S()
2299 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitPCM() argument
2303 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitPCM()
2304 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitPCM()
2306 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitPCM()
2309 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitPCM()
2314 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitPCM()
2316 hsai->FrameInit.FSDefinition = SAI_FS_STARTFRAME; in SAI_InitPCM()
2317 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitPCM()
2318 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitPCM()
2319 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitPCM()
2320 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitPCM()
2321 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitPCM()
2325 hsai->FrameInit.ActiveFrameLength = 1; in SAI_InitPCM()
2330 hsai->FrameInit.ActiveFrameLength = 13; in SAI_InitPCM()
2336 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2337 hsai->FrameInit.FrameLength = 16U * nbslot; in SAI_InitPCM()
2338 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitPCM()
2341 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2342 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2343 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2346 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitPCM()
2347 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2348 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2351 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitPCM()
2352 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2353 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2369 static void SAI_FillFifo(SAI_HandleTypeDef *hsai) in SAI_FillFifo() argument
2374 while (((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) && (hsai->XferCount > 0U)) in SAI_FillFifo()
2376 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in SAI_FillFifo()
2378 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_FillFifo()
2379 hsai->pBuffPtr++; in SAI_FillFifo()
2381 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in SAI_FillFifo()
2383 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2384 hsai->pBuffPtr++; in SAI_FillFifo()
2385 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2386 hsai->pBuffPtr++; in SAI_FillFifo()
2387 hsai->Instance->DR = temp; in SAI_FillFifo()
2391 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2392 hsai->pBuffPtr++; in SAI_FillFifo()
2393 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2394 hsai->pBuffPtr++; in SAI_FillFifo()
2395 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_FillFifo()
2396 hsai->pBuffPtr++; in SAI_FillFifo()
2397 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_FillFifo()
2398 hsai->pBuffPtr++; in SAI_FillFifo()
2399 hsai->Instance->DR = temp; in SAI_FillFifo()
2401 hsai->XferCount--; in SAI_FillFifo()
2412 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode) in SAI_InterruptFlag() argument
2421 if ((hsai->Init.Protocol == SAI_AC97_PROTOCOL) && in SAI_InterruptFlag()
2422 ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODEMASTER_RX))) in SAI_InterruptFlag()
2427 if ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InterruptFlag()
2445 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) in SAI_Disable() argument
2451 __HAL_SAI_DISABLE(hsai); in SAI_Disable()
2459 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in SAI_Disable()
2465 while ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) != 0U); in SAI_Disable()
2476 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT8Bit() argument
2478 if (hsai->XferCount == 0U) in SAI_Transmit_IT8Bit()
2482 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT8Bit()
2483 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT8Bit()
2485 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2487 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2493 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_Transmit_IT8Bit()
2494 hsai->pBuffPtr++; in SAI_Transmit_IT8Bit()
2495 hsai->XferCount--; in SAI_Transmit_IT8Bit()
2505 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT16Bit() argument
2507 if (hsai->XferCount == 0U) in SAI_Transmit_IT16Bit()
2511 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT16Bit()
2512 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT16Bit()
2514 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2516 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2523 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT16Bit()
2524 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2525 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT16Bit()
2526 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2527 hsai->Instance->DR = temp; in SAI_Transmit_IT16Bit()
2528 hsai->XferCount--; in SAI_Transmit_IT16Bit()
2538 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT32Bit() argument
2540 if (hsai->XferCount == 0U) in SAI_Transmit_IT32Bit()
2544 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT32Bit()
2545 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT32Bit()
2547 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2549 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2556 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT32Bit()
2557 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2558 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT32Bit()
2559 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2560 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_Transmit_IT32Bit()
2561 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2562 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_Transmit_IT32Bit()
2563 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2564 hsai->Instance->DR = temp; in SAI_Transmit_IT32Bit()
2565 hsai->XferCount--; in SAI_Transmit_IT32Bit()
2575 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT8Bit() argument
2578 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in SAI_Receive_IT8Bit()
2579 hsai->pBuffPtr++; in SAI_Receive_IT8Bit()
2580 hsai->XferCount--; in SAI_Receive_IT8Bit()
2583 if (hsai->XferCount == 0U) in SAI_Receive_IT8Bit()
2586 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT8Bit()
2589 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT8Bit()
2591 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT8Bit()
2593 hsai->RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2595 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2606 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT16Bit() argument
2611 temp = hsai->Instance->DR; in SAI_Receive_IT16Bit()
2612 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT16Bit()
2613 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2614 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT16Bit()
2615 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2616 hsai->XferCount--; in SAI_Receive_IT16Bit()
2619 if (hsai->XferCount == 0U) in SAI_Receive_IT16Bit()
2622 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT16Bit()
2625 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT16Bit()
2627 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT16Bit()
2629 hsai->RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2631 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2642 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT32Bit() argument
2647 temp = hsai->Instance->DR; in SAI_Receive_IT32Bit()
2648 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT32Bit()
2649 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2650 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT32Bit()
2651 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2652 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in SAI_Receive_IT32Bit()
2653 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2654 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in SAI_Receive_IT32Bit()
2655 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2656 hsai->XferCount--; in SAI_Receive_IT32Bit()
2659 if (hsai->XferCount == 0U) in SAI_Receive_IT32Bit()
2662 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT32Bit()
2665 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT32Bit()
2667 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT32Bit()
2669 hsai->RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2671 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2684 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxCplt() local
2688 hsai->XferCount = 0; in SAI_DMATxCplt()
2691 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMATxCplt()
2694 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMATxCplt()
2696 hsai->State = HAL_SAI_STATE_READY; in SAI_DMATxCplt()
2699 hsai->TxCpltCallback(hsai); in SAI_DMATxCplt()
2701 HAL_SAI_TxCpltCallback(hsai); in SAI_DMATxCplt()
2713 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxHalfCplt() local
2716 hsai->TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2718 HAL_SAI_TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2730 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxCplt() local
2735 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMARxCplt()
2736 hsai->XferCount = 0; in SAI_DMARxCplt()
2739 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMARxCplt()
2741 hsai->State = HAL_SAI_STATE_READY; in SAI_DMARxCplt()
2744 hsai->RxCpltCallback(hsai); in SAI_DMARxCplt()
2746 HAL_SAI_RxCpltCallback(hsai); in SAI_DMARxCplt()
2758 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxHalfCplt() local
2761 hsai->RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2763 HAL_SAI_RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2775 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAError() local
2778 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in SAI_DMAError()
2781 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAError()
2785 (void) SAI_Disable(hsai); in SAI_DMAError()
2788 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAError()
2791 hsai->XferCount = 0U; in SAI_DMAError()
2795 hsai->ErrorCallback(hsai); in SAI_DMAError()
2797 HAL_SAI_ErrorCallback(hsai); in SAI_DMAError()
2809 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAAbort() local
2812 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAAbort()
2815 hsai->Instance->IMR = 0U; in SAI_DMAAbort()
2816 hsai->Instance->CLRFR = 0xFFFFFFFFU; in SAI_DMAAbort()
2818 if (hsai->ErrorCode != HAL_SAI_ERROR_WCKCFG) in SAI_DMAAbort()
2822 (void) SAI_Disable(hsai); in SAI_DMAAbort()
2825 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in SAI_DMAAbort()
2828 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAAbort()
2831 hsai->XferCount = 0U; in SAI_DMAAbort()
2835 hsai->ErrorCallback(hsai); in SAI_DMAAbort()
2837 HAL_SAI_ErrorCallback(hsai); in SAI_DMAAbort()