Lines Matching refs:hspi
240 static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, Flag…
242 static HAL_StatusTypeDef SPI_WaitFifoStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Fifo, uint…
244 static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi);
245 static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi);
246 static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi);
247 static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi);
248 static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi);
249 static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi);
250 static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi);
251 static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi);
253 static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi);
254 static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi);
255 static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi);
256 static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi);
258 static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi);
259 static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi);
260 static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi);
261 static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi);
262 static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi);
263 static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t T…
264 static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t…
316 HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) in HAL_SPI_Init() argument
321 if (hspi == NULL) in HAL_SPI_Init()
327 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_Init()
328 assert_param(IS_SPI_MODE(hspi->Init.Mode)); in HAL_SPI_Init()
329 assert_param(IS_SPI_DIRECTION(hspi->Init.Direction)); in HAL_SPI_Init()
330 assert_param(IS_SPI_DATASIZE(hspi->Init.DataSize)); in HAL_SPI_Init()
331 assert_param(IS_SPI_NSS(hspi->Init.NSS)); in HAL_SPI_Init()
332 assert_param(IS_SPI_NSSP(hspi->Init.NSSPMode)); in HAL_SPI_Init()
333 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
334 assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); in HAL_SPI_Init()
335 assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); in HAL_SPI_Init()
336 if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) in HAL_SPI_Init()
338 assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); in HAL_SPI_Init()
339 assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); in HAL_SPI_Init()
341 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Init()
343 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
348 hspi->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; in HAL_SPI_Init()
353 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
356 hspi->Init.CLKPolarity = SPI_POLARITY_LOW; in HAL_SPI_Init()
357 hspi->Init.CLKPhase = SPI_PHASE_1EDGE; in HAL_SPI_Init()
360 assert_param(IS_SPI_CRC_CALCULATION(hspi->Init.CRCCalculation)); in HAL_SPI_Init()
361 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
363 assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); in HAL_SPI_Init()
364 assert_param(IS_SPI_CRC_LENGTH(hspi->Init.CRCLength)); in HAL_SPI_Init()
367 hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; in HAL_SPI_Init()
370 if (hspi->State == HAL_SPI_STATE_RESET) in HAL_SPI_Init()
373 hspi->Lock = HAL_UNLOCKED; in HAL_SPI_Init()
377 … hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_Init()
378 … hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_Init()
379 … hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_Init()
380 … hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_Init()
381 … hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_Init()
382 … hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_Init()
383 … hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_Init()
384 … hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_Init()
386 if (hspi->MspInitCallback == NULL) in HAL_SPI_Init()
388 hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_Init()
392 hspi->MspInitCallback(hspi); in HAL_SPI_Init()
395 HAL_SPI_MspInit(hspi); in HAL_SPI_Init()
399 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_Init()
402 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Init()
405 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Init()
415 if ((hspi->Init.DataSize != SPI_DATASIZE_16BIT) && (hspi->Init.DataSize != SPI_DATASIZE_8BIT)) in HAL_SPI_Init()
418 hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; in HAL_SPI_Init()
424 WRITE_REG(hspi->Instance->CR1, ((hspi->Init.Mode & (SPI_CR1_MSTR | SPI_CR1_SSI)) | in HAL_SPI_Init()
425 (hspi->Init.Direction & (SPI_CR1_RXONLY | SPI_CR1_BIDIMODE)) | in HAL_SPI_Init()
426 (hspi->Init.CLKPolarity & SPI_CR1_CPOL) | in HAL_SPI_Init()
427 (hspi->Init.CLKPhase & SPI_CR1_CPHA) | in HAL_SPI_Init()
428 (hspi->Init.NSS & SPI_CR1_SSM) | in HAL_SPI_Init()
429 (hspi->Init.BaudRatePrescaler & SPI_CR1_BR_Msk) | in HAL_SPI_Init()
430 (hspi->Init.FirstBit & SPI_CR1_LSBFIRST) | in HAL_SPI_Init()
431 (hspi->Init.CRCCalculation & SPI_CR1_CRCEN))); in HAL_SPI_Init()
434 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
437 if (hspi->Init.CRCLength == SPI_CRC_LENGTH_DATASIZE) in HAL_SPI_Init()
440 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Init()
442 hspi->Init.CRCLength = SPI_CRC_LENGTH_16BIT; in HAL_SPI_Init()
446 hspi->Init.CRCLength = SPI_CRC_LENGTH_8BIT; in HAL_SPI_Init()
451 if (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT) in HAL_SPI_Init()
453 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCL); in HAL_SPI_Init()
459 WRITE_REG(hspi->Instance->CR2, (((hspi->Init.NSS >> 16U) & SPI_CR2_SSOE) | in HAL_SPI_Init()
460 (hspi->Init.TIMode & SPI_CR2_FRF) | in HAL_SPI_Init()
461 (hspi->Init.NSSPMode & SPI_CR2_NSSP) | in HAL_SPI_Init()
462 (hspi->Init.DataSize & SPI_CR2_DS_Msk) | in HAL_SPI_Init()
468 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
470 WRITE_REG(hspi->Instance->CRCPR, (hspi->Init.CRCPolynomial & SPI_CRCPR_CRCPOLY_Msk)); in HAL_SPI_Init()
476 CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); in HAL_SPI_Init()
479 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Init()
480 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Init()
491 HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_DeInit() argument
494 if (hspi == NULL) in HAL_SPI_DeInit()
500 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_DeInit()
502 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_DeInit()
505 __HAL_SPI_DISABLE(hspi); in HAL_SPI_DeInit()
508 if (hspi->MspDeInitCallback == NULL) in HAL_SPI_DeInit()
510 hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_DeInit()
514 hspi->MspDeInitCallback(hspi); in HAL_SPI_DeInit()
517 HAL_SPI_MspDeInit(hspi); in HAL_SPI_DeInit()
520 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_DeInit()
521 hspi->State = HAL_SPI_STATE_RESET; in HAL_SPI_DeInit()
524 __HAL_UNLOCK(hspi); in HAL_SPI_DeInit()
535 __weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspInit() argument
538 UNUSED(hspi); in HAL_SPI_MspInit()
551 __weak void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspDeInit() argument
554 UNUSED(hspi); in HAL_SPI_MspDeInit()
571 HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Callb… in HAL_SPI_RegisterCallback() argument
579 hspi->ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK; in HAL_SPI_RegisterCallback()
584 __HAL_LOCK(hspi); in HAL_SPI_RegisterCallback()
586 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_RegisterCallback()
591 hspi->TxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
595 hspi->RxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
599 hspi->TxRxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
603 hspi->TxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
607 hspi->RxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
611 hspi->TxRxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
615 hspi->ErrorCallback = pCallback; in HAL_SPI_RegisterCallback()
619 hspi->AbortCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
623 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
627 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
632 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
639 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_RegisterCallback()
644 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
648 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
653 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
663 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
670 __HAL_UNLOCK(hspi); in HAL_SPI_RegisterCallback()
682 HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Cal… in HAL_SPI_UnRegisterCallback() argument
687 __HAL_LOCK(hspi); in HAL_SPI_UnRegisterCallback()
689 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_UnRegisterCallback()
694 … hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_UnRegisterCallback()
698 … hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_UnRegisterCallback()
702 … hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_UnRegisterCallback()
706 … hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
710 … hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
714 … hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
718 … hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_UnRegisterCallback()
722 … hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_UnRegisterCallback()
726 … hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
730 … hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
735 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
742 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_UnRegisterCallback()
747 … hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
751 … hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
756 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
766 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
773 __HAL_UNLOCK(hspi); in HAL_SPI_UnRegisterCallback()
823 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size, ui… in HAL_SPI_Transmit() argument
829 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); in HAL_SPI_Transmit()
835 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit()
846 __HAL_LOCK(hspi); in HAL_SPI_Transmit()
849 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit()
850 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit()
851 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit()
852 hspi->TxXferSize = Size; in HAL_SPI_Transmit()
853 hspi->TxXferCount = Size; in HAL_SPI_Transmit()
856 hspi->pRxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Transmit()
857 hspi->RxXferSize = 0U; in HAL_SPI_Transmit()
858 hspi->RxXferCount = 0U; in HAL_SPI_Transmit()
859 hspi->TxISR = NULL; in HAL_SPI_Transmit()
860 hspi->RxISR = NULL; in HAL_SPI_Transmit()
863 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit()
866 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Transmit()
867 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit()
872 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Transmit()
874 SPI_RESET_CRC(hspi); in HAL_SPI_Transmit()
879 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Transmit()
882 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit()
886 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit()
888 if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) in HAL_SPI_Transmit()
890 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
891 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
892 hspi->TxXferCount--; in HAL_SPI_Transmit()
895 while (hspi->TxXferCount > 0U) in HAL_SPI_Transmit()
898 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) in HAL_SPI_Transmit()
900 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
901 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
902 hspi->TxXferCount--; in HAL_SPI_Transmit()
909 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
910 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
919 if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) in HAL_SPI_Transmit()
921 if (hspi->TxXferCount > 1U) in HAL_SPI_Transmit()
924 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
925 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
926 hspi->TxXferCount -= 2U; in HAL_SPI_Transmit()
930 *((__IO uint8_t *)&hspi->Instance->DR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
931 hspi->pTxBuffPtr ++; in HAL_SPI_Transmit()
932 hspi->TxXferCount--; in HAL_SPI_Transmit()
935 while (hspi->TxXferCount > 0U) in HAL_SPI_Transmit()
938 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) in HAL_SPI_Transmit()
940 if (hspi->TxXferCount > 1U) in HAL_SPI_Transmit()
943 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
944 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
945 hspi->TxXferCount -= 2U; in HAL_SPI_Transmit()
949 *((__IO uint8_t *)&hspi->Instance->DR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
950 hspi->pTxBuffPtr++; in HAL_SPI_Transmit()
951 hspi->TxXferCount--; in HAL_SPI_Transmit()
959 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
960 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
968 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Transmit()
970 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_Transmit()
975 if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) in HAL_SPI_Transmit()
977 hspi->ErrorCode = HAL_SPI_ERROR_FLAG; in HAL_SPI_Transmit()
981 if (hspi->Init.Direction == SPI_DIRECTION_2LINES) in HAL_SPI_Transmit()
983 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_Transmit()
986 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
988 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
990 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Transmit()
1009 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SPI_Receive() argument
1018 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive()
1028 if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES)) in HAL_SPI_Receive()
1030 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive()
1032 return HAL_SPI_TransmitReceive(hspi, pData, pData, Size, Timeout); in HAL_SPI_Receive()
1039 __HAL_LOCK(hspi); in HAL_SPI_Receive()
1042 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive()
1043 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive()
1044 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive()
1045 hspi->RxXferSize = Size; in HAL_SPI_Receive()
1046 hspi->RxXferCount = Size; in HAL_SPI_Receive()
1049 hspi->pTxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Receive()
1050 hspi->TxXferSize = 0U; in HAL_SPI_Receive()
1051 hspi->TxXferCount = 0U; in HAL_SPI_Receive()
1052 hspi->RxISR = NULL; in HAL_SPI_Receive()
1053 hspi->TxISR = NULL; in HAL_SPI_Receive()
1057 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive()
1059 SPI_RESET_CRC(hspi); in HAL_SPI_Receive()
1061 hspi->RxXferCount--; in HAL_SPI_Receive()
1066 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive()
1069 CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_Receive()
1074 SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_Receive()
1078 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive()
1081 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Receive()
1082 SPI_1LINE_RX(hspi); in HAL_SPI_Receive()
1086 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Receive()
1089 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive()
1093 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Receive()
1096 while (hspi->RxXferCount > 0U) in HAL_SPI_Receive()
1099 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) in HAL_SPI_Receive()
1102 (* (uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; in HAL_SPI_Receive()
1103 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1104 hspi->RxXferCount--; in HAL_SPI_Receive()
1111 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1112 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1121 while (hspi->RxXferCount > 0U) in HAL_SPI_Receive()
1124 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) in HAL_SPI_Receive()
1126 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; in HAL_SPI_Receive()
1127 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_Receive()
1128 hspi->RxXferCount--; in HAL_SPI_Receive()
1135 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1136 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1145 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive()
1148 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_Receive()
1151 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1154 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1159 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive()
1161 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; in HAL_SPI_Receive()
1166 (*(uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; in HAL_SPI_Receive()
1170 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1172 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_Receive()
1173 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1174 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1179 if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) in HAL_SPI_Receive()
1182 tmpreg = READ_REG(hspi->Instance->DR); in HAL_SPI_Receive()
1189 ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; in HAL_SPI_Receive()
1195 … if ((hspi->Init.DataSize == SPI_DATASIZE_8BIT) && (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT)) in HAL_SPI_Receive()
1197 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1200 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_Receive()
1201 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1202 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1215 if (SPI_EndRxTransaction(hspi, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1217 hspi->ErrorCode = HAL_SPI_ERROR_FLAG; in HAL_SPI_Receive()
1222 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) in HAL_SPI_Receive()
1224 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_Receive()
1225 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in HAL_SPI_Receive()
1229 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1231 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1232 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Receive()
1252 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t … in HAL_SPI_TransmitReceive() argument
1272 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive()
1278 tmp_state = hspi->State; in HAL_SPI_TransmitReceive()
1279 tmp_mode = hspi->Init.Mode; in HAL_SPI_TransmitReceive()
1283 spi_cr1 = READ_REG(hspi->Instance->CR1); in HAL_SPI_TransmitReceive()
1284 spi_cr2 = READ_REG(hspi->Instance->CR2); in HAL_SPI_TransmitReceive()
1288 ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && in HAL_SPI_TransmitReceive()
1300 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive()
1303 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in HAL_SPI_TransmitReceive()
1305 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive()
1309 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive()
1310 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive()
1311 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive()
1312 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive()
1313 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive()
1314 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive()
1315 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive()
1318 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive()
1319 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive()
1323 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_TransmitReceive()
1325 SPI_RESET_CRC(hspi); in HAL_SPI_TransmitReceive()
1330 if ((hspi->Init.DataSize > SPI_DATASIZE_8BIT) || (initial_RxXferCount > 1U)) in HAL_SPI_TransmitReceive()
1333 CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_TransmitReceive()
1338 SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_TransmitReceive()
1342 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_TransmitReceive()
1345 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive()
1349 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive()
1351 if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) in HAL_SPI_TransmitReceive()
1353 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1354 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1355 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1359 if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in HAL_SPI_TransmitReceive()
1364 SET_BIT(hspi->Instance->CR1, SPI_CR1_SSM); in HAL_SPI_TransmitReceive()
1366 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_TransmitReceive()
1371 while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) in HAL_SPI_TransmitReceive()
1374 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) in HAL_SPI_TransmitReceive()
1376 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1377 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1378 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1384 if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in HAL_SPI_TransmitReceive()
1389 SET_BIT(hspi->Instance->CR1, SPI_CR1_SSM); in HAL_SPI_TransmitReceive()
1391 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_TransmitReceive()
1397 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) in HAL_SPI_TransmitReceive()
1399 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; in HAL_SPI_TransmitReceive()
1400 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1401 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1407 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1408 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1416 if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) in HAL_SPI_TransmitReceive()
1418 if (hspi->TxXferCount > 1U) in HAL_SPI_TransmitReceive()
1420 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1421 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1422 hspi->TxXferCount -= 2U; in HAL_SPI_TransmitReceive()
1426 *(__IO uint8_t *)&hspi->Instance->DR = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1427 hspi->pTxBuffPtr++; in HAL_SPI_TransmitReceive()
1428 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1432 if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in HAL_SPI_TransmitReceive()
1437 SET_BIT(hspi->Instance->CR1, SPI_CR1_SSM); in HAL_SPI_TransmitReceive()
1439 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_TransmitReceive()
1444 while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) in HAL_SPI_TransmitReceive()
1447 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) in HAL_SPI_TransmitReceive()
1449 if (hspi->TxXferCount > 1U) in HAL_SPI_TransmitReceive()
1451 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1452 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1453 hspi->TxXferCount -= 2U; in HAL_SPI_TransmitReceive()
1457 *(__IO uint8_t *)&hspi->Instance->DR = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1458 hspi->pTxBuffPtr++; in HAL_SPI_TransmitReceive()
1459 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1466 if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in HAL_SPI_TransmitReceive()
1471 SET_BIT(hspi->Instance->CR1, SPI_CR1_SSM); in HAL_SPI_TransmitReceive()
1473 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_TransmitReceive()
1479 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) in HAL_SPI_TransmitReceive()
1481 if (hspi->RxXferCount > 1U) in HAL_SPI_TransmitReceive()
1483 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; in HAL_SPI_TransmitReceive()
1484 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1485 hspi->RxXferCount -= 2U; in HAL_SPI_TransmitReceive()
1486 if (hspi->RxXferCount <= 1U) in HAL_SPI_TransmitReceive()
1489 SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_TransmitReceive()
1494 (*(uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; in HAL_SPI_TransmitReceive()
1495 hspi->pRxBuffPtr++; in HAL_SPI_TransmitReceive()
1496 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1503 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1504 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1512 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_TransmitReceive()
1515 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) in HAL_SPI_TransmitReceive()
1518 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_TransmitReceive()
1519 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1520 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1524 if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive()
1527 tmpreg = READ_REG(hspi->Instance->DR); in HAL_SPI_TransmitReceive()
1534 ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; in HAL_SPI_TransmitReceive()
1540 if (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT) in HAL_SPI_TransmitReceive()
1542 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) in HAL_SPI_TransmitReceive()
1545 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_TransmitReceive()
1546 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1547 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1559 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) in HAL_SPI_TransmitReceive()
1561 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_TransmitReceive()
1563 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in HAL_SPI_TransmitReceive()
1564 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1570 if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) in HAL_SPI_TransmitReceive()
1572 hspi->ErrorCode = HAL_SPI_ERROR_FLAG; in HAL_SPI_TransmitReceive()
1573 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1578 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1580 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1582 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_TransmitReceive()
1600 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_IT() argument
1604 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); in HAL_SPI_Transmit_IT()
1612 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_IT()
1618 __HAL_LOCK(hspi); in HAL_SPI_Transmit_IT()
1621 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_IT()
1622 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_IT()
1623 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_IT()
1624 hspi->TxXferSize = Size; in HAL_SPI_Transmit_IT()
1625 hspi->TxXferCount = Size; in HAL_SPI_Transmit_IT()
1628 hspi->pRxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Transmit_IT()
1629 hspi->RxXferSize = 0U; in HAL_SPI_Transmit_IT()
1630 hspi->RxXferCount = 0U; in HAL_SPI_Transmit_IT()
1631 hspi->RxISR = NULL; in HAL_SPI_Transmit_IT()
1634 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_IT()
1636 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_Transmit_IT()
1640 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_Transmit_IT()
1644 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_IT()
1647 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Transmit_IT()
1648 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_IT()
1653 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Transmit_IT()
1655 SPI_RESET_CRC(hspi); in HAL_SPI_Transmit_IT()
1660 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Transmit_IT()
1663 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_IT()
1667 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1669 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); in HAL_SPI_Transmit_IT()
1682 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_IT() argument
1685 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_IT()
1695 if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive_IT()
1697 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_IT()
1699 return HAL_SPI_TransmitReceive_IT(hspi, pData, pData, Size); in HAL_SPI_Receive_IT()
1704 __HAL_LOCK(hspi); in HAL_SPI_Receive_IT()
1707 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_IT()
1708 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_IT()
1709 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_IT()
1710 hspi->RxXferSize = Size; in HAL_SPI_Receive_IT()
1711 hspi->RxXferCount = Size; in HAL_SPI_Receive_IT()
1714 hspi->pTxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Receive_IT()
1715 hspi->TxXferSize = 0U; in HAL_SPI_Receive_IT()
1716 hspi->TxXferCount = 0U; in HAL_SPI_Receive_IT()
1717 hspi->TxISR = NULL; in HAL_SPI_Receive_IT()
1720 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive_IT()
1723 CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_Receive_IT()
1724 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_Receive_IT()
1729 SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_Receive_IT()
1730 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_Receive_IT()
1734 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_IT()
1737 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Receive_IT()
1738 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_IT()
1743 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive_IT()
1745 hspi->CRCSize = 1U; in HAL_SPI_Receive_IT()
1746 … if ((hspi->Init.DataSize <= SPI_DATASIZE_8BIT) && (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT)) in HAL_SPI_Receive_IT()
1748 hspi->CRCSize = 2U; in HAL_SPI_Receive_IT()
1750 SPI_RESET_CRC(hspi); in HAL_SPI_Receive_IT()
1754 hspi->CRCSize = 0U; in HAL_SPI_Receive_IT()
1763 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Receive_IT()
1766 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_IT()
1770 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1772 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in HAL_SPI_Receive_IT()
1786 HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8… in HAL_SPI_TransmitReceive_IT() argument
1793 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_IT()
1796 tmp_state = hspi->State; in HAL_SPI_TransmitReceive_IT()
1797 tmp_mode = hspi->Init.Mode; in HAL_SPI_TransmitReceive_IT()
1800 ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && in HAL_SPI_TransmitReceive_IT()
1812 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1815 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in HAL_SPI_TransmitReceive_IT()
1817 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_IT()
1821 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_IT()
1822 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_IT()
1823 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1824 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1825 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_IT()
1826 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1827 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1830 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1832 hspi->RxISR = SPI_2linesRxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1833 hspi->TxISR = SPI_2linesTxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1837 hspi->RxISR = SPI_2linesRxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1838 hspi->TxISR = SPI_2linesTxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1843 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_TransmitReceive_IT()
1845 hspi->CRCSize = 1U; in HAL_SPI_TransmitReceive_IT()
1846 … if ((hspi->Init.DataSize <= SPI_DATASIZE_8BIT) && (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT)) in HAL_SPI_TransmitReceive_IT()
1848 hspi->CRCSize = 2U; in HAL_SPI_TransmitReceive_IT()
1850 SPI_RESET_CRC(hspi); in HAL_SPI_TransmitReceive_IT()
1854 hspi->CRCSize = 0U; in HAL_SPI_TransmitReceive_IT()
1859 if ((hspi->Init.DataSize > SPI_DATASIZE_8BIT) || (Size >= 2U)) in HAL_SPI_TransmitReceive_IT()
1862 CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_TransmitReceive_IT()
1867 SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_TransmitReceive_IT()
1872 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_TransmitReceive_IT()
1875 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_IT()
1879 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1881 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); in HAL_SPI_TransmitReceive_IT()
1894 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_DMA() argument
1898 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); in HAL_SPI_Transmit_DMA()
1901 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); in HAL_SPI_Transmit_DMA()
1903 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_DMA()
1914 __HAL_LOCK(hspi); in HAL_SPI_Transmit_DMA()
1917 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_DMA()
1918 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_DMA()
1919 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_DMA()
1920 hspi->TxXferSize = Size; in HAL_SPI_Transmit_DMA()
1921 hspi->TxXferCount = Size; in HAL_SPI_Transmit_DMA()
1924 hspi->pRxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Transmit_DMA()
1925 hspi->TxISR = NULL; in HAL_SPI_Transmit_DMA()
1926 hspi->RxISR = NULL; in HAL_SPI_Transmit_DMA()
1927 hspi->RxXferSize = 0U; in HAL_SPI_Transmit_DMA()
1928 hspi->RxXferCount = 0U; in HAL_SPI_Transmit_DMA()
1931 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_DMA()
1934 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Transmit_DMA()
1935 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_DMA()
1940 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Transmit_DMA()
1942 SPI_RESET_CRC(hspi); in HAL_SPI_Transmit_DMA()
1947 hspi->hdmatx->XferHalfCpltCallback = SPI_DMAHalfTransmitCplt; in HAL_SPI_Transmit_DMA()
1950 hspi->hdmatx->XferCpltCallback = SPI_DMATransmitCplt; in HAL_SPI_Transmit_DMA()
1953 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Transmit_DMA()
1956 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Transmit_DMA()
1958 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); in HAL_SPI_Transmit_DMA()
1960 …if ((hspi->Init.DataSize <= SPI_DATASIZE_8BIT) && (hspi->hdmatx->Init.MemDataAlignment == DMA_MDAT… in HAL_SPI_Transmit_DMA()
1963 if ((hspi->TxXferCount & 0x1U) == 0U) in HAL_SPI_Transmit_DMA()
1965 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); in HAL_SPI_Transmit_DMA()
1966 hspi->TxXferCount = (hspi->TxXferCount >> 1U); in HAL_SPI_Transmit_DMA()
1970 SET_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); in HAL_SPI_Transmit_DMA()
1971 hspi->TxXferCount = (hspi->TxXferCount >> 1U) + 1U; in HAL_SPI_Transmit_DMA()
1976 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance… in HAL_SPI_Transmit_DMA()
1977 hspi->TxXferCount)) in HAL_SPI_Transmit_DMA()
1980 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Transmit_DMA()
1982 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1987 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Transmit_DMA()
1990 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_DMA()
1994 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1997 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); in HAL_SPI_Transmit_DMA()
2000 SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); in HAL_SPI_Transmit_DMA()
2015 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_DMA() argument
2018 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); in HAL_SPI_Receive_DMA()
2020 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_DMA()
2030 if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive_DMA()
2032 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_DMA()
2035 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); in HAL_SPI_Receive_DMA()
2038 return HAL_SPI_TransmitReceive_DMA(hspi, pData, pData, Size); in HAL_SPI_Receive_DMA()
2042 __HAL_LOCK(hspi); in HAL_SPI_Receive_DMA()
2045 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_DMA()
2046 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_DMA()
2047 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_DMA()
2048 hspi->RxXferSize = Size; in HAL_SPI_Receive_DMA()
2049 hspi->RxXferCount = Size; in HAL_SPI_Receive_DMA()
2052 hspi->RxISR = NULL; in HAL_SPI_Receive_DMA()
2053 hspi->TxISR = NULL; in HAL_SPI_Receive_DMA()
2054 hspi->TxXferSize = 0U; in HAL_SPI_Receive_DMA()
2055 hspi->TxXferCount = 0U; in HAL_SPI_Receive_DMA()
2058 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_DMA()
2061 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Receive_DMA()
2062 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_DMA()
2067 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive_DMA()
2069 SPI_RESET_CRC(hspi); in HAL_SPI_Receive_DMA()
2074 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); in HAL_SPI_Receive_DMA()
2075 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive_DMA()
2078 CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_Receive_DMA()
2083 SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_Receive_DMA()
2085 if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) in HAL_SPI_Receive_DMA()
2088 CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_Receive_DMA()
2090 if ((hspi->RxXferCount & 0x1U) == 0x0U) in HAL_SPI_Receive_DMA()
2092 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); in HAL_SPI_Receive_DMA()
2093 hspi->RxXferCount = hspi->RxXferCount >> 1U; in HAL_SPI_Receive_DMA()
2097 SET_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); in HAL_SPI_Receive_DMA()
2098 hspi->RxXferCount = (hspi->RxXferCount >> 1U) + 1U; in HAL_SPI_Receive_DMA()
2104 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; in HAL_SPI_Receive_DMA()
2107 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; in HAL_SPI_Receive_DMA()
2110 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Receive_DMA()
2113 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Receive_DMA()
2116 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->DR, (uint32_t)hspi->pRxBuf… in HAL_SPI_Receive_DMA()
2117 hspi->RxXferCount)) in HAL_SPI_Receive_DMA()
2120 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Receive_DMA()
2122 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2127 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Receive_DMA()
2130 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_DMA()
2134 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2137 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); in HAL_SPI_Receive_DMA()
2140 SET_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); in HAL_SPI_Receive_DMA()
2155 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint… in HAL_SPI_TransmitReceive_DMA() argument
2162 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); in HAL_SPI_TransmitReceive_DMA()
2163 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); in HAL_SPI_TransmitReceive_DMA()
2166 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_DMA()
2169 tmp_state = hspi->State; in HAL_SPI_TransmitReceive_DMA()
2170 tmp_mode = hspi->Init.Mode; in HAL_SPI_TransmitReceive_DMA()
2173 ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && in HAL_SPI_TransmitReceive_DMA()
2185 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2188 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in HAL_SPI_TransmitReceive_DMA()
2190 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_DMA()
2194 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_DMA()
2195 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_DMA()
2196 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2197 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2198 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_DMA()
2199 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2200 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2203 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2204 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2208 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_TransmitReceive_DMA()
2210 SPI_RESET_CRC(hspi); in HAL_SPI_TransmitReceive_DMA()
2215 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX | SPI_CR2_LDMARX); in HAL_SPI_TransmitReceive_DMA()
2218 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2221 CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_TransmitReceive_DMA()
2226 SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_TransmitReceive_DMA()
2228 if (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2230 if ((hspi->TxXferSize & 0x1U) == 0x0U) in HAL_SPI_TransmitReceive_DMA()
2232 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); in HAL_SPI_TransmitReceive_DMA()
2233 hspi->TxXferCount = hspi->TxXferCount >> 1U; in HAL_SPI_TransmitReceive_DMA()
2237 SET_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX); in HAL_SPI_TransmitReceive_DMA()
2238 hspi->TxXferCount = (hspi->TxXferCount >> 1U) + 1U; in HAL_SPI_TransmitReceive_DMA()
2242 if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2245 CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in HAL_SPI_TransmitReceive_DMA()
2247 if ((hspi->RxXferCount & 0x1U) == 0x0U) in HAL_SPI_TransmitReceive_DMA()
2249 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); in HAL_SPI_TransmitReceive_DMA()
2250 hspi->RxXferCount = hspi->RxXferCount >> 1U; in HAL_SPI_TransmitReceive_DMA()
2254 SET_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); in HAL_SPI_TransmitReceive_DMA()
2255 hspi->RxXferCount = (hspi->RxXferCount >> 1U) + 1U; in HAL_SPI_TransmitReceive_DMA()
2261 if (hspi->State == HAL_SPI_STATE_BUSY_RX) in HAL_SPI_TransmitReceive_DMA()
2264 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2265 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2270 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfTransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2271 hspi->hdmarx->XferCpltCallback = SPI_DMATransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2275 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
2278 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2281 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->DR, (uint32_t)hspi->pRxBuf… in HAL_SPI_TransmitReceive_DMA()
2282 hspi->RxXferCount)) in HAL_SPI_TransmitReceive_DMA()
2285 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2287 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2292 SET_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2296 hspi->hdmatx->XferHalfCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2297 hspi->hdmatx->XferCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2298 hspi->hdmatx->XferErrorCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2299 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2302 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance… in HAL_SPI_TransmitReceive_DMA()
2303 hspi->TxXferCount)) in HAL_SPI_TransmitReceive_DMA()
2306 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2308 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2313 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_TransmitReceive_DMA()
2316 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_DMA()
2320 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2323 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); in HAL_SPI_TransmitReceive_DMA()
2326 SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2344 HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort() argument
2356 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_ERRIE); in HAL_SPI_Abort()
2359 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)) in HAL_SPI_Abort()
2361 hspi->TxISR = SPI_AbortTx_ISR; in HAL_SPI_Abort()
2367 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2371 } while (hspi->State != HAL_SPI_STATE_ABORT); in HAL_SPI_Abort()
2376 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) in HAL_SPI_Abort()
2378 hspi->RxISR = SPI_AbortRx_ISR; in HAL_SPI_Abort()
2384 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2388 } while (hspi->State != HAL_SPI_STATE_ABORT); in HAL_SPI_Abort()
2394 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) in HAL_SPI_Abort()
2397 if (hspi->hdmatx != NULL) in HAL_SPI_Abort()
2401 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2404 if (HAL_DMA_Abort(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort()
2406 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2410 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXDMAEN)); in HAL_SPI_Abort()
2412 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) in HAL_SPI_Abort()
2414 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2418 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Abort()
2421 if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, in HAL_SPI_Abort()
2424 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2430 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) in HAL_SPI_Abort()
2433 if (hspi->hdmarx != NULL) in HAL_SPI_Abort()
2437 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2440 if (HAL_DMA_Abort(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort()
2442 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2446 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Abort()
2449 …if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) !… in HAL_SPI_Abort()
2451 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2455 if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, in HAL_SPI_Abort()
2458 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2462 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_RXDMAEN)); in HAL_SPI_Abort()
2466 hspi->RxXferCount = 0U; in HAL_SPI_Abort()
2467 hspi->TxXferCount = 0U; in HAL_SPI_Abort()
2470 if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) in HAL_SPI_Abort()
2478 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort()
2482 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_Abort()
2483 __HAL_SPI_CLEAR_FREFLAG(hspi); in HAL_SPI_Abort()
2486 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort()
2506 HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort_IT() argument
2520 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_ERRIE); in HAL_SPI_Abort_IT()
2523 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)) in HAL_SPI_Abort_IT()
2525 hspi->TxISR = SPI_AbortTx_ISR; in HAL_SPI_Abort_IT()
2531 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2535 } while (hspi->State != HAL_SPI_STATE_ABORT); in HAL_SPI_Abort_IT()
2540 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) in HAL_SPI_Abort_IT()
2542 hspi->RxISR = SPI_AbortRx_ISR; in HAL_SPI_Abort_IT()
2548 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2552 } while (hspi->State != HAL_SPI_STATE_ABORT); in HAL_SPI_Abort_IT()
2560 if (hspi->hdmatx != NULL) in HAL_SPI_Abort_IT()
2564 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) in HAL_SPI_Abort_IT()
2566 hspi->hdmatx->XferAbortCallback = SPI_DMATxAbortCallback; in HAL_SPI_Abort_IT()
2570 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2574 if (hspi->hdmarx != NULL) in HAL_SPI_Abort_IT()
2578 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) in HAL_SPI_Abort_IT()
2580 hspi->hdmarx->XferAbortCallback = SPI_DMARxAbortCallback; in HAL_SPI_Abort_IT()
2584 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2589 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) in HAL_SPI_Abort_IT()
2592 if (hspi->hdmatx != NULL) in HAL_SPI_Abort_IT()
2595 if (HAL_DMA_Abort_IT(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort_IT()
2597 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2598 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort_IT()
2607 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) in HAL_SPI_Abort_IT()
2610 if (hspi->hdmarx != NULL) in HAL_SPI_Abort_IT()
2613 if (HAL_DMA_Abort_IT(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort_IT()
2615 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2616 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort_IT()
2628 hspi->RxXferCount = 0U; in HAL_SPI_Abort_IT()
2629 hspi->TxXferCount = 0U; in HAL_SPI_Abort_IT()
2632 if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) in HAL_SPI_Abort_IT()
2640 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort_IT()
2644 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_Abort_IT()
2645 __HAL_SPI_CLEAR_FREFLAG(hspi); in HAL_SPI_Abort_IT()
2648 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort_IT()
2652 hspi->AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2654 HAL_SPI_AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2667 HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAPause() argument
2670 __HAL_LOCK(hspi); in HAL_SPI_DMAPause()
2673 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in HAL_SPI_DMAPause()
2676 __HAL_UNLOCK(hspi); in HAL_SPI_DMAPause()
2687 HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAResume() argument
2690 __HAL_LOCK(hspi); in HAL_SPI_DMAResume()
2693 SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in HAL_SPI_DMAResume()
2696 __HAL_UNLOCK(hspi); in HAL_SPI_DMAResume()
2707 HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAStop() argument
2719 if (hspi->hdmatx != NULL) in HAL_SPI_DMAStop()
2721 if (HAL_OK != HAL_DMA_Abort(hspi->hdmatx)) in HAL_SPI_DMAStop()
2723 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_DMAStop()
2728 if (hspi->hdmarx != NULL) in HAL_SPI_DMAStop()
2730 if (HAL_OK != HAL_DMA_Abort(hspi->hdmarx)) in HAL_SPI_DMAStop()
2732 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_DMAStop()
2738 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in HAL_SPI_DMAStop()
2739 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_DMAStop()
2749 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) in HAL_SPI_IRQHandler() argument
2751 uint32_t itsource = hspi->Instance->CR2; in HAL_SPI_IRQHandler()
2752 uint32_t itflag = hspi->Instance->SR; in HAL_SPI_IRQHandler()
2758 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
2765 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
2776 if (hspi->State != HAL_SPI_STATE_BUSY_TX) in HAL_SPI_IRQHandler()
2778 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in HAL_SPI_IRQHandler()
2779 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_IRQHandler()
2783 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_IRQHandler()
2791 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in HAL_SPI_IRQHandler()
2792 __HAL_SPI_CLEAR_MODFFLAG(hspi); in HAL_SPI_IRQHandler()
2798 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); in HAL_SPI_IRQHandler()
2799 __HAL_SPI_CLEAR_FREFLAG(hspi); in HAL_SPI_IRQHandler()
2802 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
2805 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE | SPI_IT_TXE | SPI_IT_ERR); in HAL_SPI_IRQHandler()
2807 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
2811 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN)); in HAL_SPI_IRQHandler()
2814 if (hspi->hdmarx != NULL) in HAL_SPI_IRQHandler()
2818 hspi->hdmarx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
2819 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmarx)) in HAL_SPI_IRQHandler()
2821 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
2825 if (hspi->hdmatx != NULL) in HAL_SPI_IRQHandler()
2829 hspi->hdmatx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
2830 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmatx)) in HAL_SPI_IRQHandler()
2832 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
2840 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2842 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2856 __weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxCpltCallback() argument
2859 UNUSED(hspi); in HAL_SPI_TxCpltCallback()
2872 __weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_RxCpltCallback() argument
2875 UNUSED(hspi); in HAL_SPI_RxCpltCallback()
2888 __weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxRxCpltCallback() argument
2891 UNUSED(hspi); in HAL_SPI_TxRxCpltCallback()
2904 __weak void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxHalfCpltCallback() argument
2907 UNUSED(hspi); in HAL_SPI_TxHalfCpltCallback()
2920 __weak void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_RxHalfCpltCallback() argument
2923 UNUSED(hspi); in HAL_SPI_RxHalfCpltCallback()
2936 __weak void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxRxHalfCpltCallback() argument
2939 UNUSED(hspi); in HAL_SPI_TxRxHalfCpltCallback()
2952 __weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_ErrorCallback() argument
2955 UNUSED(hspi); in HAL_SPI_ErrorCallback()
2970 __weak void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_AbortCpltCallback() argument
2973 UNUSED(hspi); in HAL_SPI_AbortCpltCallback()
3005 HAL_SPI_StateTypeDef HAL_SPI_GetState(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetState() argument
3008 return hspi->State; in HAL_SPI_GetState()
3017 uint32_t HAL_SPI_GetError(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetError() argument
3020 return hspi->ErrorCode; in HAL_SPI_GetError()
3044 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMATransmitCplt() local
3054 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); in SPI_DMATransmitCplt()
3057 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); in SPI_DMATransmitCplt()
3060 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_DMATransmitCplt()
3062 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_DMATransmitCplt()
3066 if (hspi->Init.Direction == SPI_DIRECTION_2LINES) in SPI_DMATransmitCplt()
3068 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_DMATransmitCplt()
3071 hspi->TxXferCount = 0U; in SPI_DMATransmitCplt()
3072 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATransmitCplt()
3074 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in SPI_DMATransmitCplt()
3078 hspi->ErrorCallback(hspi); in SPI_DMATransmitCplt()
3080 HAL_SPI_ErrorCallback(hspi); in SPI_DMATransmitCplt()
3087 hspi->TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3089 HAL_SPI_TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3101 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAReceiveCplt() local
3116 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); in SPI_DMAReceiveCplt()
3120 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_DMAReceiveCplt()
3123 …if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL… in SPI_DMAReceiveCplt()
3126 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMAReceiveCplt()
3129 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in SPI_DMAReceiveCplt()
3132 tmpreg = READ_REG(hspi->Instance->DR); in SPI_DMAReceiveCplt()
3139 ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; in SPI_DMAReceiveCplt()
3145 if (hspi->Init.CRCLength == SPI_CRC_LENGTH_16BIT) in SPI_DMAReceiveCplt()
3147 …if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL… in SPI_DMAReceiveCplt()
3150 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMAReceiveCplt()
3162 if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) in SPI_DMAReceiveCplt()
3165 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in SPI_DMAReceiveCplt()
3170 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); in SPI_DMAReceiveCplt()
3174 if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_DMAReceiveCplt()
3176 hspi->ErrorCode = HAL_SPI_ERROR_FLAG; in SPI_DMAReceiveCplt()
3179 hspi->RxXferCount = 0U; in SPI_DMAReceiveCplt()
3180 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAReceiveCplt()
3184 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) in SPI_DMAReceiveCplt()
3186 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMAReceiveCplt()
3187 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_DMAReceiveCplt()
3191 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in SPI_DMAReceiveCplt()
3195 hspi->ErrorCallback(hspi); in SPI_DMAReceiveCplt()
3197 HAL_SPI_ErrorCallback(hspi); in SPI_DMAReceiveCplt()
3204 hspi->RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3206 HAL_SPI_RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3218 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMATransmitReceiveCplt() local
3233 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); in SPI_DMATransmitReceiveCplt()
3237 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_DMATransmitReceiveCplt()
3239 … if ((hspi->Init.DataSize == SPI_DATASIZE_8BIT) && (hspi->Init.CRCLength == SPI_CRC_LENGTH_8BIT)) in SPI_DMATransmitReceiveCplt()
3241 …if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_QUARTER_FULL, SPI_DEFAULT_TIMEOU… in SPI_DMATransmitReceiveCplt()
3245 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMATransmitReceiveCplt()
3248 ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; in SPI_DMATransmitReceiveCplt()
3256 … if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_HALF_FULL, SPI_DEFAULT_TIMEOUT, in SPI_DMATransmitReceiveCplt()
3260 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMATransmitReceiveCplt()
3263 tmpreg = READ_REG(hspi->Instance->DR); in SPI_DMATransmitReceiveCplt()
3271 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_DMATransmitReceiveCplt()
3273 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_DMATransmitReceiveCplt()
3277 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in SPI_DMATransmitReceiveCplt()
3279 hspi->TxXferCount = 0U; in SPI_DMATransmitReceiveCplt()
3280 hspi->RxXferCount = 0U; in SPI_DMATransmitReceiveCplt()
3281 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATransmitReceiveCplt()
3285 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR)) in SPI_DMATransmitReceiveCplt()
3287 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMATransmitReceiveCplt()
3288 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_DMATransmitReceiveCplt()
3292 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in SPI_DMATransmitReceiveCplt()
3296 hspi->ErrorCallback(hspi); in SPI_DMATransmitReceiveCplt()
3298 HAL_SPI_ErrorCallback(hspi); in SPI_DMATransmitReceiveCplt()
3305 hspi->TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3307 HAL_SPI_TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3319 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAHalfTransmitCplt() local
3323 hspi->TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3325 HAL_SPI_TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3337 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAHalfReceiveCplt() local
3341 hspi->RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3343 HAL_SPI_RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3355 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAHalfTransmitReceiveCplt() local
3359 hspi->TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3361 HAL_SPI_TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3373 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAError() local
3376 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in SPI_DMAError()
3378 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in SPI_DMAError()
3379 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAError()
3382 hspi->ErrorCallback(hspi); in SPI_DMAError()
3384 HAL_SPI_ErrorCallback(hspi); in SPI_DMAError()
3396 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAAbortOnError() local
3397 hspi->RxXferCount = 0U; in SPI_DMAAbortOnError()
3398 hspi->TxXferCount = 0U; in SPI_DMAAbortOnError()
3402 hspi->ErrorCallback(hspi); in SPI_DMAAbortOnError()
3404 HAL_SPI_ErrorCallback(hspi); in SPI_DMAAbortOnError()
3418 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMATxAbortCallback() local
3420 hspi->hdmatx->XferAbortCallback = NULL; in SPI_DMATxAbortCallback()
3423 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); in SPI_DMATxAbortCallback()
3425 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) in SPI_DMATxAbortCallback()
3427 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_DMATxAbortCallback()
3431 __HAL_SPI_DISABLE(hspi); in SPI_DMATxAbortCallback()
3434 if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, in SPI_DMATxAbortCallback()
3437 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_DMATxAbortCallback()
3441 if (hspi->hdmarx != NULL) in SPI_DMATxAbortCallback()
3443 if (hspi->hdmarx->XferAbortCallback != NULL) in SPI_DMATxAbortCallback()
3450 hspi->RxXferCount = 0U; in SPI_DMATxAbortCallback()
3451 hspi->TxXferCount = 0U; in SPI_DMATxAbortCallback()
3454 if (hspi->ErrorCode != HAL_SPI_ERROR_ABORT) in SPI_DMATxAbortCallback()
3457 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in SPI_DMATxAbortCallback()
3461 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_DMATxAbortCallback()
3462 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_DMATxAbortCallback()
3465 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATxAbortCallback()
3469 hspi->AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3471 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3485 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMARxAbortCallback() local
3488 __HAL_SPI_DISABLE(hspi); in SPI_DMARxAbortCallback()
3490 hspi->hdmarx->XferAbortCallback = NULL; in SPI_DMARxAbortCallback()
3493 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); in SPI_DMARxAbortCallback()
3496 …if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) !… in SPI_DMARxAbortCallback()
3498 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_DMARxAbortCallback()
3502 if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, in SPI_DMARxAbortCallback()
3505 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_DMARxAbortCallback()
3509 if (hspi->hdmatx != NULL) in SPI_DMARxAbortCallback()
3511 if (hspi->hdmatx->XferAbortCallback != NULL) in SPI_DMARxAbortCallback()
3518 hspi->RxXferCount = 0U; in SPI_DMARxAbortCallback()
3519 hspi->TxXferCount = 0U; in SPI_DMARxAbortCallback()
3522 if (hspi->ErrorCode != HAL_SPI_ERROR_ABORT) in SPI_DMARxAbortCallback()
3525 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in SPI_DMARxAbortCallback()
3529 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_DMARxAbortCallback()
3530 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_DMARxAbortCallback()
3533 hspi->State = HAL_SPI_STATE_READY; in SPI_DMARxAbortCallback()
3537 hspi->AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3539 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3549 static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi) in SPI_2linesRxISR_8BIT() argument
3552 if (hspi->RxXferCount > 1U) in SPI_2linesRxISR_8BIT()
3554 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); in SPI_2linesRxISR_8BIT()
3555 hspi->pRxBuffPtr += sizeof(uint16_t); in SPI_2linesRxISR_8BIT()
3556 hspi->RxXferCount -= 2U; in SPI_2linesRxISR_8BIT()
3557 if (hspi->RxXferCount == 1U) in SPI_2linesRxISR_8BIT()
3560 SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in SPI_2linesRxISR_8BIT()
3566 *hspi->pRxBuffPtr = *((__IO uint8_t *)&hspi->Instance->DR); in SPI_2linesRxISR_8BIT()
3567 hspi->pRxBuffPtr++; in SPI_2linesRxISR_8BIT()
3568 hspi->RxXferCount--; in SPI_2linesRxISR_8BIT()
3572 if (hspi->RxXferCount == 0U) in SPI_2linesRxISR_8BIT()
3575 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_2linesRxISR_8BIT()
3577 SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); in SPI_2linesRxISR_8BIT()
3578 hspi->RxISR = SPI_2linesRxISR_8BITCRC; in SPI_2linesRxISR_8BIT()
3584 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in SPI_2linesRxISR_8BIT()
3586 if (hspi->TxXferCount == 0U) in SPI_2linesRxISR_8BIT()
3588 SPI_CloseRxTx_ISR(hspi); in SPI_2linesRxISR_8BIT()
3600 static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) in SPI_2linesRxISR_8BITCRC() argument
3606 ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; in SPI_2linesRxISR_8BITCRC()
3612 hspi->CRCSize--; in SPI_2linesRxISR_8BITCRC()
3615 if (hspi->CRCSize == 0U) in SPI_2linesRxISR_8BITCRC()
3618 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in SPI_2linesRxISR_8BITCRC()
3620 if (hspi->TxXferCount == 0U) in SPI_2linesRxISR_8BITCRC()
3622 SPI_CloseRxTx_ISR(hspi); in SPI_2linesRxISR_8BITCRC()
3634 static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi) in SPI_2linesTxISR_8BIT() argument
3637 if (hspi->TxXferCount >= 2U) in SPI_2linesTxISR_8BIT()
3639 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_2linesTxISR_8BIT()
3640 hspi->pTxBuffPtr += sizeof(uint16_t); in SPI_2linesTxISR_8BIT()
3641 hspi->TxXferCount -= 2U; in SPI_2linesTxISR_8BIT()
3646 *(__IO uint8_t *)&hspi->Instance->DR = *((const uint8_t *)hspi->pTxBuffPtr); in SPI_2linesTxISR_8BIT()
3647 hspi->pTxBuffPtr++; in SPI_2linesTxISR_8BIT()
3648 hspi->TxXferCount--; in SPI_2linesTxISR_8BIT()
3652 if (hspi->TxXferCount == 0U) in SPI_2linesTxISR_8BIT()
3655 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_2linesTxISR_8BIT()
3658 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_2linesTxISR_8BIT()
3660 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); in SPI_2linesTxISR_8BIT()
3666 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); in SPI_2linesTxISR_8BIT()
3668 if (hspi->RxXferCount == 0U) in SPI_2linesTxISR_8BIT()
3670 SPI_CloseRxTx_ISR(hspi); in SPI_2linesTxISR_8BIT()
3681 static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi) in SPI_2linesRxISR_16BIT() argument
3684 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); in SPI_2linesRxISR_16BIT()
3685 hspi->pRxBuffPtr += sizeof(uint16_t); in SPI_2linesRxISR_16BIT()
3686 hspi->RxXferCount--; in SPI_2linesRxISR_16BIT()
3688 if (hspi->RxXferCount == 0U) in SPI_2linesRxISR_16BIT()
3691 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_2linesRxISR_16BIT()
3693 hspi->RxISR = SPI_2linesRxISR_16BITCRC; in SPI_2linesRxISR_16BIT()
3699 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE); in SPI_2linesRxISR_16BIT()
3701 if (hspi->TxXferCount == 0U) in SPI_2linesRxISR_16BIT()
3703 SPI_CloseRxTx_ISR(hspi); in SPI_2linesRxISR_16BIT()
3715 static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) in SPI_2linesRxISR_16BITCRC() argument
3720 tmpreg = READ_REG(hspi->Instance->DR); in SPI_2linesRxISR_16BITCRC()
3725 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE); in SPI_2linesRxISR_16BITCRC()
3727 SPI_CloseRxTx_ISR(hspi); in SPI_2linesRxISR_16BITCRC()
3737 static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi) in SPI_2linesTxISR_16BIT() argument
3740 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_2linesTxISR_16BIT()
3741 hspi->pTxBuffPtr += sizeof(uint16_t); in SPI_2linesTxISR_16BIT()
3742 hspi->TxXferCount--; in SPI_2linesTxISR_16BIT()
3745 if (hspi->TxXferCount == 0U) in SPI_2linesTxISR_16BIT()
3748 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_2linesTxISR_16BIT()
3751 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_2linesTxISR_16BIT()
3753 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); in SPI_2linesTxISR_16BIT()
3759 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); in SPI_2linesTxISR_16BIT()
3761 if (hspi->RxXferCount == 0U) in SPI_2linesTxISR_16BIT()
3763 SPI_CloseRxTx_ISR(hspi); in SPI_2linesTxISR_16BIT()
3775 static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) in SPI_RxISR_8BITCRC() argument
3781 ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; in SPI_RxISR_8BITCRC()
3787 hspi->CRCSize--; in SPI_RxISR_8BITCRC()
3789 if (hspi->CRCSize == 0U) in SPI_RxISR_8BITCRC()
3791 SPI_CloseRx_ISR(hspi); in SPI_RxISR_8BITCRC()
3802 static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi) in SPI_RxISR_8BIT() argument
3804 *hspi->pRxBuffPtr = (*(__IO uint8_t *)&hspi->Instance->DR); in SPI_RxISR_8BIT()
3805 hspi->pRxBuffPtr++; in SPI_RxISR_8BIT()
3806 hspi->RxXferCount--; in SPI_RxISR_8BIT()
3810 if ((hspi->RxXferCount == 1U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in SPI_RxISR_8BIT()
3812 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_RxISR_8BIT()
3816 if (hspi->RxXferCount == 0U) in SPI_RxISR_8BIT()
3819 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_RxISR_8BIT()
3821 hspi->RxISR = SPI_RxISR_8BITCRC; in SPI_RxISR_8BIT()
3825 SPI_CloseRx_ISR(hspi); in SPI_RxISR_8BIT()
3836 static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) in SPI_RxISR_16BITCRC() argument
3841 tmpreg = READ_REG(hspi->Instance->DR); in SPI_RxISR_16BITCRC()
3846 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in SPI_RxISR_16BITCRC()
3848 SPI_CloseRx_ISR(hspi); in SPI_RxISR_16BITCRC()
3858 static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi) in SPI_RxISR_16BIT() argument
3860 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); in SPI_RxISR_16BIT()
3861 hspi->pRxBuffPtr += sizeof(uint16_t); in SPI_RxISR_16BIT()
3862 hspi->RxXferCount--; in SPI_RxISR_16BIT()
3866 if ((hspi->RxXferCount == 1U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in SPI_RxISR_16BIT()
3868 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_RxISR_16BIT()
3872 if (hspi->RxXferCount == 0U) in SPI_RxISR_16BIT()
3875 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_RxISR_16BIT()
3877 hspi->RxISR = SPI_RxISR_16BITCRC; in SPI_RxISR_16BIT()
3881 SPI_CloseRx_ISR(hspi); in SPI_RxISR_16BIT()
3891 static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi) in SPI_TxISR_8BIT() argument
3893 *(__IO uint8_t *)&hspi->Instance->DR = *((const uint8_t *)hspi->pTxBuffPtr); in SPI_TxISR_8BIT()
3894 hspi->pTxBuffPtr++; in SPI_TxISR_8BIT()
3895 hspi->TxXferCount--; in SPI_TxISR_8BIT()
3897 if (hspi->TxXferCount == 0U) in SPI_TxISR_8BIT()
3900 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_TxISR_8BIT()
3903 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_TxISR_8BIT()
3906 SPI_CloseTx_ISR(hspi); in SPI_TxISR_8BIT()
3916 static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi) in SPI_TxISR_16BIT() argument
3919 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3920 hspi->pTxBuffPtr += sizeof(uint16_t); in SPI_TxISR_16BIT()
3921 hspi->TxXferCount--; in SPI_TxISR_16BIT()
3923 if (hspi->TxXferCount == 0U) in SPI_TxISR_16BIT()
3926 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_TxISR_16BIT()
3929 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_TxISR_16BIT()
3932 SPI_CloseTx_ISR(hspi); in SPI_TxISR_16BIT()
3946 static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, Flag… in SPI_WaitFlagStateUntilTimeout() argument
3960 while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) in SPI_WaitFlagStateUntilTimeout()
3971 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); in SPI_WaitFlagStateUntilTimeout()
3973 if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) in SPI_WaitFlagStateUntilTimeout()
3974 … || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) in SPI_WaitFlagStateUntilTimeout()
3977 __HAL_SPI_DISABLE(hspi); in SPI_WaitFlagStateUntilTimeout()
3981 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_WaitFlagStateUntilTimeout()
3983 SPI_RESET_CRC(hspi); in SPI_WaitFlagStateUntilTimeout()
3986 hspi->State = HAL_SPI_STATE_READY; in SPI_WaitFlagStateUntilTimeout()
3989 __HAL_UNLOCK(hspi); in SPI_WaitFlagStateUntilTimeout()
4015 static HAL_StatusTypeDef SPI_WaitFifoStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Fifo, uint… in SPI_WaitFifoStateUntilTimeout() argument
4029 ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; in SPI_WaitFifoStateUntilTimeout()
4034 while ((hspi->Instance->SR & Fifo) != State) in SPI_WaitFifoStateUntilTimeout()
4053 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); in SPI_WaitFifoStateUntilTimeout()
4055 if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) in SPI_WaitFifoStateUntilTimeout()
4056 … || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) in SPI_WaitFifoStateUntilTimeout()
4059 __HAL_SPI_DISABLE(hspi); in SPI_WaitFifoStateUntilTimeout()
4063 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_WaitFifoStateUntilTimeout()
4065 SPI_RESET_CRC(hspi); in SPI_WaitFifoStateUntilTimeout()
4068 hspi->State = HAL_SPI_STATE_READY; in SPI_WaitFifoStateUntilTimeout()
4071 __HAL_UNLOCK(hspi); in SPI_WaitFifoStateUntilTimeout()
4095 static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t … in SPI_EndRxTransaction() argument
4097 if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) in SPI_EndRxTransaction()
4098 … || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) in SPI_EndRxTransaction()
4101 __HAL_SPI_DISABLE(hspi); in SPI_EndRxTransaction()
4105 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) in SPI_EndRxTransaction()
4107 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_EndRxTransaction()
4111 if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) in SPI_EndRxTransaction()
4112 … || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) in SPI_EndRxTransaction()
4115 …if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, Timeout, Tickstart) != HA… in SPI_EndRxTransaction()
4117 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_EndRxTransaction()
4131 static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t… in SPI_EndRxTxTransaction() argument
4134 …if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FTLVL, SPI_FTLVL_EMPTY, Timeout, Tickstart) != HA… in SPI_EndRxTxTransaction()
4136 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_EndRxTxTransaction()
4141 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) in SPI_EndRxTxTransaction()
4143 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_EndRxTxTransaction()
4148 …if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, Timeout, Tickstart) != HA… in SPI_EndRxTxTransaction()
4150 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_EndRxTxTransaction()
4163 static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi) in SPI_CloseRxTx_ISR() argument
4171 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); in SPI_CloseRxTx_ISR()
4174 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_CloseRxTx_ISR()
4176 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_CloseRxTx_ISR()
4181 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) in SPI_CloseRxTx_ISR()
4183 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRxTx_ISR()
4184 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_CloseRxTx_ISR()
4185 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_CloseRxTx_ISR()
4188 hspi->ErrorCallback(hspi); in SPI_CloseRxTx_ISR()
4190 HAL_SPI_ErrorCallback(hspi); in SPI_CloseRxTx_ISR()
4196 if (hspi->ErrorCode == HAL_SPI_ERROR_NONE) in SPI_CloseRxTx_ISR()
4198 if (hspi->State == HAL_SPI_STATE_BUSY_RX) in SPI_CloseRxTx_ISR()
4200 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRxTx_ISR()
4203 hspi->RxCpltCallback(hspi); in SPI_CloseRxTx_ISR()
4205 HAL_SPI_RxCpltCallback(hspi); in SPI_CloseRxTx_ISR()
4210 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRxTx_ISR()
4213 hspi->TxRxCpltCallback(hspi); in SPI_CloseRxTx_ISR()
4215 HAL_SPI_TxRxCpltCallback(hspi); in SPI_CloseRxTx_ISR()
4221 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRxTx_ISR()
4224 hspi->ErrorCallback(hspi); in SPI_CloseRxTx_ISR()
4226 HAL_SPI_ErrorCallback(hspi); in SPI_CloseRxTx_ISR()
4240 static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi) in SPI_CloseRx_ISR() argument
4243 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in SPI_CloseRx_ISR()
4246 if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) in SPI_CloseRx_ISR()
4248 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_CloseRx_ISR()
4250 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRx_ISR()
4254 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) in SPI_CloseRx_ISR()
4256 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_CloseRx_ISR()
4257 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_CloseRx_ISR()
4260 hspi->ErrorCallback(hspi); in SPI_CloseRx_ISR()
4262 HAL_SPI_ErrorCallback(hspi); in SPI_CloseRx_ISR()
4268 if (hspi->ErrorCode == HAL_SPI_ERROR_NONE) in SPI_CloseRx_ISR()
4272 hspi->RxCpltCallback(hspi); in SPI_CloseRx_ISR()
4274 HAL_SPI_RxCpltCallback(hspi); in SPI_CloseRx_ISR()
4281 hspi->ErrorCallback(hspi); in SPI_CloseRx_ISR()
4283 HAL_SPI_ErrorCallback(hspi); in SPI_CloseRx_ISR()
4297 static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi) in SPI_CloseTx_ISR() argument
4305 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); in SPI_CloseTx_ISR()
4308 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_CloseTx_ISR()
4310 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_CloseTx_ISR()
4314 if (hspi->Init.Direction == SPI_DIRECTION_2LINES) in SPI_CloseTx_ISR()
4316 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_CloseTx_ISR()
4319 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseTx_ISR()
4320 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in SPI_CloseTx_ISR()
4324 hspi->ErrorCallback(hspi); in SPI_CloseTx_ISR()
4326 HAL_SPI_ErrorCallback(hspi); in SPI_CloseTx_ISR()
4333 hspi->TxCpltCallback(hspi); in SPI_CloseTx_ISR()
4335 HAL_SPI_TxCpltCallback(hspi); in SPI_CloseTx_ISR()
4346 static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi) in SPI_AbortRx_ISR() argument
4351 __HAL_SPI_DISABLE(hspi); in SPI_AbortRx_ISR()
4356 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_RXNEIE)); in SPI_AbortRx_ISR()
4363 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in SPI_AbortRx_ISR()
4367 } while (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)); in SPI_AbortRx_ISR()
4370 …if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) !… in SPI_AbortRx_ISR()
4372 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_AbortRx_ISR()
4376 if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, in SPI_AbortRx_ISR()
4379 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_AbortRx_ISR()
4382 hspi->State = HAL_SPI_STATE_ABORT; in SPI_AbortRx_ISR()
4391 static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi) in SPI_AbortTx_ISR() argument
4398 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE)); in SPI_AbortTx_ISR()
4405 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in SPI_AbortTx_ISR()
4409 } while (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)); in SPI_AbortTx_ISR()
4411 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) in SPI_AbortTx_ISR()
4413 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_AbortTx_ISR()
4417 __HAL_SPI_DISABLE(hspi); in SPI_AbortTx_ISR()
4420 if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, in SPI_AbortTx_ISR()
4423 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_AbortTx_ISR()
4427 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) in SPI_AbortTx_ISR()
4430 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_RXNEIE)); in SPI_AbortTx_ISR()
4437 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in SPI_AbortTx_ISR()
4441 } while (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)); in SPI_AbortTx_ISR()
4444 …if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) !… in SPI_AbortTx_ISR()
4446 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_AbortTx_ISR()
4450 if (SPI_WaitFifoStateUntilTimeout(hspi, SPI_FLAG_FRLVL, SPI_FRLVL_EMPTY, SPI_DEFAULT_TIMEOUT, in SPI_AbortTx_ISR()
4453 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in SPI_AbortTx_ISR()
4456 hspi->State = HAL_SPI_STATE_ABORT; in SPI_AbortTx_ISR()