Lines Matching refs:hsai
251 static void SAI_FillFifo(SAI_HandleTypeDef *hsai);
252 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, uint32_t mode);
253 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
254 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,…
256 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai);
257 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai);
258 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai);
259 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai);
260 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai);
261 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai);
262 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai);
323 HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasiz… in HAL_SAI_InitProtocol() argument
336 status = SAI_InitI2S(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
340 status = SAI_InitPCM(hsai, protocol, datasize, nbslot); in HAL_SAI_InitProtocol()
349 status = HAL_SAI_Init(hsai); in HAL_SAI_InitProtocol()
362 HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) in HAL_SAI_Init() argument
369 if (hsai == NULL) in HAL_SAI_Init()
375 assert_param(IS_SAI_ALL_INSTANCE(hsai->Instance)); in HAL_SAI_Init()
378 assert_param(IS_SAI_AUDIO_FREQUENCY(hsai->Init.AudioFrequency)); in HAL_SAI_Init()
379 assert_param(IS_SAI_BLOCK_PROTOCOL(hsai->Init.Protocol)); in HAL_SAI_Init()
380 assert_param(IS_SAI_BLOCK_MODE(hsai->Init.AudioMode)); in HAL_SAI_Init()
381 assert_param(IS_SAI_BLOCK_DATASIZE(hsai->Init.DataSize)); in HAL_SAI_Init()
382 assert_param(IS_SAI_BLOCK_FIRST_BIT(hsai->Init.FirstBit)); in HAL_SAI_Init()
383 assert_param(IS_SAI_BLOCK_CLOCK_STROBING(hsai->Init.ClockStrobing)); in HAL_SAI_Init()
384 assert_param(IS_SAI_BLOCK_SYNCHRO(hsai->Init.Synchro)); in HAL_SAI_Init()
385 assert_param(IS_SAI_BLOCK_OUTPUT_DRIVE(hsai->Init.OutputDrive)); in HAL_SAI_Init()
386 assert_param(IS_SAI_BLOCK_NODIVIDER(hsai->Init.NoDivider)); in HAL_SAI_Init()
387 assert_param(IS_SAI_BLOCK_FIFO_THRESHOLD(hsai->Init.FIFOThreshold)); in HAL_SAI_Init()
388 assert_param(IS_SAI_MONO_STEREO_MODE(hsai->Init.MonoStereoMode)); in HAL_SAI_Init()
389 assert_param(IS_SAI_BLOCK_COMPANDING_MODE(hsai->Init.CompandingMode)); in HAL_SAI_Init()
390 assert_param(IS_SAI_BLOCK_TRISTATE_MANAGEMENT(hsai->Init.TriState)); in HAL_SAI_Init()
391 assert_param(IS_SAI_BLOCK_SYNCEXT(hsai->Init.SynchroExt)); in HAL_SAI_Init()
394 assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); in HAL_SAI_Init()
395 assert_param(IS_SAI_BLOCK_ACTIVE_FRAME(hsai->FrameInit.ActiveFrameLength)); in HAL_SAI_Init()
396 assert_param(IS_SAI_BLOCK_FS_DEFINITION(hsai->FrameInit.FSDefinition)); in HAL_SAI_Init()
397 assert_param(IS_SAI_BLOCK_FS_POLARITY(hsai->FrameInit.FSPolarity)); in HAL_SAI_Init()
398 assert_param(IS_SAI_BLOCK_FS_OFFSET(hsai->FrameInit.FSOffset)); in HAL_SAI_Init()
401 assert_param(IS_SAI_BLOCK_FIRSTBIT_OFFSET(hsai->SlotInit.FirstBitOffset)); in HAL_SAI_Init()
402 assert_param(IS_SAI_BLOCK_SLOT_SIZE(hsai->SlotInit.SlotSize)); in HAL_SAI_Init()
403 assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); in HAL_SAI_Init()
404 assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); in HAL_SAI_Init()
406 if (hsai->State == HAL_SAI_STATE_RESET) in HAL_SAI_Init()
409 hsai->Lock = HAL_UNLOCKED; in HAL_SAI_Init()
413 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_Init()
414 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_Init()
415 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_Init()
416 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_Init()
417 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_Init()
420 if (hsai->MspInitCallback == NULL) in HAL_SAI_Init()
422 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_Init()
424 hsai->MspInitCallback(hsai); in HAL_SAI_Init()
427 HAL_SAI_MspInit(hsai); in HAL_SAI_Init()
431 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_Init()
434 SAI_Disable(hsai); in HAL_SAI_Init()
438 switch (hsai->Init.SynchroExt) in HAL_SAI_Init()
453 switch (hsai->Init.Synchro) in HAL_SAI_Init()
480 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
489 if (hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) in HAL_SAI_Init()
494 if ((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) in HAL_SAI_Init()
498 if ((hsai->Instance == SAI2_Block_A) || (hsai->Instance == SAI2_Block_B)) in HAL_SAI_Init()
508 tmpval = (freq * 10) / (hsai->Init.AudioFrequency * 2 * 256); in HAL_SAI_Init()
509 hsai->Init.Mckdiv = tmpval / 10; in HAL_SAI_Init()
514 hsai->Init.Mckdiv += 1; in HAL_SAI_Init()
518 if (hsai->Init.Protocol == SAI_SPDIF_PROTOCOL) in HAL_SAI_Init()
520 hsai->Init.Mckdiv = hsai->Init.Mckdiv >> 1; in HAL_SAI_Init()
524 assert_param(IS_SAI_BLOCK_MASTER_DIVIDER(hsai->Init.Mckdiv)); in HAL_SAI_Init()
527 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in HAL_SAI_Init()
530 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? 0 : SAI_xCR1_CKSTR; in HAL_SAI_Init()
535 ckstr_bits = (hsai->Init.ClockStrobing == SAI_CLOCKSTROBING_RISINGEDGE) ? SAI_xCR1_CKSTR : 0; in HAL_SAI_Init()
540 hsai->Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ in HAL_SAI_Init()
545 hsai->Instance->CR1 |= (hsai->Init.AudioMode | hsai->Init.Protocol | \ in HAL_SAI_Init()
546 hsai->Init.DataSize | hsai->Init.FirstBit | \ in HAL_SAI_Init()
548 hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ in HAL_SAI_Init()
549 hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20)); in HAL_SAI_Init()
552 hsai->Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); in HAL_SAI_Init()
553 …hsai->Instance->CR2 |= (hsai->Init.FIFOThreshold | hsai->Init.CompandingMode | hsai->Init.TriState… in HAL_SAI_Init()
556 hsai->Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \ in HAL_SAI_Init()
558 hsai->Instance->FRCR |= ((hsai->FrameInit.FrameLength - 1) | in HAL_SAI_Init()
559 hsai->FrameInit.FSOffset | in HAL_SAI_Init()
560 hsai->FrameInit.FSDefinition | in HAL_SAI_Init()
561 hsai->FrameInit.FSPolarity | in HAL_SAI_Init()
562 ((hsai->FrameInit.ActiveFrameLength - 1) << 8)); in HAL_SAI_Init()
566 hsai->Instance->SLOTR &= (~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \ in HAL_SAI_Init()
569 hsai->Instance->SLOTR |= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize in HAL_SAI_Init()
570 … | (hsai->SlotInit.SlotActive << 16) | ((hsai->SlotInit.SlotNumber - 1) << 8); in HAL_SAI_Init()
573 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Init()
576 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Init()
579 __HAL_UNLOCK(hsai); in HAL_SAI_Init()
590 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_DeInit() argument
593 if (hsai == NULL) in HAL_SAI_DeInit()
598 hsai->State = HAL_SAI_STATE_BUSY; in HAL_SAI_DeInit()
601 hsai->Instance->IMR = 0; in HAL_SAI_DeInit()
602 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_DeInit()
605 SAI_Disable(hsai); in HAL_SAI_DeInit()
608 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DeInit()
612 if (hsai->MspDeInitCallback == NULL) in HAL_SAI_DeInit()
614 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_DeInit()
616 hsai->MspDeInitCallback(hsai); in HAL_SAI_DeInit()
618 HAL_SAI_MspDeInit(hsai); in HAL_SAI_DeInit()
622 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_DeInit()
625 hsai->State = HAL_SAI_STATE_RESET; in HAL_SAI_DeInit()
628 __HAL_UNLOCK(hsai); in HAL_SAI_DeInit()
639 __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspInit() argument
642 UNUSED(hsai); in HAL_SAI_MspInit()
655 __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) in HAL_SAI_MspDeInit() argument
658 UNUSED(hsai); in HAL_SAI_MspDeInit()
682 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_RegisterCallback() argument
691 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
697 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_RegisterCallback()
702 hsai->RxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
705 hsai->RxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
708 hsai->TxCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
711 hsai->TxHalfCpltCallback = pCallback; in HAL_SAI_RegisterCallback()
714 hsai->ErrorCallback = pCallback; in HAL_SAI_RegisterCallback()
717 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
720 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
724 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
730 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_RegisterCallback()
735 hsai->MspInitCallback = pCallback; in HAL_SAI_RegisterCallback()
738 hsai->MspDeInitCallback = pCallback; in HAL_SAI_RegisterCallback()
742 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
751 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_RegisterCallback()
774 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai, in HAL_SAI_UnRegisterCallback() argument
779 if (HAL_SAI_STATE_READY == hsai->State) in HAL_SAI_UnRegisterCallback()
784 hsai->RxCpltCallback = HAL_SAI_RxCpltCallback; in HAL_SAI_UnRegisterCallback()
787 hsai->RxHalfCpltCallback = HAL_SAI_RxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
790 hsai->TxCpltCallback = HAL_SAI_TxCpltCallback; in HAL_SAI_UnRegisterCallback()
793 hsai->TxHalfCpltCallback = HAL_SAI_TxHalfCpltCallback; in HAL_SAI_UnRegisterCallback()
796 hsai->ErrorCallback = HAL_SAI_ErrorCallback; in HAL_SAI_UnRegisterCallback()
799 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
802 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
806 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
812 else if (HAL_SAI_STATE_RESET == hsai->State) in HAL_SAI_UnRegisterCallback()
817 hsai->MspInitCallback = HAL_SAI_MspInit; in HAL_SAI_UnRegisterCallback()
820 hsai->MspDeInitCallback = HAL_SAI_MspDeInit; in HAL_SAI_UnRegisterCallback()
824 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
833 hsai->ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK; in HAL_SAI_UnRegisterCallback()
896 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t… in HAL_SAI_Transmit() argument
905 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit()
908 __HAL_LOCK(hsai); in HAL_SAI_Transmit()
910 hsai->XferSize = Size; in HAL_SAI_Transmit()
911 hsai->XferCount = Size; in HAL_SAI_Transmit()
912 hsai->pBuffPtr = pData; in HAL_SAI_Transmit()
913 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit()
914 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit()
917 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Transmit()
920 SAI_FillFifo(hsai); in HAL_SAI_Transmit()
922 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit()
925 while (hsai->XferCount > 0) in HAL_SAI_Transmit()
928 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) in HAL_SAI_Transmit()
930 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit()
932 hsai->Instance->DR = (*hsai->pBuffPtr++); in HAL_SAI_Transmit()
934 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit()
936 hsai->Instance->DR = *((uint16_t *)hsai->pBuffPtr); in HAL_SAI_Transmit()
937 hsai->pBuffPtr += 2; in HAL_SAI_Transmit()
941 hsai->Instance->DR = *((uint32_t *)hsai->pBuffPtr); in HAL_SAI_Transmit()
942 hsai->pBuffPtr += 4; in HAL_SAI_Transmit()
944 hsai->XferCount--; in HAL_SAI_Transmit()
952 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit()
955 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Transmit()
958 SAI_Disable(hsai); in HAL_SAI_Transmit()
961 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Transmit()
964 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
967 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
974 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Transmit()
977 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit()
996 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SAI_Receive() argument
1005 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive()
1008 __HAL_LOCK(hsai); in HAL_SAI_Receive()
1010 hsai->pBuffPtr = pData; in HAL_SAI_Receive()
1011 hsai->XferSize = Size; in HAL_SAI_Receive()
1012 hsai->XferCount = Size; in HAL_SAI_Receive()
1013 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive()
1014 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive()
1017 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Receive()
1020 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive()
1024 while (hsai->XferCount > 0) in HAL_SAI_Receive()
1026 if ((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Receive()
1028 … if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive()
1030 (*hsai->pBuffPtr++) = hsai->Instance->DR; in HAL_SAI_Receive()
1032 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive()
1034 *((uint16_t *)hsai->pBuffPtr) = hsai->Instance->DR; in HAL_SAI_Receive()
1035 hsai->pBuffPtr += 2; in HAL_SAI_Receive()
1039 *((uint32_t *)hsai->pBuffPtr) = hsai->Instance->DR; in HAL_SAI_Receive()
1040 hsai->pBuffPtr += 4; in HAL_SAI_Receive()
1042 hsai->XferCount--; in HAL_SAI_Receive()
1050 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Receive()
1053 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Receive()
1056 SAI_Disable(hsai); in HAL_SAI_Receive()
1059 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Receive()
1062 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1065 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1072 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Receive()
1075 __HAL_UNLOCK(hsai); in HAL_SAI_Receive()
1093 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_IT() argument
1100 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_IT()
1103 __HAL_LOCK(hsai); in HAL_SAI_Transmit_IT()
1105 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_IT()
1106 hsai->XferSize = Size; in HAL_SAI_Transmit_IT()
1107 hsai->XferCount = Size; in HAL_SAI_Transmit_IT()
1108 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_IT()
1109 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_IT()
1111 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Transmit_IT()
1113 hsai->InterruptServiceRoutine = SAI_Transmit_IT8Bit; in HAL_SAI_Transmit_IT()
1115 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Transmit_IT()
1117 hsai->InterruptServiceRoutine = SAI_Transmit_IT16Bit; in HAL_SAI_Transmit_IT()
1121 hsai->InterruptServiceRoutine = SAI_Transmit_IT32Bit; in HAL_SAI_Transmit_IT()
1125 SAI_FillFifo(hsai); in HAL_SAI_Transmit_IT()
1128 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Transmit_IT()
1131 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Transmit_IT()
1134 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_IT()
1137 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_IT()
1155 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_IT() argument
1162 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_IT()
1165 __HAL_LOCK(hsai); in HAL_SAI_Receive_IT()
1167 hsai->pBuffPtr = pData; in HAL_SAI_Receive_IT()
1168 hsai->XferSize = Size; in HAL_SAI_Receive_IT()
1169 hsai->XferCount = Size; in HAL_SAI_Receive_IT()
1170 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_IT()
1171 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_IT()
1173 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in HAL_SAI_Receive_IT()
1175 hsai->InterruptServiceRoutine = SAI_Receive_IT8Bit; in HAL_SAI_Receive_IT()
1177 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in HAL_SAI_Receive_IT()
1179 hsai->InterruptServiceRoutine = SAI_Receive_IT16Bit; in HAL_SAI_Receive_IT()
1183 hsai->InterruptServiceRoutine = SAI_Receive_IT32Bit; in HAL_SAI_Receive_IT()
1187 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in HAL_SAI_Receive_IT()
1190 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Receive_IT()
1193 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_IT()
1197 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_IT()
1213 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAPause() argument
1216 __HAL_LOCK(hsai); in HAL_SAI_DMAPause()
1219 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAPause()
1222 __HAL_UNLOCK(hsai); in HAL_SAI_DMAPause()
1233 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAResume() argument
1236 __HAL_LOCK(hsai); in HAL_SAI_DMAResume()
1239 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_DMAResume()
1242 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_DMAResume()
1245 __HAL_SAI_ENABLE(hsai); in HAL_SAI_DMAResume()
1249 __HAL_UNLOCK(hsai); in HAL_SAI_DMAResume()
1260 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) in HAL_SAI_DMAStop() argument
1265 __HAL_LOCK(hsai); in HAL_SAI_DMAStop()
1268 SAI_Disable(hsai); in HAL_SAI_DMAStop()
1271 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_DMAStop()
1274 if ((hsai->hdmatx != NULL) && (hsai->State == HAL_SAI_STATE_BUSY_TX)) in HAL_SAI_DMAStop()
1276 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_DMAStop()
1279 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1282 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1288 if ((hsai->hdmarx != NULL) && (hsai->State == HAL_SAI_STATE_BUSY_RX)) in HAL_SAI_DMAStop()
1290 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_DMAStop()
1293 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_DMAStop()
1296 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_DMAStop()
1302 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_DMAStop()
1305 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_DMAStop()
1308 __HAL_UNLOCK(hsai); in HAL_SAI_DMAStop()
1319 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) in HAL_SAI_Abort() argument
1324 __HAL_LOCK(hsai); in HAL_SAI_Abort()
1327 SAI_Disable(hsai); in HAL_SAI_Abort()
1330 if ((hsai->Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN) in HAL_SAI_Abort()
1333 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in HAL_SAI_Abort()
1336 if ((hsai->hdmatx != NULL) && (hsai->State == HAL_SAI_STATE_BUSY_TX)) in HAL_SAI_Abort()
1338 if (HAL_DMA_Abort(hsai->hdmatx) != HAL_OK) in HAL_SAI_Abort()
1341 if (hsai->hdmatx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1344 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1350 if ((hsai->hdmarx != NULL) && (hsai->State == HAL_SAI_STATE_BUSY_RX)) in HAL_SAI_Abort()
1352 if (HAL_DMA_Abort(hsai->hdmarx) != HAL_OK) in HAL_SAI_Abort()
1355 if (hsai->hdmarx->ErrorCode != HAL_DMA_ERROR_NO_XFER) in HAL_SAI_Abort()
1358 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in HAL_SAI_Abort()
1364 hsai->Instance->IMR = 0; in HAL_SAI_Abort()
1365 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_Abort()
1368 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in HAL_SAI_Abort()
1371 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_Abort()
1374 __HAL_UNLOCK(hsai); in HAL_SAI_Abort()
1387 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Transmit_DMA() argument
1396 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Transmit_DMA()
1399 __HAL_LOCK(hsai); in HAL_SAI_Transmit_DMA()
1401 hsai->pBuffPtr = pData; in HAL_SAI_Transmit_DMA()
1402 hsai->XferSize = Size; in HAL_SAI_Transmit_DMA()
1403 hsai->XferCount = Size; in HAL_SAI_Transmit_DMA()
1404 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Transmit_DMA()
1405 hsai->State = HAL_SAI_STATE_BUSY_TX; in HAL_SAI_Transmit_DMA()
1408 hsai->hdmatx->XferHalfCpltCallback = SAI_DMATxHalfCplt; in HAL_SAI_Transmit_DMA()
1411 hsai->hdmatx->XferCpltCallback = SAI_DMATxCplt; in HAL_SAI_Transmit_DMA()
1414 hsai->hdmatx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Transmit_DMA()
1417 hsai->hdmatx->XferAbortCallback = NULL; in HAL_SAI_Transmit_DMA()
1420 …if (HAL_DMA_Start_IT(hsai->hdmatx, (uint32_t)hsai->pBuffPtr, (uint32_t)&hsai->Instance->DR, hsai->… in HAL_SAI_Transmit_DMA()
1422 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1427 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Transmit_DMA()
1430 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Transmit_DMA()
1433 while ((hsai->Instance->SR & SAI_xSR_FLVL) == SAI_FIFOSTATUS_EMPTY) in HAL_SAI_Transmit_DMA()
1439 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in HAL_SAI_Transmit_DMA()
1442 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1449 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == 0U) in HAL_SAI_Transmit_DMA()
1452 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Transmit_DMA()
1456 __HAL_UNLOCK(hsai); in HAL_SAI_Transmit_DMA()
1474 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) in HAL_SAI_Receive_DMA() argument
1482 if (hsai->State == HAL_SAI_STATE_READY) in HAL_SAI_Receive_DMA()
1485 __HAL_LOCK(hsai); in HAL_SAI_Receive_DMA()
1487 hsai->pBuffPtr = pData; in HAL_SAI_Receive_DMA()
1488 hsai->XferSize = Size; in HAL_SAI_Receive_DMA()
1489 hsai->XferCount = Size; in HAL_SAI_Receive_DMA()
1490 hsai->ErrorCode = HAL_SAI_ERROR_NONE; in HAL_SAI_Receive_DMA()
1491 hsai->State = HAL_SAI_STATE_BUSY_RX; in HAL_SAI_Receive_DMA()
1494 hsai->hdmarx->XferHalfCpltCallback = SAI_DMARxHalfCplt; in HAL_SAI_Receive_DMA()
1497 hsai->hdmarx->XferCpltCallback = SAI_DMARxCplt; in HAL_SAI_Receive_DMA()
1500 hsai->hdmarx->XferErrorCallback = SAI_DMAError; in HAL_SAI_Receive_DMA()
1503 hsai->hdmarx->XferAbortCallback = NULL; in HAL_SAI_Receive_DMA()
1506 …if (HAL_DMA_Start_IT(hsai->hdmarx, (uint32_t)&hsai->Instance->DR, (uint32_t)hsai->pBuffPtr, hsai->… in HAL_SAI_Receive_DMA()
1508 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1513 __HAL_SAI_ENABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in HAL_SAI_Receive_DMA()
1516 hsai->Instance->CR1 |= SAI_xCR1_DMAEN; in HAL_SAI_Receive_DMA()
1519 if ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) == RESET) in HAL_SAI_Receive_DMA()
1522 __HAL_SAI_ENABLE(hsai); in HAL_SAI_Receive_DMA()
1526 __HAL_UNLOCK(hsai); in HAL_SAI_Receive_DMA()
1543 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) in HAL_SAI_EnableTxMuteMode() argument
1547 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableTxMuteMode()
1549 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_EnableTxMuteMode()
1550 SET_BIT(hsai->Instance->CR2, SAI_xCR2_MUTE | val); in HAL_SAI_EnableTxMuteMode()
1562 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableTxMuteMode() argument
1564 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableTxMuteMode()
1566 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE); in HAL_SAI_DisableTxMuteMode()
1580 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t … in HAL_SAI_EnableRxMuteMode() argument
1584 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_EnableRxMuteMode()
1587 CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); in HAL_SAI_EnableRxMuteMode()
1588 SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); in HAL_SAI_EnableRxMuteMode()
1589 hsai->mutecallback = callback; in HAL_SAI_EnableRxMuteMode()
1591 __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_EnableRxMuteMode()
1603 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) in HAL_SAI_DisableRxMuteMode() argument
1605 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_DisableRxMuteMode()
1608 hsai->mutecallback = (SAIcallback)NULL; in HAL_SAI_DisableRxMuteMode()
1610 __HAL_SAI_DISABLE_IT(hsai, SAI_IT_MUTEDET); in HAL_SAI_DisableRxMuteMode()
1622 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) in HAL_SAI_IRQHandler() argument
1624 if (hsai->State != HAL_SAI_STATE_RESET) in HAL_SAI_IRQHandler()
1626 uint32_t itflags = hsai->Instance->SR; in HAL_SAI_IRQHandler()
1627 uint32_t itsources = hsai->Instance->IMR; in HAL_SAI_IRQHandler()
1628 uint32_t cr1config = hsai->Instance->CR1; in HAL_SAI_IRQHandler()
1634 hsai->InterruptServiceRoutine(hsai); in HAL_SAI_IRQHandler()
1640 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in HAL_SAI_IRQHandler()
1642 tmperror = ((hsai->State == HAL_SAI_STATE_BUSY_RX) ? HAL_SAI_ERROR_OVR : HAL_SAI_ERROR_UDR); in HAL_SAI_IRQHandler()
1644 hsai->ErrorCode |= tmperror; in HAL_SAI_IRQHandler()
1647 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1649 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1656 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_MUTEDET); in HAL_SAI_IRQHandler()
1658 if (hsai->mutecallback != (SAIcallback)NULL) in HAL_SAI_IRQHandler()
1661 hsai->mutecallback(); in HAL_SAI_IRQHandler()
1668 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_AFSDET); in HAL_SAI_IRQHandler()
1671 hsai->ErrorCode |= HAL_SAI_ERROR_AFSDET; in HAL_SAI_IRQHandler()
1676 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1679 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1682 HAL_DMA_Abort_IT(hsai->hdmatx); in HAL_SAI_IRQHandler()
1684 else if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1687 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1689 HAL_DMA_Abort_IT(hsai->hdmarx); in HAL_SAI_IRQHandler()
1695 HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1699 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1701 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1709 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_LFSDET); in HAL_SAI_IRQHandler()
1712 hsai->ErrorCode |= HAL_SAI_ERROR_LFSDET; in HAL_SAI_IRQHandler()
1718 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1721 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1723 HAL_DMA_Abort_IT(hsai->hdmatx); in HAL_SAI_IRQHandler()
1725 else if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1728 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1730 HAL_DMA_Abort_IT(hsai->hdmarx); in HAL_SAI_IRQHandler()
1736 HAL_SAI_Abort(hsai); in HAL_SAI_IRQHandler()
1740 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1742 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1750 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_WCKCFG); in HAL_SAI_IRQHandler()
1753 hsai->ErrorCode |= HAL_SAI_ERROR_WCKCFG; in HAL_SAI_IRQHandler()
1756 if (hsai->hdmatx != NULL) in HAL_SAI_IRQHandler()
1759 hsai->hdmatx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1761 HAL_DMA_Abort_IT(hsai->hdmatx); in HAL_SAI_IRQHandler()
1763 else if (hsai->hdmarx != NULL) in HAL_SAI_IRQHandler()
1766 hsai->hdmarx->XferAbortCallback = SAI_DMAAbort; in HAL_SAI_IRQHandler()
1768 HAL_DMA_Abort_IT(hsai->hdmarx); in HAL_SAI_IRQHandler()
1774 hsai->Instance->IMR = 0U; in HAL_SAI_IRQHandler()
1775 hsai->Instance->CLRFR = 0xFFFFFFFFU; in HAL_SAI_IRQHandler()
1777 hsai->State = HAL_SAI_STATE_READY; in HAL_SAI_IRQHandler()
1780 hsai->XferCount = 0U; in HAL_SAI_IRQHandler()
1784 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1786 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1794 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_CNRDY); in HAL_SAI_IRQHandler()
1796 hsai->ErrorCode |= HAL_SAI_ERROR_CNREADY; in HAL_SAI_IRQHandler()
1799 hsai->ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1801 HAL_SAI_ErrorCallback(hsai); in HAL_SAI_IRQHandler()
1817 __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxCpltCallback() argument
1820 UNUSED(hsai); in HAL_SAI_TxCpltCallback()
1833 __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_TxHalfCpltCallback() argument
1836 UNUSED(hsai); in HAL_SAI_TxHalfCpltCallback()
1849 __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxCpltCallback() argument
1852 UNUSED(hsai); in HAL_SAI_RxCpltCallback()
1865 __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_RxHalfCpltCallback() argument
1868 UNUSED(hsai); in HAL_SAI_RxHalfCpltCallback()
1881 __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) in HAL_SAI_ErrorCallback() argument
1884 UNUSED(hsai); in HAL_SAI_ErrorCallback()
1916 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetState() argument
1918 return hsai->State; in HAL_SAI_GetState()
1927 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai) in HAL_SAI_GetError() argument
1929 return hsai->ErrorCode; in HAL_SAI_GetError()
1957 static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitI2S() argument
1959 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitI2S()
1960 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitI2S()
1962 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitI2S()
1965 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitI2S()
1970 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitI2S()
1972 hsai->FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; in SAI_InitI2S()
1973 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitI2S()
1974 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitI2S()
1975 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitI2S()
1985 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; in SAI_InitI2S()
1986 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitI2S()
1991 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitI2S()
1992 hsai->FrameInit.FSOffset = SAI_FS_FIRSTBIT; in SAI_InitI2S()
1999 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2000 hsai->FrameInit.FrameLength = 32 * (nbslot / 2); in SAI_InitI2S()
2001 hsai->FrameInit.ActiveFrameLength = 16 * (nbslot / 2); in SAI_InitI2S()
2002 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitI2S()
2005 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitI2S()
2006 hsai->FrameInit.FrameLength = 64 * (nbslot / 2); in SAI_InitI2S()
2007 hsai->FrameInit.ActiveFrameLength = 32 * (nbslot / 2); in SAI_InitI2S()
2008 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2011 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitI2S()
2012 hsai->FrameInit.FrameLength = 64 * (nbslot / 2); in SAI_InitI2S()
2013 hsai->FrameInit.ActiveFrameLength = 32 * (nbslot / 2); in SAI_InitI2S()
2014 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2017 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitI2S()
2018 hsai->FrameInit.FrameLength = 64 * (nbslot / 2); in SAI_InitI2S()
2019 hsai->FrameInit.ActiveFrameLength = 32 * (nbslot / 2); in SAI_InitI2S()
2020 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitI2S()
2029 hsai->SlotInit.FirstBitOffset = 16; in SAI_InitI2S()
2033 hsai->SlotInit.FirstBitOffset = 8; in SAI_InitI2S()
2049 static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize,… in SAI_InitPCM() argument
2051 hsai->Init.Protocol = SAI_FREE_PROTOCOL; in SAI_InitPCM()
2052 hsai->Init.FirstBit = SAI_FIRSTBIT_MSB; in SAI_InitPCM()
2054 if ((hsai->Init.AudioMode == SAI_MODEMASTER_TX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InitPCM()
2057 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; in SAI_InitPCM()
2062 hsai->Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; in SAI_InitPCM()
2064 hsai->FrameInit.FSDefinition = SAI_FS_STARTFRAME; in SAI_InitPCM()
2065 hsai->FrameInit.FSPolarity = SAI_FS_ACTIVE_HIGH; in SAI_InitPCM()
2066 hsai->FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; in SAI_InitPCM()
2067 hsai->SlotInit.FirstBitOffset = 0; in SAI_InitPCM()
2068 hsai->SlotInit.SlotNumber = nbslot; in SAI_InitPCM()
2069 hsai->SlotInit.SlotActive = SAI_SLOTACTIVE_ALL; in SAI_InitPCM()
2073 hsai->FrameInit.ActiveFrameLength = 1; in SAI_InitPCM()
2078 hsai->FrameInit.ActiveFrameLength = 13; in SAI_InitPCM()
2084 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2085 hsai->FrameInit.FrameLength = 16 * nbslot; in SAI_InitPCM()
2086 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_16B; in SAI_InitPCM()
2089 hsai->Init.DataSize = SAI_DATASIZE_16; in SAI_InitPCM()
2090 hsai->FrameInit.FrameLength = 32 * nbslot; in SAI_InitPCM()
2091 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2094 hsai->Init.DataSize = SAI_DATASIZE_24; in SAI_InitPCM()
2095 hsai->FrameInit.FrameLength = 32 * nbslot; in SAI_InitPCM()
2096 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2099 hsai->Init.DataSize = SAI_DATASIZE_32; in SAI_InitPCM()
2100 hsai->FrameInit.FrameLength = 32 * nbslot; in SAI_InitPCM()
2101 hsai->SlotInit.SlotSize = SAI_SLOTSIZE_32B; in SAI_InitPCM()
2116 static void SAI_FillFifo(SAI_HandleTypeDef *hsai) in SAI_FillFifo() argument
2119 while (((hsai->Instance->SR & SAI_xSR_FLVL) != SAI_FIFOSTATUS_FULL) && (hsai->XferCount > 0)) in SAI_FillFifo()
2121 if ((hsai->Init.DataSize == SAI_DATASIZE_8) && (hsai->Init.CompandingMode == SAI_NOCOMPANDING)) in SAI_FillFifo()
2123 hsai->Instance->DR = (*hsai->pBuffPtr++); in SAI_FillFifo()
2125 else if (hsai->Init.DataSize <= SAI_DATASIZE_16) in SAI_FillFifo()
2127 hsai->Instance->DR = *((uint32_t *)hsai->pBuffPtr); in SAI_FillFifo()
2128 hsai->pBuffPtr += 2; in SAI_FillFifo()
2132 hsai->Instance->DR = *((uint32_t *)hsai->pBuffPtr); in SAI_FillFifo()
2133 hsai->pBuffPtr += 4; in SAI_FillFifo()
2135 hsai->XferCount--; in SAI_FillFifo()
2146 static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, uint32_t mode) in SAI_InterruptFlag() argument
2155 if ((hsai->Init.Protocol == SAI_AC97_PROTOCOL) && in SAI_InterruptFlag()
2156 ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODEMASTER_RX))) in SAI_InterruptFlag()
2161 if ((hsai->Init.AudioMode == SAI_MODESLAVE_RX) || (hsai->Init.AudioMode == SAI_MODESLAVE_TX)) in SAI_InterruptFlag()
2179 static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) in SAI_Disable() argument
2185 __HAL_SAI_DISABLE(hsai); in SAI_Disable()
2193 hsai->ErrorCode |= HAL_SAI_ERROR_TIMEOUT; in SAI_Disable()
2198 while ((hsai->Instance->CR1 & SAI_xCR1_SAIEN) != RESET); in SAI_Disable()
2209 static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT8Bit() argument
2211 if (hsai->XferCount == 0) in SAI_Transmit_IT8Bit()
2215 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT8Bit()
2216 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT8Bit()
2218 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2220 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT8Bit()
2226 hsai->Instance->DR = (*hsai->pBuffPtr++); in SAI_Transmit_IT8Bit()
2227 hsai->XferCount--; in SAI_Transmit_IT8Bit()
2237 static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT16Bit() argument
2239 if (hsai->XferCount == 0) in SAI_Transmit_IT16Bit()
2243 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT16Bit()
2244 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT16Bit()
2246 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2248 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT16Bit()
2254 hsai->Instance->DR = *(uint16_t *)hsai->pBuffPtr; in SAI_Transmit_IT16Bit()
2255 hsai->pBuffPtr += 2; in SAI_Transmit_IT16Bit()
2256 hsai->XferCount--; in SAI_Transmit_IT16Bit()
2266 static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Transmit_IT32Bit() argument
2268 if (hsai->XferCount == 0) in SAI_Transmit_IT32Bit()
2272 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Transmit_IT32Bit()
2273 hsai->State = HAL_SAI_STATE_READY; in SAI_Transmit_IT32Bit()
2275 hsai->TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2277 HAL_SAI_TxCpltCallback(hsai); in SAI_Transmit_IT32Bit()
2283 hsai->Instance->DR = *(uint32_t *)hsai->pBuffPtr; in SAI_Transmit_IT32Bit()
2284 hsai->pBuffPtr += 4; in SAI_Transmit_IT32Bit()
2285 hsai->XferCount--; in SAI_Transmit_IT32Bit()
2295 static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT8Bit() argument
2298 (*hsai->pBuffPtr++) = hsai->Instance->DR; in SAI_Receive_IT8Bit()
2299 hsai->XferCount--; in SAI_Receive_IT8Bit()
2302 if (hsai->XferCount == 0) in SAI_Receive_IT8Bit()
2305 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT8Bit()
2308 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT8Bit()
2310 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT8Bit()
2312 hsai->RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2314 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT8Bit()
2325 static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT16Bit() argument
2328 *(uint16_t *)hsai->pBuffPtr = hsai->Instance->DR; in SAI_Receive_IT16Bit()
2329 hsai->pBuffPtr += 2; in SAI_Receive_IT16Bit()
2330 hsai->XferCount--; in SAI_Receive_IT16Bit()
2333 if (hsai->XferCount == 0) in SAI_Receive_IT16Bit()
2336 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT16Bit()
2339 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT16Bit()
2341 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT16Bit()
2343 hsai->RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2345 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT16Bit()
2356 static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) in SAI_Receive_IT32Bit() argument
2359 *(uint32_t *)hsai->pBuffPtr = hsai->Instance->DR; in SAI_Receive_IT32Bit()
2360 hsai->pBuffPtr += 4; in SAI_Receive_IT32Bit()
2361 hsai->XferCount--; in SAI_Receive_IT32Bit()
2364 if (hsai->XferCount == 0) in SAI_Receive_IT32Bit()
2367 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_IT)); in SAI_Receive_IT32Bit()
2370 __HAL_SAI_CLEAR_FLAG(hsai, SAI_FLAG_OVRUDR); in SAI_Receive_IT32Bit()
2372 hsai->State = HAL_SAI_STATE_READY; in SAI_Receive_IT32Bit()
2374 hsai->RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2376 HAL_SAI_RxCpltCallback(hsai); in SAI_Receive_IT32Bit()
2389 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxCplt() local
2393 hsai->XferCount = 0; in SAI_DMATxCplt()
2396 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMATxCplt()
2399 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMATxCplt()
2401 hsai->State = HAL_SAI_STATE_READY; in SAI_DMATxCplt()
2404 hsai->TxCpltCallback(hsai); in SAI_DMATxCplt()
2406 HAL_SAI_TxCpltCallback(hsai); in SAI_DMATxCplt()
2418 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMATxHalfCplt() local
2421 hsai->TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2423 HAL_SAI_TxHalfCpltCallback(hsai); in SAI_DMATxHalfCplt()
2435 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxCplt() local
2440 hsai->Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN); in SAI_DMARxCplt()
2441 hsai->XferCount = 0; in SAI_DMARxCplt()
2444 __HAL_SAI_DISABLE_IT(hsai, SAI_InterruptFlag(hsai, SAI_MODE_DMA)); in SAI_DMARxCplt()
2446 hsai->State = HAL_SAI_STATE_READY; in SAI_DMARxCplt()
2449 hsai->RxCpltCallback(hsai); in SAI_DMARxCplt()
2451 HAL_SAI_RxCpltCallback(hsai); in SAI_DMARxCplt()
2463 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMARxHalfCplt() local
2466 hsai->RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2468 HAL_SAI_RxHalfCpltCallback(hsai); in SAI_DMARxHalfCplt()
2480 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAError() local
2483 hsai->ErrorCode |= HAL_SAI_ERROR_DMA; in SAI_DMAError()
2485 …if ((hsai->hdmatx->ErrorCode == HAL_DMA_ERROR_TE) || (hsai->hdmarx->ErrorCode == HAL_DMA_ERROR_TE)) in SAI_DMAError()
2488 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAError()
2491 SAI_Disable(hsai); in SAI_DMAError()
2494 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAError()
2497 hsai->XferCount = 0U; in SAI_DMAError()
2501 hsai->ErrorCallback(hsai); in SAI_DMAError()
2503 HAL_SAI_ErrorCallback(hsai); in SAI_DMAError()
2515 SAI_HandleTypeDef *hsai = (SAI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SAI_DMAAbort() local
2518 hsai->Instance->CR1 &= ~SAI_xCR1_DMAEN; in SAI_DMAAbort()
2521 hsai->Instance->IMR = 0U; in SAI_DMAAbort()
2522 hsai->Instance->CLRFR = 0xFFFFFFFFU; in SAI_DMAAbort()
2524 if (hsai->ErrorCode != HAL_SAI_ERROR_WCKCFG) in SAI_DMAAbort()
2527 SAI_Disable(hsai); in SAI_DMAAbort()
2530 SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); in SAI_DMAAbort()
2533 hsai->State = HAL_SAI_STATE_READY; in SAI_DMAAbort()
2536 hsai->XferCount = 0U; in SAI_DMAAbort()
2540 hsai->ErrorCallback(hsai); in SAI_DMAAbort()
2542 HAL_SAI_ErrorCallback(hsai); in SAI_DMAAbort()