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
245 if (hspi == NULL) in HAL_SPI_Init()
251 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_Init()
252 assert_param(IS_SPI_MODE(hspi->Init.Mode)); in HAL_SPI_Init()
253 assert_param(IS_SPI_DIRECTION(hspi->Init.Direction)); in HAL_SPI_Init()
254 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Init()
256 assert_param(IS_SPI_LIMITED_DATASIZE(hspi->Init.DataSize)); in HAL_SPI_Init()
257 assert_param(IS_SPI_LIMITED_FIFOTHRESHOLD(hspi->Init.FifoThreshold)); in HAL_SPI_Init()
261 assert_param(IS_SPI_DATASIZE(hspi->Init.DataSize)); in HAL_SPI_Init()
262 assert_param(IS_SPI_FIFOTHRESHOLD(hspi->Init.FifoThreshold)); in HAL_SPI_Init()
264 assert_param(IS_SPI_NSS(hspi->Init.NSS)); in HAL_SPI_Init()
265 assert_param(IS_SPI_NSSP(hspi->Init.NSSPMode)); in HAL_SPI_Init()
266 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
267 assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); in HAL_SPI_Init()
268 assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); in HAL_SPI_Init()
269 if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) in HAL_SPI_Init()
271 assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); in HAL_SPI_Init()
272 assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); in HAL_SPI_Init()
275 assert_param(IS_SPI_CRC_CALCULATION(hspi->Init.CRCCalculation)); in HAL_SPI_Init()
276 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
278 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Init()
280 assert_param(IS_SPI_LIMITED_CRC_LENGTH(hspi->Init.CRCLength)); in HAL_SPI_Init()
284 assert_param(IS_SPI_CRC_LENGTH(hspi->Init.CRCLength)); in HAL_SPI_Init()
286 assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); in HAL_SPI_Init()
287 assert_param(IS_SPI_CRC_INITIALIZATION_PATTERN(hspi->Init.TxCRCInitializationPattern)); in HAL_SPI_Init()
288 assert_param(IS_SPI_CRC_INITIALIZATION_PATTERN(hspi->Init.RxCRCInitializationPattern)); in HAL_SPI_Init()
291 hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; in HAL_SPI_Init()
294 assert_param(IS_SPI_RDY_MASTER_MANAGEMENT(hspi->Init.ReadyMasterManagement)); in HAL_SPI_Init()
295 assert_param(IS_SPI_RDY_POLARITY(hspi->Init.ReadyPolarity)); in HAL_SPI_Init()
296 assert_param(IS_SPI_MASTER_RX_AUTOSUSP(hspi->Init.MasterReceiverAutoSusp)); in HAL_SPI_Init()
299 if ((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (hspi->Init.DataSize > SPI_DATASIZE_16BIT)) in HAL_SPI_Init()
305 packet_length = SPI_GetPacketSize(hspi); in HAL_SPI_Init()
306 if (((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (packet_length > SPI_LOWEND_FIFO_SIZE)) || in HAL_SPI_Init()
307 ((IS_SPI_FULL_INSTANCE(hspi->Instance)) && (packet_length > SPI_HIGHEND_FIFO_SIZE))) in HAL_SPI_Init()
312 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
315 if ((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (hspi->Init.CRCLength > SPI_CRC_LENGTH_16BIT)) in HAL_SPI_Init()
321 if (hspi->Init.CRCLength == SPI_CRC_LENGTH_DATASIZE) in HAL_SPI_Init()
323 crc_length = (hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) << SPI_CFG1_CRCSIZE_Pos; in HAL_SPI_Init()
327 crc_length = hspi->Init.CRCLength; in HAL_SPI_Init()
331 if ((hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) > (crc_length >> SPI_CFG1_CRCSIZE_Pos)) in HAL_SPI_Init()
338 crc_length = hspi->Init.DataSize << SPI_CFG1_CRCSIZE_Pos; in HAL_SPI_Init()
342 if (hspi->State == HAL_SPI_STATE_RESET) in HAL_SPI_Init()
345 hspi->Lock = HAL_UNLOCKED; in HAL_SPI_Init()
349 … hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_Init()
350 … hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_Init()
351 … hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_Init()
352 … hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_Init()
353 … hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_Init()
354 … hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_Init()
355 … hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_Init()
356 … hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_Init()
357 … hspi->SuspendCallback = HAL_SPI_SuspendCallback; /* Legacy weak SuspendCallback */ in HAL_SPI_Init()
359 if (hspi->MspInitCallback == NULL) in HAL_SPI_Init()
361 hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_Init()
365 hspi->MspInitCallback(hspi); in HAL_SPI_Init()
368 HAL_SPI_MspInit(hspi); in HAL_SPI_Init()
372 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_Init()
375 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Init()
379 crc_length = hspi->Instance->CFG1 & SPI_CFG1_CRCSIZE; in HAL_SPI_Init()
387 if ((hspi->Init.NSS == SPI_NSS_SOFT) && (((hspi->Init.Mode == SPI_MODE_MASTER) && \ in HAL_SPI_Init()
388 (hspi->Init.NSSPolarity == SPI_NSS_POLARITY_LOW)) || \ in HAL_SPI_Init()
389 ((hspi->Init.Mode == SPI_MODE_SLAVE) && \ in HAL_SPI_Init()
390 (hspi->Init.NSSPolarity == SPI_NSS_POLARITY_HIGH)))) in HAL_SPI_Init()
392 SET_BIT(hspi->Instance->CR1, SPI_CR1_SSI); in HAL_SPI_Init()
396 …if (((hspi->Init.Mode & SPI_MODE_MASTER) == SPI_MODE_MASTER) && (hspi->Init.DataSize >= SPI_DATASI… in HAL_SPI_Init()
398 MODIFY_REG(hspi->Instance->CR1, SPI_CR1_MASRX, hspi->Init.MasterReceiverAutoSusp); in HAL_SPI_Init()
402 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_MASRX); in HAL_SPI_Init()
406 …WRITE_REG(hspi->Instance->CFG1, (hspi->Init.BaudRatePrescaler | hspi->Init.CRCCalculation | crc_le… in HAL_SPI_Init()
407 hspi->Init.FifoThreshold | hspi->Init.DataSize)); in HAL_SPI_Init()
410 WRITE_REG(hspi->Instance->CFG2, (hspi->Init.NSSPMode | hspi->Init.TIMode | in HAL_SPI_Init()
411 hspi->Init.NSSPolarity | hspi->Init.NSS | in HAL_SPI_Init()
412 hspi->Init.CLKPolarity | hspi->Init.CLKPhase | in HAL_SPI_Init()
413 hspi->Init.FirstBit | hspi->Init.Mode | in HAL_SPI_Init()
414 hspi->Init.MasterInterDataIdleness | hspi->Init.Direction | in HAL_SPI_Init()
415 hspi->Init.MasterSSIdleness | hspi->Init.IOSwap | in HAL_SPI_Init()
416 hspi->Init.ReadyMasterManagement | hspi->Init.ReadyPolarity)); in HAL_SPI_Init()
421 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
424 if (hspi->Init.TxCRCInitializationPattern == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN) in HAL_SPI_Init()
426 SET_BIT(hspi->Instance->CR1, SPI_CR1_TCRCINI); in HAL_SPI_Init()
430 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_TCRCINI); in HAL_SPI_Init()
434 if (hspi->Init.RxCRCInitializationPattern == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN) in HAL_SPI_Init()
436 SET_BIT(hspi->Instance->CR1, SPI_CR1_RCRCINI); in HAL_SPI_Init()
440 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_RCRCINI); in HAL_SPI_Init()
444 if (((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (crc_length == SPI_CRC_LENGTH_16BIT)) || in HAL_SPI_Init()
445 ((IS_SPI_FULL_INSTANCE(hspi->Instance)) && (crc_length == SPI_CRC_LENGTH_32BIT))) in HAL_SPI_Init()
447 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRC33_17); in HAL_SPI_Init()
451 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_CRC33_17); in HAL_SPI_Init()
455 WRITE_REG(hspi->Instance->CRCPOLY, hspi->Init.CRCPolynomial); in HAL_SPI_Init()
460 if (hspi->Init.Mode == SPI_MODE_SLAVE) in HAL_SPI_Init()
463 MODIFY_REG(hspi->Instance->CFG1, SPI_CFG1_UDRCFG, SPI_CFG1_UDRCFG); in HAL_SPI_Init()
469 CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); in HAL_SPI_Init()
473 if ((hspi->Init.Mode & SPI_MODE_MASTER) == SPI_MODE_MASTER) in HAL_SPI_Init()
476 MODIFY_REG(hspi->Instance->CFG2, SPI_CFG2_AFCNTR, (hspi->Init.MasterKeepIOState)); in HAL_SPI_Init()
479 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Init()
480 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Init()
491 HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_DeInit() argument
494 if (hspi == NULL) in HAL_SPI_DeInit()
500 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_DeInit()
502 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_DeInit()
505 __HAL_SPI_DISABLE(hspi); in HAL_SPI_DeInit()
508 if (hspi->MspDeInitCallback == NULL) in HAL_SPI_DeInit()
510 hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_DeInit()
514 hspi->MspDeInitCallback(hspi); in HAL_SPI_DeInit()
517 HAL_SPI_MspDeInit(hspi); in HAL_SPI_DeInit()
520 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_DeInit()
521 hspi->State = HAL_SPI_STATE_RESET; in HAL_SPI_DeInit()
524 __HAL_UNLOCK(hspi); in HAL_SPI_DeInit()
535 __weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspInit() argument
538 UNUSED(hspi); in HAL_SPI_MspInit()
551 __weak void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspDeInit() argument
554 UNUSED(hspi); in HAL_SPI_MspDeInit()
573 HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Callb… in HAL_SPI_RegisterCallback() argument
581 hspi->ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK; in HAL_SPI_RegisterCallback()
586 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_RegisterCallback()
591 hspi->TxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
595 hspi->RxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
599 hspi->TxRxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
603 hspi->TxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
607 hspi->RxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
611 hspi->TxRxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
615 hspi->ErrorCallback = pCallback; in HAL_SPI_RegisterCallback()
619 hspi->AbortCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
623 hspi->SuspendCallback = pCallback; in HAL_SPI_RegisterCallback()
627 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
631 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
636 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
643 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_RegisterCallback()
648 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
652 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
657 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
667 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
686 HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Cal… in HAL_SPI_UnRegisterCallback() argument
690 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_UnRegisterCallback()
695 … hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_UnRegisterCallback()
699 … hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_UnRegisterCallback()
703 … hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_UnRegisterCallback()
707 … hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
711 … hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
715 … hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
719 … hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_UnRegisterCallback()
723 … hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_UnRegisterCallback()
727 … hspi->SuspendCallback = HAL_SPI_SuspendCallback; /* Legacy weak SuspendCallback */ in HAL_SPI_UnRegisterCallback()
731 … hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
735 … hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
740 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
747 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_UnRegisterCallback()
752 … hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
756 … hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
761 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
771 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
826 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size, ui… in HAL_SPI_Transmit() argument
829 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_Transmit()
835 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit()
840 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit()
851 __HAL_LOCK(hspi); in HAL_SPI_Transmit()
854 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit()
855 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit()
856 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit()
857 hspi->TxXferSize = Size; in HAL_SPI_Transmit()
858 hspi->TxXferCount = Size; in HAL_SPI_Transmit()
861 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit()
862 hspi->RxXferSize = (uint16_t) 0UL; in HAL_SPI_Transmit()
863 hspi->RxXferCount = (uint16_t) 0UL; in HAL_SPI_Transmit()
864 hspi->TxISR = NULL; in HAL_SPI_Transmit()
865 hspi->RxISR = NULL; in HAL_SPI_Transmit()
868 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit()
870 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit()
874 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit()
878 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit()
881 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit()
883 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Transmit()
886 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit()
890 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Transmit()
893 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
896 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
898 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
899 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
900 hspi->TxXferCount--; in HAL_SPI_Transmit()
908 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
910 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
911 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
914 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
922 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit()
925 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
928 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
930 if ((hspi->TxXferCount > 1UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_01DATA)) in HAL_SPI_Transmit()
932 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
933 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
934 hspi->TxXferCount -= (uint16_t)2UL; in HAL_SPI_Transmit()
939 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
941 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
943 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
944 hspi->TxXferCount--; in HAL_SPI_Transmit()
953 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
955 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
956 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
959 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
969 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
972 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
974 if ((hspi->TxXferCount > 3UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_03DATA)) in HAL_SPI_Transmit()
976 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
977 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
978 hspi->TxXferCount -= (uint16_t)4UL; in HAL_SPI_Transmit()
980 … else if ((hspi->TxXferCount > 1UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_01DATA)) in HAL_SPI_Transmit()
983 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
985 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
987 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
988 hspi->TxXferCount -= (uint16_t)2UL; in HAL_SPI_Transmit()
992 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
993 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_Transmit()
994 hspi->TxXferCount--; in HAL_SPI_Transmit()
1003 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
1005 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
1006 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
1009 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
1018 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Transmit()
1020 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_Transmit()
1024 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
1026 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
1029 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
1031 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Transmit()
1050 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SPI_Receive() argument
1054 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_Receive()
1058 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive()
1063 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive()
1074 __HAL_LOCK(hspi); in HAL_SPI_Receive()
1077 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive()
1078 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive()
1079 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive()
1080 hspi->RxXferSize = Size; in HAL_SPI_Receive()
1081 hspi->RxXferCount = Size; in HAL_SPI_Receive()
1084 hspi->pTxBuffPtr = NULL; in HAL_SPI_Receive()
1085 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive()
1086 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive()
1087 hspi->RxISR = NULL; in HAL_SPI_Receive()
1088 hspi->TxISR = NULL; in HAL_SPI_Receive()
1091 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive()
1093 SPI_1LINE_RX(hspi); in HAL_SPI_Receive()
1097 SPI_2LINES_RX(hspi); in HAL_SPI_Receive()
1101 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive()
1104 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive()
1106 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive()
1109 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive()
1113 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Receive()
1116 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1119 if ((hspi->Instance->SR & (SPI_FLAG_RXWNE | SPI_FLAG_EOT)) != 0UL) in HAL_SPI_Receive()
1121 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1122 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_Receive()
1123 hspi->RxXferCount--; in HAL_SPI_Receive()
1131 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1133 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1134 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1137 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1145 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive()
1148 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1151 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_Receive()
1154 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_Receive()
1156 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1158 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_Receive()
1159 hspi->RxXferCount--; in HAL_SPI_Receive()
1167 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1169 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1170 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1173 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1184 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1187 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_Receive()
1189 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1190 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1191 hspi->RxXferCount--; in HAL_SPI_Receive()
1199 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1201 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1202 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1205 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1214 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive()
1217 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1219 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_Receive()
1225 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1227 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1230 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1233 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Receive()
1253 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t … in HAL_SPI_TransmitReceive() argument
1257 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_TransmitReceive()
1258 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_TransmitReceive()
1267 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive()
1275 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive()
1286 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive()
1289 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive()
1290 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive()
1291 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive()
1292 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive()
1293 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive()
1294 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive()
1295 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive()
1296 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive()
1299 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive()
1300 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive()
1303 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive()
1306 if (IS_SPI_FULL_INSTANCE(hspi->Instance)) in HAL_SPI_TransmitReceive()
1316 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive()
1318 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive()
1320 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_TransmitReceive()
1323 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive()
1327 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_TransmitReceive()
1335 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL) && in HAL_SPI_TransmitReceive()
1338 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1339 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive()
1340 hspi->TxXferCount --; in HAL_SPI_TransmitReceive()
1341 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1345 …if (((hspi->Instance->SR & (SPI_FLAG_RXWNE | SPI_FLAG_EOT)) != 0UL) && (initial_RxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1347 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1348 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive()
1349 hspi->RxXferCount --; in HAL_SPI_TransmitReceive()
1350 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1357 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1359 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1360 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1363 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1370 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive()
1378 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL) && in HAL_SPI_TransmitReceive()
1382 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1384 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1386 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1387 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1388 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1392 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) && (initial_RxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1395 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_TransmitReceive()
1397 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1399 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1400 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1401 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1408 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1410 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1411 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1414 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1426 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL) && in HAL_SPI_TransmitReceive()
1429 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1430 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1431 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1432 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1436 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) && (initial_RxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1438 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1439 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1440 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1441 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1448 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1450 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1451 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1454 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1462 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, Timeout, tickstart) != HAL_OK) in HAL_SPI_TransmitReceive()
1464 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_TransmitReceive()
1468 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1470 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1473 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1475 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_TransmitReceive()
1493 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_IT() argument
1496 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit_IT()
1503 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_IT()
1509 __HAL_LOCK(hspi); in HAL_SPI_Transmit_IT()
1512 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_IT()
1513 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_IT()
1514 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_IT()
1515 hspi->TxXferSize = Size; in HAL_SPI_Transmit_IT()
1516 hspi->TxXferCount = Size; in HAL_SPI_Transmit_IT()
1519 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit_IT()
1520 hspi->RxXferSize = (uint16_t) 0UL; in HAL_SPI_Transmit_IT()
1521 hspi->RxXferCount = (uint16_t) 0UL; in HAL_SPI_Transmit_IT()
1522 hspi->RxISR = NULL; in HAL_SPI_Transmit_IT()
1525 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Transmit_IT()
1527 hspi->TxISR = SPI_TxISR_32BIT; in HAL_SPI_Transmit_IT()
1529 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_IT()
1531 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_Transmit_IT()
1535 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_Transmit_IT()
1539 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_IT()
1541 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_IT()
1545 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit_IT()
1549 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit_IT()
1552 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_IT()
1555 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1558 __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()
1560 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Transmit_IT()
1563 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit_IT()
1577 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_IT() argument
1580 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive_IT()
1582 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_IT()
1593 __HAL_LOCK(hspi); in HAL_SPI_Receive_IT()
1596 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_IT()
1597 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_IT()
1598 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_IT()
1599 hspi->RxXferSize = Size; in HAL_SPI_Receive_IT()
1600 hspi->RxXferCount = Size; in HAL_SPI_Receive_IT()
1603 hspi->pTxBuffPtr = NULL; in HAL_SPI_Receive_IT()
1604 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive_IT()
1605 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive_IT()
1606 hspi->TxISR = NULL; in HAL_SPI_Receive_IT()
1609 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Receive_IT()
1611 hspi->RxISR = SPI_RxISR_32BIT; in HAL_SPI_Receive_IT()
1613 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive_IT()
1615 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_Receive_IT()
1619 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_Receive_IT()
1623 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_IT()
1625 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_IT()
1629 SPI_2LINES_RX(hspi); in HAL_SPI_Receive_IT()
1637 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive_IT()
1640 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_IT()
1643 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1646 __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()
1648 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive_IT()
1651 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive_IT()
1666 HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8… in HAL_SPI_TransmitReceive_IT() argument
1671 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_TransmitReceive_IT()
1675 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_IT()
1677 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive_IT()
1688 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1691 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_IT()
1692 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_IT()
1693 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_IT()
1694 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1695 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1696 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_IT()
1697 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1698 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1699 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1702 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_TransmitReceive_IT()
1704 hspi->TxISR = SPI_TxISR_32BIT; in HAL_SPI_TransmitReceive_IT()
1705 hspi->RxISR = SPI_RxISR_32BIT; in HAL_SPI_TransmitReceive_IT()
1707 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1709 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1710 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1714 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1715 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1719 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive_IT()
1722 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive_IT()
1725 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_IT()
1728 while ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (tmp_TxXferCount != 0UL)) in HAL_SPI_TransmitReceive_IT()
1731 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_IT()
1733 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1734 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive_IT()
1735 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1736 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1739 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1742 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1744 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1746 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive_IT()
1747 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1748 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1753 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1754 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive_IT()
1755 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1756 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1761 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1764 …__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()
1766 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_TransmitReceive_IT()
1769 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive_IT()
1786 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_DMA() argument
1791 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit_DMA()
1793 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_DMA()
1804 __HAL_LOCK(hspi); in HAL_SPI_Transmit_DMA()
1807 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_DMA()
1808 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_DMA()
1809 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_DMA()
1810 hspi->TxXferSize = Size; in HAL_SPI_Transmit_DMA()
1811 hspi->TxXferCount = Size; in HAL_SPI_Transmit_DMA()
1814 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit_DMA()
1815 hspi->TxISR = NULL; in HAL_SPI_Transmit_DMA()
1816 hspi->RxISR = NULL; in HAL_SPI_Transmit_DMA()
1817 hspi->RxXferSize = (uint16_t)0UL; in HAL_SPI_Transmit_DMA()
1818 hspi->RxXferCount = (uint16_t)0UL; in HAL_SPI_Transmit_DMA()
1821 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_DMA()
1823 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_DMA()
1827 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit_DMA()
1831 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmatx->Init.SrcDataWidth != DMA_SRC_DA… in HAL_SPI_Transmit_DMA()
1832 (IS_SPI_FULL_INSTANCE(hspi->Instance))) || \ in HAL_SPI_Transmit_DMA()
1833 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWI… in HAL_SPI_Transmit_DMA()
1836 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1841 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_DMA()
1843 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_HALFWORD) in HAL_SPI_Transmit_DMA()
1845 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Transmit_DMA()
1847 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_Transmit_DMA()
1849 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_Transmit_DMA()
1852 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Transmit_DMA()
1854 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_Transmit_DMA()
1856 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Transmit_DMA()
1865 hspi->hdmatx->XferHalfCpltCallback = SPI_DMAHalfTransmitCplt; in HAL_SPI_Transmit_DMA()
1868 hspi->hdmatx->XferCpltCallback = SPI_DMATransmitCplt; in HAL_SPI_Transmit_DMA()
1871 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Transmit_DMA()
1874 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Transmit_DMA()
1877 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_Transmit_DMA()
1879 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_DMA()
1881 hspi->TxXferCount = Size; in HAL_SPI_Transmit_DMA()
1883 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Transmit_DMA()
1885 hspi->TxXferCount = Size * 2U; in HAL_SPI_Transmit_DMA()
1889 hspi->TxXferCount = Size * 4U; in HAL_SPI_Transmit_DMA()
1893 if ((hspi->hdmatx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_Transmit_DMA()
1895 if (hspi->hdmatx->LinkedListQueue != NULL) in HAL_SPI_Transmit_DMA()
1898 … hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->TxXferCount; in HAL_SPI_Transmit_DMA()
1901 …hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)hspi->pTx… in HAL_SPI_Transmit_DMA()
1904 …hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_Transmit_DMA()
1906 status = HAL_DMAEx_List_Start_IT(hspi->hdmatx); in HAL_SPI_Transmit_DMA()
1915 …status = HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->TXD… in HAL_SPI_Transmit_DMA()
1916 hspi->TxXferCount); in HAL_SPI_Transmit_DMA()
1923 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Transmit_DMA()
1924 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit_DMA()
1927 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1933 if (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR) in HAL_SPI_Transmit_DMA()
1935 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_Transmit_DMA()
1939 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit_DMA()
1943 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_Transmit_DMA()
1946 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Transmit_DMA()
1949 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_DMA()
1951 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Transmit_DMA()
1954 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit_DMA()
1958 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1972 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_DMA() argument
1977 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive_DMA()
1980 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_DMA()
1982 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
1988 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
1993 __HAL_LOCK(hspi); in HAL_SPI_Receive_DMA()
1996 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_DMA()
1997 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_DMA()
1998 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_DMA()
1999 hspi->RxXferSize = Size; in HAL_SPI_Receive_DMA()
2000 hspi->RxXferCount = Size; in HAL_SPI_Receive_DMA()
2003 hspi->RxISR = NULL; in HAL_SPI_Receive_DMA()
2004 hspi->TxISR = NULL; in HAL_SPI_Receive_DMA()
2005 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive_DMA()
2006 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive_DMA()
2009 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_DMA()
2011 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_DMA()
2015 SPI_2LINES_RX(hspi); in HAL_SPI_Receive_DMA()
2019 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmarx->Init.DestDataWidth != DMA_DEST_D… in HAL_SPI_Receive_DMA()
2020 (IS_SPI_FULL_INSTANCE(hspi->Instance))) || \ in HAL_SPI_Receive_DMA()
2021 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAW… in HAL_SPI_Receive_DMA()
2024 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2029 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_Receive_DMA()
2032 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Receive_DMA()
2034 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_HALFWORD) in HAL_SPI_Receive_DMA()
2036 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Receive_DMA()
2038 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_Receive_DMA()
2040 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_Receive_DMA()
2043 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Receive_DMA()
2045 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_Receive_DMA()
2047 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Receive_DMA()
2056 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; in HAL_SPI_Receive_DMA()
2059 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; in HAL_SPI_Receive_DMA()
2062 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Receive_DMA()
2065 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Receive_DMA()
2067 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Receive_DMA()
2069 hspi->RxXferCount = Size; in HAL_SPI_Receive_DMA()
2071 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Receive_DMA()
2073 hspi->RxXferCount = Size * 2U; in HAL_SPI_Receive_DMA()
2077 hspi->RxXferCount = Size * 4U; in HAL_SPI_Receive_DMA()
2081 if ((hspi->hdmarx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_Receive_DMA()
2083 if (hspi->hdmarx->LinkedListQueue != NULL) in HAL_SPI_Receive_DMA()
2086 … hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->RxXferCount; in HAL_SPI_Receive_DMA()
2089 …hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_Receive_DMA()
2092 …hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)hspi->pRx… in HAL_SPI_Receive_DMA()
2094 status = HAL_DMAEx_List_Start_IT(hspi->hdmarx); in HAL_SPI_Receive_DMA()
2103 …status = HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->RXDR, (uint32_t)hspi->pRxBuffPt… in HAL_SPI_Receive_DMA()
2104 hspi->RxXferCount); in HAL_SPI_Receive_DMA()
2111 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Receive_DMA()
2112 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive_DMA()
2115 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2121 if (hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) in HAL_SPI_Receive_DMA()
2123 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_Receive_DMA()
2127 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive_DMA()
2131 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_Receive_DMA()
2134 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_OVR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Receive_DMA()
2137 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_DMA()
2139 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_Receive_DMA()
2142 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive_DMA()
2146 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2161 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint… in HAL_SPI_TransmitReceive_DMA() argument
2167 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_DMA()
2169 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive_DMA()
2180 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2183 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_DMA()
2184 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_DMA()
2185 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_DMA()
2186 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2187 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2188 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_DMA()
2189 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2190 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2193 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2194 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2197 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive_DMA()
2200 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2203 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmarx->Init.DestDataWidth != DMA_DEST_D… in HAL_SPI_TransmitReceive_DMA()
2204 (IS_SPI_FULL_INSTANCE(hspi->Instance))) || \ in HAL_SPI_TransmitReceive_DMA()
2205 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAW… in HAL_SPI_TransmitReceive_DMA()
2209 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2214 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2216 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2218 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2220 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2222 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_TransmitReceive_DMA()
2224 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2226 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2228 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2230 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_TransmitReceive_DMA()
2233 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2235 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2237 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2239 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2241 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2250 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfTransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2251 hspi->hdmarx->XferCpltCallback = SPI_DMATransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2254 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
2257 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2259 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2261 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2263 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2265 hspi->RxXferCount = Size * 2U; in HAL_SPI_TransmitReceive_DMA()
2269 hspi->RxXferCount = Size * 4U; in HAL_SPI_TransmitReceive_DMA()
2272 if ((hspi->hdmarx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_TransmitReceive_DMA()
2274 if (hspi->hdmarx->LinkedListQueue != NULL) in HAL_SPI_TransmitReceive_DMA()
2277 … hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->RxXferCount; in HAL_SPI_TransmitReceive_DMA()
2280 …hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_TransmitReceive_DMA()
2283 …hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)hspi->pRx… in HAL_SPI_TransmitReceive_DMA()
2285 status = HAL_DMAEx_List_Start_IT(hspi->hdmarx); in HAL_SPI_TransmitReceive_DMA()
2294 …status = HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->RXDR, (uint32_t)hspi->pRxBuffPt… in HAL_SPI_TransmitReceive_DMA()
2295 hspi->RxXferCount); in HAL_SPI_TransmitReceive_DMA()
2302 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2303 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2306 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2312 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2316 hspi->hdmatx->XferHalfCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2317 hspi->hdmatx->XferCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2318 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2321 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
2323 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2325 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2327 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2329 hspi->TxXferCount = Size * 2U; in HAL_SPI_TransmitReceive_DMA()
2333 hspi->TxXferCount = Size * 4U; in HAL_SPI_TransmitReceive_DMA()
2337 if ((hspi->hdmatx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_TransmitReceive_DMA()
2339 if (hspi->hdmatx->LinkedListQueue != NULL) in HAL_SPI_TransmitReceive_DMA()
2342 … hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->TxXferCount; in HAL_SPI_TransmitReceive_DMA()
2345 …hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)hspi->pTx… in HAL_SPI_TransmitReceive_DMA()
2348 …hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_TransmitReceive_DMA()
2350 status = HAL_DMAEx_List_Start_IT(hspi->hdmatx); in HAL_SPI_TransmitReceive_DMA()
2359 …status = HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->TXD… in HAL_SPI_TransmitReceive_DMA()
2360 hspi->TxXferCount); in HAL_SPI_TransmitReceive_DMA()
2367 (void)HAL_DMA_Abort(hspi->hdmarx); in HAL_SPI_TransmitReceive_DMA()
2370 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2371 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2374 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2379 …if ((hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) && (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCU… in HAL_SPI_TransmitReceive_DMA()
2381 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_TransmitReceive_DMA()
2385 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive_DMA()
2389 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2392 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_OVR | SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_TransmitReceive_DMA()
2395 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_DMA()
2397 if (((hspi->Instance->AUTOCR & SPI_AUTOCR_TRIGEN) == 0U) && (hspi->Init.Mode == SPI_MODE_MASTER)) in HAL_SPI_TransmitReceive_DMA()
2400 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive_DMA()
2404 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2422 HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort() argument
2429 __HAL_LOCK(hspi); in HAL_SPI_Abort()
2432 hspi->State = HAL_SPI_STATE_ABORT; in HAL_SPI_Abort()
2439 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Abort()
2442 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_Abort()
2448 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2451 } while (HAL_IS_BIT_SET(hspi->Instance->IER, SPI_IT_EOT)); in HAL_SPI_Abort()
2454 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSUSP); in HAL_SPI_Abort()
2460 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2463 } while (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)); in HAL_SPI_Abort()
2466 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Abort()
2472 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2475 } while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_SUSP)); in HAL_SPI_Abort()
2479 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN)) in HAL_SPI_Abort()
2481 if (hspi->hdmatx != NULL) in HAL_SPI_Abort()
2484 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2487 if (HAL_DMA_Abort(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort()
2489 if (HAL_DMA_GetError(hspi->hdmatx) == HAL_DMA_ERROR_TIMEOUT) in HAL_SPI_Abort()
2491 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2498 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN)) in HAL_SPI_Abort()
2500 if (hspi->hdmarx != NULL) in HAL_SPI_Abort()
2503 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2506 if (HAL_DMA_Abort(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort()
2508 if (HAL_DMA_GetError(hspi->hdmarx) == HAL_DMA_ERROR_TIMEOUT) in HAL_SPI_Abort()
2510 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2517 SPI_AbortTransfer(hspi); in HAL_SPI_Abort()
2520 if (HAL_IS_BIT_SET(hspi->ErrorCode, HAL_SPI_ERROR_ABORT)) in HAL_SPI_Abort()
2528 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort()
2532 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort()
2535 __HAL_UNLOCK(hspi); in HAL_SPI_Abort()
2555 HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort_IT() argument
2563 hspi->State = HAL_SPI_STATE_ABORT; in HAL_SPI_Abort_IT()
2570 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Abort_IT()
2573 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_Abort_IT()
2579 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2582 } while (HAL_IS_BIT_SET(hspi->Instance->IER, SPI_IT_EOT)); in HAL_SPI_Abort_IT()
2585 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSUSP); in HAL_SPI_Abort_IT()
2591 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2594 } while (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)); in HAL_SPI_Abort_IT()
2597 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Abort_IT()
2603 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2606 } while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_SUSP)); in HAL_SPI_Abort_IT()
2612 if (hspi->hdmatx != NULL) in HAL_SPI_Abort_IT()
2614 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN)) in HAL_SPI_Abort_IT()
2617 hspi->hdmatx->XferAbortCallback = SPI_DMATxAbortCallback; in HAL_SPI_Abort_IT()
2622 if (HAL_DMA_Abort_IT(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort_IT()
2624 if (HAL_DMA_GetError(hspi->hdmatx) == HAL_DMA_ERROR_NO_XFER) in HAL_SPI_Abort_IT()
2627 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2633 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2637 if (hspi->hdmarx != NULL) in HAL_SPI_Abort_IT()
2639 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN)) in HAL_SPI_Abort_IT()
2642 hspi->hdmarx->XferAbortCallback = SPI_DMARxAbortCallback; in HAL_SPI_Abort_IT()
2647 if (HAL_DMA_Abort_IT(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort_IT()
2649 if (HAL_DMA_GetError(hspi->hdmarx) == HAL_DMA_ERROR_NO_XFER) in HAL_SPI_Abort_IT()
2652 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2658 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2666 SPI_AbortTransfer(hspi); in HAL_SPI_Abort_IT()
2669 if (HAL_IS_BIT_SET(hspi->ErrorCode, HAL_SPI_ERROR_ABORT)) in HAL_SPI_Abort_IT()
2677 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort_IT()
2681 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort_IT()
2685 hspi->AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2687 HAL_SPI_AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2701 HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAPause() argument
2704 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAPause()
2716 HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAResume() argument
2719 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAResume()
2731 HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAStop() argument
2734 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAStop()
2745 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) in HAL_SPI_IRQHandler() argument
2747 uint32_t itsource = hspi->Instance->IER; in HAL_SPI_IRQHandler()
2748 uint32_t itflag = hspi->Instance->SR; in HAL_SPI_IRQHandler()
2750 uint32_t cfg1 = hspi->Instance->CFG1; in HAL_SPI_IRQHandler()
2753 HAL_SPI_StateTypeDef State = hspi->State; in HAL_SPI_IRQHandler()
2755 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_IRQHandler()
2762 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_IRQHandler()
2766 hspi->SuspendCallback(hspi); in HAL_SPI_IRQHandler()
2768 HAL_SPI_SuspendCallback(hspi); in HAL_SPI_IRQHandler()
2777 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
2778 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
2786 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
2794 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
2807 __HAL_SPI_CLEAR_EOTFLAG(hspi); in HAL_SPI_IRQHandler()
2808 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in HAL_SPI_IRQHandler()
2809 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_IRQHandler()
2812 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_IRQHandler()
2815 if (HAL_IS_BIT_CLR(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN)) in HAL_SPI_IRQHandler()
2818 while (hspi->RxXferCount != 0UL) in HAL_SPI_IRQHandler()
2821 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_IRQHandler()
2823 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
2824 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_IRQHandler()
2827 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_IRQHandler()
2830 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_IRQHandler()
2832 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
2834 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_IRQHandler()
2839 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
2840 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_IRQHandler()
2843 hspi->RxXferCount--; in HAL_SPI_IRQHandler()
2848 SPI_CloseTransfer(hspi); in HAL_SPI_IRQHandler()
2850 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
2851 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
2854 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2856 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2865 hspi->TxRxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2869 hspi->RxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2873 hspi->TxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2879 HAL_SPI_TxRxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2883 HAL_SPI_RxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2887 HAL_SPI_TxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2904 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in HAL_SPI_IRQHandler()
2905 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_IRQHandler()
2911 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in HAL_SPI_IRQHandler()
2912 __HAL_SPI_CLEAR_MODFFLAG(hspi); in HAL_SPI_IRQHandler()
2918 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); in HAL_SPI_IRQHandler()
2919 __HAL_SPI_CLEAR_FREFLAG(hspi); in HAL_SPI_IRQHandler()
2925 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_UDR); in HAL_SPI_IRQHandler()
2926 __HAL_SPI_CLEAR_UDRFLAG(hspi); in HAL_SPI_IRQHandler()
2929 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
2932 __HAL_SPI_DISABLE(hspi); in HAL_SPI_IRQHandler()
2935 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_RXP | SPI_IT_TXP | SPI_IT_MODF | in HAL_SPI_IRQHandler()
2942 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in HAL_SPI_IRQHandler()
2945 if (hspi->hdmarx != NULL) in HAL_SPI_IRQHandler()
2949 hspi->hdmarx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
2950 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmarx)) in HAL_SPI_IRQHandler()
2952 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
2956 if (hspi->hdmatx != NULL) in HAL_SPI_IRQHandler()
2960 hspi->hdmatx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
2961 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmatx)) in HAL_SPI_IRQHandler()
2963 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
2970 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
2974 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2976 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2990 __weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_TxCpltCallback() argument
2993 UNUSED(hspi); in HAL_SPI_TxCpltCallback()
3006 __weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_RxCpltCallback() argument
3009 UNUSED(hspi); in HAL_SPI_RxCpltCallback()
3022 __weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_TxRxCpltCallback() argument
3025 UNUSED(hspi); in HAL_SPI_TxRxCpltCallback()
3038 __weak void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 … in HAL_SPI_TxHalfCpltCallback() argument
3041 UNUSED(hspi); in HAL_SPI_TxHalfCpltCallback()
3054 __weak void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 … in HAL_SPI_RxHalfCpltCallback() argument
3057 UNUSED(hspi); in HAL_SPI_RxHalfCpltCallback()
3070 __weak void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.1… in HAL_SPI_TxRxHalfCpltCallback() argument
3073 UNUSED(hspi); in HAL_SPI_TxRxHalfCpltCallback()
3086 __weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_ErrorCallback() argument
3089 UNUSED(hspi); in HAL_SPI_ErrorCallback()
3104 __weak void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_AbortCpltCallback() argument
3107 UNUSED(hspi); in HAL_SPI_AbortCpltCallback()
3119 __weak void HAL_SPI_SuspendCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_SuspendCallback() argument
3122 UNUSED(hspi); in HAL_SPI_SuspendCallback()
3154 HAL_SPI_StateTypeDef HAL_SPI_GetState(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetState() argument
3157 return hspi->State; in HAL_SPI_GetState()
3166 uint32_t HAL_SPI_GetError(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetError() argument
3169 return hspi->ErrorCode; in HAL_SPI_GetError()
3193 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATransmitCplt() local
3195 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMATransmitCplt()
3197 if (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR) in SPI_DMATransmitCplt()
3200 hspi->TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3202 HAL_SPI_TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3208 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMATransmitCplt()
3221 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAReceiveCplt() local
3223 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMAReceiveCplt()
3225 if (hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) in SPI_DMAReceiveCplt()
3228 hspi->RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3230 HAL_SPI_RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3236 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMAReceiveCplt()
3249 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATransmitReceiveCplt() local
3251 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMATransmitReceiveCplt()
3253 if ((hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) && in SPI_DMATransmitReceiveCplt()
3254 (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR)) in SPI_DMATransmitReceiveCplt()
3257 hspi->TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3259 HAL_SPI_TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3265 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMATransmitReceiveCplt()
3278 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *) in SPI_DMAHalfTransmitCplt() local
3282 hspi->TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3284 HAL_SPI_TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3296 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *) in SPI_DMAHalfReceiveCplt() local
3300 hspi->RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3302 HAL_SPI_RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3314 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *) in SPI_DMAHalfTransmitReceiveCplt() local
3318 hspi->TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3320 HAL_SPI_TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3332 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAError() local
3338 SPI_CloseTransfer(hspi); in SPI_DMAError()
3340 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in SPI_DMAError()
3341 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAError()
3343 hspi->ErrorCallback(hspi); in SPI_DMAError()
3345 HAL_SPI_ErrorCallback(hspi); in SPI_DMAError()
3358 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAAbortOnError() local
3359 hspi->RxXferCount = (uint16_t) 0UL; in SPI_DMAAbortOnError()
3360 hspi->TxXferCount = (uint16_t) 0UL; in SPI_DMAAbortOnError()
3363 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAAbortOnError()
3366 hspi->ErrorCallback(hspi); in SPI_DMAAbortOnError()
3368 HAL_SPI_ErrorCallback(hspi); in SPI_DMAAbortOnError()
3382 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATxAbortCallback() local
3384 hspi->hdmatx->XferAbortCallback = NULL; in SPI_DMATxAbortCallback()
3387 if (hspi->hdmarx != NULL) in SPI_DMATxAbortCallback()
3389 if (hspi->hdmarx->XferAbortCallback != NULL) in SPI_DMATxAbortCallback()
3396 SPI_AbortTransfer(hspi); in SPI_DMATxAbortCallback()
3399 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATxAbortCallback()
3403 hspi->AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3405 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3419 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMARxAbortCallback() local
3421 hspi->hdmarx->XferAbortCallback = NULL; in SPI_DMARxAbortCallback()
3424 if (hspi->hdmatx != NULL) in SPI_DMARxAbortCallback()
3426 if (hspi->hdmatx->XferAbortCallback != NULL) in SPI_DMARxAbortCallback()
3433 SPI_AbortTransfer(hspi); in SPI_DMARxAbortCallback()
3436 hspi->State = HAL_SPI_STATE_READY; in SPI_DMARxAbortCallback()
3440 hspi->AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3442 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3452 static void SPI_RxISR_8BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_8BIT() argument
3455 *((uint8_t *)hspi->pRxBuffPtr) = (*(__IO uint8_t *)&hspi->Instance->RXDR); in SPI_RxISR_8BIT()
3456 hspi->pRxBuffPtr += sizeof(uint8_t); in SPI_RxISR_8BIT()
3457 hspi->RxXferCount--; in SPI_RxISR_8BIT()
3460 if (hspi->RxXferCount == 0UL) in SPI_RxISR_8BIT()
3463 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_8BIT()
3474 static void SPI_RxISR_16BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_16BIT() argument
3478 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in SPI_RxISR_16BIT()
3480 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in SPI_RxISR_16BIT()
3482 *((uint16_t *)hspi->pRxBuffPtr) = (*(__IO uint16_t *)&hspi->Instance->RXDR); in SPI_RxISR_16BIT()
3484 hspi->pRxBuffPtr += sizeof(uint16_t); in SPI_RxISR_16BIT()
3485 hspi->RxXferCount--; in SPI_RxISR_16BIT()
3488 if (hspi->RxXferCount == 0UL) in SPI_RxISR_16BIT()
3491 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_16BIT()
3502 static void SPI_RxISR_32BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_32BIT() argument
3505 *((uint32_t *)hspi->pRxBuffPtr) = (*(__IO uint32_t *)&hspi->Instance->RXDR); in SPI_RxISR_32BIT()
3506 hspi->pRxBuffPtr += sizeof(uint32_t); in SPI_RxISR_32BIT()
3507 hspi->RxXferCount--; in SPI_RxISR_32BIT()
3510 if (hspi->RxXferCount == 0UL) in SPI_RxISR_32BIT()
3513 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_32BIT()
3524 static void SPI_TxISR_8BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_8BIT() argument
3527 *(__IO uint8_t *)&hspi->Instance->TXDR = *((const uint8_t *)hspi->pTxBuffPtr); in SPI_TxISR_8BIT()
3528 hspi->pTxBuffPtr += sizeof(uint8_t); in SPI_TxISR_8BIT()
3529 hspi->TxXferCount--; in SPI_TxISR_8BIT()
3532 if (hspi->TxXferCount == 0UL) in SPI_TxISR_8BIT()
3535 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_8BIT()
3545 static void SPI_TxISR_16BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_16BIT() argument
3549 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in SPI_TxISR_16BIT()
3551 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3553 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3555 hspi->pTxBuffPtr += sizeof(uint16_t); in SPI_TxISR_16BIT()
3556 hspi->TxXferCount--; in SPI_TxISR_16BIT()
3559 if (hspi->TxXferCount == 0UL) in SPI_TxISR_16BIT()
3562 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_16BIT()
3572 static void SPI_TxISR_32BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_32BIT() argument
3575 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in SPI_TxISR_32BIT()
3576 hspi->pTxBuffPtr += sizeof(uint32_t); in SPI_TxISR_32BIT()
3577 hspi->TxXferCount--; in SPI_TxISR_32BIT()
3580 if (hspi->TxXferCount == 0UL) in SPI_TxISR_32BIT()
3583 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_32BIT()
3593 static void SPI_AbortTransfer(SPI_HandleTypeDef *hspi) in SPI_AbortTransfer() argument
3596 __HAL_SPI_DISABLE(hspi); in SPI_AbortTransfer()
3599 …__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()
3603 __HAL_SPI_CLEAR_EOTFLAG(hspi); in SPI_AbortTransfer()
3604 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in SPI_AbortTransfer()
3607 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in SPI_AbortTransfer()
3610 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_AbortTransfer()
3611 __HAL_SPI_CLEAR_UDRFLAG(hspi); in SPI_AbortTransfer()
3612 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_AbortTransfer()
3613 __HAL_SPI_CLEAR_MODFFLAG(hspi); in SPI_AbortTransfer()
3614 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in SPI_AbortTransfer()
3617 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_AbortTransfer()
3620 hspi->TxXferCount = (uint16_t)0UL; in SPI_AbortTransfer()
3621 hspi->RxXferCount = (uint16_t)0UL; in SPI_AbortTransfer()
3632 static void SPI_CloseTransfer(SPI_HandleTypeDef *hspi) in SPI_CloseTransfer() argument
3634 uint32_t itflag = hspi->Instance->SR; in SPI_CloseTransfer()
3636 __HAL_SPI_CLEAR_EOTFLAG(hspi); in SPI_CloseTransfer()
3637 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in SPI_CloseTransfer()
3640 __HAL_SPI_DISABLE(hspi); in SPI_CloseTransfer()
3643 …__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()
3647 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in SPI_CloseTransfer()
3650 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in SPI_CloseTransfer()
3654 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_UDR); in SPI_CloseTransfer()
3655 __HAL_SPI_CLEAR_UDRFLAG(hspi); in SPI_CloseTransfer()
3660 if (hspi->State != HAL_SPI_STATE_BUSY_TX) in SPI_CloseTransfer()
3664 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in SPI_CloseTransfer()
3665 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_CloseTransfer()
3670 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_CloseTransfer()
3674 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_CloseTransfer()
3675 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_CloseTransfer()
3684 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in SPI_CloseTransfer()
3685 __HAL_SPI_CLEAR_MODFFLAG(hspi); in SPI_CloseTransfer()
3691 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); in SPI_CloseTransfer()
3692 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_CloseTransfer()
3695 hspi->TxXferCount = (uint16_t)0UL; in SPI_CloseTransfer()
3696 hspi->RxXferCount = (uint16_t)0UL; in SPI_CloseTransfer()
3709 static HAL_StatusTypeDef SPI_WaitOnFlagUntilTimeout(const SPI_HandleTypeDef *hspi, uint32_t Flag, F… in SPI_WaitOnFlagUntilTimeout() argument
3713 while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) == Status) in SPI_WaitOnFlagUntilTimeout()
3730 static uint32_t SPI_GetPacketSize(const SPI_HandleTypeDef *hspi) in SPI_GetPacketSize() argument
3732 uint32_t fifo_threashold = (hspi->Init.FifoThreshold >> SPI_CFG1_FTHLV_Pos) + 1UL; in SPI_GetPacketSize()
3733 uint32_t data_size = (hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) + 1UL; in SPI_GetPacketSize()