Lines Matching refs:hspi

174 static HAL_StatusTypeDef SPI_WaitOnFlagUntilTimeout(const SPI_HandleTypeDef *hspi, uint32_t Flag,
176 static void SPI_TxISR_8BIT(SPI_HandleTypeDef *hspi);
177 static void SPI_TxISR_16BIT(SPI_HandleTypeDef *hspi);
178 static void SPI_TxISR_32BIT(SPI_HandleTypeDef *hspi);
179 static void SPI_RxISR_8BIT(SPI_HandleTypeDef *hspi);
180 static void SPI_RxISR_16BIT(SPI_HandleTypeDef *hspi);
181 static void SPI_RxISR_32BIT(SPI_HandleTypeDef *hspi);
182 static void SPI_AbortTransfer(SPI_HandleTypeDef *hspi);
183 static void SPI_CloseTransfer(SPI_HandleTypeDef *hspi);
184 static uint32_t SPI_GetPacketSize(const SPI_HandleTypeDef *hspi);
239 HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) in HAL_SPI_Init() argument
248 if (hspi == NULL) in HAL_SPI_Init()
254 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_Init()
255 assert_param(IS_SPI_MODE(hspi->Init.Mode)); in HAL_SPI_Init()
256 assert_param(IS_SPI_DIRECTION(hspi->Init.Direction)); in HAL_SPI_Init()
257 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Init()
259 assert_param(IS_SPI_LIMITED_DATASIZE(hspi->Init.DataSize)); in HAL_SPI_Init()
260 assert_param(IS_SPI_LIMITED_FIFOTHRESHOLD(hspi->Init.FifoThreshold)); in HAL_SPI_Init()
264 assert_param(IS_SPI_DATASIZE(hspi->Init.DataSize)); in HAL_SPI_Init()
265 assert_param(IS_SPI_FIFOTHRESHOLD(hspi->Init.FifoThreshold)); in HAL_SPI_Init()
267 assert_param(IS_SPI_NSS(hspi->Init.NSS)); in HAL_SPI_Init()
268 assert_param(IS_SPI_NSSP(hspi->Init.NSSPMode)); in HAL_SPI_Init()
269 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
270 assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); in HAL_SPI_Init()
271 assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); in HAL_SPI_Init()
272 if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) in HAL_SPI_Init()
274 assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); in HAL_SPI_Init()
275 assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); in HAL_SPI_Init()
278 assert_param(IS_SPI_CRC_CALCULATION(hspi->Init.CRCCalculation)); in HAL_SPI_Init()
279 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
281 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Init()
283 assert_param(IS_SPI_LIMITED_CRC_LENGTH(hspi->Init.CRCLength)); in HAL_SPI_Init()
287 assert_param(IS_SPI_CRC_LENGTH(hspi->Init.CRCLength)); in HAL_SPI_Init()
289 assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); in HAL_SPI_Init()
290 assert_param(IS_SPI_CRC_INITIALIZATION_PATTERN(hspi->Init.TxCRCInitializationPattern)); in HAL_SPI_Init()
291 assert_param(IS_SPI_CRC_INITIALIZATION_PATTERN(hspi->Init.RxCRCInitializationPattern)); in HAL_SPI_Init()
294 hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; in HAL_SPI_Init()
297 assert_param(IS_SPI_RDY_MASTER_MANAGEMENT(hspi->Init.ReadyMasterManagement)); in HAL_SPI_Init()
298 assert_param(IS_SPI_RDY_POLARITY(hspi->Init.ReadyPolarity)); in HAL_SPI_Init()
299 assert_param(IS_SPI_MASTER_RX_AUTOSUSP(hspi->Init.MasterReceiverAutoSusp)); in HAL_SPI_Init()
302 if ((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (hspi->Init.DataSize > SPI_DATASIZE_16BIT)) in HAL_SPI_Init()
308 packet_length = SPI_GetPacketSize(hspi); in HAL_SPI_Init()
309 if (((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (packet_length > SPI_LOWEND_FIFO_SIZE)) || in HAL_SPI_Init()
310 ((IS_SPI_FULL_INSTANCE(hspi->Instance)) && (packet_length > SPI_HIGHEND_FIFO_SIZE))) in HAL_SPI_Init()
315 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
318 if ((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (hspi->Init.CRCLength > SPI_CRC_LENGTH_16BIT)) in HAL_SPI_Init()
324 if (hspi->Init.CRCLength == SPI_CRC_LENGTH_DATASIZE) in HAL_SPI_Init()
326 crc_length = (hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) << SPI_CFG1_CRCSIZE_Pos; in HAL_SPI_Init()
330 crc_length = hspi->Init.CRCLength; in HAL_SPI_Init()
334 assert_param(IS_SPI_CRC_POLYNOMIAL_SIZE(hspi->Init.CRCPolynomial, crc_length)); in HAL_SPI_Init()
337 if ((hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) > (crc_length >> SPI_CFG1_CRCSIZE_Pos)) in HAL_SPI_Init()
344 crc_length = hspi->Init.DataSize << SPI_CFG1_CRCSIZE_Pos; in HAL_SPI_Init()
348 if (hspi->State == HAL_SPI_STATE_RESET) in HAL_SPI_Init()
351 hspi->Lock = HAL_UNLOCKED; in HAL_SPI_Init()
355hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_Init()
356hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_Init()
357hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_Init()
358hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_Init()
359hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_Init()
360hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_Init()
361hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_Init()
362hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_Init()
363hspi->SuspendCallback = HAL_SPI_SuspendCallback; /* Legacy weak SuspendCallback */ in HAL_SPI_Init()
365 if (hspi->MspInitCallback == NULL) in HAL_SPI_Init()
367 hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_Init()
371 hspi->MspInitCallback(hspi); in HAL_SPI_Init()
374 HAL_SPI_MspInit(hspi); in HAL_SPI_Init()
378 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_Init()
381 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Init()
385 crc_length = hspi->Instance->CFG1 & SPI_CFG1_CRCSIZE; in HAL_SPI_Init()
393 if ((hspi->Init.NSS == SPI_NSS_SOFT) && (((hspi->Init.Mode == SPI_MODE_MASTER) && \ in HAL_SPI_Init()
394 (hspi->Init.NSSPolarity == SPI_NSS_POLARITY_LOW)) || \ in HAL_SPI_Init()
395 ((hspi->Init.Mode == SPI_MODE_SLAVE) && \ in HAL_SPI_Init()
396 (hspi->Init.NSSPolarity == SPI_NSS_POLARITY_HIGH)))) in HAL_SPI_Init()
398 SET_BIT(hspi->Instance->CR1, SPI_CR1_SSI); in HAL_SPI_Init()
402 …if (((hspi->Init.Mode & SPI_MODE_MASTER) == SPI_MODE_MASTER) && (hspi->Init.DataSize >= SPI_DATASI… in HAL_SPI_Init()
404 MODIFY_REG(hspi->Instance->CR1, SPI_CR1_MASRX, hspi->Init.MasterReceiverAutoSusp); in HAL_SPI_Init()
408 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_MASRX); in HAL_SPI_Init()
412 …WRITE_REG(hspi->Instance->CFG1, (hspi->Init.BaudRatePrescaler | hspi->Init.CRCCalculation | crc_le… in HAL_SPI_Init()
413 hspi->Init.FifoThreshold | hspi->Init.DataSize)); in HAL_SPI_Init()
416 WRITE_REG(hspi->Instance->CFG2, (hspi->Init.NSSPMode | hspi->Init.TIMode | in HAL_SPI_Init()
417 hspi->Init.NSSPolarity | hspi->Init.NSS | in HAL_SPI_Init()
418 hspi->Init.CLKPolarity | hspi->Init.CLKPhase | in HAL_SPI_Init()
419 hspi->Init.FirstBit | hspi->Init.Mode | in HAL_SPI_Init()
420 hspi->Init.MasterInterDataIdleness | hspi->Init.Direction | in HAL_SPI_Init()
421 hspi->Init.MasterSSIdleness | hspi->Init.IOSwap | in HAL_SPI_Init()
422 hspi->Init.ReadyMasterManagement | hspi->Init.ReadyPolarity)); in HAL_SPI_Init()
427 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
430 if (hspi->Init.TxCRCInitializationPattern == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN) in HAL_SPI_Init()
432 SET_BIT(hspi->Instance->CR1, SPI_CR1_TCRCINI); in HAL_SPI_Init()
436 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_TCRCINI); in HAL_SPI_Init()
440 if (hspi->Init.RxCRCInitializationPattern == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN) in HAL_SPI_Init()
442 SET_BIT(hspi->Instance->CR1, SPI_CR1_RCRCINI); in HAL_SPI_Init()
446 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_RCRCINI); in HAL_SPI_Init()
450 if (((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (crc_length == SPI_CRC_LENGTH_16BIT)) || in HAL_SPI_Init()
451 ((IS_SPI_FULL_INSTANCE(hspi->Instance)) && (crc_length == SPI_CRC_LENGTH_32BIT))) in HAL_SPI_Init()
454 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRC33_17); in HAL_SPI_Init()
456 WRITE_REG(hspi->Instance->CRCPOLY, hspi->Init.CRCPolynomial); in HAL_SPI_Init()
461 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_CRC33_17); in HAL_SPI_Init()
466 WRITE_REG(hspi->Instance->CRCPOLY, (hspi->Init.CRCPolynomial) | crc_poly_msb_mask); in HAL_SPI_Init()
472 if (hspi->Init.Mode == SPI_MODE_SLAVE) in HAL_SPI_Init()
475 MODIFY_REG(hspi->Instance->CFG1, SPI_CFG1_UDRCFG, SPI_CFG1_UDRCFG); in HAL_SPI_Init()
481 CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); in HAL_SPI_Init()
485 if ((hspi->Init.Mode & SPI_MODE_MASTER) == SPI_MODE_MASTER) in HAL_SPI_Init()
488 MODIFY_REG(hspi->Instance->CFG2, SPI_CFG2_AFCNTR, (hspi->Init.MasterKeepIOState)); in HAL_SPI_Init()
491 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Init()
492 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Init()
503 HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_DeInit() argument
506 if (hspi == NULL) in HAL_SPI_DeInit()
512 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_DeInit()
514 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_DeInit()
517 __HAL_SPI_DISABLE(hspi); in HAL_SPI_DeInit()
520 if (hspi->MspDeInitCallback == NULL) in HAL_SPI_DeInit()
522 hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_DeInit()
526 hspi->MspDeInitCallback(hspi); in HAL_SPI_DeInit()
529 HAL_SPI_MspDeInit(hspi); in HAL_SPI_DeInit()
532 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_DeInit()
533 hspi->State = HAL_SPI_STATE_RESET; in HAL_SPI_DeInit()
536 __HAL_UNLOCK(hspi); in HAL_SPI_DeInit()
547 __weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspInit() argument
550 UNUSED(hspi); in HAL_SPI_MspInit()
563 __weak void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspDeInit() argument
566 UNUSED(hspi); in HAL_SPI_MspDeInit()
585 HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Callb… in HAL_SPI_RegisterCallback() argument
593 hspi->ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK; in HAL_SPI_RegisterCallback()
598 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_RegisterCallback()
603 hspi->TxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
607 hspi->RxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
611 hspi->TxRxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
615 hspi->TxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
619 hspi->RxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
623 hspi->TxRxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
627 hspi->ErrorCallback = pCallback; in HAL_SPI_RegisterCallback()
631 hspi->AbortCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
635 hspi->SuspendCallback = pCallback; in HAL_SPI_RegisterCallback()
639 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
643 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
648 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
655 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_RegisterCallback()
660 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
664 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
669 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
679 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
698 HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Cal… in HAL_SPI_UnRegisterCallback() argument
702 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_UnRegisterCallback()
707hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_UnRegisterCallback()
711hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_UnRegisterCallback()
715hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_UnRegisterCallback()
719hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
723hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
727hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
731hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_UnRegisterCallback()
735hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_UnRegisterCallback()
739hspi->SuspendCallback = HAL_SPI_SuspendCallback; /* Legacy weak SuspendCallback */ in HAL_SPI_UnRegisterCallback()
743hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
747hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
752 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
759 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_UnRegisterCallback()
764hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
768hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
773 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
783 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
838 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size, ui… in HAL_SPI_Transmit() argument
841 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_Transmit()
847 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit()
850 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Transmit()
862 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit()
873 __HAL_LOCK(hspi); in HAL_SPI_Transmit()
876 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit()
877 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit()
878 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit()
879 hspi->TxXferSize = Size; in HAL_SPI_Transmit()
880 hspi->TxXferCount = Size; in HAL_SPI_Transmit()
883 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit()
884 hspi->RxXferSize = (uint16_t) 0UL; in HAL_SPI_Transmit()
885 hspi->RxXferCount = (uint16_t) 0UL; in HAL_SPI_Transmit()
886 hspi->TxISR = NULL; in HAL_SPI_Transmit()
887 hspi->RxISR = NULL; in HAL_SPI_Transmit()
890 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit()
892 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit()
896 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit()
900 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit()
903 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit()
905 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Transmit()
908 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit()
912 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Transmit()
915 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
918 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
920 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
921 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
922 hspi->TxXferCount--; in HAL_SPI_Transmit()
930 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
932 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
933 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
936 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
944 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit()
947 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
950 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
952 if ((hspi->TxXferCount > 1UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_01DATA)) in HAL_SPI_Transmit()
954 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
955 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
956 hspi->TxXferCount -= (uint16_t)2UL; in HAL_SPI_Transmit()
961 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
963 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
965 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
966 hspi->TxXferCount--; in HAL_SPI_Transmit()
975 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
977 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
978 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
981 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
991 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
994 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
996 if ((hspi->TxXferCount > 3UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_03DATA)) in HAL_SPI_Transmit()
998 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
999 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
1000 hspi->TxXferCount -= (uint16_t)4UL; in HAL_SPI_Transmit()
1002 … else if ((hspi->TxXferCount > 1UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_01DATA)) in HAL_SPI_Transmit()
1005 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
1007 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
1009 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
1010 hspi->TxXferCount -= (uint16_t)2UL; in HAL_SPI_Transmit()
1014 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
1015 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_Transmit()
1016 hspi->TxXferCount--; in HAL_SPI_Transmit()
1025 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
1027 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
1028 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
1031 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
1040 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Transmit()
1042 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_Transmit()
1046 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
1048 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
1051 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
1053 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Transmit()
1072 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SPI_Receive() argument
1077 init_max_data_in_fifo = (((uint16_t)(hspi->Init.FifoThreshold >> 5U) + 1U)); in HAL_SPI_Receive()
1079 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_Receive()
1083 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive()
1086 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Receive()
1098 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive()
1109 __HAL_LOCK(hspi); in HAL_SPI_Receive()
1112 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive()
1113 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive()
1114 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive()
1115 hspi->RxXferSize = Size; in HAL_SPI_Receive()
1116 hspi->RxXferCount = Size; in HAL_SPI_Receive()
1119 hspi->pTxBuffPtr = NULL; in HAL_SPI_Receive()
1120 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive()
1121 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive()
1122 hspi->RxISR = NULL; in HAL_SPI_Receive()
1123 hspi->TxISR = NULL; in HAL_SPI_Receive()
1126 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive()
1128 SPI_1LINE_RX(hspi); in HAL_SPI_Receive()
1132 SPI_2LINES_RX(hspi); in HAL_SPI_Receive()
1136 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive()
1139 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive()
1141 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive()
1144 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive()
1148 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Receive()
1151 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1154 temp_sr_reg = hspi->Instance->SR; in HAL_SPI_Receive()
1157 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_Receive()
1159 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1160 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_Receive()
1161 hspi->RxXferCount--; in HAL_SPI_Receive()
1164 … else if ((hspi->RxXferCount < init_max_data_in_fifo) && ((temp_sr_reg & SPI_SR_RXWNE_Msk) != 0UL)) in HAL_SPI_Receive()
1166 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1167 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_Receive()
1168 hspi->RxXferCount--; in HAL_SPI_Receive()
1174 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Receive()
1176 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Receive()
1185 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1187 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1188 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1191 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1199 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive()
1202 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1205 temp_sr_reg = hspi->Instance->SR; in HAL_SPI_Receive()
1208 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_Receive()
1211 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_Receive()
1213 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1215 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_Receive()
1216 hspi->RxXferCount--; in HAL_SPI_Receive()
1219 … else if ((hspi->RxXferCount < init_max_data_in_fifo) && ((temp_sr_reg & SPI_SR_RXWNE_Msk) != 0UL)) in HAL_SPI_Receive()
1222 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_Receive()
1224 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1226 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_Receive()
1228 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_Receive()
1230 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1232 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_Receive()
1233 hspi->RxXferCount -= (uint16_t)2UL; in HAL_SPI_Receive()
1236 else if ((hspi->RxXferCount == 1UL) && ((temp_sr_reg & SPI_SR_RXPLVL_0) != 0UL)) in HAL_SPI_Receive()
1239 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_Receive()
1241 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1243 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_Receive()
1244 hspi->RxXferCount--; in HAL_SPI_Receive()
1250 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Receive()
1252 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Receive()
1261 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1263 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1264 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1267 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1278 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1281 temp_sr_reg = hspi->Instance->SR; in HAL_SPI_Receive()
1284 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_Receive()
1286 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1287 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1288 hspi->RxXferCount--; in HAL_SPI_Receive()
1291 … else if ((hspi->RxXferCount < init_max_data_in_fifo) && ((temp_sr_reg & SPI_SR_RXWNE_Msk) != 0UL)) in HAL_SPI_Receive()
1293 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1294 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1295 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1296 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1297 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1298 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1299 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1300 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1301 hspi->RxXferCount -= (uint16_t)4UL; in HAL_SPI_Receive()
1304 else if ((hspi->RxXferCount < 4UL) && ((temp_sr_reg & SPI_SR_RXPLVL_Msk) != 0UL)) in HAL_SPI_Receive()
1306 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1307 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1308 hspi->RxXferCount--; in HAL_SPI_Receive()
1314 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Receive()
1316 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Receive()
1325 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1327 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1328 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1331 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1340 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive()
1343 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1345 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_Receive()
1351 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1353 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1356 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1359 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Receive()
1379 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t … in HAL_SPI_TransmitReceive() argument
1383 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_TransmitReceive()
1384 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_TransmitReceive()
1393 init_max_data_in_fifo = (((uint16_t)(hspi->Init.FifoThreshold >> 5U) + 1U)); in HAL_SPI_TransmitReceive()
1396 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive()
1399 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_TransmitReceive()
1414 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive()
1425 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive()
1428 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive()
1429 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive()
1430 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive()
1431 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive()
1432 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive()
1433 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive()
1434 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive()
1435 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive()
1438 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive()
1439 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive()
1442 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive()
1445 if (IS_SPI_FULL_INSTANCE(hspi->Instance)) in HAL_SPI_TransmitReceive()
1455 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive()
1457 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive()
1459 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_TransmitReceive()
1462 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive()
1466 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_TransmitReceive()
1474 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL) && in HAL_SPI_TransmitReceive()
1477 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1478 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive()
1479 hspi->TxXferCount --; in HAL_SPI_TransmitReceive()
1480 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1484 temp_sr_reg = hspi->Instance->SR; in HAL_SPI_TransmitReceive()
1489 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_TransmitReceive()
1491 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1492 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive()
1493 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1494 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1499 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1500 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive()
1501 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1502 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1510 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1512 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1513 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1516 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1525 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive()
1533 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL) && in HAL_SPI_TransmitReceive()
1537 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1539 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1541 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1542 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1543 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1547 temp_sr_reg = hspi->Instance->SR; in HAL_SPI_TransmitReceive()
1552 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_TransmitReceive()
1555 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_TransmitReceive()
1557 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1559 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1560 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1561 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1567 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_TransmitReceive()
1569 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1571 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1573 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_TransmitReceive()
1575 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1577 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1578 hspi->RxXferCount -= (uint16_t)2UL; in HAL_SPI_TransmitReceive()
1579 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1585 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_TransmitReceive()
1587 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1589 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1590 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1591 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1599 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1601 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1602 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1605 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1619 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL) && in HAL_SPI_TransmitReceive()
1622 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1623 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1624 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1625 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1629 temp_sr_reg = hspi->Instance->SR; in HAL_SPI_TransmitReceive()
1634 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_TransmitReceive()
1636 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1637 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1638 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1639 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1644 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1645 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1646 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1647 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1648 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1649 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1650 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1651 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1652 hspi->RxXferCount -= (uint16_t)4UL; in HAL_SPI_TransmitReceive()
1653 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1658 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1659 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1660 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1661 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1669 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1671 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1672 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1675 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1685 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, Timeout, tickstart) != HAL_OK) in HAL_SPI_TransmitReceive()
1687 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_TransmitReceive()
1691 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1693 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1696 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1698 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_TransmitReceive()
1716 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_IT() argument
1719 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit_IT()
1722 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Transmit_IT()
1736 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_IT()
1742 __HAL_LOCK(hspi); in HAL_SPI_Transmit_IT()
1745 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_IT()
1746 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_IT()
1747 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_IT()
1748 hspi->TxXferSize = Size; in HAL_SPI_Transmit_IT()
1749 hspi->TxXferCount = Size; in HAL_SPI_Transmit_IT()
1752 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit_IT()
1753 hspi->RxXferSize = (uint16_t) 0UL; in HAL_SPI_Transmit_IT()
1754 hspi->RxXferCount = (uint16_t) 0UL; in HAL_SPI_Transmit_IT()
1755 hspi->RxISR = NULL; in HAL_SPI_Transmit_IT()
1758 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Transmit_IT()
1760 hspi->TxISR = SPI_TxISR_32BIT; in HAL_SPI_Transmit_IT()
1762 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_IT()
1764 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_Transmit_IT()
1768 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_Transmit_IT()
1772 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_IT()
1774 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_IT()
1778 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit_IT()
1782 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit_IT()
1785 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_IT()
1788 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1791 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_TXP | SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Transmit_IT()
1793 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Transmit_IT()
1796 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit_IT()
1810 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_IT() argument
1813 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive_IT()
1816 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Receive_IT()
1825 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_IT()
1836 __HAL_LOCK(hspi); in HAL_SPI_Receive_IT()
1839 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_IT()
1840 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_IT()
1841 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_IT()
1842 hspi->RxXferSize = Size; in HAL_SPI_Receive_IT()
1843 hspi->RxXferCount = Size; in HAL_SPI_Receive_IT()
1846 hspi->pTxBuffPtr = NULL; in HAL_SPI_Receive_IT()
1847 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive_IT()
1848 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive_IT()
1849 hspi->TxISR = NULL; in HAL_SPI_Receive_IT()
1852 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Receive_IT()
1854 hspi->RxISR = SPI_RxISR_32BIT; in HAL_SPI_Receive_IT()
1856 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive_IT()
1858 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_Receive_IT()
1862 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_Receive_IT()
1866 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_IT()
1868 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_IT()
1872 SPI_2LINES_RX(hspi); in HAL_SPI_Receive_IT()
1880 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive_IT()
1883 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_IT()
1886 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1889 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_RXP | SPI_IT_OVR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Receive_IT()
1891 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive_IT()
1894 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive_IT()
1909 HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8… in HAL_SPI_TransmitReceive_IT() argument
1914 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_TransmitReceive_IT()
1918 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_IT()
1921 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_TransmitReceive_IT()
1930 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive_IT()
1941 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1944 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_IT()
1945 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_IT()
1946 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_IT()
1947 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1948 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1949 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_IT()
1950 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1951 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1952 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1955 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_TransmitReceive_IT()
1957 hspi->TxISR = SPI_TxISR_32BIT; in HAL_SPI_TransmitReceive_IT()
1958 hspi->RxISR = SPI_RxISR_32BIT; in HAL_SPI_TransmitReceive_IT()
1960 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1962 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1963 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1967 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1968 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1972 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive_IT()
1975 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive_IT()
1978 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_IT()
1981 while ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (tmp_TxXferCount != 0UL)) in HAL_SPI_TransmitReceive_IT()
1984 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_IT()
1986 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1987 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive_IT()
1988 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1989 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1992 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1995 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1997 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1999 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive_IT()
2000 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
2001 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
2006 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
2007 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive_IT()
2008 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
2009 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
2014 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
2017 …__HAL_SPI_ENABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_DXP | SPI_IT_UDR | SPI_IT_OVR | SPI_IT_FRE | SPI_IT… in HAL_SPI_TransmitReceive_IT()
2019 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_TransmitReceive_IT()
2022 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive_IT()
2039 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_DMA() argument
2044 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit_DMA()
2047 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Transmit_DMA()
2056 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_DMA()
2067 __HAL_LOCK(hspi); in HAL_SPI_Transmit_DMA()
2070 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_DMA()
2071 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_DMA()
2072 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_DMA()
2073 hspi->TxXferSize = Size; in HAL_SPI_Transmit_DMA()
2074 hspi->TxXferCount = Size; in HAL_SPI_Transmit_DMA()
2077 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit_DMA()
2078 hspi->TxISR = NULL; in HAL_SPI_Transmit_DMA()
2079 hspi->RxISR = NULL; in HAL_SPI_Transmit_DMA()
2080 hspi->RxXferSize = (uint16_t)0UL; in HAL_SPI_Transmit_DMA()
2081 hspi->RxXferCount = (uint16_t)0UL; in HAL_SPI_Transmit_DMA()
2084 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_DMA()
2086 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_DMA()
2090 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit_DMA()
2094 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmatx->Init.SrcDataWidth != DMA_SRC_DA… in HAL_SPI_Transmit_DMA()
2095 (IS_SPI_FULL_INSTANCE(hspi->Instance))) || \ in HAL_SPI_Transmit_DMA()
2096 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWI… in HAL_SPI_Transmit_DMA()
2099 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
2104 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_DMA()
2106 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_HALFWORD) in HAL_SPI_Transmit_DMA()
2108 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Transmit_DMA()
2110 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_Transmit_DMA()
2112 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_Transmit_DMA()
2115 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Transmit_DMA()
2117 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_Transmit_DMA()
2119 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Transmit_DMA()
2128 hspi->hdmatx->XferHalfCpltCallback = SPI_DMAHalfTransmitCplt; in HAL_SPI_Transmit_DMA()
2131 hspi->hdmatx->XferCpltCallback = SPI_DMATransmitCplt; in HAL_SPI_Transmit_DMA()
2134 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Transmit_DMA()
2137 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Transmit_DMA()
2140 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_Transmit_DMA()
2142 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_DMA()
2144 hspi->TxXferCount = Size; in HAL_SPI_Transmit_DMA()
2146 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Transmit_DMA()
2148 hspi->TxXferCount = Size * 2U; in HAL_SPI_Transmit_DMA()
2152 hspi->TxXferCount = Size * 4U; in HAL_SPI_Transmit_DMA()
2156 if ((hspi->hdmatx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_Transmit_DMA()
2158 if (hspi->hdmatx->LinkedListQueue != NULL) in HAL_SPI_Transmit_DMA()
2161hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->TxXferCount; in HAL_SPI_Transmit_DMA()
2164hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)hspi->pTx… in HAL_SPI_Transmit_DMA()
2167hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_Transmit_DMA()
2169 status = HAL_DMAEx_List_Start_IT(hspi->hdmatx); in HAL_SPI_Transmit_DMA()
2178 …status = HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->TXD… in HAL_SPI_Transmit_DMA()
2179 hspi->TxXferCount); in HAL_SPI_Transmit_DMA()
2186 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Transmit_DMA()
2187 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit_DMA()
2190 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
2196 if (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR) in HAL_SPI_Transmit_DMA()
2198 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_Transmit_DMA()
2202 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit_DMA()
2206 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_Transmit_DMA()
2209 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Transmit_DMA()
2212 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_DMA()
2214 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Transmit_DMA()
2217 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit_DMA()
2221 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
2235 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_DMA() argument
2240 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive_DMA()
2243 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Receive_DMA()
2252 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_DMA()
2254 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2260 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2265 __HAL_LOCK(hspi); in HAL_SPI_Receive_DMA()
2268 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_DMA()
2269 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_DMA()
2270 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_DMA()
2271 hspi->RxXferSize = Size; in HAL_SPI_Receive_DMA()
2272 hspi->RxXferCount = Size; in HAL_SPI_Receive_DMA()
2275 hspi->RxISR = NULL; in HAL_SPI_Receive_DMA()
2276 hspi->TxISR = NULL; in HAL_SPI_Receive_DMA()
2277 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive_DMA()
2278 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive_DMA()
2281 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_DMA()
2283 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_DMA()
2287 SPI_2LINES_RX(hspi); in HAL_SPI_Receive_DMA()
2291 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmarx->Init.DestDataWidth != DMA_DEST_D… in HAL_SPI_Receive_DMA()
2292 (IS_SPI_FULL_INSTANCE(hspi->Instance))) || \ in HAL_SPI_Receive_DMA()
2293 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAW… in HAL_SPI_Receive_DMA()
2296 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2301 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_Receive_DMA()
2304 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Receive_DMA()
2306 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_HALFWORD) in HAL_SPI_Receive_DMA()
2308 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Receive_DMA()
2310 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_Receive_DMA()
2312 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_Receive_DMA()
2315 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Receive_DMA()
2317 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_Receive_DMA()
2319 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Receive_DMA()
2328 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; in HAL_SPI_Receive_DMA()
2331 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; in HAL_SPI_Receive_DMA()
2334 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Receive_DMA()
2337 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Receive_DMA()
2339 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Receive_DMA()
2341 hspi->RxXferCount = Size; in HAL_SPI_Receive_DMA()
2343 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Receive_DMA()
2345 hspi->RxXferCount = Size * 2U; in HAL_SPI_Receive_DMA()
2349 hspi->RxXferCount = Size * 4U; in HAL_SPI_Receive_DMA()
2353 if ((hspi->hdmarx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_Receive_DMA()
2355 if (hspi->hdmarx->LinkedListQueue != NULL) in HAL_SPI_Receive_DMA()
2358hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->RxXferCount; in HAL_SPI_Receive_DMA()
2361hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_Receive_DMA()
2364hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)hspi->pRx… in HAL_SPI_Receive_DMA()
2366 status = HAL_DMAEx_List_Start_IT(hspi->hdmarx); in HAL_SPI_Receive_DMA()
2375 …status = HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->RXDR, (uint32_t)hspi->pRxBuffPt… in HAL_SPI_Receive_DMA()
2376 hspi->RxXferCount); in HAL_SPI_Receive_DMA()
2383 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Receive_DMA()
2384 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive_DMA()
2387 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2393 if (hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) in HAL_SPI_Receive_DMA()
2395 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_Receive_DMA()
2399 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive_DMA()
2403 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_Receive_DMA()
2406 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_OVR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Receive_DMA()
2409 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_DMA()
2411 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive_DMA()
2414 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive_DMA()
2418 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2433 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint… in HAL_SPI_TransmitReceive_DMA() argument
2439 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_DMA()
2442 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_TransmitReceive_DMA()
2451 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive_DMA()
2462 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2465 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_DMA()
2466 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_DMA()
2467 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_DMA()
2468 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2469 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2470 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_DMA()
2471 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2472 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2475 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2476 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2479 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive_DMA()
2482 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2485 if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && \ in HAL_SPI_TransmitReceive_DMA()
2486 ((hspi->hdmarx->Init.DestDataWidth != DMA_DEST_DATAWIDTH_WORD) || \ in HAL_SPI_TransmitReceive_DMA()
2487 (hspi->hdmatx->Init.SrcDataWidth != DMA_SRC_DATAWIDTH_WORD)) && \ in HAL_SPI_TransmitReceive_DMA()
2488 (IS_SPI_FULL_INSTANCE(hspi->Instance))) || \ in HAL_SPI_TransmitReceive_DMA()
2489 ((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && \ in HAL_SPI_TransmitReceive_DMA()
2490 ((hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_BYTE) || \ in HAL_SPI_TransmitReceive_DMA()
2491 (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_BYTE)))) in HAL_SPI_TransmitReceive_DMA()
2495 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2500 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2502 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2504 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2506 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2508 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_TransmitReceive_DMA()
2510 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2512 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2514 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2516 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_TransmitReceive_DMA()
2519 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2521 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2523 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2525 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2527 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2536 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfTransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2537 hspi->hdmarx->XferCpltCallback = SPI_DMATransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2540 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
2543 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2545 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2547 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2549 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2551 hspi->RxXferCount = Size * 2U; in HAL_SPI_TransmitReceive_DMA()
2555 hspi->RxXferCount = Size * 4U; in HAL_SPI_TransmitReceive_DMA()
2558 if ((hspi->hdmarx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_TransmitReceive_DMA()
2560 if (hspi->hdmarx->LinkedListQueue != NULL) in HAL_SPI_TransmitReceive_DMA()
2563hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->RxXferCount; in HAL_SPI_TransmitReceive_DMA()
2566hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_TransmitReceive_DMA()
2569hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)hspi->pRx… in HAL_SPI_TransmitReceive_DMA()
2571 status = HAL_DMAEx_List_Start_IT(hspi->hdmarx); in HAL_SPI_TransmitReceive_DMA()
2580 …status = HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->RXDR, (uint32_t)hspi->pRxBuffPt… in HAL_SPI_TransmitReceive_DMA()
2581 hspi->RxXferCount); in HAL_SPI_TransmitReceive_DMA()
2588 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2589 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2592 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2598 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2602 hspi->hdmatx->XferHalfCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2603 hspi->hdmatx->XferCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2604 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2607 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
2609 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2611 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2613 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2615 hspi->TxXferCount = Size * 2U; in HAL_SPI_TransmitReceive_DMA()
2619 hspi->TxXferCount = Size * 4U; in HAL_SPI_TransmitReceive_DMA()
2623 if ((hspi->hdmatx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_TransmitReceive_DMA()
2625 if (hspi->hdmatx->LinkedListQueue != NULL) in HAL_SPI_TransmitReceive_DMA()
2628hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->TxXferCount; in HAL_SPI_TransmitReceive_DMA()
2631hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)hspi->pTx… in HAL_SPI_TransmitReceive_DMA()
2634hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_TransmitReceive_DMA()
2636 status = HAL_DMAEx_List_Start_IT(hspi->hdmatx); in HAL_SPI_TransmitReceive_DMA()
2645 …status = HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->TXD… in HAL_SPI_TransmitReceive_DMA()
2646 hspi->TxXferCount); in HAL_SPI_TransmitReceive_DMA()
2653 (void)HAL_DMA_Abort(hspi->hdmarx); in HAL_SPI_TransmitReceive_DMA()
2656 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2657 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2660 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2665 …if ((hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) && (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCU… in HAL_SPI_TransmitReceive_DMA()
2667 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_TransmitReceive_DMA()
2671 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive_DMA()
2675 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2678 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_OVR | SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_TransmitReceive_DMA()
2681 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_DMA()
2683 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_TransmitReceive_DMA()
2686 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive_DMA()
2690 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2708 HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort() argument
2715 __HAL_LOCK(hspi); in HAL_SPI_Abort()
2718 hspi->State = HAL_SPI_STATE_ABORT; in HAL_SPI_Abort()
2725 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Abort()
2728 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_Abort()
2734 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2737 } while (HAL_IS_BIT_SET(hspi->Instance->IER, SPI_IT_EOT)); in HAL_SPI_Abort()
2740 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSUSP); in HAL_SPI_Abort()
2746 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2749 } while (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)); in HAL_SPI_Abort()
2752 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Abort()
2758 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2761 } while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_SUSP)); in HAL_SPI_Abort()
2765 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN)) in HAL_SPI_Abort()
2767 if (hspi->hdmatx != NULL) in HAL_SPI_Abort()
2770 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2773 if (HAL_DMA_Abort(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort()
2775 if (HAL_DMA_GetError(hspi->hdmatx) == HAL_DMA_ERROR_TIMEOUT) in HAL_SPI_Abort()
2777 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2784 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN)) in HAL_SPI_Abort()
2786 if (hspi->hdmarx != NULL) in HAL_SPI_Abort()
2789 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2792 if (HAL_DMA_Abort(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort()
2794 if (HAL_DMA_GetError(hspi->hdmarx) == HAL_DMA_ERROR_TIMEOUT) in HAL_SPI_Abort()
2796 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2803 SPI_AbortTransfer(hspi); in HAL_SPI_Abort()
2806 if (HAL_IS_BIT_SET(hspi->ErrorCode, HAL_SPI_ERROR_ABORT)) in HAL_SPI_Abort()
2814 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort()
2818 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort()
2821 __HAL_UNLOCK(hspi); in HAL_SPI_Abort()
2841 HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort_IT() argument
2849 hspi->State = HAL_SPI_STATE_ABORT; in HAL_SPI_Abort_IT()
2856 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Abort_IT()
2859 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_Abort_IT()
2865 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2868 } while (HAL_IS_BIT_SET(hspi->Instance->IER, SPI_IT_EOT)); in HAL_SPI_Abort_IT()
2871 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSUSP); in HAL_SPI_Abort_IT()
2877 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2880 } while (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)); in HAL_SPI_Abort_IT()
2883 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Abort_IT()
2889 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2892 } while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_SUSP)); in HAL_SPI_Abort_IT()
2898 if (hspi->hdmarx != NULL) in HAL_SPI_Abort_IT()
2900 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN)) in HAL_SPI_Abort_IT()
2903 hspi->hdmarx->XferAbortCallback = SPI_DMARxAbortCallback; in HAL_SPI_Abort_IT()
2907 if (hspi->hdmatx != NULL) in HAL_SPI_Abort_IT()
2909 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN)) in HAL_SPI_Abort_IT()
2912 hspi->hdmatx->XferAbortCallback = SPI_DMATxAbortCallback; in HAL_SPI_Abort_IT()
2917 if (HAL_DMA_Abort_IT(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort_IT()
2919 if (HAL_DMA_GetError(hspi->hdmatx) == HAL_DMA_ERROR_NO_XFER) in HAL_SPI_Abort_IT()
2922 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2928 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2932 if (hspi->hdmarx != NULL) in HAL_SPI_Abort_IT()
2934 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN)) in HAL_SPI_Abort_IT()
2937 hspi->hdmarx->XferAbortCallback = SPI_DMARxAbortCallback; in HAL_SPI_Abort_IT()
2942 if (HAL_DMA_Abort_IT(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort_IT()
2944 if (HAL_DMA_GetError(hspi->hdmarx) == HAL_DMA_ERROR_NO_XFER) in HAL_SPI_Abort_IT()
2947 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2953 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2961 SPI_AbortTransfer(hspi); in HAL_SPI_Abort_IT()
2964 if (HAL_IS_BIT_SET(hspi->ErrorCode, HAL_SPI_ERROR_ABORT)) in HAL_SPI_Abort_IT()
2972 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort_IT()
2976 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort_IT()
2980 hspi->AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2982 HAL_SPI_AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2996 HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAPause() argument
2999 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAPause()
3011 HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAResume() argument
3014 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAResume()
3026 HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAStop() argument
3029 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAStop()
3040 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) in HAL_SPI_IRQHandler() argument
3042 uint32_t itsource = hspi->Instance->IER; in HAL_SPI_IRQHandler()
3043 uint32_t itflag = hspi->Instance->SR; in HAL_SPI_IRQHandler()
3045 uint32_t cfg1 = hspi->Instance->CFG1; in HAL_SPI_IRQHandler()
3048 HAL_SPI_StateTypeDef State = hspi->State; in HAL_SPI_IRQHandler()
3050 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_IRQHandler()
3057 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_IRQHandler()
3061 hspi->SuspendCallback(hspi); in HAL_SPI_IRQHandler()
3063 HAL_SPI_SuspendCallback(hspi); in HAL_SPI_IRQHandler()
3072 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
3073 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
3081 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
3089 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
3102 __HAL_SPI_CLEAR_EOTFLAG(hspi); in HAL_SPI_IRQHandler()
3103 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in HAL_SPI_IRQHandler()
3104 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_IRQHandler()
3107 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_IRQHandler()
3110 if (HAL_IS_BIT_CLR(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN)) in HAL_SPI_IRQHandler()
3113 while (hspi->RxXferCount != 0UL) in HAL_SPI_IRQHandler()
3116 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_IRQHandler()
3118 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
3119 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_IRQHandler()
3122 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_IRQHandler()
3125 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_IRQHandler()
3127 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
3129 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_IRQHandler()
3134 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
3135 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_IRQHandler()
3138 hspi->RxXferCount--; in HAL_SPI_IRQHandler()
3143 SPI_CloseTransfer(hspi); in HAL_SPI_IRQHandler()
3145 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
3146 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
3149 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
3151 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
3160 hspi->TxRxCpltCallback(hspi); in HAL_SPI_IRQHandler()
3164 hspi->RxCpltCallback(hspi); in HAL_SPI_IRQHandler()
3168 hspi->TxCpltCallback(hspi); in HAL_SPI_IRQHandler()
3174 HAL_SPI_TxRxCpltCallback(hspi); in HAL_SPI_IRQHandler()
3178 HAL_SPI_RxCpltCallback(hspi); in HAL_SPI_IRQHandler()
3182 HAL_SPI_TxCpltCallback(hspi); in HAL_SPI_IRQHandler()
3199 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in HAL_SPI_IRQHandler()
3200 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_IRQHandler()
3206 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in HAL_SPI_IRQHandler()
3207 __HAL_SPI_CLEAR_MODFFLAG(hspi); in HAL_SPI_IRQHandler()
3213 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); in HAL_SPI_IRQHandler()
3214 __HAL_SPI_CLEAR_FREFLAG(hspi); in HAL_SPI_IRQHandler()
3220 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_UDR); in HAL_SPI_IRQHandler()
3221 __HAL_SPI_CLEAR_UDRFLAG(hspi); in HAL_SPI_IRQHandler()
3224 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
3227 __HAL_SPI_DISABLE(hspi); in HAL_SPI_IRQHandler()
3230 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_RXP | SPI_IT_TXP | SPI_IT_MODF | in HAL_SPI_IRQHandler()
3237 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in HAL_SPI_IRQHandler()
3240 if (hspi->hdmarx != NULL) in HAL_SPI_IRQHandler()
3244 hspi->hdmarx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
3245 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmarx)) in HAL_SPI_IRQHandler()
3247 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
3251 if (hspi->hdmatx != NULL) in HAL_SPI_IRQHandler()
3255 hspi->hdmatx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
3256 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmatx)) in HAL_SPI_IRQHandler()
3258 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
3265 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
3269 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
3271 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
3285 __weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_TxCpltCallback() argument
3288 UNUSED(hspi); in HAL_SPI_TxCpltCallback()
3301 __weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_RxCpltCallback() argument
3304 UNUSED(hspi); in HAL_SPI_RxCpltCallback()
3317 __weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_TxRxCpltCallback() argument
3320 UNUSED(hspi); in HAL_SPI_TxRxCpltCallback()
3333 __weak void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 … in HAL_SPI_TxHalfCpltCallback() argument
3336 UNUSED(hspi); in HAL_SPI_TxHalfCpltCallback()
3349 __weak void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 … in HAL_SPI_RxHalfCpltCallback() argument
3352 UNUSED(hspi); in HAL_SPI_RxHalfCpltCallback()
3365 __weak void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.1… in HAL_SPI_TxRxHalfCpltCallback() argument
3368 UNUSED(hspi); in HAL_SPI_TxRxHalfCpltCallback()
3381 __weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_ErrorCallback() argument
3384 UNUSED(hspi); in HAL_SPI_ErrorCallback()
3399 __weak void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_AbortCpltCallback() argument
3402 UNUSED(hspi); in HAL_SPI_AbortCpltCallback()
3414 __weak void HAL_SPI_SuspendCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_SuspendCallback() argument
3417 UNUSED(hspi); in HAL_SPI_SuspendCallback()
3449 HAL_SPI_StateTypeDef HAL_SPI_GetState(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetState() argument
3452 return hspi->State; in HAL_SPI_GetState()
3461 uint32_t HAL_SPI_GetError(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetError() argument
3464 return hspi->ErrorCode; in HAL_SPI_GetError()
3488 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATransmitCplt() local
3490 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMATransmitCplt()
3492 if (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR) in SPI_DMATransmitCplt()
3495 hspi->TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3497 HAL_SPI_TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3503 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMATransmitCplt()
3516 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAReceiveCplt() local
3518 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMAReceiveCplt()
3520 if (hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) in SPI_DMAReceiveCplt()
3523 hspi->RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3525 HAL_SPI_RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3531 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMAReceiveCplt()
3544 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATransmitReceiveCplt() local
3546 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMATransmitReceiveCplt()
3548 if ((hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) && in SPI_DMATransmitReceiveCplt()
3549 (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR)) in SPI_DMATransmitReceiveCplt()
3552 hspi->TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3554 HAL_SPI_TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3560 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMATransmitReceiveCplt()
3573 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *) in SPI_DMAHalfTransmitCplt() local
3577 hspi->TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3579 HAL_SPI_TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3591 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *) in SPI_DMAHalfReceiveCplt() local
3595 hspi->RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3597 HAL_SPI_RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3609 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *) in SPI_DMAHalfTransmitReceiveCplt() local
3613 hspi->TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3615 HAL_SPI_TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3627 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAError() local
3633 SPI_CloseTransfer(hspi); in SPI_DMAError()
3635 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in SPI_DMAError()
3636 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAError()
3638 hspi->ErrorCallback(hspi); in SPI_DMAError()
3640 HAL_SPI_ErrorCallback(hspi); in SPI_DMAError()
3653 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAAbortOnError() local
3654 hspi->RxXferCount = (uint16_t) 0UL; in SPI_DMAAbortOnError()
3655 hspi->TxXferCount = (uint16_t) 0UL; in SPI_DMAAbortOnError()
3658 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAAbortOnError()
3661 hspi->ErrorCallback(hspi); in SPI_DMAAbortOnError()
3663 HAL_SPI_ErrorCallback(hspi); in SPI_DMAAbortOnError()
3677 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATxAbortCallback() local
3679 hspi->hdmatx->XferAbortCallback = NULL; in SPI_DMATxAbortCallback()
3682 if (hspi->hdmarx != NULL) in SPI_DMATxAbortCallback()
3684 if (hspi->hdmarx->XferAbortCallback != NULL) in SPI_DMATxAbortCallback()
3691 SPI_AbortTransfer(hspi); in SPI_DMATxAbortCallback()
3694 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATxAbortCallback()
3698 hspi->AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3700 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3714 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMARxAbortCallback() local
3716 hspi->hdmarx->XferAbortCallback = NULL; in SPI_DMARxAbortCallback()
3719 if (hspi->hdmatx != NULL) in SPI_DMARxAbortCallback()
3721 if (hspi->hdmatx->XferAbortCallback != NULL) in SPI_DMARxAbortCallback()
3728 SPI_AbortTransfer(hspi); in SPI_DMARxAbortCallback()
3731 hspi->State = HAL_SPI_STATE_READY; in SPI_DMARxAbortCallback()
3735 hspi->AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3737 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3747 static void SPI_RxISR_8BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_8BIT() argument
3750 *((uint8_t *)hspi->pRxBuffPtr) = (*(__IO uint8_t *)&hspi->Instance->RXDR); in SPI_RxISR_8BIT()
3751 hspi->pRxBuffPtr += sizeof(uint8_t); in SPI_RxISR_8BIT()
3752 hspi->RxXferCount--; in SPI_RxISR_8BIT()
3755 if (hspi->RxXferCount == 0UL) in SPI_RxISR_8BIT()
3758 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_8BIT()
3769 static void SPI_RxISR_16BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_16BIT() argument
3773 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in SPI_RxISR_16BIT()
3775 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in SPI_RxISR_16BIT()
3777 *((uint16_t *)hspi->pRxBuffPtr) = (*(__IO uint16_t *)&hspi->Instance->RXDR); in SPI_RxISR_16BIT()
3779 hspi->pRxBuffPtr += sizeof(uint16_t); in SPI_RxISR_16BIT()
3780 hspi->RxXferCount--; in SPI_RxISR_16BIT()
3783 if (hspi->RxXferCount == 0UL) in SPI_RxISR_16BIT()
3786 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_16BIT()
3797 static void SPI_RxISR_32BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_32BIT() argument
3800 *((uint32_t *)hspi->pRxBuffPtr) = (*(__IO uint32_t *)&hspi->Instance->RXDR); in SPI_RxISR_32BIT()
3801 hspi->pRxBuffPtr += sizeof(uint32_t); in SPI_RxISR_32BIT()
3802 hspi->RxXferCount--; in SPI_RxISR_32BIT()
3805 if (hspi->RxXferCount == 0UL) in SPI_RxISR_32BIT()
3808 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_32BIT()
3819 static void SPI_TxISR_8BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_8BIT() argument
3822 *(__IO uint8_t *)&hspi->Instance->TXDR = *((const uint8_t *)hspi->pTxBuffPtr); in SPI_TxISR_8BIT()
3823 hspi->pTxBuffPtr += sizeof(uint8_t); in SPI_TxISR_8BIT()
3824 hspi->TxXferCount--; in SPI_TxISR_8BIT()
3827 if (hspi->TxXferCount == 0UL) in SPI_TxISR_8BIT()
3830 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_8BIT()
3840 static void SPI_TxISR_16BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_16BIT() argument
3844 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in SPI_TxISR_16BIT()
3846 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3848 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3850 hspi->pTxBuffPtr += sizeof(uint16_t); in SPI_TxISR_16BIT()
3851 hspi->TxXferCount--; in SPI_TxISR_16BIT()
3854 if (hspi->TxXferCount == 0UL) in SPI_TxISR_16BIT()
3857 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_16BIT()
3867 static void SPI_TxISR_32BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_32BIT() argument
3870 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in SPI_TxISR_32BIT()
3871 hspi->pTxBuffPtr += sizeof(uint32_t); in SPI_TxISR_32BIT()
3872 hspi->TxXferCount--; in SPI_TxISR_32BIT()
3875 if (hspi->TxXferCount == 0UL) in SPI_TxISR_32BIT()
3878 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_32BIT()
3888 static void SPI_AbortTransfer(SPI_HandleTypeDef *hspi) in SPI_AbortTransfer() argument
3891 __HAL_SPI_DISABLE(hspi); in SPI_AbortTransfer()
3894 …__HAL_SPI_DISABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_TXP | SPI_IT_RXP | SPI_IT_DXP | SPI_IT_UDR | SPI_I… in SPI_AbortTransfer()
3898 __HAL_SPI_CLEAR_EOTFLAG(hspi); in SPI_AbortTransfer()
3899 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in SPI_AbortTransfer()
3902 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in SPI_AbortTransfer()
3905 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_AbortTransfer()
3906 __HAL_SPI_CLEAR_UDRFLAG(hspi); in SPI_AbortTransfer()
3907 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_AbortTransfer()
3908 __HAL_SPI_CLEAR_MODFFLAG(hspi); in SPI_AbortTransfer()
3909 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in SPI_AbortTransfer()
3912 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_AbortTransfer()
3915 hspi->TxXferCount = (uint16_t)0UL; in SPI_AbortTransfer()
3916 hspi->RxXferCount = (uint16_t)0UL; in SPI_AbortTransfer()
3927 static void SPI_CloseTransfer(SPI_HandleTypeDef *hspi) in SPI_CloseTransfer() argument
3929 uint32_t itflag = hspi->Instance->SR; in SPI_CloseTransfer()
3931 __HAL_SPI_CLEAR_EOTFLAG(hspi); in SPI_CloseTransfer()
3932 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in SPI_CloseTransfer()
3935 __HAL_SPI_DISABLE(hspi); in SPI_CloseTransfer()
3938 …__HAL_SPI_DISABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_TXP | SPI_IT_RXP | SPI_IT_DXP | SPI_IT_UDR | SPI_I… in SPI_CloseTransfer()
3942 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in SPI_CloseTransfer()
3945 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in SPI_CloseTransfer()
3949 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_UDR); in SPI_CloseTransfer()
3950 __HAL_SPI_CLEAR_UDRFLAG(hspi); in SPI_CloseTransfer()
3955 if (hspi->State != HAL_SPI_STATE_BUSY_TX) in SPI_CloseTransfer()
3959 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in SPI_CloseTransfer()
3960 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_CloseTransfer()
3965 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_CloseTransfer()
3969 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_CloseTransfer()
3970 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_CloseTransfer()
3979 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in SPI_CloseTransfer()
3980 __HAL_SPI_CLEAR_MODFFLAG(hspi); in SPI_CloseTransfer()
3986 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); in SPI_CloseTransfer()
3987 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_CloseTransfer()
3990 hspi->TxXferCount = (uint16_t)0UL; in SPI_CloseTransfer()
3991 hspi->RxXferCount = (uint16_t)0UL; in SPI_CloseTransfer()
4004 static HAL_StatusTypeDef SPI_WaitOnFlagUntilTimeout(const SPI_HandleTypeDef *hspi, uint32_t Flag, F… in SPI_WaitOnFlagUntilTimeout() argument
4008 while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) == Status) in SPI_WaitOnFlagUntilTimeout()
4025 static uint32_t SPI_GetPacketSize(const SPI_HandleTypeDef *hspi) in SPI_GetPacketSize() argument
4027 uint32_t fifo_threashold = (hspi->Init.FifoThreshold >> SPI_CFG1_FTHLV_Pos) + 1UL; in SPI_GetPacketSize()
4028 uint32_t data_size = (hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) + 1UL; in SPI_GetPacketSize()