Lines Matching refs:hsai

257 static void SAI_FillFifo(SAI_HandleTypeDef *hsai);
258 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode);
259 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
260 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
262 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai);
263 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai);
264 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai);
265 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai);
266 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai);
267 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai);
268 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai);
329 HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasiz… in HAL_SAI_InitProtocol() argument
342 status = SAI_InitI2S(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
346 status = SAI_InitPCM(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
355 status = HAL_SAI_Init(hsai); in HAL_SAI_InitProtocol()
368 HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) in HAL_SAI_Init() argument
375 if (hsai == NULL) in HAL_SAI_Init()
381 assert_param(IS_SAI_ALL_INSTANCE(hsai->Instance)); in HAL_SAI_Init()
384 assert_param(IS_SAI_AUDIO_FREQUENCY(hsai->Init.AudioFrequency)); in HAL_SAI_Init()
385 assert_param(IS_SAI_BLOCK_PROTOCOL(hsai->Init.Protocol)); in HAL_SAI_Init()
386 assert_param(IS_SAI_BLOCK_MODE(hsai->Init.AudioMode)); in HAL_SAI_Init()
387 assert_param(IS_SAI_BLOCK_DATASIZE(hsai->Init.DataSize)); in HAL_SAI_Init()
388 assert_param(IS_SAI_BLOCK_FIRST_BIT(hsai->Init.FirstBit)); in HAL_SAI_Init()
389 assert_param(IS_SAI_BLOCK_CLOCK_STROBING(hsai->Init.ClockStrobing)); in HAL_SAI_Init()
390 assert_param(IS_SAI_BLOCK_SYNCHRO(hsai->Init.Synchro)); in HAL_SAI_Init()
391 assert_param(IS_SAI_BLOCK_MCK_OUTPUT(hsai->Init.MckOutput)); in HAL_SAI_Init()
392 assert_param(IS_SAI_BLOCK_OUTPUT_DRIVE(hsai->Init.OutputDrive)); in HAL_SAI_Init()
393 assert_param(IS_SAI_BLOCK_NODIVIDER(hsai->Init.NoDivider)); in HAL_SAI_Init()
394 assert_param(IS_SAI_BLOCK_FIFO_THRESHOLD(hsai->Init.FIFOThreshold)); in HAL_SAI_Init()
395 assert_param(IS_SAI_MONO_STEREO_MODE(hsai->Init.MonoStereoMode)); in HAL_SAI_Init()
396 assert_param(IS_SAI_BLOCK_COMPANDING_MODE(hsai->Init.CompandingMode)); in HAL_SAI_Init()
397 assert_param(IS_SAI_BLOCK_TRISTATE_MANAGEMENT(hsai->Init.TriState)); in HAL_SAI_Init()
398 assert_param(IS_SAI_BLOCK_SYNCEXT(hsai->Init.SynchroExt)); in HAL_SAI_Init()
399 assert_param(IS_SAI_BLOCK_MCK_OVERSAMPLING(hsai->Init.MckOverSampling)); in HAL_SAI_Init()
402 assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); in HAL_SAI_Init()
403 assert_param(IS_SAI_BLOCK_ACTIVE_FRAME(hsai->FrameInit.ActiveFrameLength)); in HAL_SAI_Init()
404 assert_param(IS_SAI_BLOCK_FS_DEFINITION(hsai->FrameInit.FSDefinition)); in HAL_SAI_Init()
405 assert_param(IS_SAI_BLOCK_FS_POLARITY(hsai->FrameInit.FSPolarity)); in HAL_SAI_Init()
406 assert_param(IS_SAI_BLOCK_FS_OFFSET(hsai->FrameInit.FSOffset)); in HAL_SAI_Init()
409 assert_param(IS_SAI_BLOCK_FIRSTBIT_OFFSET(hsai->SlotInit.FirstBitOffset)); in HAL_SAI_Init()
410 assert_param(IS_SAI_BLOCK_SLOT_SIZE(hsai->SlotInit.SlotSize)); in HAL_SAI_Init()
411 assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); in HAL_SAI_Init()
412 assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); in HAL_SAI_Init()
415 assert_param(IS_FUNCTIONAL_STATE(hsai->Init.PdmInit.Activation)); in HAL_SAI_Init()
416 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
418 assert_param(IS_SAI_PDM_MIC_PAIRS_NUMBER(hsai->Init.PdmInit.MicPairsNbr)); in HAL_SAI_Init()
419 assert_param(IS_SAI_PDM_CLOCK_ENABLE(hsai->Init.PdmInit.ClockEnable)); in HAL_SAI_Init()
421 if ((hsai->Instance != SAI1_Block_A) || in HAL_SAI_Init()
422 (hsai->Init.AudioMode != SAI_MODEMASTER_RX) || in HAL_SAI_Init()
423 (hsai->Init.Protocol != SAI_FREE_PROTOCOL)) in HAL_SAI_Init()
429 if (hsai->State == HAL_SAI_STATE_RESET) in HAL_SAI_Init()
432 hsai->Lock = HAL_UNLOCKED; in HAL_SAI_Init()
436 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_Init()
437 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_Init()
438 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_Init()
439 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_Init()
440 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_Init()
443 if (hsai->MspInitCallback == NULL) in HAL_SAI_Init()
445 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_Init()
447 hsai->MspInitCallback(hsai); in HAL_SAI_Init()
450 HAL_SAI_MspInit(hsai); in HAL_SAI_Init()
455 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Init()
460 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_Init()
464 switch (hsai->Init.SynchroExt) in HAL_SAI_Init()
480 switch (hsai->Init.Synchro) in HAL_SAI_Init()
500 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
509 if (hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) in HAL_SAI_Init()
515 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
519 if ((hsai->Instance == SAI2_Block_A) || (hsai->Instance == SAI2_Block_B)) in HAL_SAI_Init()
529 if (hsai->Init.NoDivider == SAI_MASTERDIVIDER_DISABLE) in HAL_SAI_Init()
534 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
539 else if (hsai->Init.Protocol == SAI_AC97_PROTOCOL) in HAL_SAI_Init()
547 tmpframelength = hsai->FrameInit.FrameLength; in HAL_SAI_Init()
551 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmpframelength); in HAL_SAI_Init()
557 tmposr = (hsai->Init.MckOverSampling == SAI_MCK_OVERSAMPLING_ENABLE) ? 2U : 1U; in HAL_SAI_Init()
559 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmposr * 256U); in HAL_SAI_Init()
561 hsai->Init.Mckdiv = tmpval / 10U; in HAL_SAI_Init()
566 hsai->Init.Mckdiv += 1U; in HAL_SAI_Init()
570 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
572 hsai->Init.Mckdiv = hsai->Init.Mckdiv >> 1; in HAL_SAI_Init()
576 assert_param(IS_SAI_BLOCK_MASTER_DIVIDER(hsai->Init.Mckdiv)); in HAL_SAI_Init()
579 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in HAL_SAI_Init()
582 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? 0U : SAI_xCR1_CKSTR; in HAL_SAI_Init()
587 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? SAI_xCR1_CKSTR : 0U; in HAL_SAI_Init()
592 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
598 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
599 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
601 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
602 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ in HAL_SAI_Init()
603 hsai->Init.MckOverSampling | hsai->Init.MckOutput); in HAL_SAI_Init()
606 hsai->Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); in HAL_SAI_Init()
607hsai->Instance->CR2 |= (hsai->Init.FIFOThreshold | hsai->Init.CompandingMode | hsai->Init.TriState… in HAL_SAI_Init()
610 hsai->Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \ in HAL_SAI_Init()
612 hsai->Instance->FRCR |= ((hsai->FrameInit.FrameLength - 1U) | in HAL_SAI_Init()
613 hsai->FrameInit.FSOffset | in HAL_SAI_Init()
614 hsai->FrameInit.FSDefinition | in HAL_SAI_Init()
615 hsai->FrameInit.FSPolarity | in HAL_SAI_Init()
616 ((hsai->FrameInit.ActiveFrameLength - 1U) << 8)); in HAL_SAI_Init()
620 hsai->Instance->SLOTR &= (~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \ in HAL_SAI_Init()
623 hsai->Instance->SLOTR |= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize | \ in HAL_SAI_Init()
624 … (hsai->SlotInit.SlotActive << 16) | ((hsai->SlotInit.SlotNumber - 1U) << 8); in HAL_SAI_Init()
627 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_Init()
631 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
634 SAI1->PDMCR = (hsai->Init.PdmInit.ClockEnable | in HAL_SAI_Init()
635 ((hsai->Init.PdmInit.MicPairsNbr - 1U) << SAI_PDMCR_MICNBR_Pos)); in HAL_SAI_Init()
641 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Init()
644 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Init()
647 __HAL_UNLOCK(hsai); in HAL_SAI_Init()
658 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_DeInit() argument
661 if (hsai == NULL) in HAL_SAI_DeInit()
666 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_DeInit()
669 hsai->Instance->IMR = 0; in HAL_SAI_DeInit()
670 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_DeInit()
673 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DeInit()
676 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DeInit()
679 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
685 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DeInit()
688 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_DeInit()
699 if (hsai->MspDeInitCallback == NULL) in HAL_SAI_DeInit()
701 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_DeInit()
703 hsai->MspDeInitCallback(hsai); in HAL_SAI_DeInit()
705 HAL_SAI_MspDeInit(hsai); in HAL_SAI_DeInit()
709 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_DeInit()
712 hsai->State = HAL_SAI_STATE_RESET; in HAL_SAI_DeInit()
715 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
726 __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspInit() argument
729 UNUSED(hsai); in HAL_SAI_MspInit()
742 __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspDeInit() argument
745 UNUSED(hsai); in HAL_SAI_MspDeInit()
769 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_RegisterCallback() argument
778 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
784 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_RegisterCallback()
789 hsai->RxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
792 hsai->RxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
795 hsai->TxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
798 hsai->TxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
801 hsai->ErrorCallback = pCallback; in HAL_SAI_RegisterCallback()
804 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
807 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
811 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
817 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_RegisterCallback()
822 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
825 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
829 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
838 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
861 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_UnRegisterCallback() argument
866 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_UnRegisterCallback()
871 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_UnRegisterCallback()
874 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
877 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_UnRegisterCallback()
880 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
883 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_UnRegisterCallback()
886 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
889 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
893 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
899 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_UnRegisterCallback()
904 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
907 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
911 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
920 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
983 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t… in HAL_SAI_Transmit() argument
993 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit()
996 __HAL_LOCK(hsai); in HAL_SAI_Transmit()
998 hsai->XferSize = Size; in HAL_SAI_Transmit()
999 hsai->XferCount = Size; in HAL_SAI_Transmit()
1000 hsai->pBuffPtr = pData; in HAL_SAI_Transmit()
1001 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit()
1002 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit()
1005 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit()
1008 SAI_FillFifo(hsai); in HAL_SAI_Transmit()
1010 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit()
1013 while (hsai->XferCount > 0U) in HAL_SAI_Transmit()
1016 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) in HAL_SAI_Transmit()
1018 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit()
1020 hsai->Instance->DR = *hsai->pBuffPtr; in HAL_SAI_Transmit()
1021 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1023 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit()
1025 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1026 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1027 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1028 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1029 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1033 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1034 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1035 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1036 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1037 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in HAL_SAI_Transmit()
1038 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1039 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in HAL_SAI_Transmit()
1040 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1041 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1043 hsai->XferCount--; in HAL_SAI_Transmit()
1051 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit()
1054 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Transmit()
1058 (void) SAI_Disable(hsai); in HAL_SAI_Transmit()
1061 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Transmit()
1064 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1067 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1074 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1077 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1096 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SAI_Receive() argument
1106 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive()
1109 __HAL_LOCK(hsai); in HAL_SAI_Receive()
1111 hsai->pBuffPtr = pData; in HAL_SAI_Receive()
1112 hsai->XferSize = Size; in HAL_SAI_Receive()
1113 hsai->XferCount = Size; in HAL_SAI_Receive()
1114 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive()
1115 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive()
1118 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive()
1121 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive()
1125 while (hsai->XferCount > 0U) in HAL_SAI_Receive()
1127 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Receive()
1129 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive()
1131 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in HAL_SAI_Receive()
1132 hsai->pBuffPtr++; in HAL_SAI_Receive()
1134 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive()
1136 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1137 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1138 hsai->pBuffPtr++; in HAL_SAI_Receive()
1139 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1140 hsai->pBuffPtr++; in HAL_SAI_Receive()
1144 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1145 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1146 hsai->pBuffPtr++; in HAL_SAI_Receive()
1147 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1148 hsai->pBuffPtr++; in HAL_SAI_Receive()
1149 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in HAL_SAI_Receive()
1150 hsai->pBuffPtr++; in HAL_SAI_Receive()
1151 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in HAL_SAI_Receive()
1152 hsai->pBuffPtr++; in HAL_SAI_Receive()
1154 hsai->XferCount--; in HAL_SAI_Receive()
1162 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Receive()
1165 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Receive()
1169 (void) SAI_Disable(hsai); in HAL_SAI_Receive()
1172 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Receive()
1175 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1178 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1185 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1188 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1206 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_IT() argument
1213 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_IT()
1216 __HAL_LOCK(hsai); in HAL_SAI_Transmit_IT()
1218 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_IT()
1219 hsai->XferSize = Size; in HAL_SAI_Transmit_IT()
1220 hsai->XferCount = Size; in HAL_SAI_Transmit_IT()
1221 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_IT()
1222 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_IT()
1224 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_IT()
1226 hsai->InterruptServiceRoutine = SAI_Transmit_IT8Bit; in HAL_SAI_Transmit_IT()
1228 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_IT()
1230 hsai->InterruptServiceRoutine = SAI_Transmit_IT16Bit; in HAL_SAI_Transmit_IT()
1234 hsai->InterruptServiceRoutine = SAI_Transmit_IT32Bit; in HAL_SAI_Transmit_IT()
1238 SAI_FillFifo(hsai); in HAL_SAI_Transmit_IT()
1241 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Transmit_IT()
1244 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_IT()
1247 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_IT()
1250 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_IT()
1268 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_IT() argument
1275 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_IT()
1278 __HAL_LOCK(hsai); in HAL_SAI_Receive_IT()
1280 hsai->pBuffPtr = pData; in HAL_SAI_Receive_IT()
1281 hsai->XferSize = Size; in HAL_SAI_Receive_IT()
1282 hsai->XferCount = Size; in HAL_SAI_Receive_IT()
1283 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_IT()
1284 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_IT()
1286 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_IT()
1288 hsai->InterruptServiceRoutine = SAI_Receive_IT8Bit; in HAL_SAI_Receive_IT()
1290 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_IT()
1292 hsai->InterruptServiceRoutine = SAI_Receive_IT16Bit; in HAL_SAI_Receive_IT()
1296 hsai->InterruptServiceRoutine = SAI_Receive_IT32Bit; in HAL_SAI_Receive_IT()
1300 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Receive_IT()
1303 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_IT()
1306 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_IT()
1310 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_IT()
1326 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAPause() argument
1329 __HAL_LOCK(hsai); in HAL_SAI_DMAPause()
1332 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAPause()
1335 __HAL_UNLOCK(hsai); in HAL_SAI_DMAPause()
1346 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAResume() argument
1349 __HAL_LOCK(hsai); in HAL_SAI_DMAResume()
1352 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_DMAResume()
1355 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_DMAResume()
1358 __HAL_SAI_ENABLE(hsai); in HAL_SAI_DMAResume()
1362 __HAL_UNLOCK(hsai); in HAL_SAI_DMAResume()
1373 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAStop() argument
1378 __HAL_LOCK(hsai); in HAL_SAI_DMAStop()
1381 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DMAStop()
1387 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAStop()
1390 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_DMAStop()
1394 (void) HAL_DMA_Abort(hsai->hdmatx); in HAL_SAI_DMAStop()
1398 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_DMAStop()
1402 (void) HAL_DMA_Abort(hsai->hdmarx); in HAL_SAI_DMAStop()
1406 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DMAStop()
1409 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DMAStop()
1412 __HAL_UNLOCK(hsai); in HAL_SAI_DMAStop()
1423 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) in HAL_SAI_Abort() argument
1428 __HAL_LOCK(hsai); in HAL_SAI_Abort()
1431 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Abort()
1437 if ((hsai->Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN) in HAL_SAI_Abort()
1440 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_Abort()
1443 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_Abort()
1447 (void) HAL_DMA_Abort(hsai->hdmatx); in HAL_SAI_Abort()
1451 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_Abort()
1455 (void) HAL_DMA_Abort(hsai->hdmarx); in HAL_SAI_Abort()
1460 hsai->Instance->IMR = 0; in HAL_SAI_Abort()
1461 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Abort()
1464 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Abort()
1467 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Abort()
1470 __HAL_UNLOCK(hsai); in HAL_SAI_Abort()
1483 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_DMA() argument
1492 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_DMA()
1495 __HAL_LOCK(hsai); in HAL_SAI_Transmit_DMA()
1497 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_DMA()
1498 hsai->XferSize = Size; in HAL_SAI_Transmit_DMA()
1499 hsai->XferCount = Size; in HAL_SAI_Transmit_DMA()
1500 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_DMA()
1501 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_DMA()
1504 hsai->hdmatx->XferHalfCpltCallback = SAI_DMATxHalfCplt; in HAL_SAI_Transmit_DMA()
1507 hsai->hdmatx->XferCpltCallback = SAI_DMATxCplt; in HAL_SAI_Transmit_DMA()
1510 hsai->hdmatx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Transmit_DMA()
1513 hsai->hdmatx->XferAbortCallback = NULL; in HAL_SAI_Transmit_DMA()
1516 …if (HAL_DMA_Start_IT(hsai->hdmatx, (uint32_t)hsai->pBuffPtr, (uint32_t)&hsai->Instance->DR, hsai->… in HAL_SAI_Transmit_DMA()
1518 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1523 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Transmit_DMA()
1526 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Transmit_DMA()
1529 while ((hsai->Instance->SR & SAI_xSR_FLVL) == SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Transmit_DMA()
1535 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit_DMA()
1538 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1545 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_DMA()
1548 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_DMA()
1552 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1570 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_DMA() argument
1578 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_DMA()
1581 __HAL_LOCK(hsai); in HAL_SAI_Receive_DMA()
1583 hsai->pBuffPtr = pData; in HAL_SAI_Receive_DMA()
1584 hsai->XferSize = Size; in HAL_SAI_Receive_DMA()
1585 hsai->XferCount = Size; in HAL_SAI_Receive_DMA()
1586 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_DMA()
1587 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_DMA()
1590 hsai->hdmarx->XferHalfCpltCallback = SAI_DMARxHalfCplt; in HAL_SAI_Receive_DMA()
1593 hsai->hdmarx->XferCpltCallback = SAI_DMARxCplt; in HAL_SAI_Receive_DMA()
1596 hsai->hdmarx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Receive_DMA()
1599 hsai->hdmarx->XferAbortCallback = NULL; in HAL_SAI_Receive_DMA()
1602 …if (HAL_DMA_Start_IT(hsai->hdmarx, (uint32_t)&hsai->Instance->DR, (uint32_t)hsai->pBuffPtr, hsai->… in HAL_SAI_Receive_DMA()
1604 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1609 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Receive_DMA()
1612 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Receive_DMA()
1615 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_DMA()
1618 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_DMA()
1622 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1639 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) in HAL_SAI_EnableTxMuteMode() argument
1643 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableTxMuteMode()
1645 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_EnableTxMuteMode()
1646 SET_BIT(hsai->Instance->CR2, SAI_xCR2_MUTE | (uint32_t)val); in HAL_SAI_EnableTxMuteMode()
1658 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableTxMuteMode() argument
1660 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableTxMuteMode()
1662 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_DisableTxMuteMode()
1676 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t … in HAL_SAI_EnableRxMuteMode() argument
1680 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableRxMuteMode()
1683 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); in HAL_SAI_EnableRxMuteMode()
1684 SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); in HAL_SAI_EnableRxMuteMode()
1685 hsai->mutecallback = callback; in HAL_SAI_EnableRxMuteMode()
1687 __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_EnableRxMuteMode()
1699 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableRxMuteMode() argument
1701 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableRxMuteMode()
1704 hsai->mutecallback = NULL; in HAL_SAI_DisableRxMuteMode()
1706 __HAL_SAI_DISABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_DisableRxMuteMode()
1718 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) in HAL_SAI_IRQHandler() argument
1720 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_IRQHandler()
1722 uint32_t itflags = hsai->Instance->SR; in HAL_SAI_IRQHandler()
1723 uint32_t itsources = hsai->Instance->IMR; in HAL_SAI_IRQHandler()
1724 uint32_t cr1config = hsai->Instance->CR1; in HAL_SAI_IRQHandler()
1730 hsai->InterruptServiceRoutine(hsai); in HAL_SAI_IRQHandler()
1736 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in HAL_SAI_IRQHandler()
1738 tmperror = ((hsai->State == HAL_SAI_STATE_BUSY_RX) ? HAL_SAI_ERROR_OVR : HAL_SAI_ERROR_UDR); in HAL_SAI_IRQHandler()
1740 hsai->ErrorCode |= tmperror; in HAL_SAI_IRQHandler()
1743 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1745 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1752 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_MUTEDET); in HAL_SAI_IRQHandler()
1754 if (hsai->mutecallback != NULL) in HAL_SAI_IRQHandler()
1757 hsai->mutecallback(); in HAL_SAI_IRQHandler()
1764 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_AFSDET); in HAL_SAI_IRQHandler()
1767 hsai->ErrorCode |= HAL_SAI_ERROR_AFSDET; in HAL_SAI_IRQHandler()
1773 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1776 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1779 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1782 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1786 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1788 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1792 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1795 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1798 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1801 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1805 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1807 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1816 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1820 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1822 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1830 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_LFSDET); in HAL_SAI_IRQHandler()
1833 hsai->ErrorCode |= HAL_SAI_ERROR_LFSDET; in HAL_SAI_IRQHandler()
1839 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1842 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1845 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1848 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1852 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1854 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1858 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1861 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1864 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1867 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1871 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1873 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1882 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1886 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1888 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1896 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_WCKCFG); in HAL_SAI_IRQHandler()
1899 hsai->ErrorCode |= HAL_SAI_ERROR_WCKCFG; in HAL_SAI_IRQHandler()
1905 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1908 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1911 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1914 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1918 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1920 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1924 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1927 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1930 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1933 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1937 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1939 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1948 hsai->Instance->IMR = 0U; in HAL_SAI_IRQHandler()
1949 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_IRQHandler()
1951 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_IRQHandler()
1954 hsai->XferCount = 0U; in HAL_SAI_IRQHandler()
1958 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1960 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1968 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_CNRDY); in HAL_SAI_IRQHandler()
1970 hsai->ErrorCode |= HAL_SAI_ERROR_CNREADY; in HAL_SAI_IRQHandler()
1973 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1975 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1991 __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxCpltCallback() argument
1994 UNUSED(hsai); in HAL_SAI_TxCpltCallback()
2007 __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxHalfCpltCallback() argument
2010 UNUSED(hsai); in HAL_SAI_TxHalfCpltCallback()
2023 __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxCpltCallback() argument
2026 UNUSED(hsai); in HAL_SAI_RxCpltCallback()
2039 __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxHalfCpltCallback() argument
2042 UNUSED(hsai); in HAL_SAI_RxHalfCpltCallback()
2055 __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_ErrorCallback() argument
2058 UNUSED(hsai); in HAL_SAI_ErrorCallback()
2090 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetState() argument
2092 return hsai->State; in HAL_SAI_GetState()
2101 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetError() argument
2103 return hsai->ErrorCode; in HAL_SAI_GetError()
2130 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitI2S() argument
2134 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitI2S()
2135 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitI2S()
2137 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitI2S()
2140 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitI2S()
2145 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitI2S()
2147 hsai->FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; in SAI_InitI2S()
2148 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitI2S()
2149 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitI2S()
2150 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitI2S()
2160 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; in SAI_InitI2S()
2161 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitI2S()
2166 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitI2S()
2167 hsai->FrameInit.FSOffset = SAI_FS_FIRSTBIT; in SAI_InitI2S()
2174 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2175 hsai->FrameInit.FrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2176 hsai->FrameInit.ActiveFrameLength = 16U * (nbslot / 2U); in SAI_InitI2S()
2177 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitI2S()
2180 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2181 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2182 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2183 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2186 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitI2S()
2187 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2188 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2189 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2192 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitI2S()
2193 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2194 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2195 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2205 hsai->SlotInit.FirstBitOffset = 16; in SAI_InitI2S()
2209 hsai->SlotInit.FirstBitOffset = 8; in SAI_InitI2S()
2225 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitPCM() argument
2229 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitPCM()
2230 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitPCM()
2232 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitPCM()
2235 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitPCM()
2240 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitPCM()
2242 hsai->FrameInit.FSDefinition = SAI_FS_STARTFRAME; in SAI_InitPCM()
2243 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitPCM()
2244 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitPCM()
2245 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitPCM()
2246 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitPCM()
2247 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitPCM()
2251 hsai->FrameInit.ActiveFrameLength = 1; in SAI_InitPCM()
2256 hsai->FrameInit.ActiveFrameLength = 13; in SAI_InitPCM()
2262 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2263 hsai->FrameInit.FrameLength = 16U * nbslot; in SAI_InitPCM()
2264 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitPCM()
2267 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2268 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2269 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2272 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitPCM()
2273 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2274 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2277 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitPCM()
2278 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2279 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2295 static void SAI_FillFifo(SAI_HandleTypeDef *hsai) in SAI_FillFifo() argument
2300 while (((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) && (hsai->XferCount > 0U)) in SAI_FillFifo()
2302 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in SAI_FillFifo()
2304 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_FillFifo()
2305 hsai->pBuffPtr++; in SAI_FillFifo()
2307 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in SAI_FillFifo()
2309 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2310 hsai->pBuffPtr++; in SAI_FillFifo()
2311 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2312 hsai->pBuffPtr++; in SAI_FillFifo()
2313 hsai->Instance->DR = temp; in SAI_FillFifo()
2317 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2318 hsai->pBuffPtr++; in SAI_FillFifo()
2319 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2320 hsai->pBuffPtr++; in SAI_FillFifo()
2321 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_FillFifo()
2322 hsai->pBuffPtr++; in SAI_FillFifo()
2323 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_FillFifo()
2324 hsai->pBuffPtr++; in SAI_FillFifo()
2325 hsai->Instance->DR = temp; in SAI_FillFifo()
2327 hsai->XferCount--; in SAI_FillFifo()
2338 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode) in SAI_InterruptFlag() argument
2347 if ((hsai->Init.Protocol == SAI_AC97_PROTOCOL) && in SAI_InterruptFlag()
2348 ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODEMASTER_RX))) in SAI_InterruptFlag()
2353 if ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InterruptFlag()
2371 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) in SAI_Disable() argument
2377 __HAL_SAI_DISABLE(hsai); in SAI_Disable()
2385 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in SAI_Disable()
2391 while ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) != 0U); in SAI_Disable()
2402 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT8Bit() argument
2404 if (hsai->XferCount == 0U) in SAI_Transmit_IT8Bit()
2408 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT8Bit()
2409 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT8Bit()
2411 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2413 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2419 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_Transmit_IT8Bit()
2420 hsai->pBuffPtr++; in SAI_Transmit_IT8Bit()
2421 hsai->XferCount--; in SAI_Transmit_IT8Bit()
2431 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT16Bit() argument
2433 if (hsai->XferCount == 0U) in SAI_Transmit_IT16Bit()
2437 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT16Bit()
2438 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT16Bit()
2440 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2442 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2449 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT16Bit()
2450 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2451 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT16Bit()
2452 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2453 hsai->Instance->DR = temp; in SAI_Transmit_IT16Bit()
2454 hsai->XferCount--; in SAI_Transmit_IT16Bit()
2464 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT32Bit() argument
2466 if (hsai->XferCount == 0U) in SAI_Transmit_IT32Bit()
2470 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT32Bit()
2471 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT32Bit()
2473 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2475 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2482 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT32Bit()
2483 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2484 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT32Bit()
2485 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2486 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_Transmit_IT32Bit()
2487 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2488 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_Transmit_IT32Bit()
2489 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2490 hsai->Instance->DR = temp; in SAI_Transmit_IT32Bit()
2491 hsai->XferCount--; in SAI_Transmit_IT32Bit()
2501 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT8Bit() argument
2504 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in SAI_Receive_IT8Bit()
2505 hsai->pBuffPtr++; in SAI_Receive_IT8Bit()
2506 hsai->XferCount--; in SAI_Receive_IT8Bit()
2509 if (hsai->XferCount == 0U) in SAI_Receive_IT8Bit()
2512 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT8Bit()
2515 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT8Bit()
2517 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT8Bit()
2519 hsai->RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2521 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2532 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT16Bit() argument
2537 temp = hsai->Instance->DR; in SAI_Receive_IT16Bit()
2538 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT16Bit()
2539 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2540 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT16Bit()
2541 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2542 hsai->XferCount--; in SAI_Receive_IT16Bit()
2545 if (hsai->XferCount == 0U) in SAI_Receive_IT16Bit()
2548 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT16Bit()
2551 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT16Bit()
2553 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT16Bit()
2555 hsai->RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2557 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2568 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT32Bit() argument
2573 temp = hsai->Instance->DR; in SAI_Receive_IT32Bit()
2574 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT32Bit()
2575 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2576 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT32Bit()
2577 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2578 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in SAI_Receive_IT32Bit()
2579 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2580 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in SAI_Receive_IT32Bit()
2581 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2582 hsai->XferCount--; in SAI_Receive_IT32Bit()
2585 if (hsai->XferCount == 0U) in SAI_Receive_IT32Bit()
2588 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT32Bit()
2591 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT32Bit()
2593 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT32Bit()
2595 hsai->RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2597 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2610 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxCplt() local
2614 hsai->XferCount = 0; in SAI_DMATxCplt()
2617 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMATxCplt()
2620 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMATxCplt()
2622 hsai->State = HAL_SAI_STATE_READY; in SAI_DMATxCplt()
2625 hsai->TxCpltCallback(hsai); in SAI_DMATxCplt()
2627 HAL_SAI_TxCpltCallback(hsai); in SAI_DMATxCplt()
2639 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxHalfCplt() local
2642 hsai->TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2644 HAL_SAI_TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2656 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxCplt() local
2661 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMARxCplt()
2662 hsai->XferCount = 0; in SAI_DMARxCplt()
2665 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMARxCplt()
2667 hsai->State = HAL_SAI_STATE_READY; in SAI_DMARxCplt()
2670 hsai->RxCpltCallback(hsai); in SAI_DMARxCplt()
2672 HAL_SAI_RxCpltCallback(hsai); in SAI_DMARxCplt()
2684 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxHalfCplt() local
2687 hsai->RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2689 HAL_SAI_RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2701 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAError() local
2704 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in SAI_DMAError()
2707 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAError()
2711 (void) SAI_Disable(hsai); in SAI_DMAError()
2714 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAError()
2717 hsai->XferCount = 0U; in SAI_DMAError()
2721 hsai->ErrorCallback(hsai); in SAI_DMAError()
2723 HAL_SAI_ErrorCallback(hsai); in SAI_DMAError()
2735 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAAbort() local
2738 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAAbort()
2741 hsai->Instance->IMR = 0U; in SAI_DMAAbort()
2742 hsai->Instance->CLRFR = 0xFFFFFFFFU; in SAI_DMAAbort()
2744 if (hsai->ErrorCode != HAL_SAI_ERROR_WCKCFG) in SAI_DMAAbort()
2748 (void) SAI_Disable(hsai); in SAI_DMAAbort()
2751 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in SAI_DMAAbort()
2754 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAAbort()
2757 hsai->XferCount = 0U; in SAI_DMAAbort()
2761 hsai->ErrorCallback(hsai); in SAI_DMAAbort()
2763 HAL_SAI_ErrorCallback(hsai); in SAI_DMAAbort()