Lines Matching refs:hsai
262 static void SAI_FillFifo(SAI_HandleTypeDef *hsai);
263 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, uint32_t mode);
264 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
265 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
267 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai);
268 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai);
269 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai);
270 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai);
271 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai);
272 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai);
273 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai);
333 HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasiz… in HAL_SAI_InitProtocol() argument
346 status = SAI_InitI2S(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
350 status = SAI_InitPCM(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
359 status = HAL_SAI_Init(hsai); in HAL_SAI_InitProtocol()
372 HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) in HAL_SAI_Init() argument
385 if (hsai == NULL) in HAL_SAI_Init()
391 assert_param(IS_SAI_ALL_INSTANCE(hsai->Instance)); in HAL_SAI_Init()
394 assert_param(IS_SAI_AUDIO_FREQUENCY(hsai->Init.AudioFrequency)); in HAL_SAI_Init()
395 assert_param(IS_SAI_BLOCK_PROTOCOL(hsai->Init.Protocol)); in HAL_SAI_Init()
396 assert_param(IS_SAI_BLOCK_MODE(hsai->Init.AudioMode)); in HAL_SAI_Init()
397 assert_param(IS_SAI_BLOCK_SYNCEXT(hsai->Init.SynchroExt)); in HAL_SAI_Init()
398 assert_param(IS_SAI_BLOCK_DATASIZE(hsai->Init.DataSize)); in HAL_SAI_Init()
399 assert_param(IS_SAI_BLOCK_FIRST_BIT(hsai->Init.FirstBit)); in HAL_SAI_Init()
400 assert_param(IS_SAI_BLOCK_CLOCK_STROBING(hsai->Init.ClockStrobing)); in HAL_SAI_Init()
401 assert_param(IS_SAI_BLOCK_SYNCHRO(hsai->Init.Synchro)); in HAL_SAI_Init()
402 assert_param(IS_SAI_BLOCK_OUTPUT_DRIVE(hsai->Init.OutputDrive)); in HAL_SAI_Init()
403 assert_param(IS_SAI_BLOCK_NODIVIDER(hsai->Init.NoDivider)); in HAL_SAI_Init()
404 assert_param(IS_SAI_BLOCK_FIFO_THRESHOLD(hsai->Init.FIFOThreshold)); in HAL_SAI_Init()
405 assert_param(IS_SAI_MONO_STEREO_MODE(hsai->Init.MonoStereoMode)); in HAL_SAI_Init()
406 assert_param(IS_SAI_BLOCK_COMPANDING_MODE(hsai->Init.CompandingMode)); in HAL_SAI_Init()
407 assert_param(IS_SAI_BLOCK_TRISTATE_MANAGEMENT(hsai->Init.TriState)); in HAL_SAI_Init()
410 assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); in HAL_SAI_Init()
411 assert_param(IS_SAI_BLOCK_ACTIVE_FRAME(hsai->FrameInit.ActiveFrameLength)); in HAL_SAI_Init()
412 assert_param(IS_SAI_BLOCK_FS_DEFINITION(hsai->FrameInit.FSDefinition)); in HAL_SAI_Init()
413 assert_param(IS_SAI_BLOCK_FS_POLARITY(hsai->FrameInit.FSPolarity)); in HAL_SAI_Init()
414 assert_param(IS_SAI_BLOCK_FS_OFFSET(hsai->FrameInit.FSOffset)); in HAL_SAI_Init()
417 assert_param(IS_SAI_BLOCK_FIRSTBIT_OFFSET(hsai->SlotInit.FirstBitOffset)); in HAL_SAI_Init()
418 assert_param(IS_SAI_BLOCK_SLOT_SIZE(hsai->SlotInit.SlotSize)); in HAL_SAI_Init()
419 assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); in HAL_SAI_Init()
420 assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); in HAL_SAI_Init()
422 if (hsai->State == HAL_SAI_STATE_RESET) in HAL_SAI_Init()
425 hsai->Lock = HAL_UNLOCKED; in HAL_SAI_Init()
429 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_Init()
430 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_Init()
431 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_Init()
432 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_Init()
433 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_Init()
436 if (hsai->MspInitCallback == NULL) in HAL_SAI_Init()
438 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_Init()
440 hsai->MspInitCallback(hsai); in HAL_SAI_Init()
443 HAL_SAI_MspInit(hsai); in HAL_SAI_Init()
447 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_Init()
450 SAI_Disable(hsai); in HAL_SAI_Init()
453 SAI_BlockSynchroConfig(hsai); in HAL_SAI_Init()
459 if (hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) in HAL_SAI_Init()
462 freq = SAI_GetInputClock(hsai); in HAL_SAI_Init()
465 tmpregisterGCR = (((freq * 10U) / ((hsai->Init.AudioFrequency) * 512U))); in HAL_SAI_Init()
467 hsai->Init.Mckdiv = tmpregisterGCR / 10U; in HAL_SAI_Init()
472 hsai->Init.Mckdiv += 1U; in HAL_SAI_Init()
476 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
478 hsai->Init.Mckdiv = hsai->Init.Mckdiv >> 1; in HAL_SAI_Init()
483 assert_param(IS_SAI_BLOCK_MASTER_DIVIDER(hsai->Init.Mckdiv)); in HAL_SAI_Init()
486 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in HAL_SAI_Init()
488 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? 0U : SAI_xCR1_CKSTR; in HAL_SAI_Init()
492 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? SAI_xCR1_CKSTR : 0U; in HAL_SAI_Init()
496 switch (hsai->Init.Synchro) in HAL_SAI_Init()
519 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
524 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
525 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
527 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
528 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20U)); in HAL_SAI_Init()
531 hsai->Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); in HAL_SAI_Init()
532 …hsai->Instance->CR2 |= (hsai->Init.FIFOThreshold | hsai->Init.CompandingMode | hsai->Init.TriState… in HAL_SAI_Init()
535 hsai->Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \ in HAL_SAI_Init()
537 hsai->Instance->FRCR |= ((hsai->FrameInit.FrameLength - 1U) | in HAL_SAI_Init()
538 hsai->FrameInit.FSOffset | in HAL_SAI_Init()
539 hsai->FrameInit.FSDefinition | in HAL_SAI_Init()
540 hsai->FrameInit.FSPolarity | in HAL_SAI_Init()
541 ((hsai->FrameInit.ActiveFrameLength - 1U) << 8U)); in HAL_SAI_Init()
545 hsai->Instance->SLOTR &= ~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \ in HAL_SAI_Init()
548 hsai->Instance->SLOTR |= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize | \ in HAL_SAI_Init()
549 … (hsai->SlotInit.SlotActive << 16U) | ((hsai->SlotInit.SlotNumber - 1U) << 8U); in HAL_SAI_Init()
552 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Init()
555 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Init()
558 __HAL_UNLOCK(hsai); in HAL_SAI_Init()
569 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_DeInit() argument
572 if (hsai == NULL) in HAL_SAI_DeInit()
577 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_DeInit()
580 hsai->Instance->IMR = 0U; in HAL_SAI_DeInit()
581 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_DeInit()
584 SAI_Disable(hsai); in HAL_SAI_DeInit()
587 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DeInit()
591 if (hsai->MspDeInitCallback == NULL) in HAL_SAI_DeInit()
593 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_DeInit()
595 hsai->MspDeInitCallback(hsai); in HAL_SAI_DeInit()
597 HAL_SAI_MspDeInit(hsai); in HAL_SAI_DeInit()
601 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_DeInit()
604 hsai->State = HAL_SAI_STATE_RESET; in HAL_SAI_DeInit()
607 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
618 __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspInit() argument
621 UNUSED(hsai); in HAL_SAI_MspInit()
634 __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspDeInit() argument
637 UNUSED(hsai); in HAL_SAI_MspDeInit()
661 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_RegisterCallback() argument
670 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
676 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_RegisterCallback()
681 hsai->RxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
684 hsai->RxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
687 hsai->TxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
690 hsai->TxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
693 hsai->ErrorCallback = pCallback; in HAL_SAI_RegisterCallback()
696 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
699 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
703 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
709 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_RegisterCallback()
714 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
717 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
721 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
730 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
753 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_UnRegisterCallback() argument
758 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_UnRegisterCallback()
763 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_UnRegisterCallback()
766 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
769 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_UnRegisterCallback()
772 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
775 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_UnRegisterCallback()
778 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
781 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
785 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
791 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_UnRegisterCallback()
796 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
799 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
803 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
812 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
875 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t… in HAL_SAI_Transmit() argument
884 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit()
887 __HAL_LOCK(hsai); in HAL_SAI_Transmit()
889 hsai->XferSize = Size; in HAL_SAI_Transmit()
890 hsai->XferCount = Size; in HAL_SAI_Transmit()
891 hsai->pBuffPtr = pData; in HAL_SAI_Transmit()
892 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit()
893 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit()
896 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Transmit()
899 SAI_FillFifo(hsai); in HAL_SAI_Transmit()
901 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit()
904 while (hsai->XferCount > 0U) in HAL_SAI_Transmit()
907 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) in HAL_SAI_Transmit()
909 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit()
911 hsai->Instance->DR = (*hsai->pBuffPtr++); in HAL_SAI_Transmit()
913 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit()
915 hsai->Instance->DR = *((uint16_t *)hsai->pBuffPtr); in HAL_SAI_Transmit()
916 hsai->pBuffPtr += 2U; in HAL_SAI_Transmit()
920 hsai->Instance->DR = *((uint32_t *)hsai->pBuffPtr); in HAL_SAI_Transmit()
921 hsai->pBuffPtr += 4U; in HAL_SAI_Transmit()
923 hsai->XferCount--; in HAL_SAI_Transmit()
931 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit()
934 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Transmit()
937 SAI_Disable(hsai); in HAL_SAI_Transmit()
940 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Transmit()
943 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
946 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
953 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
956 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
975 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SAI_Receive() argument
984 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive()
987 __HAL_LOCK(hsai); in HAL_SAI_Receive()
989 hsai->pBuffPtr = pData; in HAL_SAI_Receive()
990 hsai->XferSize = Size; in HAL_SAI_Receive()
991 hsai->XferCount = Size; in HAL_SAI_Receive()
992 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive()
993 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive()
996 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Receive()
999 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive()
1003 while (hsai->XferCount > 0U) in HAL_SAI_Receive()
1005 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Receive()
1007 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive()
1009 (*hsai->pBuffPtr++) = hsai->Instance->DR; in HAL_SAI_Receive()
1011 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive()
1013 *((uint16_t *)hsai->pBuffPtr) = hsai->Instance->DR; in HAL_SAI_Receive()
1014 hsai->pBuffPtr += 2U; in HAL_SAI_Receive()
1018 *((uint32_t *)hsai->pBuffPtr) = hsai->Instance->DR; in HAL_SAI_Receive()
1019 hsai->pBuffPtr += 4U; in HAL_SAI_Receive()
1021 hsai->XferCount--; in HAL_SAI_Receive()
1029 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Receive()
1032 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Receive()
1035 SAI_Disable(hsai); in HAL_SAI_Receive()
1038 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Receive()
1041 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1044 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1051 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1054 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1072 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_IT() argument
1079 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_IT()
1082 __HAL_LOCK(hsai); in HAL_SAI_Transmit_IT()
1084 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_IT()
1085 hsai->XferSize = Size; in HAL_SAI_Transmit_IT()
1086 hsai->XferCount = Size; in HAL_SAI_Transmit_IT()
1087 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_IT()
1088 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_IT()
1090 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_IT()
1092 hsai->InterruptServiceRoutine = SAI_Transmit_IT8Bit; in HAL_SAI_Transmit_IT()
1094 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_IT()
1096 hsai->InterruptServiceRoutine = SAI_Transmit_IT16Bit; in HAL_SAI_Transmit_IT()
1100 hsai->InterruptServiceRoutine = SAI_Transmit_IT32Bit; in HAL_SAI_Transmit_IT()
1104 SAI_FillFifo(hsai); in HAL_SAI_Transmit_IT()
1107 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Transmit_IT()
1110 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Transmit_IT()
1113 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_IT()
1116 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_IT()
1134 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_IT() argument
1141 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_IT()
1144 __HAL_LOCK(hsai); in HAL_SAI_Receive_IT()
1146 hsai->pBuffPtr = pData; in HAL_SAI_Receive_IT()
1147 hsai->XferSize = Size; in HAL_SAI_Receive_IT()
1148 hsai->XferCount = Size; in HAL_SAI_Receive_IT()
1149 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_IT()
1150 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_IT()
1152 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_IT()
1154 hsai->InterruptServiceRoutine = SAI_Receive_IT8Bit; in HAL_SAI_Receive_IT()
1156 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_IT()
1158 hsai->InterruptServiceRoutine = SAI_Receive_IT16Bit; in HAL_SAI_Receive_IT()
1162 hsai->InterruptServiceRoutine = SAI_Receive_IT32Bit; in HAL_SAI_Receive_IT()
1166 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Receive_IT()
1169 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Receive_IT()
1172 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_IT()
1176 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_IT()
1192 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAPause() argument
1195 __HAL_LOCK(hsai); in HAL_SAI_DMAPause()
1198 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAPause()
1201 __HAL_UNLOCK(hsai); in HAL_SAI_DMAPause()
1212 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAResume() argument
1215 __HAL_LOCK(hsai); in HAL_SAI_DMAResume()
1218 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_DMAResume()
1221 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_DMAResume()
1224 __HAL_SAI_ENABLE(hsai); in HAL_SAI_DMAResume()
1228 __HAL_UNLOCK(hsai); in HAL_SAI_DMAResume()
1239 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAStop() argument
1244 __HAL_LOCK(hsai); in HAL_SAI_DMAStop()
1247 SAI_Disable(hsai); in HAL_SAI_DMAStop()
1250 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAStop()
1253 if ((hsai->hdmatx != NULL) && (hsai->State == HAL_SAI_STATE_BUSY_TX)) in HAL_SAI_DMAStop()
1255 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_DMAStop()
1258 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1261 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1267 if ((hsai->hdmarx != NULL) && (hsai->State == HAL_SAI_STATE_BUSY_RX)) in HAL_SAI_DMAStop()
1269 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_DMAStop()
1272 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1275 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1281 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DMAStop()
1284 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DMAStop()
1287 __HAL_UNLOCK(hsai); in HAL_SAI_DMAStop()
1298 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) in HAL_SAI_Abort() argument
1303 __HAL_LOCK(hsai); in HAL_SAI_Abort()
1306 SAI_Disable(hsai); in HAL_SAI_Abort()
1309 if ((hsai->Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN) in HAL_SAI_Abort()
1312 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_Abort()
1315 if ((hsai->hdmatx != NULL) && (hsai->State == HAL_SAI_STATE_BUSY_TX)) in HAL_SAI_Abort()
1317 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_Abort()
1320 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1323 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1329 if ((hsai->hdmarx != NULL) && (hsai->State == HAL_SAI_STATE_BUSY_RX)) in HAL_SAI_Abort()
1331 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_Abort()
1334 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1337 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1344 hsai->Instance->IMR = 0U; in HAL_SAI_Abort()
1345 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Abort()
1348 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Abort()
1351 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Abort()
1354 __HAL_UNLOCK(hsai); in HAL_SAI_Abort()
1367 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_DMA() argument
1376 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_DMA()
1379 __HAL_LOCK(hsai); in HAL_SAI_Transmit_DMA()
1381 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_DMA()
1382 hsai->XferSize = Size; in HAL_SAI_Transmit_DMA()
1383 hsai->XferCount = Size; in HAL_SAI_Transmit_DMA()
1384 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_DMA()
1385 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_DMA()
1388 hsai->hdmatx->XferHalfCpltCallback = SAI_DMATxHalfCplt; in HAL_SAI_Transmit_DMA()
1391 hsai->hdmatx->XferCpltCallback = SAI_DMATxCplt; in HAL_SAI_Transmit_DMA()
1394 hsai->hdmatx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Transmit_DMA()
1397 hsai->hdmatx->XferAbortCallback = NULL; in HAL_SAI_Transmit_DMA()
1400 …if (HAL_DMA_Start_IT(hsai->hdmatx, (uint32_t)hsai->pBuffPtr, (uint32_t)&hsai->Instance->DR, hsai->… in HAL_SAI_Transmit_DMA()
1402 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1407 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Transmit_DMA()
1410 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Transmit_DMA()
1413 while ((hsai->Instance->SR & SAI_xSR_FLVL) == SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Transmit_DMA()
1419 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit_DMA()
1422 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1429 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_DMA()
1432 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_DMA()
1436 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1454 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_DMA() argument
1461 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_DMA()
1464 __HAL_LOCK(hsai); in HAL_SAI_Receive_DMA()
1466 hsai->pBuffPtr = pData; in HAL_SAI_Receive_DMA()
1467 hsai->XferSize = Size; in HAL_SAI_Receive_DMA()
1468 hsai->XferCount = Size; in HAL_SAI_Receive_DMA()
1469 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_DMA()
1470 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_DMA()
1473 hsai->hdmarx->XferHalfCpltCallback = SAI_DMARxHalfCplt; in HAL_SAI_Receive_DMA()
1476 hsai->hdmarx->XferCpltCallback = SAI_DMARxCplt; in HAL_SAI_Receive_DMA()
1479 hsai->hdmarx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Receive_DMA()
1482 hsai->hdmarx->XferAbortCallback = NULL; in HAL_SAI_Receive_DMA()
1485 …if (HAL_DMA_Start_IT(hsai->hdmarx, (uint32_t)&hsai->Instance->DR, (uint32_t)hsai->pBuffPtr, hsai->… in HAL_SAI_Receive_DMA()
1487 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1492 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Receive_DMA()
1495 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Receive_DMA()
1498 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Receive_DMA()
1501 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_DMA()
1505 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1522 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) in HAL_SAI_EnableTxMuteMode() argument
1526 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableTxMuteMode()
1528 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_EnableTxMuteMode()
1529 SET_BIT(hsai->Instance->CR2, SAI_xCR2_MUTE | val); in HAL_SAI_EnableTxMuteMode()
1541 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableTxMuteMode() argument
1543 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableTxMuteMode()
1545 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_DisableTxMuteMode()
1559 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t … in HAL_SAI_EnableRxMuteMode() argument
1563 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableRxMuteMode()
1566 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); in HAL_SAI_EnableRxMuteMode()
1567 SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); in HAL_SAI_EnableRxMuteMode()
1568 hsai->mutecallback = callback; in HAL_SAI_EnableRxMuteMode()
1570 __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_EnableRxMuteMode()
1582 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableRxMuteMode() argument
1584 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableRxMuteMode()
1587 hsai->mutecallback = (SAIcallback)NULL; in HAL_SAI_DisableRxMuteMode()
1589 __HAL_SAI_DISABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_DisableRxMuteMode()
1601 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) in HAL_SAI_IRQHandler() argument
1603 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_IRQHandler()
1605 uint32_t itflags = hsai->Instance->SR; in HAL_SAI_IRQHandler()
1606 uint32_t itsources = hsai->Instance->IMR; in HAL_SAI_IRQHandler()
1607 uint32_t cr1config = hsai->Instance->CR1; in HAL_SAI_IRQHandler()
1613 hsai->InterruptServiceRoutine(hsai); in HAL_SAI_IRQHandler()
1619 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in HAL_SAI_IRQHandler()
1622 tmperror = ((hsai->State == HAL_SAI_STATE_BUSY_RX) ? HAL_SAI_ERROR_OVR : HAL_SAI_ERROR_UDR); in HAL_SAI_IRQHandler()
1625 hsai->ErrorCode |= tmperror; in HAL_SAI_IRQHandler()
1629 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1631 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1638 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_MUTEDET); in HAL_SAI_IRQHandler()
1641 if (hsai->mutecallback != (SAIcallback)NULL) in HAL_SAI_IRQHandler()
1644 hsai->mutecallback(); in HAL_SAI_IRQHandler()
1651 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_AFSDET); in HAL_SAI_IRQHandler()
1654 hsai->ErrorCode |= HAL_SAI_ERROR_AFSDET; in HAL_SAI_IRQHandler()
1660 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1663 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1666 HAL_DMA_Abort_IT(hsai->hdmatx); in HAL_SAI_IRQHandler()
1668 else if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1671 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1674 HAL_DMA_Abort_IT(hsai->hdmarx); in HAL_SAI_IRQHandler()
1680 HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1684 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1686 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1694 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_LFSDET); in HAL_SAI_IRQHandler()
1697 hsai->ErrorCode |= HAL_SAI_ERROR_LFSDET; in HAL_SAI_IRQHandler()
1703 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1706 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1709 HAL_DMA_Abort_IT(hsai->hdmatx); in HAL_SAI_IRQHandler()
1711 else if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1714 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1717 HAL_DMA_Abort_IT(hsai->hdmarx); in HAL_SAI_IRQHandler()
1723 HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1727 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1729 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1737 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_WCKCFG); in HAL_SAI_IRQHandler()
1740 hsai->ErrorCode |= HAL_SAI_ERROR_WCKCFG; in HAL_SAI_IRQHandler()
1746 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1749 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1752 HAL_DMA_Abort_IT(hsai->hdmatx); in HAL_SAI_IRQHandler()
1754 else if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1757 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1760 HAL_DMA_Abort_IT(hsai->hdmarx); in HAL_SAI_IRQHandler()
1767 hsai->Instance->IMR = 0U; in HAL_SAI_IRQHandler()
1768 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_IRQHandler()
1771 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_IRQHandler()
1774 hsai->XferCount = 0U; in HAL_SAI_IRQHandler()
1778 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1780 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1788 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_CNRDY); in HAL_SAI_IRQHandler()
1791 hsai->ErrorCode |= HAL_SAI_ERROR_CNREADY; in HAL_SAI_IRQHandler()
1795 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1797 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1813 __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxCpltCallback() argument
1816 UNUSED(hsai); in HAL_SAI_TxCpltCallback()
1829 __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxHalfCpltCallback() argument
1832 UNUSED(hsai); in HAL_SAI_TxHalfCpltCallback()
1845 __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxCpltCallback() argument
1848 UNUSED(hsai); in HAL_SAI_RxCpltCallback()
1861 __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxHalfCpltCallback() argument
1864 UNUSED(hsai); in HAL_SAI_RxHalfCpltCallback()
1877 __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_ErrorCallback() argument
1880 UNUSED(hsai); in HAL_SAI_ErrorCallback()
1912 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetState() argument
1914 return hsai->State; in HAL_SAI_GetState()
1923 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetError() argument
1925 return hsai->ErrorCode; in HAL_SAI_GetError()
1952 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitI2S() argument
1954 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitI2S()
1955 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitI2S()
1957 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitI2S()
1960 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitI2S()
1965 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitI2S()
1967 hsai->FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; in SAI_InitI2S()
1968 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitI2S()
1969 hsai->SlotInit.FirstBitOffset = 0U; in SAI_InitI2S()
1970 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitI2S()
1980 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; in SAI_InitI2S()
1981 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitI2S()
1986 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitI2S()
1987 hsai->FrameInit.FSOffset = SAI_FS_FIRSTBIT; in SAI_InitI2S()
1994 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
1995 hsai->FrameInit.FrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
1996 hsai->FrameInit.ActiveFrameLength = 16U * (nbslot / 2U); in SAI_InitI2S()
1997 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitI2S()
2000 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2001 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2002 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2003 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2006 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitI2S()
2007 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2008 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2009 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2012 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitI2S()
2013 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2014 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2015 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2024 hsai->SlotInit.FirstBitOffset = 16U; in SAI_InitI2S()
2028 hsai->SlotInit.FirstBitOffset = 8U; in SAI_InitI2S()
2044 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitPCM() argument
2046 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitPCM()
2047 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitPCM()
2049 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitPCM()
2052 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitPCM()
2057 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitPCM()
2059 hsai->FrameInit.FSDefinition = SAI_FS_STARTFRAME; in SAI_InitPCM()
2060 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitPCM()
2061 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitPCM()
2062 hsai->SlotInit.FirstBitOffset = 0U; in SAI_InitPCM()
2063 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitPCM()
2064 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitPCM()
2068 hsai->FrameInit.ActiveFrameLength = 1; in SAI_InitPCM()
2073 hsai->FrameInit.ActiveFrameLength = 13; in SAI_InitPCM()
2079 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2080 hsai->FrameInit.FrameLength = 16U * nbslot; in SAI_InitPCM()
2081 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitPCM()
2084 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2085 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2086 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2089 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitPCM()
2090 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2091 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2094 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitPCM()
2095 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2096 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2111 static void SAI_FillFifo(SAI_HandleTypeDef *hsai) in SAI_FillFifo() argument
2114 while (((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) && (hsai->XferCount > 0U)) in SAI_FillFifo()
2116 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in SAI_FillFifo()
2118 hsai->Instance->DR = (*hsai->pBuffPtr++); in SAI_FillFifo()
2120 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in SAI_FillFifo()
2122 hsai->Instance->DR = *((uint32_t *)hsai->pBuffPtr); in SAI_FillFifo()
2123 hsai->pBuffPtr += 2U; in SAI_FillFifo()
2127 hsai->Instance->DR = *((uint32_t *)hsai->pBuffPtr); in SAI_FillFifo()
2128 hsai->pBuffPtr += 4U; in SAI_FillFifo()
2130 hsai->XferCount--; in SAI_FillFifo()
2141 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, uint32_t mode) in SAI_InterruptFlag() argument
2150 if ((hsai->Init.Protocol == SAI_AC97_PROTOCOL) && in SAI_InterruptFlag()
2151 ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODEMASTER_RX))) in SAI_InterruptFlag()
2156 if ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InterruptFlag()
2174 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) in SAI_Disable() argument
2180 __HAL_SAI_DISABLE(hsai); in SAI_Disable()
2188 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in SAI_Disable()
2193 while ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) != RESET); in SAI_Disable()
2204 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT8Bit() argument
2206 if (hsai->XferCount == 0U) in SAI_Transmit_IT8Bit()
2210 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT8Bit()
2211 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT8Bit()
2213 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2215 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2221 hsai->Instance->DR = (*hsai->pBuffPtr++); in SAI_Transmit_IT8Bit()
2222 hsai->XferCount--; in SAI_Transmit_IT8Bit()
2232 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT16Bit() argument
2234 if (hsai->XferCount == 0U) in SAI_Transmit_IT16Bit()
2238 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT16Bit()
2239 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT16Bit()
2241 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2243 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2249 hsai->Instance->DR = *(uint16_t *)hsai->pBuffPtr; in SAI_Transmit_IT16Bit()
2250 hsai->pBuffPtr += 2U; in SAI_Transmit_IT16Bit()
2251 hsai->XferCount--; in SAI_Transmit_IT16Bit()
2261 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT32Bit() argument
2263 if (hsai->XferCount == 0U) in SAI_Transmit_IT32Bit()
2267 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT32Bit()
2268 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT32Bit()
2270 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2272 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2278 hsai->Instance->DR = *(uint32_t *)hsai->pBuffPtr; in SAI_Transmit_IT32Bit()
2279 hsai->pBuffPtr += 4U; in SAI_Transmit_IT32Bit()
2280 hsai->XferCount--; in SAI_Transmit_IT32Bit()
2290 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT8Bit() argument
2293 (*hsai->pBuffPtr++) = hsai->Instance->DR; in SAI_Receive_IT8Bit()
2294 hsai->XferCount--; in SAI_Receive_IT8Bit()
2297 if (hsai->XferCount == 0U) in SAI_Receive_IT8Bit()
2300 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT8Bit()
2303 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT8Bit()
2305 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT8Bit()
2307 hsai->RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2309 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2320 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT16Bit() argument
2323 *(uint16_t *)hsai->pBuffPtr = hsai->Instance->DR; in SAI_Receive_IT16Bit()
2324 hsai->pBuffPtr += 2U; in SAI_Receive_IT16Bit()
2325 hsai->XferCount--; in SAI_Receive_IT16Bit()
2328 if (hsai->XferCount == 0U) in SAI_Receive_IT16Bit()
2331 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT16Bit()
2334 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT16Bit()
2336 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT16Bit()
2338 hsai->RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2340 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2351 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT32Bit() argument
2354 *(uint32_t *)hsai->pBuffPtr = hsai->Instance->DR; in SAI_Receive_IT32Bit()
2355 hsai->pBuffPtr += 4U; in SAI_Receive_IT32Bit()
2356 hsai->XferCount--; in SAI_Receive_IT32Bit()
2359 if (hsai->XferCount == 0U) in SAI_Receive_IT32Bit()
2362 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT32Bit()
2365 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT32Bit()
2367 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT32Bit()
2369 hsai->RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2371 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2384 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxCplt() local
2388 hsai->XferCount = 0U; in SAI_DMATxCplt()
2391 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMATxCplt()
2394 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMATxCplt()
2396 hsai->State = HAL_SAI_STATE_READY; in SAI_DMATxCplt()
2399 hsai->TxCpltCallback(hsai); in SAI_DMATxCplt()
2401 HAL_SAI_TxCpltCallback(hsai); in SAI_DMATxCplt()
2413 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxHalfCplt() local
2416 hsai->TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2418 HAL_SAI_TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2430 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxCplt() local
2435 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMARxCplt()
2436 hsai->XferCount = 0U; in SAI_DMARxCplt()
2439 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMARxCplt()
2441 hsai->State = HAL_SAI_STATE_READY; in SAI_DMARxCplt()
2444 hsai->RxCpltCallback(hsai); in SAI_DMARxCplt()
2446 HAL_SAI_RxCpltCallback(hsai); in SAI_DMARxCplt()
2458 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxHalfCplt() local
2461 hsai->RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2463 HAL_SAI_RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2475 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAError() local
2478 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in SAI_DMAError()
2480 …if ((hsai->hdmatx->ErrorCode == HAL_DMA_ERROR_TE) || (hsai->hdmarx->ErrorCode == HAL_DMA_ERROR_TE)) in SAI_DMAError()
2483 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAError()
2486 SAI_Disable(hsai); in SAI_DMAError()
2489 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAError()
2492 hsai->XferCount = 0U; in SAI_DMAError()
2496 hsai->ErrorCallback(hsai); in SAI_DMAError()
2498 HAL_SAI_ErrorCallback(hsai); in SAI_DMAError()
2510 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAAbort() local
2513 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAAbort()
2516 hsai->Instance->IMR = 0U; in SAI_DMAAbort()
2517 hsai->Instance->CLRFR = 0xFFFFFFFFU; in SAI_DMAAbort()
2519 if (hsai->ErrorCode != HAL_SAI_ERROR_WCKCFG) in SAI_DMAAbort()
2522 SAI_Disable(hsai); in SAI_DMAAbort()
2525 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in SAI_DMAAbort()
2528 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAAbort()
2531 hsai->XferCount = 0U; in SAI_DMAAbort()
2535 hsai->ErrorCallback(hsai); in SAI_DMAAbort()
2537 HAL_SAI_ErrorCallback(hsai); in SAI_DMAAbort()