Lines Matching refs:hsai
260 static void SAI_FillFifo(SAI_HandleTypeDef *hsai);
261 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode);
262 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
263 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
265 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai);
266 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai);
267 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai);
268 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai);
269 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai);
270 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai);
271 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai);
332 HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasiz… in HAL_SAI_InitProtocol() argument
345 status = SAI_InitI2S(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
349 status = SAI_InitPCM(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
358 status = HAL_SAI_Init(hsai); in HAL_SAI_InitProtocol()
371 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()
399 assert_param(IS_SAI_BLOCK_MCK_OUTPUT(hsai->Init.MckOutput)); in HAL_SAI_Init()
402 assert_param(IS_SAI_BLOCK_MCK_OUTPUT(hsai->Init.MckOutput)); in HAL_SAI_Init()
404 assert_param(IS_SAI_BLOCK_OUTPUT_DRIVE(hsai->Init.OutputDrive)); in HAL_SAI_Init()
405 assert_param(IS_SAI_BLOCK_NODIVIDER(hsai->Init.NoDivider)); in HAL_SAI_Init()
406 assert_param(IS_SAI_BLOCK_FIFO_THRESHOLD(hsai->Init.FIFOThreshold)); in HAL_SAI_Init()
407 assert_param(IS_SAI_MONO_STEREO_MODE(hsai->Init.MonoStereoMode)); in HAL_SAI_Init()
408 assert_param(IS_SAI_BLOCK_COMPANDING_MODE(hsai->Init.CompandingMode)); in HAL_SAI_Init()
409 assert_param(IS_SAI_BLOCK_TRISTATE_MANAGEMENT(hsai->Init.TriState)); in HAL_SAI_Init()
410 assert_param(IS_SAI_BLOCK_SYNCEXT(hsai->Init.SynchroExt)); in HAL_SAI_Init()
411 assert_param(IS_SAI_BLOCK_MCK_OVERSAMPLING(hsai->Init.MckOverSampling)); in HAL_SAI_Init()
414 assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); in HAL_SAI_Init()
415 assert_param(IS_SAI_BLOCK_ACTIVE_FRAME(hsai->FrameInit.ActiveFrameLength)); in HAL_SAI_Init()
416 assert_param(IS_SAI_BLOCK_FS_DEFINITION(hsai->FrameInit.FSDefinition)); in HAL_SAI_Init()
417 assert_param(IS_SAI_BLOCK_FS_POLARITY(hsai->FrameInit.FSPolarity)); in HAL_SAI_Init()
418 assert_param(IS_SAI_BLOCK_FS_OFFSET(hsai->FrameInit.FSOffset)); in HAL_SAI_Init()
421 assert_param(IS_SAI_BLOCK_FIRSTBIT_OFFSET(hsai->SlotInit.FirstBitOffset)); in HAL_SAI_Init()
422 assert_param(IS_SAI_BLOCK_SLOT_SIZE(hsai->SlotInit.SlotSize)); in HAL_SAI_Init()
423 assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); in HAL_SAI_Init()
424 assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); in HAL_SAI_Init()
427 assert_param(IS_FUNCTIONAL_STATE(hsai->Init.PdmInit.Activation)); in HAL_SAI_Init()
428 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
430 assert_param(IS_SAI_PDM_MIC_PAIRS_NUMBER(hsai->Init.PdmInit.MicPairsNbr)); in HAL_SAI_Init()
431 assert_param(IS_SAI_PDM_CLOCK_ENABLE(hsai->Init.PdmInit.ClockEnable)); in HAL_SAI_Init()
434 if (((hsai->Instance != SAI1_Block_A) && (hsai->Instance != SAI4_Block_A)) || in HAL_SAI_Init()
435 (hsai->Init.AudioMode != SAI_MODEMASTER_RX) || in HAL_SAI_Init()
436 (hsai->Init.Protocol != SAI_FREE_PROTOCOL)) in HAL_SAI_Init()
441 if ((hsai->Instance != SAI1_Block_A) || in HAL_SAI_Init()
442 (hsai->Init.AudioMode != SAI_MODEMASTER_RX) || in HAL_SAI_Init()
443 (hsai->Init.Protocol != SAI_FREE_PROTOCOL)) in HAL_SAI_Init()
451 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
456 else if ((hsai->Instance == SAI2_Block_A) || (hsai->Instance == SAI2_Block_B)) in HAL_SAI_Init()
462 else if ((hsai->Instance == SAI3_Block_A) || (hsai->Instance == SAI3_Block_B)) in HAL_SAI_Init()
468 else if ((hsai->Instance == SAI4_Block_A) || (hsai->Instance == SAI4_Block_B)) in HAL_SAI_Init()
478 if (hsai->State == HAL_SAI_STATE_RESET) in HAL_SAI_Init()
481 hsai->Lock = HAL_UNLOCKED; in HAL_SAI_Init()
485 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_Init()
486 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_Init()
487 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_Init()
488 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_Init()
489 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_Init()
492 if (hsai->MspInitCallback == NULL) in HAL_SAI_Init()
494 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_Init()
496 hsai->MspInitCallback(hsai); in HAL_SAI_Init()
499 HAL_SAI_MspInit(hsai); in HAL_SAI_Init()
504 if(SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Init()
509 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_Init()
513 switch (hsai->Init.SynchroExt) in HAL_SAI_Init()
529 switch (hsai->Init.Synchro) in HAL_SAI_Init()
566 if (hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) in HAL_SAI_Init()
572 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
579 if ((hsai->Instance == SAI2_Block_A) || (hsai->Instance == SAI2_Block_B)) in HAL_SAI_Init()
584 if (hsai->Instance == SAI2_Block_A) in HAL_SAI_Init()
588 if (hsai->Instance == SAI2_Block_B) in HAL_SAI_Init()
596 if ((hsai->Instance == SAI3_Block_A) || (hsai->Instance == SAI3_Block_B)) in HAL_SAI_Init()
602 if (hsai->Instance == SAI4_Block_A) in HAL_SAI_Init()
606 if (hsai->Instance == SAI4_Block_B) in HAL_SAI_Init()
617 if (hsai->Init.NoDivider == SAI_MASTERDIVIDER_DISABLE) in HAL_SAI_Init()
622 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
627 else if (hsai->Init.Protocol == SAI_AC97_PROTOCOL) in HAL_SAI_Init()
635 tmpframelength = hsai->FrameInit.FrameLength; in HAL_SAI_Init()
639 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmpframelength); in HAL_SAI_Init()
645 tmposr = (hsai->Init.MckOverSampling == SAI_MCK_OVERSAMPLING_ENABLE) ? 2U : 1U; in HAL_SAI_Init()
647 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmposr * 256U); in HAL_SAI_Init()
649 hsai->Init.Mckdiv = tmpval / 10U; in HAL_SAI_Init()
654 hsai->Init.Mckdiv += 1U; in HAL_SAI_Init()
658 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
660 hsai->Init.Mckdiv = hsai->Init.Mckdiv >> 1; in HAL_SAI_Init()
665 assert_param(IS_SAI_BLOCK_MASTER_DIVIDER(hsai->Init.Mckdiv)); in HAL_SAI_Init()
668 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in HAL_SAI_Init()
671 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? 0U : SAI_xCR1_CKSTR; in HAL_SAI_Init()
676 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? SAI_xCR1_CKSTR : 0U; in HAL_SAI_Init()
685 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
691 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
692 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
694 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
695 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ in HAL_SAI_Init()
696 hsai->Init.MckOverSampling | hsai->Init.MckOutput); in HAL_SAI_Init()
700 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
705 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
706 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
708 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
709 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ in HAL_SAI_Init()
710 hsai->Init.MckOverSampling); in HAL_SAI_Init()
713 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
719 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
720 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
722 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
723 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ in HAL_SAI_Init()
724 hsai->Init.MckOverSampling | hsai->Init.MckOutput); in HAL_SAI_Init()
728 hsai->Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); in HAL_SAI_Init()
729 …hsai->Instance->CR2 |= (hsai->Init.FIFOThreshold | hsai->Init.CompandingMode | hsai->Init.TriState… in HAL_SAI_Init()
732 hsai->Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \ in HAL_SAI_Init()
734 hsai->Instance->FRCR |= ((hsai->FrameInit.FrameLength - 1U) | in HAL_SAI_Init()
735 hsai->FrameInit.FSOffset | in HAL_SAI_Init()
736 hsai->FrameInit.FSDefinition | in HAL_SAI_Init()
737 hsai->FrameInit.FSPolarity | in HAL_SAI_Init()
738 ((hsai->FrameInit.ActiveFrameLength - 1U) << 8)); in HAL_SAI_Init()
742 hsai->Instance->SLOTR &= (~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \ in HAL_SAI_Init()
745 hsai->Instance->SLOTR |= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize | \ in HAL_SAI_Init()
746 … (hsai->SlotInit.SlotActive << 16) | ((hsai->SlotInit.SlotNumber - 1U) << 8); in HAL_SAI_Init()
750 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI4_Block_A)) in HAL_SAI_Init()
752 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_Init()
757 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
760 SaiBaseAddress->PDMCR = (hsai->Init.PdmInit.ClockEnable | in HAL_SAI_Init()
761 ((hsai->Init.PdmInit.MicPairsNbr - 1U) << SAI_PDMCR_MICNBR_Pos)); in HAL_SAI_Init()
767 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Init()
770 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Init()
773 __HAL_UNLOCK(hsai); in HAL_SAI_Init()
784 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_DeInit() argument
789 if (hsai == NULL) in HAL_SAI_DeInit()
794 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_DeInit()
797 hsai->Instance->IMR = 0; in HAL_SAI_DeInit()
798 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_DeInit()
801 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DeInit()
804 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DeInit()
807 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
813 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DeInit()
817 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI4_Block_A)) in HAL_SAI_DeInit()
819 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_DeInit()
824 SaiBaseAddress = (hsai->Instance == SAI1_Block_A) ? SAI1 : SAI4; in HAL_SAI_DeInit()
838 if (hsai->MspDeInitCallback == NULL) in HAL_SAI_DeInit()
840 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_DeInit()
842 hsai->MspDeInitCallback(hsai); in HAL_SAI_DeInit()
844 HAL_SAI_MspDeInit(hsai); in HAL_SAI_DeInit()
848 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_DeInit()
851 hsai->State = HAL_SAI_STATE_RESET; in HAL_SAI_DeInit()
854 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
865 __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspInit() argument
868 UNUSED(hsai); in HAL_SAI_MspInit()
881 __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspDeInit() argument
884 UNUSED(hsai); in HAL_SAI_MspDeInit()
908 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_RegisterCallback() argument
917 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
923 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_RegisterCallback()
928 hsai->RxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
931 hsai->RxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
934 hsai->TxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
937 hsai->TxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
940 hsai->ErrorCallback = pCallback; in HAL_SAI_RegisterCallback()
943 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
946 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
950 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
956 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_RegisterCallback()
961 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
964 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
968 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
977 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
1000 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_UnRegisterCallback() argument
1005 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_UnRegisterCallback()
1010 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_UnRegisterCallback()
1013 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
1016 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_UnRegisterCallback()
1019 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
1022 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_UnRegisterCallback()
1025 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
1028 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
1032 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
1038 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_UnRegisterCallback()
1043 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
1046 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
1050 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
1059 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
1122 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t… in HAL_SAI_Transmit() argument
1132 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit()
1135 __HAL_LOCK(hsai); in HAL_SAI_Transmit()
1137 hsai->XferSize = Size; in HAL_SAI_Transmit()
1138 hsai->XferCount = Size; in HAL_SAI_Transmit()
1139 hsai->pBuffPtr = pData; in HAL_SAI_Transmit()
1140 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit()
1141 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit()
1144 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit()
1147 SAI_FillFifo(hsai); in HAL_SAI_Transmit()
1149 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit()
1152 while (hsai->XferCount > 0U) in HAL_SAI_Transmit()
1155 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) in HAL_SAI_Transmit()
1157 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit()
1159 hsai->Instance->DR = *hsai->pBuffPtr; in HAL_SAI_Transmit()
1160 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1162 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit()
1164 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1165 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1166 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1167 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1168 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1172 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1173 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1174 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1175 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1176 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in HAL_SAI_Transmit()
1177 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1178 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in HAL_SAI_Transmit()
1179 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1180 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1182 hsai->XferCount--; in HAL_SAI_Transmit()
1190 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit()
1193 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Transmit()
1197 (void) SAI_Disable(hsai); in HAL_SAI_Transmit()
1200 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Transmit()
1203 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1206 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1213 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1216 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1235 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SAI_Receive() argument
1245 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive()
1248 __HAL_LOCK(hsai); in HAL_SAI_Receive()
1250 hsai->pBuffPtr = pData; in HAL_SAI_Receive()
1251 hsai->XferSize = Size; in HAL_SAI_Receive()
1252 hsai->XferCount = Size; in HAL_SAI_Receive()
1253 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive()
1254 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive()
1257 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive()
1260 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive()
1264 while (hsai->XferCount > 0U) in HAL_SAI_Receive()
1266 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Receive()
1268 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive()
1270 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in HAL_SAI_Receive()
1271 hsai->pBuffPtr++; in HAL_SAI_Receive()
1273 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive()
1275 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1276 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1277 hsai->pBuffPtr++; in HAL_SAI_Receive()
1278 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1279 hsai->pBuffPtr++; in HAL_SAI_Receive()
1283 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1284 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1285 hsai->pBuffPtr++; in HAL_SAI_Receive()
1286 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1287 hsai->pBuffPtr++; in HAL_SAI_Receive()
1288 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in HAL_SAI_Receive()
1289 hsai->pBuffPtr++; in HAL_SAI_Receive()
1290 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in HAL_SAI_Receive()
1291 hsai->pBuffPtr++; in HAL_SAI_Receive()
1293 hsai->XferCount--; in HAL_SAI_Receive()
1301 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Receive()
1304 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Receive()
1308 (void) SAI_Disable(hsai); in HAL_SAI_Receive()
1311 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Receive()
1314 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1317 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1324 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1327 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1345 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_IT() argument
1352 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_IT()
1355 __HAL_LOCK(hsai); in HAL_SAI_Transmit_IT()
1357 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_IT()
1358 hsai->XferSize = Size; in HAL_SAI_Transmit_IT()
1359 hsai->XferCount = Size; in HAL_SAI_Transmit_IT()
1360 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_IT()
1361 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_IT()
1363 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_IT()
1365 hsai->InterruptServiceRoutine = SAI_Transmit_IT8Bit; in HAL_SAI_Transmit_IT()
1367 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_IT()
1369 hsai->InterruptServiceRoutine = SAI_Transmit_IT16Bit; in HAL_SAI_Transmit_IT()
1373 hsai->InterruptServiceRoutine = SAI_Transmit_IT32Bit; in HAL_SAI_Transmit_IT()
1377 SAI_FillFifo(hsai); in HAL_SAI_Transmit_IT()
1380 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Transmit_IT()
1383 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_IT()
1386 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_IT()
1389 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_IT()
1407 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_IT() argument
1414 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_IT()
1417 __HAL_LOCK(hsai); in HAL_SAI_Receive_IT()
1419 hsai->pBuffPtr = pData; in HAL_SAI_Receive_IT()
1420 hsai->XferSize = Size; in HAL_SAI_Receive_IT()
1421 hsai->XferCount = Size; in HAL_SAI_Receive_IT()
1422 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_IT()
1423 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_IT()
1425 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_IT()
1427 hsai->InterruptServiceRoutine = SAI_Receive_IT8Bit; in HAL_SAI_Receive_IT()
1429 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_IT()
1431 hsai->InterruptServiceRoutine = SAI_Receive_IT16Bit; in HAL_SAI_Receive_IT()
1435 hsai->InterruptServiceRoutine = SAI_Receive_IT32Bit; in HAL_SAI_Receive_IT()
1439 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Receive_IT()
1442 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_IT()
1445 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_IT()
1449 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_IT()
1465 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAPause() argument
1468 __HAL_LOCK(hsai); in HAL_SAI_DMAPause()
1471 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAPause()
1474 __HAL_UNLOCK(hsai); in HAL_SAI_DMAPause()
1485 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAResume() argument
1488 __HAL_LOCK(hsai); in HAL_SAI_DMAResume()
1491 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_DMAResume()
1494 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_DMAResume()
1497 __HAL_SAI_ENABLE(hsai); in HAL_SAI_DMAResume()
1501 __HAL_UNLOCK(hsai); in HAL_SAI_DMAResume()
1512 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAStop() argument
1517 __HAL_LOCK(hsai); in HAL_SAI_DMAStop()
1520 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DMAStop()
1526 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAStop()
1529 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_DMAStop()
1531 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_DMAStop()
1534 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1537 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1543 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_DMAStop()
1545 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_DMAStop()
1548 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1551 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1557 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DMAStop()
1560 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DMAStop()
1563 __HAL_UNLOCK(hsai); in HAL_SAI_DMAStop()
1574 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) in HAL_SAI_Abort() argument
1579 __HAL_LOCK(hsai); in HAL_SAI_Abort()
1582 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Abort()
1588 if ((hsai->Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN) in HAL_SAI_Abort()
1591 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_Abort()
1594 if ((hsai->State == HAL_SAI_STATE_BUSY_TX)&& (hsai->hdmatx != NULL)) in HAL_SAI_Abort()
1596 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_Abort()
1599 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1602 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1608 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_Abort()
1610 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_Abort()
1613 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1616 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1623 hsai->Instance->IMR = 0; in HAL_SAI_Abort()
1624 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Abort()
1627 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Abort()
1630 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Abort()
1633 __HAL_UNLOCK(hsai); in HAL_SAI_Abort()
1646 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_DMA() argument
1655 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_DMA()
1658 __HAL_LOCK(hsai); in HAL_SAI_Transmit_DMA()
1660 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_DMA()
1661 hsai->XferSize = Size; in HAL_SAI_Transmit_DMA()
1662 hsai->XferCount = Size; in HAL_SAI_Transmit_DMA()
1663 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_DMA()
1664 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_DMA()
1667 hsai->hdmatx->XferHalfCpltCallback = SAI_DMATxHalfCplt; in HAL_SAI_Transmit_DMA()
1670 hsai->hdmatx->XferCpltCallback = SAI_DMATxCplt; in HAL_SAI_Transmit_DMA()
1673 hsai->hdmatx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Transmit_DMA()
1676 hsai->hdmatx->XferAbortCallback = NULL; in HAL_SAI_Transmit_DMA()
1679 …if (HAL_DMA_Start_IT(hsai->hdmatx, (uint32_t)hsai->pBuffPtr, (uint32_t)&hsai->Instance->DR, hsai->… in HAL_SAI_Transmit_DMA()
1681 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1686 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Transmit_DMA()
1689 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Transmit_DMA()
1692 while ((hsai->Instance->SR & SAI_xSR_FLVL) == SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Transmit_DMA()
1698 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit_DMA()
1701 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1708 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_DMA()
1711 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_DMA()
1715 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1733 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_DMA() argument
1741 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_DMA()
1744 __HAL_LOCK(hsai); in HAL_SAI_Receive_DMA()
1746 hsai->pBuffPtr = pData; in HAL_SAI_Receive_DMA()
1747 hsai->XferSize = Size; in HAL_SAI_Receive_DMA()
1748 hsai->XferCount = Size; in HAL_SAI_Receive_DMA()
1749 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_DMA()
1750 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_DMA()
1753 hsai->hdmarx->XferHalfCpltCallback = SAI_DMARxHalfCplt; in HAL_SAI_Receive_DMA()
1756 hsai->hdmarx->XferCpltCallback = SAI_DMARxCplt; in HAL_SAI_Receive_DMA()
1759 hsai->hdmarx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Receive_DMA()
1762 hsai->hdmarx->XferAbortCallback = NULL; in HAL_SAI_Receive_DMA()
1765 …if (HAL_DMA_Start_IT(hsai->hdmarx, (uint32_t)&hsai->Instance->DR, (uint32_t)hsai->pBuffPtr, hsai->… in HAL_SAI_Receive_DMA()
1767 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1772 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Receive_DMA()
1775 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Receive_DMA()
1778 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_DMA()
1781 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_DMA()
1785 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1802 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) in HAL_SAI_EnableTxMuteMode() argument
1806 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableTxMuteMode()
1808 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_EnableTxMuteMode()
1809 SET_BIT(hsai->Instance->CR2, SAI_xCR2_MUTE | (uint32_t)val); in HAL_SAI_EnableTxMuteMode()
1821 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableTxMuteMode() argument
1823 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableTxMuteMode()
1825 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_DisableTxMuteMode()
1839 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t … in HAL_SAI_EnableRxMuteMode() argument
1843 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableRxMuteMode()
1846 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); in HAL_SAI_EnableRxMuteMode()
1847 SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); in HAL_SAI_EnableRxMuteMode()
1848 hsai->mutecallback = callback; in HAL_SAI_EnableRxMuteMode()
1850 __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_EnableRxMuteMode()
1862 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableRxMuteMode() argument
1864 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableRxMuteMode()
1867 hsai->mutecallback = NULL; in HAL_SAI_DisableRxMuteMode()
1869 __HAL_SAI_DISABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_DisableRxMuteMode()
1881 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) in HAL_SAI_IRQHandler() argument
1883 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_IRQHandler()
1885 uint32_t itflags = hsai->Instance->SR; in HAL_SAI_IRQHandler()
1886 uint32_t itsources = hsai->Instance->IMR; in HAL_SAI_IRQHandler()
1887 uint32_t cr1config = hsai->Instance->CR1; in HAL_SAI_IRQHandler()
1893 hsai->InterruptServiceRoutine(hsai); in HAL_SAI_IRQHandler()
1899 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in HAL_SAI_IRQHandler()
1901 tmperror = ((hsai->State == HAL_SAI_STATE_BUSY_RX) ? HAL_SAI_ERROR_OVR : HAL_SAI_ERROR_UDR); in HAL_SAI_IRQHandler()
1903 hsai->ErrorCode |= tmperror; in HAL_SAI_IRQHandler()
1906 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1908 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1915 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_MUTEDET); in HAL_SAI_IRQHandler()
1917 if (hsai->mutecallback != NULL) in HAL_SAI_IRQHandler()
1920 hsai->mutecallback(); in HAL_SAI_IRQHandler()
1927 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_AFSDET); in HAL_SAI_IRQHandler()
1930 hsai->ErrorCode |= HAL_SAI_ERROR_AFSDET; in HAL_SAI_IRQHandler()
1936 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1939 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1942 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1945 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1949 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1951 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1955 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1958 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1961 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1964 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1968 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1970 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1979 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1983 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1985 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1993 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_LFSDET); in HAL_SAI_IRQHandler()
1996 hsai->ErrorCode |= HAL_SAI_ERROR_LFSDET; in HAL_SAI_IRQHandler()
2002 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
2005 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2008 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
2011 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2015 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2017 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2021 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
2024 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2027 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
2030 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2034 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2036 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2045 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
2049 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2051 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2059 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_WCKCFG); in HAL_SAI_IRQHandler()
2062 hsai->ErrorCode |= HAL_SAI_ERROR_WCKCFG; in HAL_SAI_IRQHandler()
2068 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
2071 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2074 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
2077 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2081 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2083 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2087 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
2090 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2093 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
2096 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2100 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2102 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2111 hsai->Instance->IMR = 0U; in HAL_SAI_IRQHandler()
2112 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_IRQHandler()
2114 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_IRQHandler()
2117 hsai->XferCount = 0U; in HAL_SAI_IRQHandler()
2121 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2123 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2131 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_CNRDY); in HAL_SAI_IRQHandler()
2133 hsai->ErrorCode |= HAL_SAI_ERROR_CNREADY; in HAL_SAI_IRQHandler()
2136 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2138 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2154 __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxCpltCallback() argument
2157 UNUSED(hsai); in HAL_SAI_TxCpltCallback()
2170 __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxHalfCpltCallback() argument
2173 UNUSED(hsai); in HAL_SAI_TxHalfCpltCallback()
2186 __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxCpltCallback() argument
2189 UNUSED(hsai); in HAL_SAI_RxCpltCallback()
2202 __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxHalfCpltCallback() argument
2205 UNUSED(hsai); in HAL_SAI_RxHalfCpltCallback()
2218 __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_ErrorCallback() argument
2221 UNUSED(hsai); in HAL_SAI_ErrorCallback()
2253 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetState() argument
2255 return hsai->State; in HAL_SAI_GetState()
2264 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetError() argument
2266 return hsai->ErrorCode; in HAL_SAI_GetError()
2293 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitI2S() argument
2297 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitI2S()
2298 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitI2S()
2300 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitI2S()
2303 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitI2S()
2308 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitI2S()
2310 hsai->FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; in SAI_InitI2S()
2311 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitI2S()
2312 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitI2S()
2313 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitI2S()
2323 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; in SAI_InitI2S()
2324 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitI2S()
2329 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitI2S()
2330 hsai->FrameInit.FSOffset = SAI_FS_FIRSTBIT; in SAI_InitI2S()
2337 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2338 hsai->FrameInit.FrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2339 hsai->FrameInit.ActiveFrameLength = 16U * (nbslot / 2U); in SAI_InitI2S()
2340 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitI2S()
2343 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2344 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2345 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2346 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2349 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitI2S()
2350 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2351 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2352 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2355 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitI2S()
2356 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2357 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2358 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2368 hsai->SlotInit.FirstBitOffset = 16; in SAI_InitI2S()
2372 hsai->SlotInit.FirstBitOffset = 8; in SAI_InitI2S()
2388 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitPCM() argument
2392 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitPCM()
2393 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitPCM()
2395 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitPCM()
2398 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitPCM()
2403 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitPCM()
2405 hsai->FrameInit.FSDefinition = SAI_FS_STARTFRAME; in SAI_InitPCM()
2406 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitPCM()
2407 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitPCM()
2408 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitPCM()
2409 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitPCM()
2410 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitPCM()
2414 hsai->FrameInit.ActiveFrameLength = 1; in SAI_InitPCM()
2419 hsai->FrameInit.ActiveFrameLength = 13; in SAI_InitPCM()
2425 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2426 hsai->FrameInit.FrameLength = 16U * nbslot; in SAI_InitPCM()
2427 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitPCM()
2430 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2431 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2432 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2435 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitPCM()
2436 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2437 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2440 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitPCM()
2441 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2442 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2458 static void SAI_FillFifo(SAI_HandleTypeDef *hsai) in SAI_FillFifo() argument
2463 while (((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) && (hsai->XferCount > 0U)) in SAI_FillFifo()
2465 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in SAI_FillFifo()
2467 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_FillFifo()
2468 hsai->pBuffPtr++; in SAI_FillFifo()
2470 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in SAI_FillFifo()
2472 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2473 hsai->pBuffPtr++; in SAI_FillFifo()
2474 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2475 hsai->pBuffPtr++; in SAI_FillFifo()
2476 hsai->Instance->DR = temp; in SAI_FillFifo()
2480 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2481 hsai->pBuffPtr++; in SAI_FillFifo()
2482 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2483 hsai->pBuffPtr++; in SAI_FillFifo()
2484 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_FillFifo()
2485 hsai->pBuffPtr++; in SAI_FillFifo()
2486 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_FillFifo()
2487 hsai->pBuffPtr++; in SAI_FillFifo()
2488 hsai->Instance->DR = temp; in SAI_FillFifo()
2490 hsai->XferCount--; in SAI_FillFifo()
2501 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode) in SAI_InterruptFlag() argument
2510 if ((hsai->Init.Protocol == SAI_AC97_PROTOCOL) && in SAI_InterruptFlag()
2511 ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODEMASTER_RX))) in SAI_InterruptFlag()
2516 if ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InterruptFlag()
2534 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) in SAI_Disable() argument
2540 __HAL_SAI_DISABLE(hsai); in SAI_Disable()
2548 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in SAI_Disable()
2554 while ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) != 0U); in SAI_Disable()
2565 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT8Bit() argument
2567 if (hsai->XferCount == 0U) in SAI_Transmit_IT8Bit()
2571 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT8Bit()
2572 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT8Bit()
2574 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2576 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2582 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_Transmit_IT8Bit()
2583 hsai->pBuffPtr++; in SAI_Transmit_IT8Bit()
2584 hsai->XferCount--; in SAI_Transmit_IT8Bit()
2594 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT16Bit() argument
2596 if (hsai->XferCount == 0U) in SAI_Transmit_IT16Bit()
2600 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT16Bit()
2601 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT16Bit()
2603 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2605 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2612 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT16Bit()
2613 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2614 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT16Bit()
2615 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2616 hsai->Instance->DR = temp; in SAI_Transmit_IT16Bit()
2617 hsai->XferCount--; in SAI_Transmit_IT16Bit()
2627 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT32Bit() argument
2629 if (hsai->XferCount == 0U) in SAI_Transmit_IT32Bit()
2633 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT32Bit()
2634 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT32Bit()
2636 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2638 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2645 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT32Bit()
2646 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2647 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT32Bit()
2648 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2649 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_Transmit_IT32Bit()
2650 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2651 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_Transmit_IT32Bit()
2652 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2653 hsai->Instance->DR = temp; in SAI_Transmit_IT32Bit()
2654 hsai->XferCount--; in SAI_Transmit_IT32Bit()
2664 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT8Bit() argument
2667 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in SAI_Receive_IT8Bit()
2668 hsai->pBuffPtr++; in SAI_Receive_IT8Bit()
2669 hsai->XferCount--; in SAI_Receive_IT8Bit()
2672 if (hsai->XferCount == 0U) in SAI_Receive_IT8Bit()
2675 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT8Bit()
2678 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT8Bit()
2680 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT8Bit()
2682 hsai->RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2684 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2695 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT16Bit() argument
2700 temp = hsai->Instance->DR; in SAI_Receive_IT16Bit()
2701 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT16Bit()
2702 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2703 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT16Bit()
2704 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2705 hsai->XferCount--; in SAI_Receive_IT16Bit()
2708 if (hsai->XferCount == 0U) in SAI_Receive_IT16Bit()
2711 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT16Bit()
2714 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT16Bit()
2716 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT16Bit()
2718 hsai->RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2720 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2731 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT32Bit() argument
2736 temp = hsai->Instance->DR; in SAI_Receive_IT32Bit()
2737 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT32Bit()
2738 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2739 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT32Bit()
2740 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2741 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in SAI_Receive_IT32Bit()
2742 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2743 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in SAI_Receive_IT32Bit()
2744 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2745 hsai->XferCount--; in SAI_Receive_IT32Bit()
2748 if (hsai->XferCount == 0U) in SAI_Receive_IT32Bit()
2751 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT32Bit()
2754 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT32Bit()
2756 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT32Bit()
2758 hsai->RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2760 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2773 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxCplt() local
2777 hsai->XferCount = 0; in SAI_DMATxCplt()
2780 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMATxCplt()
2783 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMATxCplt()
2785 hsai->State = HAL_SAI_STATE_READY; in SAI_DMATxCplt()
2788 hsai->TxCpltCallback(hsai); in SAI_DMATxCplt()
2790 HAL_SAI_TxCpltCallback(hsai); in SAI_DMATxCplt()
2802 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxHalfCplt() local
2805 hsai->TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2807 HAL_SAI_TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2819 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxCplt() local
2824 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMARxCplt()
2825 hsai->XferCount = 0; in SAI_DMARxCplt()
2828 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMARxCplt()
2830 hsai->State = HAL_SAI_STATE_READY; in SAI_DMARxCplt()
2833 hsai->RxCpltCallback(hsai); in SAI_DMARxCplt()
2835 HAL_SAI_RxCpltCallback(hsai); in SAI_DMARxCplt()
2847 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxHalfCplt() local
2850 hsai->RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2852 HAL_SAI_RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2864 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAError() local
2870 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in SAI_DMAError()
2873 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAError()
2877 (void) SAI_Disable(hsai); in SAI_DMAError()
2880 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAError()
2883 hsai->XferCount = 0U; in SAI_DMAError()
2887 hsai->ErrorCallback(hsai); in SAI_DMAError()
2889 HAL_SAI_ErrorCallback(hsai); in SAI_DMAError()
2902 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAAbort() local
2905 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAAbort()
2908 hsai->Instance->IMR = 0U; in SAI_DMAAbort()
2909 hsai->Instance->CLRFR = 0xFFFFFFFFU; in SAI_DMAAbort()
2911 if (hsai->ErrorCode != HAL_SAI_ERROR_WCKCFG) in SAI_DMAAbort()
2915 (void) SAI_Disable(hsai); in SAI_DMAAbort()
2918 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in SAI_DMAAbort()
2921 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAAbort()
2924 hsai->XferCount = 0U; in SAI_DMAAbort()
2928 hsai->ErrorCallback(hsai); in SAI_DMAAbort()
2930 HAL_SAI_ErrorCallback(hsai); in SAI_DMAAbort()