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_MCK_OUTPUT(hsai->Init.MckOutput)); in HAL_SAI_Init()
396 assert_param(IS_SAI_BLOCK_OUTPUT_DRIVE(hsai->Init.OutputDrive)); in HAL_SAI_Init()
397 assert_param(IS_SAI_BLOCK_NODIVIDER(hsai->Init.NoDivider)); in HAL_SAI_Init()
398 assert_param(IS_SAI_BLOCK_FIFO_THRESHOLD(hsai->Init.FIFOThreshold)); in HAL_SAI_Init()
399 assert_param(IS_SAI_MONO_STEREO_MODE(hsai->Init.MonoStereoMode)); in HAL_SAI_Init()
400 assert_param(IS_SAI_BLOCK_COMPANDING_MODE(hsai->Init.CompandingMode)); in HAL_SAI_Init()
401 assert_param(IS_SAI_BLOCK_TRISTATE_MANAGEMENT(hsai->Init.TriState)); in HAL_SAI_Init()
402 assert_param(IS_SAI_BLOCK_SYNCEXT(hsai->Init.SynchroExt)); in HAL_SAI_Init()
403 assert_param(IS_SAI_BLOCK_MCK_OVERSAMPLING(hsai->Init.MckOverSampling)); in HAL_SAI_Init()
406 assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); in HAL_SAI_Init()
407 assert_param(IS_SAI_BLOCK_ACTIVE_FRAME(hsai->FrameInit.ActiveFrameLength)); in HAL_SAI_Init()
408 assert_param(IS_SAI_BLOCK_FS_DEFINITION(hsai->FrameInit.FSDefinition)); in HAL_SAI_Init()
409 assert_param(IS_SAI_BLOCK_FS_POLARITY(hsai->FrameInit.FSPolarity)); in HAL_SAI_Init()
410 assert_param(IS_SAI_BLOCK_FS_OFFSET(hsai->FrameInit.FSOffset)); in HAL_SAI_Init()
413 assert_param(IS_SAI_BLOCK_FIRSTBIT_OFFSET(hsai->SlotInit.FirstBitOffset)); in HAL_SAI_Init()
414 assert_param(IS_SAI_BLOCK_SLOT_SIZE(hsai->SlotInit.SlotSize)); in HAL_SAI_Init()
415 assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); in HAL_SAI_Init()
416 assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); in HAL_SAI_Init()
419 assert_param(IS_FUNCTIONAL_STATE(hsai->Init.PdmInit.Activation)); in HAL_SAI_Init()
420 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
422 assert_param(IS_SAI_PDM_MIC_PAIRS_NUMBER(hsai->Init.PdmInit.MicPairsNbr)); in HAL_SAI_Init()
423 assert_param(IS_SAI_PDM_CLOCK_ENABLE(hsai->Init.PdmInit.ClockEnable)); in HAL_SAI_Init()
425 if ((hsai->Instance != SAI1_Block_A) || in HAL_SAI_Init()
426 (hsai->Init.AudioMode != SAI_MODEMASTER_RX) || in HAL_SAI_Init()
427 (hsai->Init.Protocol != SAI_FREE_PROTOCOL)) in HAL_SAI_Init()
433 if (hsai->State == HAL_SAI_STATE_RESET) in HAL_SAI_Init()
436 hsai->Lock = HAL_UNLOCKED; in HAL_SAI_Init()
440 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_Init()
441 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_Init()
442 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_Init()
443 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_Init()
444 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_Init()
447 if (hsai->MspInitCallback == NULL) in HAL_SAI_Init()
449 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_Init()
451 hsai->MspInitCallback(hsai); in HAL_SAI_Init()
454 HAL_SAI_MspInit(hsai); in HAL_SAI_Init()
459 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Init()
464 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_Init()
469 switch (hsai->Init.SynchroExt) in HAL_SAI_Init()
486 switch (hsai->Init.Synchro) in HAL_SAI_Init()
509 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
521 if (hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) in HAL_SAI_Init()
528 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
545 if (hsai->Init.NoDivider == SAI_MASTERDIVIDER_DISABLE) in HAL_SAI_Init()
550 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
555 else if (hsai->Init.Protocol == SAI_AC97_PROTOCOL) in HAL_SAI_Init()
563 tmpframelength = hsai->FrameInit.FrameLength; in HAL_SAI_Init()
567 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmpframelength); in HAL_SAI_Init()
573 tmposr = (hsai->Init.MckOverSampling == SAI_MCK_OVERSAMPLING_ENABLE) ? 2U : 1U; in HAL_SAI_Init()
575 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmposr * 256U); in HAL_SAI_Init()
577 hsai->Init.Mckdiv = tmpval / 10U; in HAL_SAI_Init()
582 hsai->Init.Mckdiv += 1U; in HAL_SAI_Init()
586 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
588 hsai->Init.Mckdiv = hsai->Init.Mckdiv >> 1; in HAL_SAI_Init()
593 assert_param(IS_SAI_BLOCK_MASTER_DIVIDER(hsai->Init.Mckdiv)); in HAL_SAI_Init()
596 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in HAL_SAI_Init()
599 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? 0U : SAI_xCR1_CKSTR; in HAL_SAI_Init()
604 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? SAI_xCR1_CKSTR : 0U; in HAL_SAI_Init()
609 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
615 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
616 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
618 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
619 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ in HAL_SAI_Init()
620 hsai->Init.MckOverSampling | hsai->Init.MckOutput); in HAL_SAI_Init()
623 hsai->Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); in HAL_SAI_Init()
624hsai->Instance->CR2 |= (hsai->Init.FIFOThreshold | hsai->Init.CompandingMode | hsai->Init.TriState… in HAL_SAI_Init()
627 hsai->Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \ in HAL_SAI_Init()
629 hsai->Instance->FRCR |= ((hsai->FrameInit.FrameLength - 1U) | in HAL_SAI_Init()
630 hsai->FrameInit.FSOffset | in HAL_SAI_Init()
631 hsai->FrameInit.FSDefinition | in HAL_SAI_Init()
632 hsai->FrameInit.FSPolarity | in HAL_SAI_Init()
633 ((hsai->FrameInit.ActiveFrameLength - 1U) << 8)); in HAL_SAI_Init()
637 hsai->Instance->SLOTR &= (~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \ in HAL_SAI_Init()
640 hsai->Instance->SLOTR |= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize | \ in HAL_SAI_Init()
641 … (hsai->SlotInit.SlotActive << 16) | ((hsai->SlotInit.SlotNumber - 1U) << 8); in HAL_SAI_Init()
644 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_Init()
648 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
651 SAI1->PDMCR = (hsai->Init.PdmInit.ClockEnable | in HAL_SAI_Init()
652 ((hsai->Init.PdmInit.MicPairsNbr - 1U) << SAI_PDMCR_MICNBR_Pos)); in HAL_SAI_Init()
658 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Init()
661 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Init()
664 __HAL_UNLOCK(hsai); in HAL_SAI_Init()
675 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_DeInit() argument
678 if (hsai == NULL) in HAL_SAI_DeInit()
683 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_DeInit()
686 hsai->Instance->IMR = 0; in HAL_SAI_DeInit()
687 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_DeInit()
690 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DeInit()
693 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DeInit()
696 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
702 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DeInit()
705 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_DeInit()
716 if (hsai->MspDeInitCallback == NULL) in HAL_SAI_DeInit()
718 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_DeInit()
720 hsai->MspDeInitCallback(hsai); in HAL_SAI_DeInit()
722 HAL_SAI_MspDeInit(hsai); in HAL_SAI_DeInit()
726 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_DeInit()
729 hsai->State = HAL_SAI_STATE_RESET; in HAL_SAI_DeInit()
732 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
743 __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspInit() argument
746 UNUSED(hsai); in HAL_SAI_MspInit()
759 __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspDeInit() argument
762 UNUSED(hsai); in HAL_SAI_MspDeInit()
786 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_RegisterCallback() argument
795 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
801 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_RegisterCallback()
806 hsai->RxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
809 hsai->RxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
812 hsai->TxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
815 hsai->TxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
818 hsai->ErrorCallback = pCallback; in HAL_SAI_RegisterCallback()
821 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
824 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
828 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
834 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_RegisterCallback()
839 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
842 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
846 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
855 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
878 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_UnRegisterCallback() argument
883 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_UnRegisterCallback()
888 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_UnRegisterCallback()
891 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
894 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_UnRegisterCallback()
897 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
900 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_UnRegisterCallback()
903 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
906 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
910 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
916 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_UnRegisterCallback()
921 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
924 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
928 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
937 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
1000 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t… in HAL_SAI_Transmit() argument
1010 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit()
1013 __HAL_LOCK(hsai); in HAL_SAI_Transmit()
1015 hsai->XferSize = Size; in HAL_SAI_Transmit()
1016 hsai->XferCount = Size; in HAL_SAI_Transmit()
1017 hsai->pBuffPtr = pData; in HAL_SAI_Transmit()
1018 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit()
1019 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit()
1022 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit()
1025 SAI_FillFifo(hsai); in HAL_SAI_Transmit()
1027 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit()
1030 while (hsai->XferCount > 0U) in HAL_SAI_Transmit()
1033 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) in HAL_SAI_Transmit()
1035 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit()
1037 hsai->Instance->DR = *hsai->pBuffPtr; in HAL_SAI_Transmit()
1038 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1040 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit()
1042 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1043 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1044 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1045 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1046 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1050 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1051 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1052 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1053 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1054 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in HAL_SAI_Transmit()
1055 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1056 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in HAL_SAI_Transmit()
1057 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1058 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1060 hsai->XferCount--; in HAL_SAI_Transmit()
1068 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit()
1071 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Transmit()
1075 (void) SAI_Disable(hsai); in HAL_SAI_Transmit()
1078 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Transmit()
1081 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1084 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1091 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1094 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1113 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SAI_Receive() argument
1123 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive()
1126 __HAL_LOCK(hsai); in HAL_SAI_Receive()
1128 hsai->pBuffPtr = pData; in HAL_SAI_Receive()
1129 hsai->XferSize = Size; in HAL_SAI_Receive()
1130 hsai->XferCount = Size; in HAL_SAI_Receive()
1131 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive()
1132 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive()
1135 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive()
1138 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive()
1142 while (hsai->XferCount > 0U) in HAL_SAI_Receive()
1144 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Receive()
1146 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive()
1148 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in HAL_SAI_Receive()
1149 hsai->pBuffPtr++; in HAL_SAI_Receive()
1151 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive()
1153 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1154 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1155 hsai->pBuffPtr++; in HAL_SAI_Receive()
1156 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1157 hsai->pBuffPtr++; in HAL_SAI_Receive()
1161 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1162 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1163 hsai->pBuffPtr++; in HAL_SAI_Receive()
1164 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1165 hsai->pBuffPtr++; in HAL_SAI_Receive()
1166 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in HAL_SAI_Receive()
1167 hsai->pBuffPtr++; in HAL_SAI_Receive()
1168 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in HAL_SAI_Receive()
1169 hsai->pBuffPtr++; in HAL_SAI_Receive()
1171 hsai->XferCount--; in HAL_SAI_Receive()
1179 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Receive()
1182 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Receive()
1186 (void) SAI_Disable(hsai); in HAL_SAI_Receive()
1189 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Receive()
1192 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1195 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1202 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1205 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1223 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_IT() argument
1230 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_IT()
1233 __HAL_LOCK(hsai); in HAL_SAI_Transmit_IT()
1235 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_IT()
1236 hsai->XferSize = Size; in HAL_SAI_Transmit_IT()
1237 hsai->XferCount = Size; in HAL_SAI_Transmit_IT()
1238 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_IT()
1239 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_IT()
1241 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_IT()
1243 hsai->InterruptServiceRoutine = SAI_Transmit_IT8Bit; in HAL_SAI_Transmit_IT()
1245 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_IT()
1247 hsai->InterruptServiceRoutine = SAI_Transmit_IT16Bit; in HAL_SAI_Transmit_IT()
1251 hsai->InterruptServiceRoutine = SAI_Transmit_IT32Bit; in HAL_SAI_Transmit_IT()
1255 SAI_FillFifo(hsai); in HAL_SAI_Transmit_IT()
1258 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Transmit_IT()
1261 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_IT()
1264 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_IT()
1267 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_IT()
1285 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_IT() argument
1292 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_IT()
1295 __HAL_LOCK(hsai); in HAL_SAI_Receive_IT()
1297 hsai->pBuffPtr = pData; in HAL_SAI_Receive_IT()
1298 hsai->XferSize = Size; in HAL_SAI_Receive_IT()
1299 hsai->XferCount = Size; in HAL_SAI_Receive_IT()
1300 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_IT()
1301 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_IT()
1303 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_IT()
1305 hsai->InterruptServiceRoutine = SAI_Receive_IT8Bit; in HAL_SAI_Receive_IT()
1307 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_IT()
1309 hsai->InterruptServiceRoutine = SAI_Receive_IT16Bit; in HAL_SAI_Receive_IT()
1313 hsai->InterruptServiceRoutine = SAI_Receive_IT32Bit; in HAL_SAI_Receive_IT()
1317 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Receive_IT()
1320 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_IT()
1323 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_IT()
1327 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_IT()
1343 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAPause() argument
1346 __HAL_LOCK(hsai); in HAL_SAI_DMAPause()
1349 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAPause()
1352 __HAL_UNLOCK(hsai); in HAL_SAI_DMAPause()
1363 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAResume() argument
1366 __HAL_LOCK(hsai); in HAL_SAI_DMAResume()
1369 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_DMAResume()
1372 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_DMAResume()
1375 __HAL_SAI_ENABLE(hsai); in HAL_SAI_DMAResume()
1379 __HAL_UNLOCK(hsai); in HAL_SAI_DMAResume()
1390 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAStop() argument
1395 __HAL_LOCK(hsai); in HAL_SAI_DMAStop()
1398 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DMAStop()
1404 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAStop()
1407 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_DMAStop()
1409 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_DMAStop()
1412 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1415 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1421 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_DMAStop()
1423 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_DMAStop()
1426 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1429 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1435 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DMAStop()
1438 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DMAStop()
1441 __HAL_UNLOCK(hsai); in HAL_SAI_DMAStop()
1452 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) in HAL_SAI_Abort() argument
1457 __HAL_LOCK(hsai); in HAL_SAI_Abort()
1460 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Abort()
1466 if ((hsai->Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN) in HAL_SAI_Abort()
1469 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_Abort()
1472 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_Abort()
1474 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_Abort()
1477 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1480 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1486 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_Abort()
1488 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_Abort()
1491 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1494 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1501 hsai->Instance->IMR = 0; in HAL_SAI_Abort()
1502 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Abort()
1505 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Abort()
1508 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Abort()
1511 __HAL_UNLOCK(hsai); in HAL_SAI_Abort()
1524 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_DMA() argument
1534 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_DMA()
1539 __HAL_LOCK(hsai); in HAL_SAI_Transmit_DMA()
1541 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_DMA()
1542 hsai->XferSize = Size; in HAL_SAI_Transmit_DMA()
1543 hsai->XferCount = Size; in HAL_SAI_Transmit_DMA()
1544 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_DMA()
1545 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_DMA()
1548 hsai->hdmatx->XferHalfCpltCallback = SAI_DMATxHalfCplt; in HAL_SAI_Transmit_DMA()
1551 hsai->hdmatx->XferCpltCallback = SAI_DMATxCplt; in HAL_SAI_Transmit_DMA()
1554 hsai->hdmatx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Transmit_DMA()
1557 hsai->hdmatx->XferAbortCallback = NULL; in HAL_SAI_Transmit_DMA()
1561 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_DMA()
1565 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_DMA()
1575 if ((hsai->hdmatx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SAI_Transmit_DMA()
1577 if (hsai->hdmatx->LinkedListQueue != NULL) in HAL_SAI_Transmit_DMA()
1580 hsai->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = dmaSrcSize; in HAL_SAI_Transmit_DMA()
1583hsai->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)hsai->pBu… in HAL_SAI_Transmit_DMA()
1586hsai->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)&hsai->In… in HAL_SAI_Transmit_DMA()
1588 status = HAL_DMAEx_List_Start_IT(hsai->hdmatx); in HAL_SAI_Transmit_DMA()
1592 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1598 …status = HAL_DMA_Start_IT(hsai->hdmatx, (uint32_t)hsai->pBuffPtr, (uint32_t)&hsai->Instance->DR, d… in HAL_SAI_Transmit_DMA()
1603 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1608 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Transmit_DMA()
1611 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Transmit_DMA()
1614 while ((hsai->Instance->SR & SAI_xSR_FLVL) == SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Transmit_DMA()
1620 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit_DMA()
1623 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1630 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_DMA()
1633 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_DMA()
1637 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1655 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_DMA() argument
1664 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_DMA()
1669 __HAL_LOCK(hsai); in HAL_SAI_Receive_DMA()
1671 hsai->pBuffPtr = pData; in HAL_SAI_Receive_DMA()
1672 hsai->XferSize = Size; in HAL_SAI_Receive_DMA()
1673 hsai->XferCount = Size; in HAL_SAI_Receive_DMA()
1674 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_DMA()
1675 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_DMA()
1678 hsai->hdmarx->XferHalfCpltCallback = SAI_DMARxHalfCplt; in HAL_SAI_Receive_DMA()
1681 hsai->hdmarx->XferCpltCallback = SAI_DMARxCplt; in HAL_SAI_Receive_DMA()
1684 hsai->hdmarx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Receive_DMA()
1687 hsai->hdmarx->XferAbortCallback = NULL; in HAL_SAI_Receive_DMA()
1691 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_DMA()
1695 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_DMA()
1705 if ((hsai->hdmarx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SAI_Receive_DMA()
1707 if (hsai->hdmarx->LinkedListQueue != NULL) in HAL_SAI_Receive_DMA()
1710 hsai->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = dmaSrcSize; in HAL_SAI_Receive_DMA()
1713hsai->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)&hsai->In… in HAL_SAI_Receive_DMA()
1716hsai->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)hsai->pBu… in HAL_SAI_Receive_DMA()
1718 status = HAL_DMAEx_List_Start_IT(hsai->hdmarx); in HAL_SAI_Receive_DMA()
1722 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1728 …status = HAL_DMA_Start_IT(hsai->hdmarx, (uint32_t)&hsai->Instance->DR, (uint32_t)hsai->pBuffPtr, d… in HAL_SAI_Receive_DMA()
1733 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1738 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Receive_DMA()
1741 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Receive_DMA()
1744 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_DMA()
1747 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_DMA()
1751 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1768 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) in HAL_SAI_EnableTxMuteMode() argument
1772 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableTxMuteMode()
1774 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_EnableTxMuteMode()
1775 SET_BIT(hsai->Instance->CR2, SAI_xCR2_MUTE | (uint32_t)val); in HAL_SAI_EnableTxMuteMode()
1787 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableTxMuteMode() argument
1789 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableTxMuteMode()
1791 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_DisableTxMuteMode()
1805 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t … in HAL_SAI_EnableRxMuteMode() argument
1809 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableRxMuteMode()
1812 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); in HAL_SAI_EnableRxMuteMode()
1813 SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); in HAL_SAI_EnableRxMuteMode()
1814 hsai->mutecallback = callback; in HAL_SAI_EnableRxMuteMode()
1816 __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_EnableRxMuteMode()
1828 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableRxMuteMode() argument
1830 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableRxMuteMode()
1833 hsai->mutecallback = NULL; in HAL_SAI_DisableRxMuteMode()
1835 __HAL_SAI_DISABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_DisableRxMuteMode()
1847 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) in HAL_SAI_IRQHandler() argument
1849 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_IRQHandler()
1851 uint32_t itflags = hsai->Instance->SR; in HAL_SAI_IRQHandler()
1852 uint32_t itsources = hsai->Instance->IMR; in HAL_SAI_IRQHandler()
1853 uint32_t cr1config = hsai->Instance->CR1; in HAL_SAI_IRQHandler()
1859 hsai->InterruptServiceRoutine(hsai); in HAL_SAI_IRQHandler()
1865 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in HAL_SAI_IRQHandler()
1867 tmperror = ((hsai->State == HAL_SAI_STATE_BUSY_RX) ? HAL_SAI_ERROR_OVR : HAL_SAI_ERROR_UDR); in HAL_SAI_IRQHandler()
1869 hsai->ErrorCode |= tmperror; in HAL_SAI_IRQHandler()
1873 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1875 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1882 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_MUTEDET); in HAL_SAI_IRQHandler()
1884 if (hsai->mutecallback != NULL) in HAL_SAI_IRQHandler()
1887 hsai->mutecallback(); in HAL_SAI_IRQHandler()
1894 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_AFSDET); in HAL_SAI_IRQHandler()
1897 hsai->ErrorCode |= HAL_SAI_ERROR_AFSDET; in HAL_SAI_IRQHandler()
1903 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1906 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1909 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1912 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1916 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1918 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1922 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1925 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1928 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1931 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1935 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1937 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1946 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1950 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1952 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1960 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_LFSDET); in HAL_SAI_IRQHandler()
1963 hsai->ErrorCode |= HAL_SAI_ERROR_LFSDET; in HAL_SAI_IRQHandler()
1969 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1972 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1975 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1978 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1982 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1984 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1988 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1991 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1994 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1997 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2001 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2003 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2012 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
2016 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2018 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2026 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_WCKCFG); in HAL_SAI_IRQHandler()
2029 hsai->ErrorCode |= HAL_SAI_ERROR_WCKCFG; in HAL_SAI_IRQHandler()
2035 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
2038 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2041 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
2044 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2048 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2050 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2054 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
2057 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2060 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
2063 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2067 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2069 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2078 hsai->Instance->IMR = 0U; in HAL_SAI_IRQHandler()
2079 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_IRQHandler()
2081 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_IRQHandler()
2084 hsai->XferCount = 0U; in HAL_SAI_IRQHandler()
2088 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2090 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2098 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_CNRDY); in HAL_SAI_IRQHandler()
2100 hsai->ErrorCode |= HAL_SAI_ERROR_CNREADY; in HAL_SAI_IRQHandler()
2104 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2106 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2122 __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxCpltCallback() argument
2125 UNUSED(hsai); in HAL_SAI_TxCpltCallback()
2138 __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxHalfCpltCallback() argument
2141 UNUSED(hsai); in HAL_SAI_TxHalfCpltCallback()
2154 __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxCpltCallback() argument
2157 UNUSED(hsai); in HAL_SAI_RxCpltCallback()
2170 __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxHalfCpltCallback() argument
2173 UNUSED(hsai); in HAL_SAI_RxHalfCpltCallback()
2186 __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_ErrorCallback() argument
2189 UNUSED(hsai); in HAL_SAI_ErrorCallback()
2221 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetState() argument
2223 return hsai->State; in HAL_SAI_GetState()
2232 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetError() argument
2234 return hsai->ErrorCode; in HAL_SAI_GetError()
2261 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitI2S() argument
2265 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitI2S()
2266 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitI2S()
2268 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitI2S()
2271 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitI2S()
2276 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitI2S()
2278 hsai->FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; in SAI_InitI2S()
2279 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitI2S()
2280 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitI2S()
2281 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitI2S()
2291 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; in SAI_InitI2S()
2292 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitI2S()
2297 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitI2S()
2298 hsai->FrameInit.FSOffset = SAI_FS_FIRSTBIT; in SAI_InitI2S()
2305 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2306 hsai->FrameInit.FrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2307 hsai->FrameInit.ActiveFrameLength = 16U * (nbslot / 2U); in SAI_InitI2S()
2308 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitI2S()
2311 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2312 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2313 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2314 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2317 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitI2S()
2318 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2319 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2320 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2323 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitI2S()
2324 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2325 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2326 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2336 hsai->SlotInit.FirstBitOffset = 16; in SAI_InitI2S()
2340 hsai->SlotInit.FirstBitOffset = 8; in SAI_InitI2S()
2356 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitPCM() argument
2360 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitPCM()
2361 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitPCM()
2363 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitPCM()
2366 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitPCM()
2371 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitPCM()
2373 hsai->FrameInit.FSDefinition = SAI_FS_STARTFRAME; in SAI_InitPCM()
2374 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitPCM()
2375 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitPCM()
2376 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitPCM()
2377 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitPCM()
2378 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitPCM()
2382 hsai->FrameInit.ActiveFrameLength = 1; in SAI_InitPCM()
2387 hsai->FrameInit.ActiveFrameLength = 13; in SAI_InitPCM()
2393 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2394 hsai->FrameInit.FrameLength = 16U * nbslot; in SAI_InitPCM()
2395 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitPCM()
2398 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2399 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2400 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2403 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitPCM()
2404 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2405 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2408 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitPCM()
2409 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2410 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2426 static void SAI_FillFifo(SAI_HandleTypeDef *hsai) in SAI_FillFifo() argument
2431 while (((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) && (hsai->XferCount > 0U)) in SAI_FillFifo()
2433 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in SAI_FillFifo()
2435 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_FillFifo()
2436 hsai->pBuffPtr++; in SAI_FillFifo()
2438 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in SAI_FillFifo()
2440 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2441 hsai->pBuffPtr++; in SAI_FillFifo()
2442 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2443 hsai->pBuffPtr++; in SAI_FillFifo()
2444 hsai->Instance->DR = temp; in SAI_FillFifo()
2448 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2449 hsai->pBuffPtr++; in SAI_FillFifo()
2450 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2451 hsai->pBuffPtr++; in SAI_FillFifo()
2452 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_FillFifo()
2453 hsai->pBuffPtr++; in SAI_FillFifo()
2454 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_FillFifo()
2455 hsai->pBuffPtr++; in SAI_FillFifo()
2456 hsai->Instance->DR = temp; in SAI_FillFifo()
2458 hsai->XferCount--; in SAI_FillFifo()
2469 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode) in SAI_InterruptFlag() argument
2478 if ((hsai->Init.Protocol == SAI_AC97_PROTOCOL) && in SAI_InterruptFlag()
2479 ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODEMASTER_RX))) in SAI_InterruptFlag()
2484 if ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InterruptFlag()
2502 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) in SAI_Disable() argument
2508 __HAL_SAI_DISABLE(hsai); in SAI_Disable()
2516 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in SAI_Disable()
2521 } while ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) != 0U); in SAI_Disable()
2532 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT8Bit() argument
2534 if (hsai->XferCount == 0U) in SAI_Transmit_IT8Bit()
2538 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT8Bit()
2539 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT8Bit()
2541 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2543 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2549 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_Transmit_IT8Bit()
2550 hsai->pBuffPtr++; in SAI_Transmit_IT8Bit()
2551 hsai->XferCount--; in SAI_Transmit_IT8Bit()
2561 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT16Bit() argument
2563 if (hsai->XferCount == 0U) in SAI_Transmit_IT16Bit()
2567 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT16Bit()
2568 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT16Bit()
2570 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2572 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2579 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT16Bit()
2580 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2581 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT16Bit()
2582 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2583 hsai->Instance->DR = temp; in SAI_Transmit_IT16Bit()
2584 hsai->XferCount--; in SAI_Transmit_IT16Bit()
2594 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT32Bit() argument
2596 if (hsai->XferCount == 0U) in SAI_Transmit_IT32Bit()
2600 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT32Bit()
2601 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT32Bit()
2603 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2605 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2612 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT32Bit()
2613 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2614 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT32Bit()
2615 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2616 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_Transmit_IT32Bit()
2617 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2618 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_Transmit_IT32Bit()
2619 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2620 hsai->Instance->DR = temp; in SAI_Transmit_IT32Bit()
2621 hsai->XferCount--; in SAI_Transmit_IT32Bit()
2631 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT8Bit() argument
2634 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in SAI_Receive_IT8Bit()
2635 hsai->pBuffPtr++; in SAI_Receive_IT8Bit()
2636 hsai->XferCount--; in SAI_Receive_IT8Bit()
2639 if (hsai->XferCount == 0U) in SAI_Receive_IT8Bit()
2642 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT8Bit()
2645 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT8Bit()
2647 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT8Bit()
2649 hsai->RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2651 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2662 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT16Bit() argument
2667 temp = hsai->Instance->DR; in SAI_Receive_IT16Bit()
2668 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT16Bit()
2669 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2670 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT16Bit()
2671 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2672 hsai->XferCount--; in SAI_Receive_IT16Bit()
2675 if (hsai->XferCount == 0U) in SAI_Receive_IT16Bit()
2678 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT16Bit()
2681 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT16Bit()
2683 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT16Bit()
2685 hsai->RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2687 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2698 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT32Bit() argument
2703 temp = hsai->Instance->DR; in SAI_Receive_IT32Bit()
2704 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT32Bit()
2705 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2706 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT32Bit()
2707 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2708 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in SAI_Receive_IT32Bit()
2709 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2710 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in SAI_Receive_IT32Bit()
2711 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2712 hsai->XferCount--; in SAI_Receive_IT32Bit()
2715 if (hsai->XferCount == 0U) in SAI_Receive_IT32Bit()
2718 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT32Bit()
2721 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT32Bit()
2723 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT32Bit()
2725 hsai->RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2727 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2740 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxCplt() local
2745 hsai->XferCount = 0; in SAI_DMATxCplt()
2748 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMATxCplt()
2751 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMATxCplt()
2753 hsai->State = HAL_SAI_STATE_READY; in SAI_DMATxCplt()
2757 hsai->TxCpltCallback(hsai); in SAI_DMATxCplt()
2759 HAL_SAI_TxCpltCallback(hsai); in SAI_DMATxCplt()
2771 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxHalfCplt() local
2774 hsai->TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2776 HAL_SAI_TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2788 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxCplt() local
2794 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMARxCplt()
2795 hsai->XferCount = 0; in SAI_DMARxCplt()
2798 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMARxCplt()
2800 hsai->State = HAL_SAI_STATE_READY; in SAI_DMARxCplt()
2804 hsai->RxCpltCallback(hsai); in SAI_DMARxCplt()
2806 HAL_SAI_RxCpltCallback(hsai); in SAI_DMARxCplt()
2818 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxHalfCplt() local
2821 hsai->RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2823 HAL_SAI_RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2835 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAError() local
2838 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in SAI_DMAError()
2841 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAError()
2845 (void) SAI_Disable(hsai); in SAI_DMAError()
2848 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAError()
2851 hsai->XferCount = 0U; in SAI_DMAError()
2855 hsai->ErrorCallback(hsai); in SAI_DMAError()
2857 HAL_SAI_ErrorCallback(hsai); in SAI_DMAError()
2869 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAAbort() local
2872 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAAbort()
2875 hsai->Instance->IMR = 0U; in SAI_DMAAbort()
2876 hsai->Instance->CLRFR = 0xFFFFFFFFU; in SAI_DMAAbort()
2878 if (hsai->ErrorCode != HAL_SAI_ERROR_WCKCFG) in SAI_DMAAbort()
2882 (void) SAI_Disable(hsai); in SAI_DMAAbort()
2885 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in SAI_DMAAbort()
2888 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAAbort()
2891 hsai->XferCount = 0U; in SAI_DMAAbort()
2895 hsai->ErrorCallback(hsai); in SAI_DMAAbort()
2897 HAL_SAI_ErrorCallback(hsai); in SAI_DMAAbort()