Lines Matching refs:hspi

263 static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, Flag…
265 static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi);
266 static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi);
267 static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi);
268 static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi);
269 static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi);
270 static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi);
271 static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi);
272 static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi);
274 static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi);
275 static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi);
276 static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi);
277 static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi);
279 static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi);
280 static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi);
281 static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi);
282 static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi);
283 static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi);
284 static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t T…
285 static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t…
335 HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) in HAL_SPI_Init() argument
338 if (hspi == NULL) in HAL_SPI_Init()
344 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_Init()
345 assert_param(IS_SPI_MODE(hspi->Init.Mode)); in HAL_SPI_Init()
346 assert_param(IS_SPI_DIRECTION(hspi->Init.Direction)); in HAL_SPI_Init()
347 assert_param(IS_SPI_DATASIZE(hspi->Init.DataSize)); in HAL_SPI_Init()
348 assert_param(IS_SPI_NSS(hspi->Init.NSS)); in HAL_SPI_Init()
349 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
350 assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); in HAL_SPI_Init()
353 assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); in HAL_SPI_Init()
354 if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) in HAL_SPI_Init()
356 assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); in HAL_SPI_Init()
357 assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); in HAL_SPI_Init()
359 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Init()
361 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
366 hspi->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; in HAL_SPI_Init()
371 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
374 hspi->Init.CLKPolarity = SPI_POLARITY_LOW; in HAL_SPI_Init()
375 hspi->Init.CLKPhase = SPI_PHASE_1EDGE; in HAL_SPI_Init()
378 assert_param(IS_SPI_CRC_CALCULATION(hspi->Init.CRCCalculation)); in HAL_SPI_Init()
379 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
381 assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); in HAL_SPI_Init()
384 hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; in HAL_SPI_Init()
387 if (hspi->State == HAL_SPI_STATE_RESET) in HAL_SPI_Init()
390 hspi->Lock = HAL_UNLOCKED; in HAL_SPI_Init()
394hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_Init()
395hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_Init()
396hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_Init()
397hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_Init()
398hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_Init()
399hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_Init()
400hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_Init()
401hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_Init()
403 if (hspi->MspInitCallback == NULL) in HAL_SPI_Init()
405 hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_Init()
409 hspi->MspInitCallback(hspi); in HAL_SPI_Init()
412 HAL_SPI_MspInit(hspi); in HAL_SPI_Init()
416 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_Init()
419 __HAL_SPI_DISABLE(hspi); 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.DataSize & SPI_CR1_DFF) | in HAL_SPI_Init()
427 (hspi->Init.CLKPolarity & SPI_CR1_CPOL) | in HAL_SPI_Init()
428 (hspi->Init.CLKPhase & SPI_CR1_CPHA) | in HAL_SPI_Init()
429 (hspi->Init.NSS & SPI_CR1_SSM) | in HAL_SPI_Init()
430 (hspi->Init.BaudRatePrescaler & SPI_CR1_BR_Msk) | in HAL_SPI_Init()
431 (hspi->Init.FirstBit & SPI_CR1_LSBFIRST) | in HAL_SPI_Init()
432 (hspi->Init.CRCCalculation & SPI_CR1_CRCEN))); in HAL_SPI_Init()
435 WRITE_REG(hspi->Instance->CR2, ((hspi->Init.NSS >> 16U) & SPI_CR2_SSOE)); in HAL_SPI_Init()
440 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
442 WRITE_REG(hspi->Instance->CRCPR, (hspi->Init.CRCPolynomial & SPI_CRCPR_CRCPOLY_Msk)); in HAL_SPI_Init()
448 CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); in HAL_SPI_Init()
451 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Init()
452 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Init()
463 HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_DeInit() argument
466 if (hspi == NULL) in HAL_SPI_DeInit()
472 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_DeInit()
474 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_DeInit()
477 __HAL_SPI_DISABLE(hspi); in HAL_SPI_DeInit()
480 if (hspi->MspDeInitCallback == NULL) in HAL_SPI_DeInit()
482 hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_DeInit()
486 hspi->MspDeInitCallback(hspi); in HAL_SPI_DeInit()
489 HAL_SPI_MspDeInit(hspi); in HAL_SPI_DeInit()
492 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_DeInit()
493 hspi->State = HAL_SPI_STATE_RESET; in HAL_SPI_DeInit()
496 __HAL_UNLOCK(hspi); in HAL_SPI_DeInit()
507 __weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspInit() argument
510 UNUSED(hspi); in HAL_SPI_MspInit()
523 __weak void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspDeInit() argument
526 UNUSED(hspi); in HAL_SPI_MspDeInit()
543 HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Callb… in HAL_SPI_RegisterCallback() argument
551 hspi->ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK; in HAL_SPI_RegisterCallback()
556 __HAL_LOCK(hspi); in HAL_SPI_RegisterCallback()
558 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_RegisterCallback()
563 hspi->TxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
567 hspi->RxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
571 hspi->TxRxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
575 hspi->TxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
579 hspi->RxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
583 hspi->TxRxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
587 hspi->ErrorCallback = pCallback; in HAL_SPI_RegisterCallback()
591 hspi->AbortCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
595 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
599 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
604 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
611 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_RegisterCallback()
616 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
620 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
625 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
635 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
642 __HAL_UNLOCK(hspi); in HAL_SPI_RegisterCallback()
654 HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Cal… in HAL_SPI_UnRegisterCallback() argument
659 __HAL_LOCK(hspi); in HAL_SPI_UnRegisterCallback()
661 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_UnRegisterCallback()
666hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_UnRegisterCallback()
670hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_UnRegisterCallback()
674hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_UnRegisterCallback()
678hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
682hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
686hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
690hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_UnRegisterCallback()
694hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_UnRegisterCallback()
698hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
702hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
707 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
714 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_UnRegisterCallback()
719hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
723hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
728 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
738 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
745 __HAL_UNLOCK(hspi); in HAL_SPI_UnRegisterCallback()
795 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size, ui… in HAL_SPI_Transmit() argument
801 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); in HAL_SPI_Transmit()
807 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit()
818 __HAL_LOCK(hspi); in HAL_SPI_Transmit()
821 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit()
822 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit()
823 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit()
824 hspi->TxXferSize = Size; in HAL_SPI_Transmit()
825 hspi->TxXferCount = Size; in HAL_SPI_Transmit()
828 hspi->pRxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Transmit()
829 hspi->RxXferSize = 0U; in HAL_SPI_Transmit()
830 hspi->RxXferCount = 0U; in HAL_SPI_Transmit()
831 hspi->TxISR = NULL; in HAL_SPI_Transmit()
832 hspi->RxISR = NULL; in HAL_SPI_Transmit()
835 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit()
838 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Transmit()
839 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit()
844 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Transmit()
846 SPI_RESET_CRC(hspi); in HAL_SPI_Transmit()
851 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Transmit()
854 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit()
858 if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) in HAL_SPI_Transmit()
860 if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) in HAL_SPI_Transmit()
862 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
863 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
864 hspi->TxXferCount--; in HAL_SPI_Transmit()
867 while (hspi->TxXferCount > 0U) in HAL_SPI_Transmit()
870 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) in HAL_SPI_Transmit()
872 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
873 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
874 hspi->TxXferCount--; in HAL_SPI_Transmit()
881 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
882 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
891 if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) in HAL_SPI_Transmit()
893 *((__IO uint8_t *)&hspi->Instance->DR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
894 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_Transmit()
895 hspi->TxXferCount--; in HAL_SPI_Transmit()
897 while (hspi->TxXferCount > 0U) in HAL_SPI_Transmit()
900 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) in HAL_SPI_Transmit()
902 *((__IO uint8_t *)&hspi->Instance->DR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
903 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_Transmit()
904 hspi->TxXferCount--; in HAL_SPI_Transmit()
911 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
912 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
920 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Transmit()
922 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_Transmit()
927 if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) in HAL_SPI_Transmit()
929 hspi->ErrorCode = HAL_SPI_ERROR_FLAG; in HAL_SPI_Transmit()
933 if (hspi->Init.Direction == SPI_DIRECTION_2LINES) in HAL_SPI_Transmit()
935 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_Transmit()
938 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
940 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
942 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Transmit()
961 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SPI_Receive() argument
968 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive()
973 if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES)) in HAL_SPI_Receive()
975 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive()
977 return HAL_SPI_TransmitReceive(hspi, pData, pData, Size, Timeout); in HAL_SPI_Receive()
989 __HAL_LOCK(hspi); in HAL_SPI_Receive()
992 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive()
993 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive()
994 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive()
995 hspi->RxXferSize = Size; in HAL_SPI_Receive()
996 hspi->RxXferCount = Size; in HAL_SPI_Receive()
999 hspi->pTxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Receive()
1000 hspi->TxXferSize = 0U; in HAL_SPI_Receive()
1001 hspi->TxXferCount = 0U; in HAL_SPI_Receive()
1002 hspi->RxISR = NULL; in HAL_SPI_Receive()
1003 hspi->TxISR = NULL; in HAL_SPI_Receive()
1007 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive()
1009 SPI_RESET_CRC(hspi); in HAL_SPI_Receive()
1011 hspi->RxXferCount--; in HAL_SPI_Receive()
1016 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive()
1019 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Receive()
1020 SPI_1LINE_RX(hspi); in HAL_SPI_Receive()
1024 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Receive()
1027 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive()
1031 if (hspi->Init.DataSize == SPI_DATASIZE_8BIT) in HAL_SPI_Receive()
1034 while (hspi->RxXferCount > 0U) in HAL_SPI_Receive()
1037 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) in HAL_SPI_Receive()
1040 (* (uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; in HAL_SPI_Receive()
1041 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1042 hspi->RxXferCount--; in HAL_SPI_Receive()
1049 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1050 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1059 while (hspi->RxXferCount > 0U) in HAL_SPI_Receive()
1062 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) in HAL_SPI_Receive()
1064 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; in HAL_SPI_Receive()
1065 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_Receive()
1066 hspi->RxXferCount--; in HAL_SPI_Receive()
1073 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1074 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1083 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive()
1086 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_Receive()
1089 if (READ_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT)) in HAL_SPI_Receive()
1092 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_Receive()
1095 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1098 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1103 if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) in HAL_SPI_Receive()
1105 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; in HAL_SPI_Receive()
1110 (*(uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; in HAL_SPI_Receive()
1114 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1116 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_Receive()
1117 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1118 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1123 tmpreg = READ_REG(hspi->Instance->DR); in HAL_SPI_Receive()
1130 if (SPI_EndRxTransaction(hspi, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1132 hspi->ErrorCode = HAL_SPI_ERROR_FLAG; in HAL_SPI_Receive()
1137 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) in HAL_SPI_Receive()
1140 if (SPI_ISCRCErrorValid(hspi) == SPI_VALID_CRC_ERROR) in HAL_SPI_Receive()
1142 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_Receive()
1145 SPI_RESET_CRC(hspi); in HAL_SPI_Receive()
1149 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in HAL_SPI_Receive()
1154 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1156 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1157 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Receive()
1177 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t … in HAL_SPI_TransmitReceive() argument
1192 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive()
1198 tmp_state = hspi->State; in HAL_SPI_TransmitReceive()
1199 tmp_mode = hspi->Init.Mode; in HAL_SPI_TransmitReceive()
1203 ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && in HAL_SPI_TransmitReceive()
1215 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive()
1218 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in HAL_SPI_TransmitReceive()
1220 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive()
1224 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive()
1225 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive()
1226 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive()
1227 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive()
1228 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive()
1229 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive()
1230 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive()
1233 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive()
1234 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive()
1238 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_TransmitReceive()
1240 SPI_RESET_CRC(hspi); in HAL_SPI_TransmitReceive()
1245 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_TransmitReceive()
1248 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive()
1252 if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive()
1254 if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) in HAL_SPI_TransmitReceive()
1256 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1257 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1258 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1262 if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in HAL_SPI_TransmitReceive()
1264 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_TransmitReceive()
1269 while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) in HAL_SPI_TransmitReceive()
1272 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) in HAL_SPI_TransmitReceive()
1274 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1275 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1276 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1282 if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in HAL_SPI_TransmitReceive()
1284 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_TransmitReceive()
1290 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) in HAL_SPI_TransmitReceive()
1292 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; in HAL_SPI_TransmitReceive()
1293 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1294 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1300 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1301 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1309 if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) in HAL_SPI_TransmitReceive()
1311 *((__IO uint8_t *)&hspi->Instance->DR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1312 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1313 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1317 if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in HAL_SPI_TransmitReceive()
1319 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_TransmitReceive()
1323 while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) in HAL_SPI_TransmitReceive()
1326 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) in HAL_SPI_TransmitReceive()
1328 *(__IO uint8_t *)&hspi->Instance->DR = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1329 hspi->pTxBuffPtr++; in HAL_SPI_TransmitReceive()
1330 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1336 if ((hspi->TxXferCount == 0U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in HAL_SPI_TransmitReceive()
1338 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in HAL_SPI_TransmitReceive()
1344 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) in HAL_SPI_TransmitReceive()
1346 (*(uint8_t *)hspi->pRxBuffPtr) = hspi->Instance->DR; in HAL_SPI_TransmitReceive()
1347 hspi->pRxBuffPtr++; in HAL_SPI_TransmitReceive()
1348 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1354 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1355 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1363 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_TransmitReceive()
1366 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK) in HAL_SPI_TransmitReceive()
1369 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_TransmitReceive()
1370 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1371 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1375 tmpreg = READ_REG(hspi->Instance->DR); in HAL_SPI_TransmitReceive()
1381 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) in HAL_SPI_TransmitReceive()
1384 if (SPI_ISCRCErrorValid(hspi) == SPI_VALID_CRC_ERROR) in HAL_SPI_TransmitReceive()
1386 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in HAL_SPI_TransmitReceive()
1389 SPI_RESET_CRC(hspi); in HAL_SPI_TransmitReceive()
1390 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1395 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in HAL_SPI_TransmitReceive()
1401 if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) in HAL_SPI_TransmitReceive()
1403 hspi->ErrorCode = HAL_SPI_ERROR_FLAG; in HAL_SPI_TransmitReceive()
1404 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1409 if (hspi->Init.Direction == SPI_DIRECTION_2LINES) in HAL_SPI_TransmitReceive()
1411 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_TransmitReceive()
1415 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1417 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1419 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_TransmitReceive()
1437 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_IT() argument
1441 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); in HAL_SPI_Transmit_IT()
1449 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_IT()
1455 __HAL_LOCK(hspi); in HAL_SPI_Transmit_IT()
1458 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_IT()
1459 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_IT()
1460 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_IT()
1461 hspi->TxXferSize = Size; in HAL_SPI_Transmit_IT()
1462 hspi->TxXferCount = Size; in HAL_SPI_Transmit_IT()
1465 hspi->pRxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Transmit_IT()
1466 hspi->RxXferSize = 0U; in HAL_SPI_Transmit_IT()
1467 hspi->RxXferCount = 0U; in HAL_SPI_Transmit_IT()
1468 hspi->RxISR = NULL; in HAL_SPI_Transmit_IT()
1471 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_IT()
1473 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_Transmit_IT()
1477 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_Transmit_IT()
1481 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_IT()
1484 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Transmit_IT()
1485 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_IT()
1490 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Transmit_IT()
1492 SPI_RESET_CRC(hspi); in HAL_SPI_Transmit_IT()
1497 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Transmit_IT()
1500 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_IT()
1504 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1506 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); in HAL_SPI_Transmit_IT()
1519 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_IT() argument
1522 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_IT()
1527 if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive_IT()
1529 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_IT()
1531 return HAL_SPI_TransmitReceive_IT(hspi, pData, pData, Size); in HAL_SPI_Receive_IT()
1541 __HAL_LOCK(hspi); in HAL_SPI_Receive_IT()
1544 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_IT()
1545 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_IT()
1546 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_IT()
1547 hspi->RxXferSize = Size; in HAL_SPI_Receive_IT()
1548 hspi->RxXferCount = Size; in HAL_SPI_Receive_IT()
1551 hspi->pTxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Receive_IT()
1552 hspi->TxXferSize = 0U; in HAL_SPI_Receive_IT()
1553 hspi->TxXferCount = 0U; in HAL_SPI_Receive_IT()
1554 hspi->TxISR = NULL; in HAL_SPI_Receive_IT()
1557 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive_IT()
1559 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_Receive_IT()
1563 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_Receive_IT()
1567 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_IT()
1570 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Receive_IT()
1571 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_IT()
1576 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive_IT()
1578 SPI_RESET_CRC(hspi); in HAL_SPI_Receive_IT()
1587 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Receive_IT()
1590 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_IT()
1594 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1596 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in HAL_SPI_Receive_IT()
1610 HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8… in HAL_SPI_TransmitReceive_IT() argument
1617 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_IT()
1620 tmp_state = hspi->State; in HAL_SPI_TransmitReceive_IT()
1621 tmp_mode = hspi->Init.Mode; in HAL_SPI_TransmitReceive_IT()
1624 ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && in HAL_SPI_TransmitReceive_IT()
1636 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1639 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in HAL_SPI_TransmitReceive_IT()
1641 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_IT()
1645 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_IT()
1646 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_IT()
1647 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1648 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1649 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_IT()
1650 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1651 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1654 if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1656 hspi->RxISR = SPI_2linesRxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1657 hspi->TxISR = SPI_2linesTxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1661 hspi->RxISR = SPI_2linesRxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1662 hspi->TxISR = SPI_2linesTxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1667 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_TransmitReceive_IT()
1669 SPI_RESET_CRC(hspi); in HAL_SPI_TransmitReceive_IT()
1675 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_TransmitReceive_IT()
1678 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_IT()
1682 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1684 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); in HAL_SPI_TransmitReceive_IT()
1697 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_DMA() argument
1701 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); in HAL_SPI_Transmit_DMA()
1704 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); in HAL_SPI_Transmit_DMA()
1706 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_DMA()
1717 __HAL_LOCK(hspi); in HAL_SPI_Transmit_DMA()
1720 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_DMA()
1721 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_DMA()
1722 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_DMA()
1723 hspi->TxXferSize = Size; in HAL_SPI_Transmit_DMA()
1724 hspi->TxXferCount = Size; in HAL_SPI_Transmit_DMA()
1727 hspi->pRxBuffPtr = (uint8_t *)NULL; in HAL_SPI_Transmit_DMA()
1728 hspi->TxISR = NULL; in HAL_SPI_Transmit_DMA()
1729 hspi->RxISR = NULL; in HAL_SPI_Transmit_DMA()
1730 hspi->RxXferSize = 0U; in HAL_SPI_Transmit_DMA()
1731 hspi->RxXferCount = 0U; in HAL_SPI_Transmit_DMA()
1734 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_DMA()
1737 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Transmit_DMA()
1738 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_DMA()
1743 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Transmit_DMA()
1745 SPI_RESET_CRC(hspi); in HAL_SPI_Transmit_DMA()
1750 hspi->hdmatx->XferHalfCpltCallback = SPI_DMAHalfTransmitCplt; in HAL_SPI_Transmit_DMA()
1753 hspi->hdmatx->XferCpltCallback = SPI_DMATransmitCplt; in HAL_SPI_Transmit_DMA()
1756 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Transmit_DMA()
1759 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Transmit_DMA()
1762 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance… in HAL_SPI_Transmit_DMA()
1763 hspi->TxXferCount)) in HAL_SPI_Transmit_DMA()
1766 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Transmit_DMA()
1768 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1773 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Transmit_DMA()
1776 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_DMA()
1780 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1783 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); in HAL_SPI_Transmit_DMA()
1786 SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); in HAL_SPI_Transmit_DMA()
1801 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_DMA() argument
1804 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); in HAL_SPI_Receive_DMA()
1806 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_DMA()
1811 if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive_DMA()
1813 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_DMA()
1816 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); in HAL_SPI_Receive_DMA()
1819 return HAL_SPI_TransmitReceive_DMA(hspi, pData, pData, Size); in HAL_SPI_Receive_DMA()
1828 __HAL_LOCK(hspi); in HAL_SPI_Receive_DMA()
1831 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_DMA()
1832 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_DMA()
1833 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_DMA()
1834 hspi->RxXferSize = Size; in HAL_SPI_Receive_DMA()
1835 hspi->RxXferCount = Size; in HAL_SPI_Receive_DMA()
1838 hspi->RxISR = NULL; in HAL_SPI_Receive_DMA()
1839 hspi->TxISR = NULL; in HAL_SPI_Receive_DMA()
1840 hspi->TxXferSize = 0U; in HAL_SPI_Receive_DMA()
1841 hspi->TxXferCount = 0U; in HAL_SPI_Receive_DMA()
1844 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_DMA()
1847 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Receive_DMA()
1848 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_DMA()
1853 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive_DMA()
1855 SPI_RESET_CRC(hspi); in HAL_SPI_Receive_DMA()
1860 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; in HAL_SPI_Receive_DMA()
1863 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; in HAL_SPI_Receive_DMA()
1866 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Receive_DMA()
1869 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Receive_DMA()
1872 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->DR, (uint32_t)hspi->pRxBuf… in HAL_SPI_Receive_DMA()
1873 hspi->RxXferCount)) in HAL_SPI_Receive_DMA()
1876 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Receive_DMA()
1878 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
1883 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_Receive_DMA()
1886 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_DMA()
1890 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
1893 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); in HAL_SPI_Receive_DMA()
1896 SET_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); in HAL_SPI_Receive_DMA()
1911 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint… in HAL_SPI_TransmitReceive_DMA() argument
1918 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); in HAL_SPI_TransmitReceive_DMA()
1919 assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); in HAL_SPI_TransmitReceive_DMA()
1922 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_DMA()
1925 tmp_state = hspi->State; in HAL_SPI_TransmitReceive_DMA()
1926 tmp_mode = hspi->Init.Mode; in HAL_SPI_TransmitReceive_DMA()
1929 ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && in HAL_SPI_TransmitReceive_DMA()
1941 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
1944 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in HAL_SPI_TransmitReceive_DMA()
1946 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_DMA()
1950 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_DMA()
1951 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_DMA()
1952 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
1953 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
1954 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_DMA()
1955 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
1956 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
1959 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
1960 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
1964 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_TransmitReceive_DMA()
1966 SPI_RESET_CRC(hspi); in HAL_SPI_TransmitReceive_DMA()
1971 if (hspi->State == HAL_SPI_STATE_BUSY_RX) in HAL_SPI_TransmitReceive_DMA()
1974 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
1975 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
1980 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfTransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
1981 hspi->hdmarx->XferCpltCallback = SPI_DMATransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
1985 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
1988 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
1991 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->DR, (uint32_t)hspi->pRxBuf… in HAL_SPI_TransmitReceive_DMA()
1992 hspi->RxXferCount)) in HAL_SPI_TransmitReceive_DMA()
1995 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
1997 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2002 SET_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2006 hspi->hdmatx->XferHalfCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2007 hspi->hdmatx->XferCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2008 hspi->hdmatx->XferErrorCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2009 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2012 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance… in HAL_SPI_TransmitReceive_DMA()
2013 hspi->TxXferCount)) in HAL_SPI_TransmitReceive_DMA()
2016 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2018 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2023 if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) in HAL_SPI_TransmitReceive_DMA()
2026 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_DMA()
2030 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2033 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR)); in HAL_SPI_TransmitReceive_DMA()
2036 SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2054 HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort() argument
2066 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_ERRIE); in HAL_SPI_Abort()
2069 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)) in HAL_SPI_Abort()
2071 hspi->TxISR = SPI_AbortTx_ISR; in HAL_SPI_Abort()
2077 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2081 } while (hspi->State != HAL_SPI_STATE_ABORT); in HAL_SPI_Abort()
2086 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) in HAL_SPI_Abort()
2088 hspi->RxISR = SPI_AbortRx_ISR; in HAL_SPI_Abort()
2094 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2098 } while (hspi->State != HAL_SPI_STATE_ABORT); in HAL_SPI_Abort()
2104 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) in HAL_SPI_Abort()
2107 if (hspi->hdmatx != NULL) in HAL_SPI_Abort()
2111 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2114 if (HAL_DMA_Abort(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort()
2116 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2120 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXDMAEN)); in HAL_SPI_Abort()
2127 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2131 } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); in HAL_SPI_Abort()
2136 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) in HAL_SPI_Abort()
2139 if (hspi->hdmarx != NULL) in HAL_SPI_Abort()
2143 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2146 if (HAL_DMA_Abort(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort()
2148 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2152 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Abort()
2155 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_RXDMAEN)); in HAL_SPI_Abort()
2159 hspi->RxXferCount = 0U; in HAL_SPI_Abort()
2160 hspi->TxXferCount = 0U; in HAL_SPI_Abort()
2163 if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) in HAL_SPI_Abort()
2171 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort()
2175 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_Abort()
2178 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort()
2198 HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort_IT() argument
2212 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_ERRIE); in HAL_SPI_Abort_IT()
2215 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXEIE)) in HAL_SPI_Abort_IT()
2217 hspi->TxISR = SPI_AbortTx_ISR; in HAL_SPI_Abort_IT()
2223 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2227 } while (hspi->State != HAL_SPI_STATE_ABORT); in HAL_SPI_Abort_IT()
2232 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXNEIE)) in HAL_SPI_Abort_IT()
2234 hspi->RxISR = SPI_AbortRx_ISR; in HAL_SPI_Abort_IT()
2240 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2244 } while (hspi->State != HAL_SPI_STATE_ABORT); in HAL_SPI_Abort_IT()
2252 if (hspi->hdmatx != NULL) in HAL_SPI_Abort_IT()
2256 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) in HAL_SPI_Abort_IT()
2258 hspi->hdmatx->XferAbortCallback = SPI_DMATxAbortCallback; in HAL_SPI_Abort_IT()
2262 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2266 if (hspi->hdmarx != NULL) in HAL_SPI_Abort_IT()
2270 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) in HAL_SPI_Abort_IT()
2272 hspi->hdmarx->XferAbortCallback = SPI_DMARxAbortCallback; in HAL_SPI_Abort_IT()
2276 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2281 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_TXDMAEN)) in HAL_SPI_Abort_IT()
2284 if (hspi->hdmatx != NULL) in HAL_SPI_Abort_IT()
2287 if (HAL_DMA_Abort_IT(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort_IT()
2289 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2290 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort_IT()
2299 if (HAL_IS_BIT_SET(hspi->Instance->CR2, SPI_CR2_RXDMAEN)) in HAL_SPI_Abort_IT()
2302 if (hspi->hdmarx != NULL) in HAL_SPI_Abort_IT()
2305 if (HAL_DMA_Abort_IT(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort_IT()
2307 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2308 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort_IT()
2320 hspi->RxXferCount = 0U; in HAL_SPI_Abort_IT()
2321 hspi->TxXferCount = 0U; in HAL_SPI_Abort_IT()
2324 if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) in HAL_SPI_Abort_IT()
2332 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort_IT()
2336 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_Abort_IT()
2339 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort_IT()
2343 hspi->AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2345 HAL_SPI_AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2358 HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAPause() argument
2361 __HAL_LOCK(hspi); in HAL_SPI_DMAPause()
2364 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in HAL_SPI_DMAPause()
2367 __HAL_UNLOCK(hspi); in HAL_SPI_DMAPause()
2378 HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAResume() argument
2381 __HAL_LOCK(hspi); in HAL_SPI_DMAResume()
2384 SET_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in HAL_SPI_DMAResume()
2387 __HAL_UNLOCK(hspi); in HAL_SPI_DMAResume()
2398 HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAStop() argument
2410 if (hspi->hdmatx != NULL) in HAL_SPI_DMAStop()
2412 if (HAL_OK != HAL_DMA_Abort(hspi->hdmatx)) in HAL_SPI_DMAStop()
2414 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_DMAStop()
2419 if (hspi->hdmarx != NULL) in HAL_SPI_DMAStop()
2421 if (HAL_OK != HAL_DMA_Abort(hspi->hdmarx)) in HAL_SPI_DMAStop()
2423 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_DMAStop()
2429 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in HAL_SPI_DMAStop()
2430 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_DMAStop()
2440 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) in HAL_SPI_IRQHandler() argument
2442 uint32_t itsource = hspi->Instance->CR2; in HAL_SPI_IRQHandler()
2443 uint32_t itflag = hspi->Instance->SR; in HAL_SPI_IRQHandler()
2449 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
2456 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
2467 if (hspi->State != HAL_SPI_STATE_BUSY_TX) in HAL_SPI_IRQHandler()
2469 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in HAL_SPI_IRQHandler()
2470 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_IRQHandler()
2474 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_IRQHandler()
2482 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in HAL_SPI_IRQHandler()
2483 __HAL_SPI_CLEAR_MODFFLAG(hspi); in HAL_SPI_IRQHandler()
2488 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
2491 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE | SPI_IT_TXE | SPI_IT_ERR); in HAL_SPI_IRQHandler()
2493 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
2497 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN)); in HAL_SPI_IRQHandler()
2500 if (hspi->hdmarx != NULL) in HAL_SPI_IRQHandler()
2504 hspi->hdmarx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
2505 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmarx)) in HAL_SPI_IRQHandler()
2507 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
2511 if (hspi->hdmatx != NULL) in HAL_SPI_IRQHandler()
2515 hspi->hdmatx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
2516 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmatx)) in HAL_SPI_IRQHandler()
2518 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
2526 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2528 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2542 __weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxCpltCallback() argument
2545 UNUSED(hspi); in HAL_SPI_TxCpltCallback()
2558 __weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_RxCpltCallback() argument
2561 UNUSED(hspi); in HAL_SPI_RxCpltCallback()
2574 __weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxRxCpltCallback() argument
2577 UNUSED(hspi); in HAL_SPI_TxRxCpltCallback()
2590 __weak void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxHalfCpltCallback() argument
2593 UNUSED(hspi); in HAL_SPI_TxHalfCpltCallback()
2606 __weak void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_RxHalfCpltCallback() argument
2609 UNUSED(hspi); in HAL_SPI_RxHalfCpltCallback()
2622 __weak void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxRxHalfCpltCallback() argument
2625 UNUSED(hspi); in HAL_SPI_TxRxHalfCpltCallback()
2638 __weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_ErrorCallback() argument
2641 UNUSED(hspi); in HAL_SPI_ErrorCallback()
2656 __weak void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_AbortCpltCallback() argument
2659 UNUSED(hspi); in HAL_SPI_AbortCpltCallback()
2691 HAL_SPI_StateTypeDef HAL_SPI_GetState(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetState() argument
2694 return hspi->State; in HAL_SPI_GetState()
2703 uint32_t HAL_SPI_GetError(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetError() argument
2706 return hspi->ErrorCode; in HAL_SPI_GetError()
2730 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMATransmitCplt() local
2740 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); in SPI_DMATransmitCplt()
2743 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); in SPI_DMATransmitCplt()
2746 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_DMATransmitCplt()
2748 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_DMATransmitCplt()
2752 if (hspi->Init.Direction == SPI_DIRECTION_2LINES) in SPI_DMATransmitCplt()
2754 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_DMATransmitCplt()
2757 hspi->TxXferCount = 0U; in SPI_DMATransmitCplt()
2758 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATransmitCplt()
2760 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in SPI_DMATransmitCplt()
2764 hspi->ErrorCallback(hspi); in SPI_DMATransmitCplt()
2766 HAL_SPI_ErrorCallback(hspi); in SPI_DMATransmitCplt()
2773 hspi->TxCpltCallback(hspi); in SPI_DMATransmitCplt()
2775 HAL_SPI_TxCpltCallback(hspi); in SPI_DMATransmitCplt()
2787 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAReceiveCplt() local
2800 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); in SPI_DMAReceiveCplt()
2804 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_DMAReceiveCplt()
2807 …if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL… in SPI_DMAReceiveCplt()
2810 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMAReceiveCplt()
2813 tmpreg = READ_REG(hspi->Instance->DR); in SPI_DMAReceiveCplt()
2820 if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) in SPI_DMAReceiveCplt()
2823 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in SPI_DMAReceiveCplt()
2828 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); in SPI_DMAReceiveCplt()
2832 if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_DMAReceiveCplt()
2834 hspi->ErrorCode = HAL_SPI_ERROR_FLAG; in SPI_DMAReceiveCplt()
2837 hspi->RxXferCount = 0U; in SPI_DMAReceiveCplt()
2838 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAReceiveCplt()
2842 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) in SPI_DMAReceiveCplt()
2845 if (SPI_ISCRCErrorValid(hspi) == SPI_VALID_CRC_ERROR) in SPI_DMAReceiveCplt()
2847 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMAReceiveCplt()
2850 SPI_RESET_CRC(hspi); in SPI_DMAReceiveCplt()
2854 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_DMAReceiveCplt()
2859 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in SPI_DMAReceiveCplt()
2863 hspi->ErrorCallback(hspi); in SPI_DMAReceiveCplt()
2865 HAL_SPI_ErrorCallback(hspi); in SPI_DMAReceiveCplt()
2872 hspi->RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
2874 HAL_SPI_RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
2886 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMATransmitReceiveCplt() local
2899 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); in SPI_DMATransmitReceiveCplt()
2903 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_DMATransmitReceiveCplt()
2906 …if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL… in SPI_DMATransmitReceiveCplt()
2908 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMATransmitReceiveCplt()
2911 tmpreg = READ_REG(hspi->Instance->DR); in SPI_DMATransmitReceiveCplt()
2918 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_DMATransmitReceiveCplt()
2920 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_DMATransmitReceiveCplt()
2924 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in SPI_DMATransmitReceiveCplt()
2926 hspi->TxXferCount = 0U; in SPI_DMATransmitReceiveCplt()
2927 hspi->RxXferCount = 0U; in SPI_DMATransmitReceiveCplt()
2928 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATransmitReceiveCplt()
2932 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) in SPI_DMATransmitReceiveCplt()
2935 if (SPI_ISCRCErrorValid(hspi) == SPI_VALID_CRC_ERROR) in SPI_DMATransmitReceiveCplt()
2937 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_DMATransmitReceiveCplt()
2940 SPI_RESET_CRC(hspi); in SPI_DMATransmitReceiveCplt()
2944 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_DMATransmitReceiveCplt()
2949 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in SPI_DMATransmitReceiveCplt()
2953 hspi->ErrorCallback(hspi); in SPI_DMATransmitReceiveCplt()
2955 HAL_SPI_ErrorCallback(hspi); in SPI_DMATransmitReceiveCplt()
2962 hspi->TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
2964 HAL_SPI_TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
2976 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAHalfTransmitCplt() local
2980 hspi->TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
2982 HAL_SPI_TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
2994 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAHalfReceiveCplt() local
2998 hspi->RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3000 HAL_SPI_RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3012 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAHalfTransmitReceiveCplt() local
3016 hspi->TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3018 HAL_SPI_TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3030 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAError() local
3033 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); in SPI_DMAError()
3035 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in SPI_DMAError()
3036 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAError()
3039 hspi->ErrorCallback(hspi); in SPI_DMAError()
3041 HAL_SPI_ErrorCallback(hspi); in SPI_DMAError()
3053 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMAAbortOnError() local
3054 hspi->RxXferCount = 0U; in SPI_DMAAbortOnError()
3055 hspi->TxXferCount = 0U; in SPI_DMAAbortOnError()
3059 hspi->ErrorCallback(hspi); in SPI_DMAAbortOnError()
3061 HAL_SPI_ErrorCallback(hspi); in SPI_DMAAbortOnError()
3075 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMATxAbortCallback() local
3078 hspi->hdmatx->XferAbortCallback = NULL; in SPI_DMATxAbortCallback()
3082 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_TXDMAEN); in SPI_DMATxAbortCallback()
3089 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in SPI_DMATxAbortCallback()
3093 } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); in SPI_DMATxAbortCallback()
3096 if (hspi->hdmarx != NULL) in SPI_DMATxAbortCallback()
3098 if (hspi->hdmarx->XferAbortCallback != NULL) in SPI_DMATxAbortCallback()
3105 hspi->RxXferCount = 0U; in SPI_DMATxAbortCallback()
3106 hspi->TxXferCount = 0U; in SPI_DMATxAbortCallback()
3109 if (hspi->ErrorCode != HAL_SPI_ERROR_ABORT) in SPI_DMATxAbortCallback()
3112 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in SPI_DMATxAbortCallback()
3116 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_DMATxAbortCallback()
3119 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATxAbortCallback()
3123 hspi->AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3125 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3139 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); in SPI_DMARxAbortCallback() local
3142 __HAL_SPI_DISABLE(hspi); in SPI_DMARxAbortCallback()
3144 hspi->hdmarx->XferAbortCallback = NULL; in SPI_DMARxAbortCallback()
3147 CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_RXDMAEN); in SPI_DMARxAbortCallback()
3150 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) in SPI_DMARxAbortCallback()
3152 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in SPI_DMARxAbortCallback()
3156 if (hspi->hdmatx != NULL) in SPI_DMARxAbortCallback()
3158 if (hspi->hdmatx->XferAbortCallback != NULL) in SPI_DMARxAbortCallback()
3165 hspi->RxXferCount = 0U; in SPI_DMARxAbortCallback()
3166 hspi->TxXferCount = 0U; in SPI_DMARxAbortCallback()
3169 if (hspi->ErrorCode != HAL_SPI_ERROR_ABORT) in SPI_DMARxAbortCallback()
3172 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in SPI_DMARxAbortCallback()
3176 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_DMARxAbortCallback()
3179 hspi->State = HAL_SPI_STATE_READY; in SPI_DMARxAbortCallback()
3183 hspi->AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3185 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3195 static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi) in SPI_2linesRxISR_8BIT() argument
3198 *hspi->pRxBuffPtr = *((__IO uint8_t *)&hspi->Instance->DR); in SPI_2linesRxISR_8BIT()
3199 hspi->pRxBuffPtr++; in SPI_2linesRxISR_8BIT()
3200 hspi->RxXferCount--; in SPI_2linesRxISR_8BIT()
3203 if (hspi->RxXferCount == 0U) in SPI_2linesRxISR_8BIT()
3206 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_2linesRxISR_8BIT()
3208 hspi->RxISR = SPI_2linesRxISR_8BITCRC; in SPI_2linesRxISR_8BIT()
3214 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in SPI_2linesRxISR_8BIT()
3216 if (hspi->TxXferCount == 0U) in SPI_2linesRxISR_8BIT()
3218 SPI_CloseRxTx_ISR(hspi); in SPI_2linesRxISR_8BIT()
3230 static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) in SPI_2linesRxISR_8BITCRC() argument
3236 ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; in SPI_2linesRxISR_8BITCRC()
3243 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in SPI_2linesRxISR_8BITCRC()
3245 if (hspi->TxXferCount == 0U) in SPI_2linesRxISR_8BITCRC()
3247 SPI_CloseRxTx_ISR(hspi); in SPI_2linesRxISR_8BITCRC()
3258 static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi) in SPI_2linesTxISR_8BIT() argument
3260 *(__IO uint8_t *)&hspi->Instance->DR = *((const uint8_t *)hspi->pTxBuffPtr); in SPI_2linesTxISR_8BIT()
3261 hspi->pTxBuffPtr++; in SPI_2linesTxISR_8BIT()
3262 hspi->TxXferCount--; in SPI_2linesTxISR_8BIT()
3265 if (hspi->TxXferCount == 0U) in SPI_2linesTxISR_8BIT()
3268 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_2linesTxISR_8BIT()
3271 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_2linesTxISR_8BIT()
3273 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); in SPI_2linesTxISR_8BIT()
3279 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); in SPI_2linesTxISR_8BIT()
3281 if (hspi->RxXferCount == 0U) in SPI_2linesTxISR_8BIT()
3283 SPI_CloseRxTx_ISR(hspi); in SPI_2linesTxISR_8BIT()
3294 static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi) in SPI_2linesRxISR_16BIT() argument
3297 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); in SPI_2linesRxISR_16BIT()
3298 hspi->pRxBuffPtr += sizeof(uint16_t); in SPI_2linesRxISR_16BIT()
3299 hspi->RxXferCount--; in SPI_2linesRxISR_16BIT()
3301 if (hspi->RxXferCount == 0U) in SPI_2linesRxISR_16BIT()
3304 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_2linesRxISR_16BIT()
3306 hspi->RxISR = SPI_2linesRxISR_16BITCRC; in SPI_2linesRxISR_16BIT()
3312 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE); in SPI_2linesRxISR_16BIT()
3314 if (hspi->TxXferCount == 0U) in SPI_2linesRxISR_16BIT()
3316 SPI_CloseRxTx_ISR(hspi); in SPI_2linesRxISR_16BIT()
3328 static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) in SPI_2linesRxISR_16BITCRC() argument
3333 tmpreg = READ_REG(hspi->Instance->DR); in SPI_2linesRxISR_16BITCRC()
3338 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE); in SPI_2linesRxISR_16BITCRC()
3340 SPI_CloseRxTx_ISR(hspi); in SPI_2linesRxISR_16BITCRC()
3350 static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi) in SPI_2linesTxISR_16BIT() argument
3353 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_2linesTxISR_16BIT()
3354 hspi->pTxBuffPtr += sizeof(uint16_t); in SPI_2linesTxISR_16BIT()
3355 hspi->TxXferCount--; in SPI_2linesTxISR_16BIT()
3358 if (hspi->TxXferCount == 0U) in SPI_2linesTxISR_16BIT()
3361 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_2linesTxISR_16BIT()
3364 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_2linesTxISR_16BIT()
3366 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); in SPI_2linesTxISR_16BIT()
3372 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE); in SPI_2linesTxISR_16BIT()
3374 if (hspi->RxXferCount == 0U) in SPI_2linesTxISR_16BIT()
3376 SPI_CloseRxTx_ISR(hspi); in SPI_2linesTxISR_16BIT()
3388 static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) in SPI_RxISR_8BITCRC() argument
3394 ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR; in SPI_RxISR_8BITCRC()
3400 SPI_CloseRx_ISR(hspi); in SPI_RxISR_8BITCRC()
3410 static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi) in SPI_RxISR_8BIT() argument
3412 *hspi->pRxBuffPtr = (*(__IO uint8_t *)&hspi->Instance->DR); in SPI_RxISR_8BIT()
3413 hspi->pRxBuffPtr++; in SPI_RxISR_8BIT()
3414 hspi->RxXferCount--; in SPI_RxISR_8BIT()
3418 if ((hspi->RxXferCount == 1U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in SPI_RxISR_8BIT()
3420 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_RxISR_8BIT()
3423 if (READ_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT)) in SPI_RxISR_8BIT()
3426 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_RxISR_8BIT()
3431 if (hspi->RxXferCount == 0U) in SPI_RxISR_8BIT()
3434 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_RxISR_8BIT()
3436 hspi->RxISR = SPI_RxISR_8BITCRC; in SPI_RxISR_8BIT()
3440 SPI_CloseRx_ISR(hspi); in SPI_RxISR_8BIT()
3451 static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) in SPI_RxISR_16BITCRC() argument
3456 tmpreg = READ_REG(hspi->Instance->DR); in SPI_RxISR_16BITCRC()
3461 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in SPI_RxISR_16BITCRC()
3463 SPI_CloseRx_ISR(hspi); in SPI_RxISR_16BITCRC()
3473 static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi) in SPI_RxISR_16BIT() argument
3475 *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)(hspi->Instance->DR); in SPI_RxISR_16BIT()
3476 hspi->pRxBuffPtr += sizeof(uint16_t); in SPI_RxISR_16BIT()
3477 hspi->RxXferCount--; in SPI_RxISR_16BIT()
3481 if ((hspi->RxXferCount == 1U) && (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)) in SPI_RxISR_16BIT()
3483 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_RxISR_16BIT()
3486 if (READ_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT)) in SPI_RxISR_16BIT()
3489 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_RxISR_16BIT()
3494 if (hspi->RxXferCount == 0U) in SPI_RxISR_16BIT()
3497 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_RxISR_16BIT()
3499 hspi->RxISR = SPI_RxISR_16BITCRC; in SPI_RxISR_16BIT()
3503 SPI_CloseRx_ISR(hspi); in SPI_RxISR_16BIT()
3513 static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi) in SPI_TxISR_8BIT() argument
3515 *(__IO uint8_t *)&hspi->Instance->DR = *((const uint8_t *)hspi->pTxBuffPtr); in SPI_TxISR_8BIT()
3516 hspi->pTxBuffPtr++; in SPI_TxISR_8BIT()
3517 hspi->TxXferCount--; in SPI_TxISR_8BIT()
3519 if (hspi->TxXferCount == 0U) in SPI_TxISR_8BIT()
3522 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_TxISR_8BIT()
3525 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_TxISR_8BIT()
3528 SPI_CloseTx_ISR(hspi); in SPI_TxISR_8BIT()
3538 static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi) in SPI_TxISR_16BIT() argument
3541 hspi->Instance->DR = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3542 hspi->pTxBuffPtr += sizeof(uint16_t); in SPI_TxISR_16BIT()
3543 hspi->TxXferCount--; in SPI_TxISR_16BIT()
3545 if (hspi->TxXferCount == 0U) in SPI_TxISR_16BIT()
3548 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_TxISR_16BIT()
3551 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); in SPI_TxISR_16BIT()
3554 SPI_CloseTx_ISR(hspi); in SPI_TxISR_16BIT()
3568 static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, Flag… in SPI_WaitFlagStateUntilTimeout() argument
3582 while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) in SPI_WaitFlagStateUntilTimeout()
3593 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); in SPI_WaitFlagStateUntilTimeout()
3595 if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) in SPI_WaitFlagStateUntilTimeout()
3596 … || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) in SPI_WaitFlagStateUntilTimeout()
3599 __HAL_SPI_DISABLE(hspi); in SPI_WaitFlagStateUntilTimeout()
3603 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_WaitFlagStateUntilTimeout()
3605 SPI_RESET_CRC(hspi); in SPI_WaitFlagStateUntilTimeout()
3608 hspi->State = HAL_SPI_STATE_READY; in SPI_WaitFlagStateUntilTimeout()
3611 __HAL_UNLOCK(hspi); in SPI_WaitFlagStateUntilTimeout()
3635 static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t … in SPI_EndRxTransaction() argument
3637 if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) in SPI_EndRxTransaction()
3638 … || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) in SPI_EndRxTransaction()
3641 __HAL_SPI_DISABLE(hspi); in SPI_EndRxTransaction()
3644 if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY)) in SPI_EndRxTransaction()
3647 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, RESET, Timeout, Tickstart) != HAL_OK) in SPI_EndRxTransaction()
3649 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_EndRxTransaction()
3656 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) in SPI_EndRxTransaction()
3658 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_EndRxTransaction()
3672 static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t… in SPI_EndRxTxTransaction() argument
3675 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_TXE, SET, Timeout, Tickstart) != HAL_OK) in SPI_EndRxTxTransaction()
3677 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_EndRxTxTransaction()
3682 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) in SPI_EndRxTxTransaction()
3684 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_EndRxTxTransaction()
3696 static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi) in SPI_CloseRxTx_ISR() argument
3705 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR); in SPI_CloseRxTx_ISR()
3712 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_CloseRxTx_ISR()
3716 } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); in SPI_CloseRxTx_ISR()
3719 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_CloseRxTx_ISR()
3721 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_CloseRxTx_ISR()
3725 if (hspi->Init.Direction == SPI_DIRECTION_2LINES) in SPI_CloseRxTx_ISR()
3727 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_CloseRxTx_ISR()
3732 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) in SPI_CloseRxTx_ISR()
3735 if (SPI_ISCRCErrorValid(hspi) == SPI_VALID_CRC_ERROR) in SPI_CloseRxTx_ISR()
3737 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRxTx_ISR()
3738 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_CloseRxTx_ISR()
3741 SPI_RESET_CRC(hspi); in SPI_CloseRxTx_ISR()
3745 hspi->ErrorCallback(hspi); in SPI_CloseRxTx_ISR()
3747 HAL_SPI_ErrorCallback(hspi); in SPI_CloseRxTx_ISR()
3752 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_CloseRxTx_ISR()
3758 if (hspi->ErrorCode == HAL_SPI_ERROR_NONE) in SPI_CloseRxTx_ISR()
3760 if (hspi->State == HAL_SPI_STATE_BUSY_RX) in SPI_CloseRxTx_ISR()
3762 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRxTx_ISR()
3765 hspi->RxCpltCallback(hspi); in SPI_CloseRxTx_ISR()
3767 HAL_SPI_RxCpltCallback(hspi); in SPI_CloseRxTx_ISR()
3772 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRxTx_ISR()
3775 hspi->TxRxCpltCallback(hspi); in SPI_CloseRxTx_ISR()
3777 HAL_SPI_TxRxCpltCallback(hspi); in SPI_CloseRxTx_ISR()
3783 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRxTx_ISR()
3786 hspi->ErrorCallback(hspi); in SPI_CloseRxTx_ISR()
3788 HAL_SPI_ErrorCallback(hspi); in SPI_CloseRxTx_ISR()
3802 static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi) in SPI_CloseRx_ISR() argument
3805 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR)); in SPI_CloseRx_ISR()
3808 if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT, HAL_GetTick()) != HAL_OK) in SPI_CloseRx_ISR()
3810 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_CloseRx_ISR()
3814 if (hspi->Init.Direction == SPI_DIRECTION_2LINES) in SPI_CloseRx_ISR()
3816 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_CloseRx_ISR()
3818 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseRx_ISR()
3822 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET) in SPI_CloseRx_ISR()
3825 if (SPI_ISCRCErrorValid(hspi) == SPI_VALID_CRC_ERROR) in SPI_CloseRx_ISR()
3827 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_CloseRx_ISR()
3830 SPI_RESET_CRC(hspi); in SPI_CloseRx_ISR()
3834 hspi->ErrorCallback(hspi); in SPI_CloseRx_ISR()
3836 HAL_SPI_ErrorCallback(hspi); in SPI_CloseRx_ISR()
3841 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_CloseRx_ISR()
3847 if (hspi->ErrorCode == HAL_SPI_ERROR_NONE) in SPI_CloseRx_ISR()
3851 hspi->RxCpltCallback(hspi); in SPI_CloseRx_ISR()
3853 HAL_SPI_RxCpltCallback(hspi); in SPI_CloseRx_ISR()
3860 hspi->ErrorCallback(hspi); in SPI_CloseRx_ISR()
3862 HAL_SPI_ErrorCallback(hspi); in SPI_CloseRx_ISR()
3876 static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi) in SPI_CloseTx_ISR() argument
3889 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_CloseTx_ISR()
3893 } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); in SPI_CloseTx_ISR()
3896 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); in SPI_CloseTx_ISR()
3899 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) in SPI_CloseTx_ISR()
3901 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in SPI_CloseTx_ISR()
3905 if (hspi->Init.Direction == SPI_DIRECTION_2LINES) in SPI_CloseTx_ISR()
3907 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_CloseTx_ISR()
3910 hspi->State = HAL_SPI_STATE_READY; in SPI_CloseTx_ISR()
3911 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in SPI_CloseTx_ISR()
3915 hspi->ErrorCallback(hspi); in SPI_CloseTx_ISR()
3917 HAL_SPI_ErrorCallback(hspi); in SPI_CloseTx_ISR()
3924 hspi->TxCpltCallback(hspi); in SPI_CloseTx_ISR()
3926 HAL_SPI_TxCpltCallback(hspi); in SPI_CloseTx_ISR()
3937 static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi) in SPI_AbortRx_ISR() argument
3947 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in SPI_AbortRx_ISR()
3951 } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); in SPI_AbortRx_ISR()
3954 __HAL_SPI_DISABLE(hspi); in SPI_AbortRx_ISR()
3957 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE | SPI_CR2_RXNEIE | SPI_CR2_ERRIE)); in SPI_AbortRx_ISR()
3960 tmpreg = READ_REG(hspi->Instance->DR); in SPI_AbortRx_ISR()
3964 hspi->State = HAL_SPI_STATE_ABORT; in SPI_AbortRx_ISR()
3973 static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi) in SPI_AbortTx_ISR() argument
3976 CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE)); in SPI_AbortTx_ISR()
3979 __HAL_SPI_DISABLE(hspi); in SPI_AbortTx_ISR()
3981 hspi->State = HAL_SPI_STATE_ABORT; in SPI_AbortTx_ISR()
3992 uint8_t SPI_ISCRCErrorValid(SPI_HandleTypeDef *hspi) in SPI_ISCRCErrorValid() argument
3998 if (hspi->Instance == SPI2) in SPI_ISCRCErrorValid()
4000 if (hspi->Instance->RXCRCR == 0U) in SPI_ISCRCErrorValid()
4007 UNUSED(hspi); in SPI_ISCRCErrorValid()