Lines Matching refs:hsai
259 static void SAI_FillFifo(SAI_HandleTypeDef *hsai);
260 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode);
261 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
262 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
264 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai);
265 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai);
266 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai);
267 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai);
268 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai);
269 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai);
270 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai);
331 HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasiz… in HAL_SAI_InitProtocol() argument
344 status = SAI_InitI2S(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
348 status = SAI_InitPCM(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
357 status = HAL_SAI_Init(hsai); in HAL_SAI_InitProtocol()
370 HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) in HAL_SAI_Init() argument
377 if (hsai == NULL) in HAL_SAI_Init()
383 assert_param(IS_SAI_ALL_INSTANCE(hsai->Instance)); in HAL_SAI_Init()
386 assert_param(IS_SAI_AUDIO_FREQUENCY(hsai->Init.AudioFrequency)); in HAL_SAI_Init()
387 assert_param(IS_SAI_BLOCK_PROTOCOL(hsai->Init.Protocol)); in HAL_SAI_Init()
388 assert_param(IS_SAI_BLOCK_MODE(hsai->Init.AudioMode)); in HAL_SAI_Init()
389 assert_param(IS_SAI_BLOCK_DATASIZE(hsai->Init.DataSize)); in HAL_SAI_Init()
390 assert_param(IS_SAI_BLOCK_FIRST_BIT(hsai->Init.FirstBit)); in HAL_SAI_Init()
391 assert_param(IS_SAI_BLOCK_CLOCK_STROBING(hsai->Init.ClockStrobing)); in HAL_SAI_Init()
392 assert_param(IS_SAI_BLOCK_SYNCHRO(hsai->Init.Synchro)); in HAL_SAI_Init()
393 assert_param(IS_SAI_BLOCK_MCK_OUTPUT(hsai->Init.MckOutput)); in HAL_SAI_Init()
394 assert_param(IS_SAI_BLOCK_OUTPUT_DRIVE(hsai->Init.OutputDrive)); in HAL_SAI_Init()
395 assert_param(IS_SAI_BLOCK_NODIVIDER(hsai->Init.NoDivider)); in HAL_SAI_Init()
396 assert_param(IS_SAI_BLOCK_FIFO_THRESHOLD(hsai->Init.FIFOThreshold)); in HAL_SAI_Init()
397 assert_param(IS_SAI_MONO_STEREO_MODE(hsai->Init.MonoStereoMode)); in HAL_SAI_Init()
398 assert_param(IS_SAI_BLOCK_COMPANDING_MODE(hsai->Init.CompandingMode)); in HAL_SAI_Init()
399 assert_param(IS_SAI_BLOCK_TRISTATE_MANAGEMENT(hsai->Init.TriState)); in HAL_SAI_Init()
400 assert_param(IS_SAI_BLOCK_SYNCEXT(hsai->Init.SynchroExt)); in HAL_SAI_Init()
401 assert_param(IS_SAI_BLOCK_MCK_OVERSAMPLING(hsai->Init.MckOverSampling)); in HAL_SAI_Init()
404 assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); in HAL_SAI_Init()
405 assert_param(IS_SAI_BLOCK_ACTIVE_FRAME(hsai->FrameInit.ActiveFrameLength)); in HAL_SAI_Init()
406 assert_param(IS_SAI_BLOCK_FS_DEFINITION(hsai->FrameInit.FSDefinition)); in HAL_SAI_Init()
407 assert_param(IS_SAI_BLOCK_FS_POLARITY(hsai->FrameInit.FSPolarity)); in HAL_SAI_Init()
408 assert_param(IS_SAI_BLOCK_FS_OFFSET(hsai->FrameInit.FSOffset)); in HAL_SAI_Init()
411 assert_param(IS_SAI_BLOCK_FIRSTBIT_OFFSET(hsai->SlotInit.FirstBitOffset)); in HAL_SAI_Init()
412 assert_param(IS_SAI_BLOCK_SLOT_SIZE(hsai->SlotInit.SlotSize)); in HAL_SAI_Init()
413 assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); in HAL_SAI_Init()
414 assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); in HAL_SAI_Init()
417 assert_param(IS_FUNCTIONAL_STATE(hsai->Init.PdmInit.Activation)); in HAL_SAI_Init()
418 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
420 assert_param(IS_SAI_PDM_MIC_PAIRS_NUMBER(hsai->Init.PdmInit.MicPairsNbr)); in HAL_SAI_Init()
421 assert_param(IS_SAI_PDM_CLOCK_ENABLE(hsai->Init.PdmInit.ClockEnable)); in HAL_SAI_Init()
423 if ((hsai->Instance != SAI1_Block_A) || in HAL_SAI_Init()
424 (hsai->Init.AudioMode != SAI_MODEMASTER_RX) || in HAL_SAI_Init()
425 (hsai->Init.Protocol != SAI_FREE_PROTOCOL)) in HAL_SAI_Init()
431 if (hsai->State == HAL_SAI_STATE_RESET) in HAL_SAI_Init()
434 hsai->Lock = HAL_UNLOCKED; in HAL_SAI_Init()
438 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_Init()
439 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_Init()
440 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_Init()
441 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_Init()
442 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_Init()
445 if (hsai->MspInitCallback == NULL) in HAL_SAI_Init()
447 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_Init()
449 hsai->MspInitCallback(hsai); in HAL_SAI_Init()
452 HAL_SAI_MspInit(hsai); in HAL_SAI_Init()
457 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Init()
462 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_Init()
466 switch (hsai->Init.SynchroExt) in HAL_SAI_Init()
482 switch (hsai->Init.Synchro) in HAL_SAI_Init()
502 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
511 if (hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) in HAL_SAI_Init()
517 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
521 if ((hsai->Instance == SAI2_Block_A) || (hsai->Instance == SAI2_Block_B)) in HAL_SAI_Init()
531 if (hsai->Init.NoDivider == SAI_MASTERDIVIDER_DISABLE) in HAL_SAI_Init()
536 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
541 else if (hsai->Init.Protocol == SAI_AC97_PROTOCOL) in HAL_SAI_Init()
549 tmpframelength = hsai->FrameInit.FrameLength; in HAL_SAI_Init()
553 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmpframelength); in HAL_SAI_Init()
559 tmposr = (hsai->Init.MckOverSampling == SAI_MCK_OVERSAMPLING_ENABLE) ? 2U : 1U; in HAL_SAI_Init()
561 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmposr * 256U); in HAL_SAI_Init()
563 hsai->Init.Mckdiv = tmpval / 10U; in HAL_SAI_Init()
568 hsai->Init.Mckdiv += 1U; in HAL_SAI_Init()
572 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
574 hsai->Init.Mckdiv = hsai->Init.Mckdiv >> 1; in HAL_SAI_Init()
579 assert_param(IS_SAI_BLOCK_MASTER_DIVIDER(hsai->Init.Mckdiv)); in HAL_SAI_Init()
582 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in HAL_SAI_Init()
585 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? 0U : SAI_xCR1_CKSTR; in HAL_SAI_Init()
590 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? SAI_xCR1_CKSTR : 0U; in HAL_SAI_Init()
595 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
601 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
602 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
604 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
605 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ in HAL_SAI_Init()
606 hsai->Init.MckOverSampling | hsai->Init.MckOutput); in HAL_SAI_Init()
609 hsai->Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); in HAL_SAI_Init()
610 …hsai->Instance->CR2 |= (hsai->Init.FIFOThreshold | hsai->Init.CompandingMode | hsai->Init.TriState… in HAL_SAI_Init()
613 hsai->Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \ in HAL_SAI_Init()
615 hsai->Instance->FRCR |= ((hsai->FrameInit.FrameLength - 1U) | in HAL_SAI_Init()
616 hsai->FrameInit.FSOffset | in HAL_SAI_Init()
617 hsai->FrameInit.FSDefinition | in HAL_SAI_Init()
618 hsai->FrameInit.FSPolarity | in HAL_SAI_Init()
619 ((hsai->FrameInit.ActiveFrameLength - 1U) << 8)); in HAL_SAI_Init()
623 hsai->Instance->SLOTR &= (~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \ in HAL_SAI_Init()
626 hsai->Instance->SLOTR |= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize | \ in HAL_SAI_Init()
627 … (hsai->SlotInit.SlotActive << 16) | ((hsai->SlotInit.SlotNumber - 1U) << 8); in HAL_SAI_Init()
630 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_Init()
634 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
637 SAI1->PDMCR = (hsai->Init.PdmInit.ClockEnable | in HAL_SAI_Init()
638 ((hsai->Init.PdmInit.MicPairsNbr - 1U) << SAI_PDMCR_MICNBR_Pos)); in HAL_SAI_Init()
644 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Init()
647 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Init()
650 __HAL_UNLOCK(hsai); in HAL_SAI_Init()
661 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_DeInit() argument
664 if (hsai == NULL) in HAL_SAI_DeInit()
669 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_DeInit()
672 hsai->Instance->IMR = 0; in HAL_SAI_DeInit()
673 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_DeInit()
676 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DeInit()
679 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DeInit()
682 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
688 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DeInit()
691 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_DeInit()
702 if (hsai->MspDeInitCallback == NULL) in HAL_SAI_DeInit()
704 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_DeInit()
706 hsai->MspDeInitCallback(hsai); in HAL_SAI_DeInit()
708 HAL_SAI_MspDeInit(hsai); in HAL_SAI_DeInit()
712 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_DeInit()
715 hsai->State = HAL_SAI_STATE_RESET; in HAL_SAI_DeInit()
718 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
729 __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspInit() argument
732 UNUSED(hsai); in HAL_SAI_MspInit()
745 __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspDeInit() argument
748 UNUSED(hsai); in HAL_SAI_MspDeInit()
772 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_RegisterCallback() argument
781 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
787 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_RegisterCallback()
792 hsai->RxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
795 hsai->RxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
798 hsai->TxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
801 hsai->TxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
804 hsai->ErrorCallback = pCallback; in HAL_SAI_RegisterCallback()
807 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
810 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
814 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
820 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_RegisterCallback()
825 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
828 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
832 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
841 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
864 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_UnRegisterCallback() argument
869 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_UnRegisterCallback()
874 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_UnRegisterCallback()
877 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
880 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_UnRegisterCallback()
883 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
886 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_UnRegisterCallback()
889 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
892 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
896 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
902 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_UnRegisterCallback()
907 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
910 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
914 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
923 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
986 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t… in HAL_SAI_Transmit() argument
996 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit()
999 __HAL_LOCK(hsai); in HAL_SAI_Transmit()
1001 hsai->XferSize = Size; in HAL_SAI_Transmit()
1002 hsai->XferCount = Size; in HAL_SAI_Transmit()
1003 hsai->pBuffPtr = pData; in HAL_SAI_Transmit()
1004 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit()
1005 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit()
1008 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit()
1011 SAI_FillFifo(hsai); in HAL_SAI_Transmit()
1013 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit()
1016 while (hsai->XferCount > 0U) in HAL_SAI_Transmit()
1019 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) in HAL_SAI_Transmit()
1021 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit()
1023 hsai->Instance->DR = *hsai->pBuffPtr; in HAL_SAI_Transmit()
1024 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1026 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit()
1028 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1029 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1030 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1031 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1032 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1036 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
1037 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1038 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1039 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1040 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in HAL_SAI_Transmit()
1041 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1042 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in HAL_SAI_Transmit()
1043 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1044 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1046 hsai->XferCount--; in HAL_SAI_Transmit()
1054 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit()
1057 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Transmit()
1061 (void) SAI_Disable(hsai); in HAL_SAI_Transmit()
1064 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Transmit()
1067 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1070 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1077 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1080 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1099 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SAI_Receive() argument
1109 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive()
1112 __HAL_LOCK(hsai); in HAL_SAI_Receive()
1114 hsai->pBuffPtr = pData; in HAL_SAI_Receive()
1115 hsai->XferSize = Size; in HAL_SAI_Receive()
1116 hsai->XferCount = Size; in HAL_SAI_Receive()
1117 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive()
1118 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive()
1121 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive()
1124 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive()
1128 while (hsai->XferCount > 0U) in HAL_SAI_Receive()
1130 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Receive()
1132 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive()
1134 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in HAL_SAI_Receive()
1135 hsai->pBuffPtr++; in HAL_SAI_Receive()
1137 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive()
1139 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1140 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1141 hsai->pBuffPtr++; in HAL_SAI_Receive()
1142 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1143 hsai->pBuffPtr++; in HAL_SAI_Receive()
1147 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1148 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1149 hsai->pBuffPtr++; in HAL_SAI_Receive()
1150 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1151 hsai->pBuffPtr++; in HAL_SAI_Receive()
1152 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in HAL_SAI_Receive()
1153 hsai->pBuffPtr++; in HAL_SAI_Receive()
1154 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in HAL_SAI_Receive()
1155 hsai->pBuffPtr++; in HAL_SAI_Receive()
1157 hsai->XferCount--; in HAL_SAI_Receive()
1165 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Receive()
1168 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Receive()
1172 (void) SAI_Disable(hsai); in HAL_SAI_Receive()
1175 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Receive()
1178 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1181 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1188 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1191 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1209 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_IT() argument
1216 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_IT()
1219 __HAL_LOCK(hsai); in HAL_SAI_Transmit_IT()
1221 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_IT()
1222 hsai->XferSize = Size; in HAL_SAI_Transmit_IT()
1223 hsai->XferCount = Size; in HAL_SAI_Transmit_IT()
1224 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_IT()
1225 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_IT()
1227 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_IT()
1229 hsai->InterruptServiceRoutine = SAI_Transmit_IT8Bit; in HAL_SAI_Transmit_IT()
1231 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_IT()
1233 hsai->InterruptServiceRoutine = SAI_Transmit_IT16Bit; in HAL_SAI_Transmit_IT()
1237 hsai->InterruptServiceRoutine = SAI_Transmit_IT32Bit; in HAL_SAI_Transmit_IT()
1241 SAI_FillFifo(hsai); in HAL_SAI_Transmit_IT()
1244 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Transmit_IT()
1247 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_IT()
1250 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_IT()
1253 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_IT()
1271 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_IT() argument
1278 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_IT()
1281 __HAL_LOCK(hsai); in HAL_SAI_Receive_IT()
1283 hsai->pBuffPtr = pData; in HAL_SAI_Receive_IT()
1284 hsai->XferSize = Size; in HAL_SAI_Receive_IT()
1285 hsai->XferCount = Size; in HAL_SAI_Receive_IT()
1286 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_IT()
1287 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_IT()
1289 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_IT()
1291 hsai->InterruptServiceRoutine = SAI_Receive_IT8Bit; in HAL_SAI_Receive_IT()
1293 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_IT()
1295 hsai->InterruptServiceRoutine = SAI_Receive_IT16Bit; in HAL_SAI_Receive_IT()
1299 hsai->InterruptServiceRoutine = SAI_Receive_IT32Bit; in HAL_SAI_Receive_IT()
1303 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Receive_IT()
1306 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_IT()
1309 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_IT()
1313 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_IT()
1329 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAPause() argument
1332 __HAL_LOCK(hsai); in HAL_SAI_DMAPause()
1335 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAPause()
1338 __HAL_UNLOCK(hsai); in HAL_SAI_DMAPause()
1349 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAResume() argument
1352 __HAL_LOCK(hsai); in HAL_SAI_DMAResume()
1355 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_DMAResume()
1358 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_DMAResume()
1361 __HAL_SAI_ENABLE(hsai); in HAL_SAI_DMAResume()
1365 __HAL_UNLOCK(hsai); in HAL_SAI_DMAResume()
1376 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAStop() argument
1381 __HAL_LOCK(hsai); in HAL_SAI_DMAStop()
1384 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DMAStop()
1390 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAStop()
1393 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_DMAStop()
1395 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_DMAStop()
1398 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1401 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1407 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_DMAStop()
1409 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_DMAStop()
1412 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1415 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1421 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DMAStop()
1424 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DMAStop()
1427 __HAL_UNLOCK(hsai); in HAL_SAI_DMAStop()
1438 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) in HAL_SAI_Abort() argument
1443 __HAL_LOCK(hsai); in HAL_SAI_Abort()
1446 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Abort()
1452 if ((hsai->Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN) in HAL_SAI_Abort()
1455 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_Abort()
1458 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_Abort()
1460 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_Abort()
1463 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1466 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1472 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_Abort()
1474 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_Abort()
1477 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1480 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1487 hsai->Instance->IMR = 0; in HAL_SAI_Abort()
1488 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Abort()
1491 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Abort()
1494 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Abort()
1497 __HAL_UNLOCK(hsai); in HAL_SAI_Abort()
1510 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_DMA() argument
1520 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_DMA()
1525 __HAL_LOCK(hsai); in HAL_SAI_Transmit_DMA()
1527 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_DMA()
1528 hsai->XferSize = Size; in HAL_SAI_Transmit_DMA()
1529 hsai->XferCount = Size; in HAL_SAI_Transmit_DMA()
1530 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_DMA()
1531 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_DMA()
1534 hsai->hdmatx->XferHalfCpltCallback = SAI_DMATxHalfCplt; in HAL_SAI_Transmit_DMA()
1537 hsai->hdmatx->XferCpltCallback = SAI_DMATxCplt; in HAL_SAI_Transmit_DMA()
1540 hsai->hdmatx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Transmit_DMA()
1543 hsai->hdmatx->XferAbortCallback = NULL; in HAL_SAI_Transmit_DMA()
1547 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_DMA()
1551 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_DMA()
1561 if ((hsai->hdmatx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SAI_Transmit_DMA()
1563 if (hsai->hdmatx->LinkedListQueue != NULL) in HAL_SAI_Transmit_DMA()
1566 hsai->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = dmaSrcSize; in HAL_SAI_Transmit_DMA()
1569 …hsai->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)hsai->pBu… in HAL_SAI_Transmit_DMA()
1572 …hsai->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)&hsai->In… in HAL_SAI_Transmit_DMA()
1574 status = HAL_DMAEx_List_Start_IT(hsai->hdmatx); in HAL_SAI_Transmit_DMA()
1578 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1584 …status = HAL_DMA_Start_IT(hsai->hdmatx, (uint32_t)hsai->pBuffPtr, (uint32_t)&hsai->Instance->DR, d… in HAL_SAI_Transmit_DMA()
1589 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1594 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Transmit_DMA()
1597 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Transmit_DMA()
1600 while ((hsai->Instance->SR & SAI_xSR_FLVL) == SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Transmit_DMA()
1606 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit_DMA()
1609 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1616 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_DMA()
1619 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_DMA()
1623 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1641 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_DMA() argument
1650 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_DMA()
1655 __HAL_LOCK(hsai); in HAL_SAI_Receive_DMA()
1657 hsai->pBuffPtr = pData; in HAL_SAI_Receive_DMA()
1658 hsai->XferSize = Size; in HAL_SAI_Receive_DMA()
1659 hsai->XferCount = Size; in HAL_SAI_Receive_DMA()
1660 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_DMA()
1661 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_DMA()
1664 hsai->hdmarx->XferHalfCpltCallback = SAI_DMARxHalfCplt; in HAL_SAI_Receive_DMA()
1667 hsai->hdmarx->XferCpltCallback = SAI_DMARxCplt; in HAL_SAI_Receive_DMA()
1670 hsai->hdmarx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Receive_DMA()
1673 hsai->hdmarx->XferAbortCallback = NULL; in HAL_SAI_Receive_DMA()
1677 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_DMA()
1681 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_DMA()
1691 if ((hsai->hdmarx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SAI_Receive_DMA()
1693 if (hsai->hdmarx->LinkedListQueue != NULL) in HAL_SAI_Receive_DMA()
1696 hsai->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = dmaSrcSize; in HAL_SAI_Receive_DMA()
1699 …hsai->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)&hsai->In… in HAL_SAI_Receive_DMA()
1702 …hsai->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)hsai->pBu… in HAL_SAI_Receive_DMA()
1704 status = HAL_DMAEx_List_Start_IT(hsai->hdmarx); in HAL_SAI_Receive_DMA()
1708 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1714 …status = HAL_DMA_Start_IT(hsai->hdmarx, (uint32_t)&hsai->Instance->DR, (uint32_t)hsai->pBuffPtr, d… in HAL_SAI_Receive_DMA()
1719 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1724 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Receive_DMA()
1727 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Receive_DMA()
1730 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_DMA()
1733 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_DMA()
1737 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1754 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) in HAL_SAI_EnableTxMuteMode() argument
1758 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableTxMuteMode()
1760 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_EnableTxMuteMode()
1761 SET_BIT(hsai->Instance->CR2, SAI_xCR2_MUTE | (uint32_t)val); in HAL_SAI_EnableTxMuteMode()
1773 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableTxMuteMode() argument
1775 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableTxMuteMode()
1777 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_DisableTxMuteMode()
1791 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t … in HAL_SAI_EnableRxMuteMode() argument
1795 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableRxMuteMode()
1798 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); in HAL_SAI_EnableRxMuteMode()
1799 SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); in HAL_SAI_EnableRxMuteMode()
1800 hsai->mutecallback = callback; in HAL_SAI_EnableRxMuteMode()
1802 __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_EnableRxMuteMode()
1814 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableRxMuteMode() argument
1816 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableRxMuteMode()
1819 hsai->mutecallback = NULL; in HAL_SAI_DisableRxMuteMode()
1821 __HAL_SAI_DISABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_DisableRxMuteMode()
1833 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) in HAL_SAI_IRQHandler() argument
1835 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_IRQHandler()
1837 uint32_t itflags = hsai->Instance->SR; in HAL_SAI_IRQHandler()
1838 uint32_t itsources = hsai->Instance->IMR; in HAL_SAI_IRQHandler()
1839 uint32_t cr1config = hsai->Instance->CR1; in HAL_SAI_IRQHandler()
1845 hsai->InterruptServiceRoutine(hsai); in HAL_SAI_IRQHandler()
1851 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in HAL_SAI_IRQHandler()
1853 tmperror = ((hsai->State == HAL_SAI_STATE_BUSY_RX) ? HAL_SAI_ERROR_OVR : HAL_SAI_ERROR_UDR); in HAL_SAI_IRQHandler()
1855 hsai->ErrorCode |= tmperror; in HAL_SAI_IRQHandler()
1859 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1861 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1868 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_MUTEDET); in HAL_SAI_IRQHandler()
1870 if (hsai->mutecallback != NULL) in HAL_SAI_IRQHandler()
1873 hsai->mutecallback(); in HAL_SAI_IRQHandler()
1880 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_AFSDET); in HAL_SAI_IRQHandler()
1883 hsai->ErrorCode |= HAL_SAI_ERROR_AFSDET; in HAL_SAI_IRQHandler()
1889 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1892 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1895 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1898 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1902 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1904 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1908 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1911 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1914 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1917 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1921 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1923 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1932 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1936 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1938 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1946 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_LFSDET); in HAL_SAI_IRQHandler()
1949 hsai->ErrorCode |= HAL_SAI_ERROR_LFSDET; in HAL_SAI_IRQHandler()
1955 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1958 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1961 if (HAL_DMA_Abort_IT(hsai->hdmatx) != 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()
1974 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1977 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1980 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1983 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1987 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1989 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1998 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
2002 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2004 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2012 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_WCKCFG); in HAL_SAI_IRQHandler()
2015 hsai->ErrorCode |= HAL_SAI_ERROR_WCKCFG; in HAL_SAI_IRQHandler()
2021 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
2024 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2027 if (HAL_DMA_Abort_IT(hsai->hdmatx) != 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()
2040 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
2043 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
2046 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
2049 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
2053 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2055 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2064 hsai->Instance->IMR = 0U; in HAL_SAI_IRQHandler()
2065 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_IRQHandler()
2067 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_IRQHandler()
2070 hsai->XferCount = 0U; in HAL_SAI_IRQHandler()
2074 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2076 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2084 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_CNRDY); in HAL_SAI_IRQHandler()
2086 hsai->ErrorCode |= HAL_SAI_ERROR_CNREADY; in HAL_SAI_IRQHandler()
2090 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2092 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
2108 __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxCpltCallback() argument
2111 UNUSED(hsai); in HAL_SAI_TxCpltCallback()
2124 __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxHalfCpltCallback() argument
2127 UNUSED(hsai); in HAL_SAI_TxHalfCpltCallback()
2140 __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxCpltCallback() argument
2143 UNUSED(hsai); in HAL_SAI_RxCpltCallback()
2156 __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxHalfCpltCallback() argument
2159 UNUSED(hsai); in HAL_SAI_RxHalfCpltCallback()
2172 __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_ErrorCallback() argument
2175 UNUSED(hsai); in HAL_SAI_ErrorCallback()
2207 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetState() argument
2209 return hsai->State; in HAL_SAI_GetState()
2218 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetError() argument
2220 return hsai->ErrorCode; in HAL_SAI_GetError()
2247 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitI2S() argument
2251 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitI2S()
2252 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitI2S()
2254 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitI2S()
2257 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitI2S()
2262 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitI2S()
2264 hsai->FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; in SAI_InitI2S()
2265 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitI2S()
2266 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitI2S()
2267 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitI2S()
2277 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; in SAI_InitI2S()
2278 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitI2S()
2283 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitI2S()
2284 hsai->FrameInit.FSOffset = SAI_FS_FIRSTBIT; in SAI_InitI2S()
2291 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2292 hsai->FrameInit.FrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2293 hsai->FrameInit.ActiveFrameLength = 16U * (nbslot / 2U); in SAI_InitI2S()
2294 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitI2S()
2297 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2298 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2299 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2300 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2303 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitI2S()
2304 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2305 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2306 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2309 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitI2S()
2310 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2311 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2312 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2322 hsai->SlotInit.FirstBitOffset = 16; in SAI_InitI2S()
2326 hsai->SlotInit.FirstBitOffset = 8; in SAI_InitI2S()
2342 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitPCM() argument
2346 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitPCM()
2347 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitPCM()
2349 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitPCM()
2352 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitPCM()
2357 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitPCM()
2359 hsai->FrameInit.FSDefinition = SAI_FS_STARTFRAME; in SAI_InitPCM()
2360 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitPCM()
2361 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitPCM()
2362 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitPCM()
2363 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitPCM()
2364 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitPCM()
2368 hsai->FrameInit.ActiveFrameLength = 1; in SAI_InitPCM()
2373 hsai->FrameInit.ActiveFrameLength = 13; in SAI_InitPCM()
2379 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2380 hsai->FrameInit.FrameLength = 16U * nbslot; in SAI_InitPCM()
2381 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitPCM()
2384 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2385 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2386 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2389 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitPCM()
2390 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2391 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2394 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitPCM()
2395 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2396 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2412 static void SAI_FillFifo(SAI_HandleTypeDef *hsai) in SAI_FillFifo() argument
2417 while (((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) && (hsai->XferCount > 0U)) in SAI_FillFifo()
2419 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in SAI_FillFifo()
2421 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_FillFifo()
2422 hsai->pBuffPtr++; in SAI_FillFifo()
2424 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in SAI_FillFifo()
2426 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2427 hsai->pBuffPtr++; in SAI_FillFifo()
2428 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2429 hsai->pBuffPtr++; in SAI_FillFifo()
2430 hsai->Instance->DR = temp; in SAI_FillFifo()
2434 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2435 hsai->pBuffPtr++; in SAI_FillFifo()
2436 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2437 hsai->pBuffPtr++; in SAI_FillFifo()
2438 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_FillFifo()
2439 hsai->pBuffPtr++; in SAI_FillFifo()
2440 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_FillFifo()
2441 hsai->pBuffPtr++; in SAI_FillFifo()
2442 hsai->Instance->DR = temp; in SAI_FillFifo()
2444 hsai->XferCount--; in SAI_FillFifo()
2455 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode) in SAI_InterruptFlag() argument
2464 if ((hsai->Init.Protocol == SAI_AC97_PROTOCOL) && in SAI_InterruptFlag()
2465 ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODEMASTER_RX))) in SAI_InterruptFlag()
2470 if ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InterruptFlag()
2488 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) in SAI_Disable() argument
2494 __HAL_SAI_DISABLE(hsai); in SAI_Disable()
2502 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in SAI_Disable()
2507 } while ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) != 0U); in SAI_Disable()
2518 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT8Bit() argument
2520 if (hsai->XferCount == 0U) in SAI_Transmit_IT8Bit()
2524 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT8Bit()
2525 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT8Bit()
2527 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2529 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2535 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_Transmit_IT8Bit()
2536 hsai->pBuffPtr++; in SAI_Transmit_IT8Bit()
2537 hsai->XferCount--; in SAI_Transmit_IT8Bit()
2547 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT16Bit() argument
2549 if (hsai->XferCount == 0U) in SAI_Transmit_IT16Bit()
2553 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT16Bit()
2554 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT16Bit()
2556 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2558 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2565 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT16Bit()
2566 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2567 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT16Bit()
2568 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2569 hsai->Instance->DR = temp; in SAI_Transmit_IT16Bit()
2570 hsai->XferCount--; in SAI_Transmit_IT16Bit()
2580 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT32Bit() argument
2582 if (hsai->XferCount == 0U) in SAI_Transmit_IT32Bit()
2586 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT32Bit()
2587 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT32Bit()
2589 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2591 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2598 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT32Bit()
2599 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2600 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT32Bit()
2601 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2602 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_Transmit_IT32Bit()
2603 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2604 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_Transmit_IT32Bit()
2605 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2606 hsai->Instance->DR = temp; in SAI_Transmit_IT32Bit()
2607 hsai->XferCount--; in SAI_Transmit_IT32Bit()
2617 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT8Bit() argument
2620 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in SAI_Receive_IT8Bit()
2621 hsai->pBuffPtr++; in SAI_Receive_IT8Bit()
2622 hsai->XferCount--; in SAI_Receive_IT8Bit()
2625 if (hsai->XferCount == 0U) in SAI_Receive_IT8Bit()
2628 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT8Bit()
2631 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT8Bit()
2633 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT8Bit()
2635 hsai->RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2637 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2648 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT16Bit() argument
2653 temp = hsai->Instance->DR; in SAI_Receive_IT16Bit()
2654 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT16Bit()
2655 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2656 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT16Bit()
2657 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2658 hsai->XferCount--; in SAI_Receive_IT16Bit()
2661 if (hsai->XferCount == 0U) in SAI_Receive_IT16Bit()
2664 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT16Bit()
2667 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT16Bit()
2669 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT16Bit()
2671 hsai->RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2673 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2684 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT32Bit() argument
2689 temp = hsai->Instance->DR; in SAI_Receive_IT32Bit()
2690 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT32Bit()
2691 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2692 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT32Bit()
2693 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2694 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in SAI_Receive_IT32Bit()
2695 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2696 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in SAI_Receive_IT32Bit()
2697 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2698 hsai->XferCount--; in SAI_Receive_IT32Bit()
2701 if (hsai->XferCount == 0U) in SAI_Receive_IT32Bit()
2704 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT32Bit()
2707 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT32Bit()
2709 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT32Bit()
2711 hsai->RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2713 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2726 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxCplt() local
2731 hsai->XferCount = 0; in SAI_DMATxCplt()
2734 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMATxCplt()
2737 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMATxCplt()
2739 hsai->State = HAL_SAI_STATE_READY; in SAI_DMATxCplt()
2743 hsai->TxCpltCallback(hsai); in SAI_DMATxCplt()
2745 HAL_SAI_TxCpltCallback(hsai); in SAI_DMATxCplt()
2757 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxHalfCplt() local
2760 hsai->TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2762 HAL_SAI_TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2774 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxCplt() local
2780 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMARxCplt()
2781 hsai->XferCount = 0; in SAI_DMARxCplt()
2784 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMARxCplt()
2786 hsai->State = HAL_SAI_STATE_READY; in SAI_DMARxCplt()
2790 hsai->RxCpltCallback(hsai); in SAI_DMARxCplt()
2792 HAL_SAI_RxCpltCallback(hsai); in SAI_DMARxCplt()
2804 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxHalfCplt() local
2807 hsai->RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2809 HAL_SAI_RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2821 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAError() local
2824 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in SAI_DMAError()
2827 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAError()
2831 (void) SAI_Disable(hsai); in SAI_DMAError()
2834 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAError()
2837 hsai->XferCount = 0U; in SAI_DMAError()
2841 hsai->ErrorCallback(hsai); in SAI_DMAError()
2843 HAL_SAI_ErrorCallback(hsai); in SAI_DMAError()
2855 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAAbort() local
2858 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAAbort()
2861 hsai->Instance->IMR = 0U; in SAI_DMAAbort()
2862 hsai->Instance->CLRFR = 0xFFFFFFFFU; in SAI_DMAAbort()
2864 if (hsai->ErrorCode != HAL_SAI_ERROR_WCKCFG) in SAI_DMAAbort()
2868 (void) SAI_Disable(hsai); in SAI_DMAAbort()
2871 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in SAI_DMAAbort()
2874 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAAbort()
2877 hsai->XferCount = 0U; in SAI_DMAAbort()
2881 hsai->ErrorCallback(hsai); in SAI_DMAAbort()
2883 HAL_SAI_ErrorCallback(hsai); in SAI_DMAAbort()