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
376 if (hsai == NULL) in HAL_SAI_Init()
382 assert_param(IS_SAI_ALL_INSTANCE(hsai->Instance)); in HAL_SAI_Init()
385 assert_param(IS_SAI_AUDIO_FREQUENCY(hsai->Init.AudioFrequency)); in HAL_SAI_Init()
386 assert_param(IS_SAI_BLOCK_PROTOCOL(hsai->Init.Protocol)); in HAL_SAI_Init()
387 assert_param(IS_SAI_BLOCK_MODE(hsai->Init.AudioMode)); in HAL_SAI_Init()
388 assert_param(IS_SAI_BLOCK_DATASIZE(hsai->Init.DataSize)); in HAL_SAI_Init()
389 assert_param(IS_SAI_BLOCK_FIRST_BIT(hsai->Init.FirstBit)); in HAL_SAI_Init()
390 assert_param(IS_SAI_BLOCK_CLOCK_STROBING(hsai->Init.ClockStrobing)); in HAL_SAI_Init()
391 assert_param(IS_SAI_BLOCK_SYNCHRO(hsai->Init.Synchro)); in HAL_SAI_Init()
392 assert_param(IS_SAI_BLOCK_MCK_OUTPUT(hsai->Init.MckOutput)); in HAL_SAI_Init()
393 assert_param(IS_SAI_BLOCK_OUTPUT_DRIVE(hsai->Init.OutputDrive)); in HAL_SAI_Init()
394 assert_param(IS_SAI_BLOCK_NODIVIDER(hsai->Init.NoDivider)); in HAL_SAI_Init()
395 assert_param(IS_SAI_BLOCK_FIFO_THRESHOLD(hsai->Init.FIFOThreshold)); in HAL_SAI_Init()
396 assert_param(IS_SAI_MONO_STEREO_MODE(hsai->Init.MonoStereoMode)); in HAL_SAI_Init()
397 assert_param(IS_SAI_BLOCK_COMPANDING_MODE(hsai->Init.CompandingMode)); in HAL_SAI_Init()
398 assert_param(IS_SAI_BLOCK_TRISTATE_MANAGEMENT(hsai->Init.TriState)); in HAL_SAI_Init()
399 assert_param(IS_SAI_BLOCK_SYNCEXT(hsai->Init.SynchroExt)); in HAL_SAI_Init()
400 assert_param(IS_SAI_BLOCK_MCK_OVERSAMPLING(hsai->Init.MckOverSampling)); in HAL_SAI_Init()
403 assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); in HAL_SAI_Init()
404 assert_param(IS_SAI_BLOCK_ACTIVE_FRAME(hsai->FrameInit.ActiveFrameLength)); in HAL_SAI_Init()
405 assert_param(IS_SAI_BLOCK_FS_DEFINITION(hsai->FrameInit.FSDefinition)); in HAL_SAI_Init()
406 assert_param(IS_SAI_BLOCK_FS_POLARITY(hsai->FrameInit.FSPolarity)); in HAL_SAI_Init()
407 assert_param(IS_SAI_BLOCK_FS_OFFSET(hsai->FrameInit.FSOffset)); in HAL_SAI_Init()
410 assert_param(IS_SAI_BLOCK_FIRSTBIT_OFFSET(hsai->SlotInit.FirstBitOffset)); in HAL_SAI_Init()
411 assert_param(IS_SAI_BLOCK_SLOT_SIZE(hsai->SlotInit.SlotSize)); in HAL_SAI_Init()
412 assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); in HAL_SAI_Init()
413 assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); in HAL_SAI_Init()
416 assert_param(IS_FUNCTIONAL_STATE(hsai->Init.PdmInit.Activation)); in HAL_SAI_Init()
417 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
419 assert_param(IS_SAI_PDM_MIC_PAIRS_NUMBER(hsai->Init.PdmInit.MicPairsNbr)); in HAL_SAI_Init()
420 assert_param(IS_SAI_PDM_CLOCK_ENABLE(hsai->Init.PdmInit.ClockEnable)); in HAL_SAI_Init()
422 if ((hsai->Instance != SAI1_Block_A) || in HAL_SAI_Init()
423 (hsai->Init.AudioMode != SAI_MODEMASTER_RX) || in HAL_SAI_Init()
424 (hsai->Init.Protocol != SAI_FREE_PROTOCOL)) in HAL_SAI_Init()
430 if (hsai->State == HAL_SAI_STATE_RESET) in HAL_SAI_Init()
433 hsai->Lock = HAL_UNLOCKED; in HAL_SAI_Init()
437 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_Init()
438 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_Init()
439 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_Init()
440 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_Init()
441 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_Init()
444 if (hsai->MspInitCallback == NULL) in HAL_SAI_Init()
446 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_Init()
448 hsai->MspInitCallback(hsai); in HAL_SAI_Init()
451 HAL_SAI_MspInit(hsai); in HAL_SAI_Init()
456 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Init()
461 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_Init()
465 switch (hsai->Init.Synchro) in HAL_SAI_Init()
478 if (hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) in HAL_SAI_Init()
484 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
494 if (hsai->Init.NoDivider == SAI_MASTERDIVIDER_DISABLE) in HAL_SAI_Init()
499 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
504 else if (hsai->Init.Protocol == SAI_AC97_PROTOCOL) in HAL_SAI_Init()
512 tmpframelength = hsai->FrameInit.FrameLength; in HAL_SAI_Init()
516 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmpframelength); in HAL_SAI_Init()
522 tmposr = (hsai->Init.MckOverSampling == SAI_MCK_OVERSAMPLING_ENABLE) ? 2U : 1U; in HAL_SAI_Init()
524 tmpval = (freq * 10U) / (hsai->Init.AudioFrequency * tmposr * 256U); in HAL_SAI_Init()
526 hsai->Init.Mckdiv = tmpval / 10U; in HAL_SAI_Init()
531 hsai->Init.Mckdiv += 1U; in HAL_SAI_Init()
535 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
537 hsai->Init.Mckdiv = hsai->Init.Mckdiv >> 1; in HAL_SAI_Init()
541 assert_param(IS_SAI_BLOCK_MASTER_DIVIDER(hsai->Init.Mckdiv)); in HAL_SAI_Init()
544 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in HAL_SAI_Init()
547 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? 0U : SAI_xCR1_CKSTR; in HAL_SAI_Init()
552 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? SAI_xCR1_CKSTR : 0U; in HAL_SAI_Init()
557 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
563 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
564 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
566 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
567 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ in HAL_SAI_Init()
568 hsai->Init.MckOverSampling | hsai->Init.MckOutput); in HAL_SAI_Init()
571 hsai->Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); in HAL_SAI_Init()
572hsai->Instance->CR2 |= (hsai->Init.FIFOThreshold | hsai->Init.CompandingMode | hsai->Init.TriState… in HAL_SAI_Init()
575 hsai->Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \ in HAL_SAI_Init()
577 hsai->Instance->FRCR |= ((hsai->FrameInit.FrameLength - 1U) | in HAL_SAI_Init()
578 hsai->FrameInit.FSOffset | in HAL_SAI_Init()
579 hsai->FrameInit.FSDefinition | in HAL_SAI_Init()
580 hsai->FrameInit.FSPolarity | in HAL_SAI_Init()
581 ((hsai->FrameInit.ActiveFrameLength - 1U) << 8)); in HAL_SAI_Init()
585 hsai->Instance->SLOTR &= (~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \ in HAL_SAI_Init()
588 hsai->Instance->SLOTR |= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize | \ in HAL_SAI_Init()
589 … (hsai->SlotInit.SlotActive << 16) | ((hsai->SlotInit.SlotNumber - 1U) << 8); in HAL_SAI_Init()
592 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_Init()
596 if (hsai->Init.PdmInit.Activation == ENABLE) in HAL_SAI_Init()
599 SAI1->PDMCR = (hsai->Init.PdmInit.ClockEnable | in HAL_SAI_Init()
600 ((hsai->Init.PdmInit.MicPairsNbr - 1U) << SAI_PDMCR_MICNBR_Pos)); in HAL_SAI_Init()
606 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Init()
609 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Init()
612 __HAL_UNLOCK(hsai); in HAL_SAI_Init()
623 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_DeInit() argument
626 if (hsai == NULL) in HAL_SAI_DeInit()
631 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_DeInit()
634 hsai->Instance->IMR = 0; in HAL_SAI_DeInit()
635 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_DeInit()
638 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DeInit()
641 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DeInit()
644 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
650 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DeInit()
653 if (hsai->Instance == SAI1_Block_A) in HAL_SAI_DeInit()
664 if (hsai->MspDeInitCallback == NULL) in HAL_SAI_DeInit()
666 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_DeInit()
668 hsai->MspDeInitCallback(hsai); in HAL_SAI_DeInit()
670 HAL_SAI_MspDeInit(hsai); in HAL_SAI_DeInit()
674 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_DeInit()
677 hsai->State = HAL_SAI_STATE_RESET; in HAL_SAI_DeInit()
680 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
691 __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspInit() argument
694 UNUSED(hsai); in HAL_SAI_MspInit()
707 __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspDeInit() argument
710 UNUSED(hsai); in HAL_SAI_MspDeInit()
734 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_RegisterCallback() argument
743 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
749 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_RegisterCallback()
754 hsai->RxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
757 hsai->RxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
760 hsai->TxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
763 hsai->TxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
766 hsai->ErrorCallback = pCallback; in HAL_SAI_RegisterCallback()
769 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
772 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
776 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
782 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_RegisterCallback()
787 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
790 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
794 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
803 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
826 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_UnRegisterCallback() argument
831 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_UnRegisterCallback()
836 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_UnRegisterCallback()
839 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
842 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_UnRegisterCallback()
845 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
848 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_UnRegisterCallback()
851 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
854 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
858 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
864 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_UnRegisterCallback()
869 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
872 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
876 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
885 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
948 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t… in HAL_SAI_Transmit() argument
958 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit()
961 __HAL_LOCK(hsai); in HAL_SAI_Transmit()
963 hsai->XferSize = Size; in HAL_SAI_Transmit()
964 hsai->XferCount = Size; in HAL_SAI_Transmit()
965 hsai->pBuffPtr = pData; in HAL_SAI_Transmit()
966 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit()
967 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit()
970 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit()
973 SAI_FillFifo(hsai); in HAL_SAI_Transmit()
975 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit()
978 while (hsai->XferCount > 0U) in HAL_SAI_Transmit()
981 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) in HAL_SAI_Transmit()
983 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit()
985 hsai->Instance->DR = *hsai->pBuffPtr; in HAL_SAI_Transmit()
986 hsai->pBuffPtr++; in HAL_SAI_Transmit()
988 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit()
990 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
991 hsai->pBuffPtr++; in HAL_SAI_Transmit()
992 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
993 hsai->pBuffPtr++; in HAL_SAI_Transmit()
994 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
998 temp = (uint32_t)(*hsai->pBuffPtr); in HAL_SAI_Transmit()
999 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1000 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in HAL_SAI_Transmit()
1001 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1002 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in HAL_SAI_Transmit()
1003 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1004 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in HAL_SAI_Transmit()
1005 hsai->pBuffPtr++; in HAL_SAI_Transmit()
1006 hsai->Instance->DR = temp; in HAL_SAI_Transmit()
1008 hsai->XferCount--; in HAL_SAI_Transmit()
1016 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit()
1019 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Transmit()
1023 (void) SAI_Disable(hsai); in HAL_SAI_Transmit()
1026 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Transmit()
1029 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1032 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1039 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
1042 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
1061 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SAI_Receive() argument
1071 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive()
1074 __HAL_LOCK(hsai); in HAL_SAI_Receive()
1076 hsai->pBuffPtr = pData; in HAL_SAI_Receive()
1077 hsai->XferSize = Size; in HAL_SAI_Receive()
1078 hsai->XferCount = Size; in HAL_SAI_Receive()
1079 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive()
1080 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive()
1083 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive()
1086 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive()
1090 while (hsai->XferCount > 0U) in HAL_SAI_Receive()
1092 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Receive()
1094 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive()
1096 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in HAL_SAI_Receive()
1097 hsai->pBuffPtr++; in HAL_SAI_Receive()
1099 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive()
1101 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1102 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1103 hsai->pBuffPtr++; in HAL_SAI_Receive()
1104 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1105 hsai->pBuffPtr++; in HAL_SAI_Receive()
1109 temp = hsai->Instance->DR; in HAL_SAI_Receive()
1110 *hsai->pBuffPtr = (uint8_t)temp; in HAL_SAI_Receive()
1111 hsai->pBuffPtr++; in HAL_SAI_Receive()
1112 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in HAL_SAI_Receive()
1113 hsai->pBuffPtr++; in HAL_SAI_Receive()
1114 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in HAL_SAI_Receive()
1115 hsai->pBuffPtr++; in HAL_SAI_Receive()
1116 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in HAL_SAI_Receive()
1117 hsai->pBuffPtr++; in HAL_SAI_Receive()
1119 hsai->XferCount--; in HAL_SAI_Receive()
1127 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Receive()
1130 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Receive()
1134 (void) SAI_Disable(hsai); in HAL_SAI_Receive()
1137 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Receive()
1140 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1143 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1150 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1153 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1171 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_IT() argument
1178 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_IT()
1181 __HAL_LOCK(hsai); in HAL_SAI_Transmit_IT()
1183 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_IT()
1184 hsai->XferSize = Size; in HAL_SAI_Transmit_IT()
1185 hsai->XferCount = Size; in HAL_SAI_Transmit_IT()
1186 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_IT()
1187 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_IT()
1189 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_IT()
1191 hsai->InterruptServiceRoutine = SAI_Transmit_IT8Bit; in HAL_SAI_Transmit_IT()
1193 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_IT()
1195 hsai->InterruptServiceRoutine = SAI_Transmit_IT16Bit; in HAL_SAI_Transmit_IT()
1199 hsai->InterruptServiceRoutine = SAI_Transmit_IT32Bit; in HAL_SAI_Transmit_IT()
1203 SAI_FillFifo(hsai); in HAL_SAI_Transmit_IT()
1206 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Transmit_IT()
1209 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_IT()
1212 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_IT()
1215 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_IT()
1233 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_IT() argument
1240 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_IT()
1243 __HAL_LOCK(hsai); in HAL_SAI_Receive_IT()
1245 hsai->pBuffPtr = pData; in HAL_SAI_Receive_IT()
1246 hsai->XferSize = Size; in HAL_SAI_Receive_IT()
1247 hsai->XferCount = Size; in HAL_SAI_Receive_IT()
1248 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_IT()
1249 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_IT()
1251 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_IT()
1253 hsai->InterruptServiceRoutine = SAI_Receive_IT8Bit; in HAL_SAI_Receive_IT()
1255 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_IT()
1257 hsai->InterruptServiceRoutine = SAI_Receive_IT16Bit; in HAL_SAI_Receive_IT()
1261 hsai->InterruptServiceRoutine = SAI_Receive_IT32Bit; in HAL_SAI_Receive_IT()
1265 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Receive_IT()
1268 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_IT()
1271 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_IT()
1275 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_IT()
1291 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAPause() argument
1294 __HAL_LOCK(hsai); in HAL_SAI_DMAPause()
1297 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAPause()
1300 __HAL_UNLOCK(hsai); in HAL_SAI_DMAPause()
1311 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAResume() argument
1314 __HAL_LOCK(hsai); in HAL_SAI_DMAResume()
1317 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_DMAResume()
1320 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_DMAResume()
1323 __HAL_SAI_ENABLE(hsai); in HAL_SAI_DMAResume()
1327 __HAL_UNLOCK(hsai); in HAL_SAI_DMAResume()
1338 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAStop() argument
1343 __HAL_LOCK(hsai); in HAL_SAI_DMAStop()
1346 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_DMAStop()
1352 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAStop()
1355 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_DMAStop()
1359 (void) HAL_DMA_Abort(hsai->hdmatx); in HAL_SAI_DMAStop()
1363 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_DMAStop()
1367 (void) HAL_DMA_Abort(hsai->hdmarx); in HAL_SAI_DMAStop()
1371 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DMAStop()
1374 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DMAStop()
1377 __HAL_UNLOCK(hsai); in HAL_SAI_DMAStop()
1388 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) in HAL_SAI_Abort() argument
1393 __HAL_LOCK(hsai); in HAL_SAI_Abort()
1396 if (SAI_Disable(hsai) != HAL_OK) in HAL_SAI_Abort()
1402 if ((hsai->Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN) in HAL_SAI_Abort()
1405 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_Abort()
1408 if ((hsai->State == HAL_SAI_STATE_BUSY_TX) && (hsai->hdmatx != NULL)) in HAL_SAI_Abort()
1412 (void) HAL_DMA_Abort(hsai->hdmatx); in HAL_SAI_Abort()
1416 if ((hsai->State == HAL_SAI_STATE_BUSY_RX) && (hsai->hdmarx != NULL)) in HAL_SAI_Abort()
1420 (void) HAL_DMA_Abort(hsai->hdmarx); in HAL_SAI_Abort()
1425 hsai->Instance->IMR = 0; in HAL_SAI_Abort()
1426 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Abort()
1429 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Abort()
1432 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Abort()
1435 __HAL_UNLOCK(hsai); in HAL_SAI_Abort()
1448 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_DMA() argument
1457 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_DMA()
1460 __HAL_LOCK(hsai); in HAL_SAI_Transmit_DMA()
1462 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_DMA()
1463 hsai->XferSize = Size; in HAL_SAI_Transmit_DMA()
1464 hsai->XferCount = Size; in HAL_SAI_Transmit_DMA()
1465 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_DMA()
1466 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_DMA()
1469 hsai->hdmatx->XferHalfCpltCallback = SAI_DMATxHalfCplt; in HAL_SAI_Transmit_DMA()
1472 hsai->hdmatx->XferCpltCallback = SAI_DMATxCplt; in HAL_SAI_Transmit_DMA()
1475 hsai->hdmatx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Transmit_DMA()
1478 hsai->hdmatx->XferAbortCallback = NULL; in HAL_SAI_Transmit_DMA()
1481 …if (HAL_DMA_Start_IT(hsai->hdmatx, (uint32_t)hsai->pBuffPtr, (uint32_t)&hsai->Instance->DR, hsai->… in HAL_SAI_Transmit_DMA()
1483 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1488 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Transmit_DMA()
1491 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Transmit_DMA()
1494 while ((hsai->Instance->SR & SAI_xSR_FLVL) == SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Transmit_DMA()
1500 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit_DMA()
1503 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1510 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_DMA()
1513 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_DMA()
1517 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1535 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_DMA() argument
1543 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_DMA()
1546 __HAL_LOCK(hsai); in HAL_SAI_Receive_DMA()
1548 hsai->pBuffPtr = pData; in HAL_SAI_Receive_DMA()
1549 hsai->XferSize = Size; in HAL_SAI_Receive_DMA()
1550 hsai->XferCount = Size; in HAL_SAI_Receive_DMA()
1551 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_DMA()
1552 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_DMA()
1555 hsai->hdmarx->XferHalfCpltCallback = SAI_DMARxHalfCplt; in HAL_SAI_Receive_DMA()
1558 hsai->hdmarx->XferCpltCallback = SAI_DMARxCplt; in HAL_SAI_Receive_DMA()
1561 hsai->hdmarx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Receive_DMA()
1564 hsai->hdmarx->XferAbortCallback = NULL; in HAL_SAI_Receive_DMA()
1567 …if (HAL_DMA_Start_IT(hsai->hdmarx, (uint32_t)&hsai->Instance->DR, (uint32_t)hsai->pBuffPtr, hsai->… in HAL_SAI_Receive_DMA()
1569 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1574 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Receive_DMA()
1577 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Receive_DMA()
1580 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Receive_DMA()
1583 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_DMA()
1587 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1604 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) in HAL_SAI_EnableTxMuteMode() argument
1608 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableTxMuteMode()
1610 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_EnableTxMuteMode()
1611 SET_BIT(hsai->Instance->CR2, SAI_xCR2_MUTE | (uint32_t)val); in HAL_SAI_EnableTxMuteMode()
1623 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableTxMuteMode() argument
1625 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableTxMuteMode()
1627 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_DisableTxMuteMode()
1641 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t … in HAL_SAI_EnableRxMuteMode() argument
1645 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableRxMuteMode()
1648 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); in HAL_SAI_EnableRxMuteMode()
1649 SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); in HAL_SAI_EnableRxMuteMode()
1650 hsai->mutecallback = callback; in HAL_SAI_EnableRxMuteMode()
1652 __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_EnableRxMuteMode()
1664 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableRxMuteMode() argument
1666 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableRxMuteMode()
1669 hsai->mutecallback = NULL; in HAL_SAI_DisableRxMuteMode()
1671 __HAL_SAI_DISABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_DisableRxMuteMode()
1683 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) in HAL_SAI_IRQHandler() argument
1685 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_IRQHandler()
1687 uint32_t itflags = hsai->Instance->SR; in HAL_SAI_IRQHandler()
1688 uint32_t itsources = hsai->Instance->IMR; in HAL_SAI_IRQHandler()
1689 uint32_t cr1config = hsai->Instance->CR1; in HAL_SAI_IRQHandler()
1695 hsai->InterruptServiceRoutine(hsai); in HAL_SAI_IRQHandler()
1701 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in HAL_SAI_IRQHandler()
1703 tmperror = ((hsai->State == HAL_SAI_STATE_BUSY_RX) ? HAL_SAI_ERROR_OVR : HAL_SAI_ERROR_UDR); in HAL_SAI_IRQHandler()
1705 hsai->ErrorCode |= tmperror; in HAL_SAI_IRQHandler()
1708 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1710 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1717 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_MUTEDET); in HAL_SAI_IRQHandler()
1719 if (hsai->mutecallback != NULL) in HAL_SAI_IRQHandler()
1722 hsai->mutecallback(); in HAL_SAI_IRQHandler()
1729 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_AFSDET); in HAL_SAI_IRQHandler()
1732 hsai->ErrorCode |= HAL_SAI_ERROR_AFSDET; in HAL_SAI_IRQHandler()
1738 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1741 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1744 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1747 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1751 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1753 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1757 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1760 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1763 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1766 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1770 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1772 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1781 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1785 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1787 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1795 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_LFSDET); in HAL_SAI_IRQHandler()
1798 hsai->ErrorCode |= HAL_SAI_ERROR_LFSDET; in HAL_SAI_IRQHandler()
1804 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1807 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1810 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1813 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1817 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1819 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1823 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1826 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1829 if (HAL_DMA_Abort_IT(hsai->hdmarx) != HAL_OK) in HAL_SAI_IRQHandler()
1832 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1836 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1838 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1847 (void) HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1851 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1853 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1861 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_WCKCFG); in HAL_SAI_IRQHandler()
1864 hsai->ErrorCode |= HAL_SAI_ERROR_WCKCFG; in HAL_SAI_IRQHandler()
1870 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1873 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1876 if (HAL_DMA_Abort_IT(hsai->hdmatx) != HAL_OK) in HAL_SAI_IRQHandler()
1879 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_IRQHandler()
1883 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1885 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1889 if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1892 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1895 if (HAL_DMA_Abort_IT(hsai->hdmarx) != 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()
1913 hsai->Instance->IMR = 0U; in HAL_SAI_IRQHandler()
1914 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_IRQHandler()
1916 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_IRQHandler()
1919 hsai->XferCount = 0U; in HAL_SAI_IRQHandler()
1923 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1925 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1933 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_CNRDY); in HAL_SAI_IRQHandler()
1935 hsai->ErrorCode |= HAL_SAI_ERROR_CNREADY; in HAL_SAI_IRQHandler()
1938 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1940 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1956 __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxCpltCallback() argument
1959 UNUSED(hsai); in HAL_SAI_TxCpltCallback()
1972 __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxHalfCpltCallback() argument
1975 UNUSED(hsai); in HAL_SAI_TxHalfCpltCallback()
1988 __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxCpltCallback() argument
1991 UNUSED(hsai); in HAL_SAI_RxCpltCallback()
2004 __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxHalfCpltCallback() argument
2007 UNUSED(hsai); in HAL_SAI_RxHalfCpltCallback()
2020 __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_ErrorCallback() argument
2023 UNUSED(hsai); in HAL_SAI_ErrorCallback()
2055 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetState() argument
2057 return hsai->State; in HAL_SAI_GetState()
2066 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetError() argument
2068 return hsai->ErrorCode; in HAL_SAI_GetError()
2095 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitI2S() argument
2099 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitI2S()
2100 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitI2S()
2102 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitI2S()
2105 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitI2S()
2110 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitI2S()
2112 hsai->FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; in SAI_InitI2S()
2113 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitI2S()
2114 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitI2S()
2115 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitI2S()
2125 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; in SAI_InitI2S()
2126 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitI2S()
2131 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitI2S()
2132 hsai->FrameInit.FSOffset = SAI_FS_FIRSTBIT; in SAI_InitI2S()
2139 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2140 hsai->FrameInit.FrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2141 hsai->FrameInit.ActiveFrameLength = 16U * (nbslot / 2U); in SAI_InitI2S()
2142 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitI2S()
2145 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2146 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2147 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2148 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2151 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitI2S()
2152 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2153 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2154 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2157 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitI2S()
2158 hsai->FrameInit.FrameLength = 64U * (nbslot / 2U); in SAI_InitI2S()
2159 hsai->FrameInit.ActiveFrameLength = 32U * (nbslot / 2U); in SAI_InitI2S()
2160 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2170 hsai->SlotInit.FirstBitOffset = 16; in SAI_InitI2S()
2174 hsai->SlotInit.FirstBitOffset = 8; in SAI_InitI2S()
2190 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitPCM() argument
2194 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitPCM()
2195 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitPCM()
2197 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitPCM()
2200 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitPCM()
2205 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitPCM()
2207 hsai->FrameInit.FSDefinition = SAI_FS_STARTFRAME; in SAI_InitPCM()
2208 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitPCM()
2209 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitPCM()
2210 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitPCM()
2211 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitPCM()
2212 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitPCM()
2216 hsai->FrameInit.ActiveFrameLength = 1; in SAI_InitPCM()
2221 hsai->FrameInit.ActiveFrameLength = 13; in SAI_InitPCM()
2227 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2228 hsai->FrameInit.FrameLength = 16U * nbslot; in SAI_InitPCM()
2229 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitPCM()
2232 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2233 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2234 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2237 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitPCM()
2238 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2239 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2242 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitPCM()
2243 hsai->FrameInit.FrameLength = 32U * nbslot; in SAI_InitPCM()
2244 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2260 static void SAI_FillFifo(SAI_HandleTypeDef *hsai) in SAI_FillFifo() argument
2265 while (((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) && (hsai->XferCount > 0U)) in SAI_FillFifo()
2267 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in SAI_FillFifo()
2269 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_FillFifo()
2270 hsai->pBuffPtr++; in SAI_FillFifo()
2272 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in SAI_FillFifo()
2274 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2275 hsai->pBuffPtr++; in SAI_FillFifo()
2276 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2277 hsai->pBuffPtr++; in SAI_FillFifo()
2278 hsai->Instance->DR = temp; in SAI_FillFifo()
2282 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_FillFifo()
2283 hsai->pBuffPtr++; in SAI_FillFifo()
2284 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_FillFifo()
2285 hsai->pBuffPtr++; in SAI_FillFifo()
2286 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_FillFifo()
2287 hsai->pBuffPtr++; in SAI_FillFifo()
2288 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_FillFifo()
2289 hsai->pBuffPtr++; in SAI_FillFifo()
2290 hsai->Instance->DR = temp; in SAI_FillFifo()
2292 hsai->XferCount--; in SAI_FillFifo()
2303 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, SAI_ModeTypedef mode) in SAI_InterruptFlag() argument
2312 if ((hsai->Init.Protocol == SAI_AC97_PROTOCOL) && in SAI_InterruptFlag()
2313 ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODEMASTER_RX))) in SAI_InterruptFlag()
2318 if ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InterruptFlag()
2336 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) in SAI_Disable() argument
2342 __HAL_SAI_DISABLE(hsai); in SAI_Disable()
2350 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in SAI_Disable()
2355 } while ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) != 0U); in SAI_Disable()
2366 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT8Bit() argument
2368 if (hsai->XferCount == 0U) in SAI_Transmit_IT8Bit()
2372 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT8Bit()
2373 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT8Bit()
2375 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2377 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2383 hsai->Instance->DR = *hsai->pBuffPtr; in SAI_Transmit_IT8Bit()
2384 hsai->pBuffPtr++; in SAI_Transmit_IT8Bit()
2385 hsai->XferCount--; in SAI_Transmit_IT8Bit()
2395 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT16Bit() argument
2397 if (hsai->XferCount == 0U) in SAI_Transmit_IT16Bit()
2401 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT16Bit()
2402 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT16Bit()
2404 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2406 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2413 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT16Bit()
2414 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2415 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT16Bit()
2416 hsai->pBuffPtr++; in SAI_Transmit_IT16Bit()
2417 hsai->Instance->DR = temp; in SAI_Transmit_IT16Bit()
2418 hsai->XferCount--; in SAI_Transmit_IT16Bit()
2428 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT32Bit() argument
2430 if (hsai->XferCount == 0U) in SAI_Transmit_IT32Bit()
2434 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT32Bit()
2435 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT32Bit()
2437 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2439 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2446 temp = (uint32_t)(*hsai->pBuffPtr); in SAI_Transmit_IT32Bit()
2447 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2448 temp |= ((uint32_t)(*hsai->pBuffPtr) << 8); in SAI_Transmit_IT32Bit()
2449 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2450 temp |= ((uint32_t)(*hsai->pBuffPtr) << 16); in SAI_Transmit_IT32Bit()
2451 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2452 temp |= ((uint32_t)(*hsai->pBuffPtr) << 24); in SAI_Transmit_IT32Bit()
2453 hsai->pBuffPtr++; in SAI_Transmit_IT32Bit()
2454 hsai->Instance->DR = temp; in SAI_Transmit_IT32Bit()
2455 hsai->XferCount--; in SAI_Transmit_IT32Bit()
2465 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT8Bit() argument
2468 *hsai->pBuffPtr = (uint8_t)hsai->Instance->DR; in SAI_Receive_IT8Bit()
2469 hsai->pBuffPtr++; in SAI_Receive_IT8Bit()
2470 hsai->XferCount--; in SAI_Receive_IT8Bit()
2473 if (hsai->XferCount == 0U) in SAI_Receive_IT8Bit()
2476 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT8Bit()
2479 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT8Bit()
2481 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT8Bit()
2483 hsai->RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2485 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2496 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT16Bit() argument
2501 temp = hsai->Instance->DR; in SAI_Receive_IT16Bit()
2502 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT16Bit()
2503 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2504 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT16Bit()
2505 hsai->pBuffPtr++; in SAI_Receive_IT16Bit()
2506 hsai->XferCount--; in SAI_Receive_IT16Bit()
2509 if (hsai->XferCount == 0U) in SAI_Receive_IT16Bit()
2512 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT16Bit()
2515 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT16Bit()
2517 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT16Bit()
2519 hsai->RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2521 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2532 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT32Bit() argument
2537 temp = hsai->Instance->DR; in SAI_Receive_IT32Bit()
2538 *hsai->pBuffPtr = (uint8_t)temp; in SAI_Receive_IT32Bit()
2539 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2540 *hsai->pBuffPtr = (uint8_t)(temp >> 8); in SAI_Receive_IT32Bit()
2541 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2542 *hsai->pBuffPtr = (uint8_t)(temp >> 16); in SAI_Receive_IT32Bit()
2543 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2544 *hsai->pBuffPtr = (uint8_t)(temp >> 24); in SAI_Receive_IT32Bit()
2545 hsai->pBuffPtr++; in SAI_Receive_IT32Bit()
2546 hsai->XferCount--; in SAI_Receive_IT32Bit()
2549 if (hsai->XferCount == 0U) in SAI_Receive_IT32Bit()
2552 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT32Bit()
2555 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT32Bit()
2557 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT32Bit()
2559 hsai->RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2561 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2574 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxCplt() local
2578 hsai->XferCount = 0; in SAI_DMATxCplt()
2581 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMATxCplt()
2584 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMATxCplt()
2586 hsai->State = HAL_SAI_STATE_READY; in SAI_DMATxCplt()
2589 hsai->TxCpltCallback(hsai); in SAI_DMATxCplt()
2591 HAL_SAI_TxCpltCallback(hsai); in SAI_DMATxCplt()
2603 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxHalfCplt() local
2606 hsai->TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2608 HAL_SAI_TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2620 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxCplt() local
2625 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMARxCplt()
2626 hsai->XferCount = 0; in SAI_DMARxCplt()
2629 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMARxCplt()
2631 hsai->State = HAL_SAI_STATE_READY; in SAI_DMARxCplt()
2634 hsai->RxCpltCallback(hsai); in SAI_DMARxCplt()
2636 HAL_SAI_RxCpltCallback(hsai); in SAI_DMARxCplt()
2648 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxHalfCplt() local
2651 hsai->RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2653 HAL_SAI_RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2665 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAError() local
2668 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in SAI_DMAError()
2671 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAError()
2675 (void) SAI_Disable(hsai); in SAI_DMAError()
2678 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAError()
2681 hsai->XferCount = 0U; in SAI_DMAError()
2685 hsai->ErrorCallback(hsai); in SAI_DMAError()
2687 HAL_SAI_ErrorCallback(hsai); in SAI_DMAError()
2699 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAAbort() local
2702 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAAbort()
2705 hsai->Instance->IMR = 0U; in SAI_DMAAbort()
2706 hsai->Instance->CLRFR = 0xFFFFFFFFU; in SAI_DMAAbort()
2708 if (hsai->ErrorCode != HAL_SAI_ERROR_WCKCFG) in SAI_DMAAbort()
2712 (void) SAI_Disable(hsai); in SAI_DMAAbort()
2715 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in SAI_DMAAbort()
2718 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAAbort()
2721 hsai->XferCount = 0U; in SAI_DMAAbort()
2725 hsai->ErrorCallback(hsai); in SAI_DMAAbort()
2727 HAL_SAI_ErrorCallback(hsai); in SAI_DMAAbort()