Lines Matching refs:hspi
176 static HAL_StatusTypeDef SPI_WaitOnFlagUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagSta…
178 static void SPI_TxISR_8BIT(SPI_HandleTypeDef *hspi);
179 static void SPI_TxISR_16BIT(SPI_HandleTypeDef *hspi);
180 static void SPI_TxISR_32BIT(SPI_HandleTypeDef *hspi);
181 static void SPI_RxISR_8BIT(SPI_HandleTypeDef *hspi);
182 static void SPI_RxISR_16BIT(SPI_HandleTypeDef *hspi);
183 static void SPI_RxISR_32BIT(SPI_HandleTypeDef *hspi);
184 static void SPI_AbortTransfer(SPI_HandleTypeDef *hspi);
185 static void SPI_CloseTransfer(SPI_HandleTypeDef *hspi);
186 static uint32_t SPI_GetPacketSize(SPI_HandleTypeDef *hspi);
241 HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) in HAL_SPI_Init() argument
247 if (hspi == NULL) in HAL_SPI_Init()
253 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_Init()
254 assert_param(IS_SPI_MODE(hspi->Init.Mode)); in HAL_SPI_Init()
255 assert_param(IS_SPI_DIRECTION(hspi->Init.Direction)); in HAL_SPI_Init()
256 assert_param(IS_SPI_DATASIZE(hspi->Init.DataSize)); in HAL_SPI_Init()
257 assert_param(IS_SPI_FIFOTHRESHOLD(hspi->Init.FifoThreshold)); in HAL_SPI_Init()
258 assert_param(IS_SPI_NSS(hspi->Init.NSS)); in HAL_SPI_Init()
259 assert_param(IS_SPI_NSSP(hspi->Init.NSSPMode)); in HAL_SPI_Init()
260 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
261 assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); in HAL_SPI_Init()
262 assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); in HAL_SPI_Init()
263 if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) in HAL_SPI_Init()
265 assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); in HAL_SPI_Init()
266 assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); in HAL_SPI_Init()
269 assert_param(IS_SPI_CRC_CALCULATION(hspi->Init.CRCCalculation)); in HAL_SPI_Init()
270 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
272 assert_param(IS_SPI_CRC_LENGTH(hspi->Init.CRCLength)); in HAL_SPI_Init()
273 assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); in HAL_SPI_Init()
274 assert_param(IS_SPI_CRC_INITIALIZATION_PATTERN(hspi->Init.TxCRCInitializationPattern)); in HAL_SPI_Init()
275 assert_param(IS_SPI_CRC_INITIALIZATION_PATTERN(hspi->Init.RxCRCInitializationPattern)); in HAL_SPI_Init()
278 hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; in HAL_SPI_Init()
282 if ((!IS_SPI_HIGHEND_INSTANCE(hspi->Instance)) && (hspi->Init.DataSize > SPI_DATASIZE_16BIT)) in HAL_SPI_Init()
288 packet_length = SPI_GetPacketSize(hspi); in HAL_SPI_Init()
289 if (((!IS_SPI_HIGHEND_INSTANCE(hspi->Instance)) && (packet_length > SPI_LOWEND_FIFO_SIZE)) || in HAL_SPI_Init()
290 ((IS_SPI_HIGHEND_INSTANCE(hspi->Instance)) && (packet_length > SPI_HIGHEND_FIFO_SIZE))) in HAL_SPI_Init()
296 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
299 if ((!IS_SPI_HIGHEND_INSTANCE(hspi->Instance)) && (hspi->Init.CRCLength > SPI_CRC_LENGTH_16BIT)) in HAL_SPI_Init()
305 if (hspi->Init.CRCLength == SPI_CRC_LENGTH_DATASIZE) in HAL_SPI_Init()
307 crc_length = (hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) << SPI_CFG1_CRCSIZE_Pos; in HAL_SPI_Init()
311 crc_length = hspi->Init.CRCLength; in HAL_SPI_Init()
315 if ((hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) > (crc_length >> SPI_CFG1_CRCSIZE_Pos)) in HAL_SPI_Init()
322 crc_length = hspi->Init.DataSize << SPI_CFG1_CRCSIZE_Pos; in HAL_SPI_Init()
326 if (hspi->State == HAL_SPI_STATE_RESET) in HAL_SPI_Init()
329 hspi->Lock = HAL_UNLOCKED; in HAL_SPI_Init()
333 … hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_Init()
334 … hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_Init()
335 … hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_Init()
336 … hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_Init()
337 … hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_Init()
338 … hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_Init()
339 … hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_Init()
340 … hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_Init()
341 … hspi->SuspendCallback = HAL_SPI_SuspendCallback; /* Legacy weak SuspendCallback */ in HAL_SPI_Init()
343 if (hspi->MspInitCallback == NULL) in HAL_SPI_Init()
345 hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_Init()
349 hspi->MspInitCallback(hspi); in HAL_SPI_Init()
352 HAL_SPI_MspInit(hspi); in HAL_SPI_Init()
356 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_Init()
359 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Init()
363 crc_length = hspi->Instance->CFG1 & SPI_CFG1_CRCSIZE; in HAL_SPI_Init()
371 if ((hspi->Init.NSS == SPI_NSS_SOFT) && (((hspi->Init.Mode == SPI_MODE_MASTER) && \ in HAL_SPI_Init()
372 (hspi->Init.NSSPolarity == SPI_NSS_POLARITY_LOW)) || \ in HAL_SPI_Init()
373 ((hspi->Init.Mode == SPI_MODE_SLAVE) && \ in HAL_SPI_Init()
374 (hspi->Init.NSSPolarity == SPI_NSS_POLARITY_HIGH)))) in HAL_SPI_Init()
376 SET_BIT(hspi->Instance->CR1, SPI_CR1_SSI); in HAL_SPI_Init()
380 …if (((hspi->Init.Mode & SPI_MODE_MASTER) == SPI_MODE_MASTER) && (hspi->Init.DataSize >= SPI_DATASI… in HAL_SPI_Init()
382 MODIFY_REG(hspi->Instance->CR1, SPI_CR1_MASRX, hspi->Init.MasterReceiverAutoSusp); in HAL_SPI_Init()
386 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_MASRX); in HAL_SPI_Init()
390 …WRITE_REG(hspi->Instance->CFG1, (hspi->Init.BaudRatePrescaler | hspi->Init.CRCCalculation | crc_le… in HAL_SPI_Init()
391 hspi->Init.FifoThreshold | hspi->Init.DataSize)); in HAL_SPI_Init()
394 WRITE_REG(hspi->Instance->CFG2, (hspi->Init.NSSPMode | hspi->Init.TIMode | in HAL_SPI_Init()
395 hspi->Init.NSSPolarity | hspi->Init.NSS | in HAL_SPI_Init()
396 hspi->Init.CLKPolarity | hspi->Init.CLKPhase | in HAL_SPI_Init()
397 hspi->Init.FirstBit | hspi->Init.Mode | in HAL_SPI_Init()
398 hspi->Init.MasterInterDataIdleness | hspi->Init.Direction | in HAL_SPI_Init()
399 hspi->Init.MasterSSIdleness | hspi->Init.IOSwap)); in HAL_SPI_Init()
404 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
407 if (hspi->Init.TxCRCInitializationPattern == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN) in HAL_SPI_Init()
409 SET_BIT(hspi->Instance->CR1, SPI_CR1_TCRCINI); in HAL_SPI_Init()
413 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_TCRCINI); in HAL_SPI_Init()
417 if (hspi->Init.RxCRCInitializationPattern == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN) in HAL_SPI_Init()
419 SET_BIT(hspi->Instance->CR1, SPI_CR1_RCRCINI); in HAL_SPI_Init()
423 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_RCRCINI); in HAL_SPI_Init()
427 if (((!IS_SPI_HIGHEND_INSTANCE(hspi->Instance)) && (crc_length == SPI_CRC_LENGTH_16BIT)) || in HAL_SPI_Init()
428 ((IS_SPI_HIGHEND_INSTANCE(hspi->Instance)) && (crc_length == SPI_CRC_LENGTH_32BIT))) in HAL_SPI_Init()
430 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRC33_17); in HAL_SPI_Init()
434 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_CRC33_17); in HAL_SPI_Init()
438 WRITE_REG(hspi->Instance->CRCPOLY, hspi->Init.CRCPolynomial); in HAL_SPI_Init()
443 if (hspi->Init.Mode == SPI_MODE_SLAVE) in HAL_SPI_Init()
447 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_DISABLE) in HAL_SPI_Init()
450 MODIFY_REG(hspi->Instance->CFG1, SPI_CFG1_UDRDET, SPI_CFG1_UDRDET_0); in HAL_SPI_Init()
452 MODIFY_REG(hspi->Instance->CFG1, SPI_CFG1_UDRCFG, SPI_CFG1_UDRCFG_1); in HAL_SPI_Init()
457 CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); in HAL_SPI_Init()
461 if ((hspi->Init.Mode & SPI_MODE_MASTER) == SPI_MODE_MASTER) in HAL_SPI_Init()
464 MODIFY_REG(hspi->Instance->CFG2, SPI_CFG2_AFCNTR, (hspi->Init.MasterKeepIOState)); in HAL_SPI_Init()
467 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Init()
468 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Init()
479 HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_DeInit() argument
482 if (hspi == NULL) in HAL_SPI_DeInit()
488 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_DeInit()
490 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_DeInit()
493 __HAL_SPI_DISABLE(hspi); in HAL_SPI_DeInit()
496 if (hspi->MspDeInitCallback == NULL) in HAL_SPI_DeInit()
498 hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_DeInit()
502 hspi->MspDeInitCallback(hspi); in HAL_SPI_DeInit()
505 HAL_SPI_MspDeInit(hspi); in HAL_SPI_DeInit()
508 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_DeInit()
509 hspi->State = HAL_SPI_STATE_RESET; in HAL_SPI_DeInit()
512 __HAL_UNLOCK(hspi); in HAL_SPI_DeInit()
523 __weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspInit() argument
526 UNUSED(hspi); in HAL_SPI_MspInit()
539 __weak void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspDeInit() argument
542 UNUSED(hspi); in HAL_SPI_MspDeInit()
559 HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Callb… in HAL_SPI_RegisterCallback() argument
567 hspi->ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK; in HAL_SPI_RegisterCallback()
572 __HAL_LOCK(hspi); in HAL_SPI_RegisterCallback()
574 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_RegisterCallback()
579 hspi->TxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
583 hspi->RxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
587 hspi->TxRxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
591 hspi->TxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
595 hspi->RxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
599 hspi->TxRxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
603 hspi->ErrorCallback = pCallback; in HAL_SPI_RegisterCallback()
607 hspi->AbortCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
611 hspi->SuspendCallback = pCallback; in HAL_SPI_RegisterCallback()
615 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
619 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
624 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
631 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_RegisterCallback()
636 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
640 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
645 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
655 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
662 __HAL_UNLOCK(hspi); in HAL_SPI_RegisterCallback()
674 HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Cal… in HAL_SPI_UnRegisterCallback() argument
679 __HAL_LOCK(hspi); in HAL_SPI_UnRegisterCallback()
681 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_UnRegisterCallback()
686 … hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_UnRegisterCallback()
690 … hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_UnRegisterCallback()
694 … hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_UnRegisterCallback()
698 … hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
702 … hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
706 … hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
710 … hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_UnRegisterCallback()
714 … hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_UnRegisterCallback()
718 … hspi->SuspendCallback = HAL_SPI_SuspendCallback; /* Legacy weak SuspendCallback */ in HAL_SPI_UnRegisterCallback()
722 … hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
726 … hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
731 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
738 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_UnRegisterCallback()
743 … hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
747 … hspi->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()
762 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
769 __HAL_UNLOCK(hspi); in HAL_SPI_UnRegisterCallback()
819 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size, ui… in HAL_SPI_Transmit() argument
822 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_Transmit()
829 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit()
832 __HAL_LOCK(hspi); in HAL_SPI_Transmit()
837 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit()
840 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
847 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
852 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit()
853 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit()
854 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit()
855 hspi->TxXferSize = Size; in HAL_SPI_Transmit()
856 hspi->TxXferCount = Size; in HAL_SPI_Transmit()
859 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit()
860 hspi->RxXferSize = (uint16_t) 0UL; in HAL_SPI_Transmit()
861 hspi->RxXferCount = (uint16_t) 0UL; in HAL_SPI_Transmit()
862 hspi->TxISR = NULL; in HAL_SPI_Transmit()
863 hspi->RxISR = NULL; in HAL_SPI_Transmit()
866 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit()
868 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit()
872 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit()
876 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit()
879 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit()
881 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Transmit()
884 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit()
888 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_Transmit()
891 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
894 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
896 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
897 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
898 hspi->TxXferCount--; in HAL_SPI_Transmit()
906 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
909 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
911 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
912 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
919 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit()
922 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
925 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
927 if ((hspi->TxXferCount > 1UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_01DATA)) in HAL_SPI_Transmit()
929 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
930 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
931 hspi->TxXferCount -= (uint16_t)2UL; in HAL_SPI_Transmit()
936 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
938 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
940 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
941 hspi->TxXferCount--; in HAL_SPI_Transmit()
950 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
953 __HAL_UNLOCK(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()
965 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
968 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
970 if ((hspi->TxXferCount > 3UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_03DATA)) in HAL_SPI_Transmit()
972 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
973 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
974 hspi->TxXferCount -= (uint16_t)4UL; in HAL_SPI_Transmit()
976 … else if ((hspi->TxXferCount > 1UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_01DATA)) in HAL_SPI_Transmit()
979 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
981 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
983 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
984 hspi->TxXferCount -= (uint16_t)2UL; in HAL_SPI_Transmit()
988 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
989 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_Transmit()
990 hspi->TxXferCount--; in HAL_SPI_Transmit()
999 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
1002 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
1004 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
1005 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
1013 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, tickstart, Timeout) != HAL_OK) in HAL_SPI_Transmit()
1015 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_Transmit()
1019 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
1022 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
1024 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
1026 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Transmit()
1042 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SPI_Receive() argument
1047 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_Receive()
1051 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive()
1054 __HAL_LOCK(hspi); in HAL_SPI_Receive()
1059 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive()
1062 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1069 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1074 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive()
1075 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive()
1076 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive()
1077 hspi->RxXferSize = Size; in HAL_SPI_Receive()
1078 hspi->RxXferCount = Size; in HAL_SPI_Receive()
1081 hspi->pTxBuffPtr = NULL; in HAL_SPI_Receive()
1082 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive()
1083 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive()
1084 hspi->RxISR = NULL; in HAL_SPI_Receive()
1085 hspi->TxISR = NULL; in HAL_SPI_Receive()
1088 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive()
1090 SPI_1LINE_RX(hspi); in HAL_SPI_Receive()
1094 SPI_2LINES_RX(hspi); in HAL_SPI_Receive()
1098 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive()
1101 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive()
1103 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Receive()
1106 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive()
1110 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_Receive()
1113 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1116 if ((hspi->Instance->SR & (SPI_FLAG_RXWNE | SPI_FLAG_EOT)) != 0UL) in HAL_SPI_Receive()
1118 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1119 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_Receive()
1120 hspi->RxXferCount--; in HAL_SPI_Receive()
1128 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1131 __HAL_UNLOCK(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()
1141 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive()
1144 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1147 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_Receive()
1150 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_Receive()
1152 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1154 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_Receive()
1155 hspi->RxXferCount--; in HAL_SPI_Receive()
1163 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1166 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1168 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1169 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1179 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1182 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_Receive()
1184 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1185 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1186 hspi->RxXferCount--; in HAL_SPI_Receive()
1194 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1197 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1199 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1200 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1208 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive()
1211 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, tickstart, Timeout) != HAL_OK) in HAL_SPI_Receive()
1213 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_Receive()
1219 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1222 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1224 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1226 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Receive()
1243 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t … in HAL_SPI_TransmitReceive() argument
1248 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_TransmitReceive()
1249 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_TransmitReceive()
1257 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive()
1260 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive()
1268 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive()
1271 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1278 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1283 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive()
1284 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive()
1285 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive()
1286 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive()
1287 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive()
1288 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive()
1289 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive()
1290 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive()
1293 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive()
1294 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive()
1297 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive()
1300 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive()
1302 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive()
1304 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_TransmitReceive()
1307 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive()
1311 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive()
1316 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1318 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1319 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive()
1320 hspi->TxXferCount --; in HAL_SPI_TransmitReceive()
1321 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1325 …if (((hspi->Instance->SR & (SPI_FLAG_RXWNE | SPI_FLAG_EOT)) != 0UL) && (initial_RxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1327 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1328 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive()
1329 hspi->RxXferCount --; in HAL_SPI_TransmitReceive()
1330 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1337 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1340 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1342 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1343 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1349 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive()
1354 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP) && (initial_TxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1357 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1359 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1361 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1362 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1363 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1367 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) && (initial_RxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1370 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_TransmitReceive()
1372 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1374 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1375 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1376 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1383 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1386 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1388 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1389 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1400 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1402 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1403 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1404 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1405 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1409 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) && (initial_RxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1411 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1412 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1413 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1414 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1421 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1424 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1426 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1427 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1434 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, tickstart, Timeout) != HAL_OK) in HAL_SPI_TransmitReceive()
1436 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_TransmitReceive()
1440 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1443 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1445 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1447 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_TransmitReceive()
1462 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_IT() argument
1467 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit_IT()
1470 __HAL_LOCK(hspi); in HAL_SPI_Transmit_IT()
1475 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1479 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_IT()
1482 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1487 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_IT()
1488 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_IT()
1489 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_IT()
1490 hspi->TxXferSize = Size; in HAL_SPI_Transmit_IT()
1491 hspi->TxXferCount = Size; in HAL_SPI_Transmit_IT()
1494 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit_IT()
1495 hspi->RxXferSize = (uint16_t) 0UL; in HAL_SPI_Transmit_IT()
1496 hspi->RxXferCount = (uint16_t) 0UL; in HAL_SPI_Transmit_IT()
1497 hspi->RxISR = NULL; in HAL_SPI_Transmit_IT()
1500 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_Transmit_IT()
1502 hspi->TxISR = SPI_TxISR_32BIT; in HAL_SPI_Transmit_IT()
1504 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_IT()
1506 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_Transmit_IT()
1510 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_Transmit_IT()
1514 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_IT()
1516 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_IT()
1520 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit_IT()
1524 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit_IT()
1527 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_IT()
1530 …__HAL_SPI_ENABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_TXP | SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF | SPI_I… in HAL_SPI_Transmit_IT()
1532 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Transmit_IT()
1535 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit_IT()
1538 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1550 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_IT() argument
1555 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive_IT()
1558 __HAL_LOCK(hspi); in HAL_SPI_Receive_IT()
1560 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_IT()
1563 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1570 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1575 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_IT()
1576 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_IT()
1577 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_IT()
1578 hspi->RxXferSize = Size; in HAL_SPI_Receive_IT()
1579 hspi->RxXferCount = Size; in HAL_SPI_Receive_IT()
1582 hspi->pTxBuffPtr = NULL; in HAL_SPI_Receive_IT()
1583 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive_IT()
1584 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive_IT()
1585 hspi->TxISR = NULL; in HAL_SPI_Receive_IT()
1588 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_Receive_IT()
1590 hspi->RxISR = SPI_RxISR_32BIT; in HAL_SPI_Receive_IT()
1592 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive_IT()
1594 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_Receive_IT()
1598 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_Receive_IT()
1602 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_IT()
1604 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_IT()
1608 SPI_2LINES_RX(hspi); in HAL_SPI_Receive_IT()
1616 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive_IT()
1619 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_IT()
1622 …__HAL_SPI_ENABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_RXP | SPI_IT_OVR | SPI_IT_FRE | SPI_IT_MODF | SPI_I… in HAL_SPI_Receive_IT()
1624 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Receive_IT()
1627 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive_IT()
1631 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1644 HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8… in HAL_SPI_TransmitReceive_IT() argument
1651 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_TransmitReceive_IT()
1655 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_IT()
1658 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1660 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive_IT()
1663 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1670 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1675 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_IT()
1676 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_IT()
1677 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_IT()
1678 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1679 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1680 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_IT()
1681 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1682 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1683 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1686 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_IT()
1688 hspi->TxISR = SPI_TxISR_32BIT; in HAL_SPI_TransmitReceive_IT()
1689 hspi->RxISR = SPI_RxISR_32BIT; in HAL_SPI_TransmitReceive_IT()
1691 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1693 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1694 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1698 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1699 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1703 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive_IT()
1706 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive_IT()
1709 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_IT()
1712 while ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (tmp_TxXferCount != 0UL)) in HAL_SPI_TransmitReceive_IT()
1715 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_IT()
1717 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1718 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive_IT()
1719 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1720 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1723 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1726 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1728 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1730 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive_IT()
1731 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1732 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1737 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1738 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive_IT()
1739 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1740 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1745 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_DXP | SPI_IT_UDR | SPI_IT_OVR | in HAL_SPI_TransmitReceive_IT()
1748 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_TransmitReceive_IT()
1751 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive_IT()
1755 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1768 HAL_StatusTypeDef HAL_SPI_Reload_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_… in HAL_SPI_Reload_Transmit_IT() argument
1774 __HAL_LOCK(hspi); in HAL_SPI_Reload_Transmit_IT()
1779 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_Transmit_IT()
1783 if (hspi->State == HAL_SPI_STATE_BUSY_TX) in HAL_SPI_Reload_Transmit_IT()
1786 if (hspi->Reload.Requested == 1UL) in HAL_SPI_Reload_Transmit_IT()
1789 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_Transmit_IT()
1794 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSER, (Size & 0xFFFFFFFFUL) << 16UL); in HAL_SPI_Reload_Transmit_IT()
1797 hspi->Reload.Requested = 1UL; in HAL_SPI_Reload_Transmit_IT()
1798 hspi->Reload.pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Reload_Transmit_IT()
1799 hspi->Reload.TxXferSize = Size; in HAL_SPI_Reload_Transmit_IT()
1801 tmp_state = hspi->State; in HAL_SPI_Reload_Transmit_IT()
1804 if (((hspi->Instance->CR2 & SPI_CR2_TSER) != 0UL) && (tmp_state == HAL_SPI_STATE_READY)) in HAL_SPI_Reload_Transmit_IT()
1806 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TSERF); in HAL_SPI_Reload_Transmit_IT()
1807 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSER, 0UL); in HAL_SPI_Reload_Transmit_IT()
1808 hspi->Reload.Requested = 0UL; in HAL_SPI_Reload_Transmit_IT()
1810 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_Transmit_IT()
1820 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_Transmit_IT()
1834 HAL_StatusTypeDef HAL_SPI_Reload_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Reload_Receive_IT() argument
1840 __HAL_LOCK(hspi); in HAL_SPI_Reload_Receive_IT()
1845 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_Receive_IT()
1849 if (hspi->State == HAL_SPI_STATE_BUSY_RX) in HAL_SPI_Reload_Receive_IT()
1852 if (hspi->Reload.Requested == 1UL) in HAL_SPI_Reload_Receive_IT()
1855 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_Receive_IT()
1860 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSER, (Size & 0xFFFFFFFFUL) << 16UL); in HAL_SPI_Reload_Receive_IT()
1863 hspi->Reload.Requested = 1UL; in HAL_SPI_Reload_Receive_IT()
1864 hspi->Reload.pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Reload_Receive_IT()
1865 hspi->Reload.RxXferSize = Size; in HAL_SPI_Reload_Receive_IT()
1867 tmp_state = hspi->State; in HAL_SPI_Reload_Receive_IT()
1870 if (((hspi->Instance->CR2 & SPI_CR2_TSER) != 0UL) && (tmp_state == HAL_SPI_STATE_READY)) in HAL_SPI_Reload_Receive_IT()
1872 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TSERF); in HAL_SPI_Reload_Receive_IT()
1873 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSER, 0UL); in HAL_SPI_Reload_Receive_IT()
1874 hspi->Reload.Requested = 0UL; in HAL_SPI_Reload_Receive_IT()
1876 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_Receive_IT()
1886 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_Receive_IT()
1901 HAL_StatusTypeDef HAL_SPI_Reload_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, in HAL_SPI_Reload_TransmitReceive_IT() argument
1908 __HAL_LOCK(hspi); in HAL_SPI_Reload_TransmitReceive_IT()
1913 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_TransmitReceive_IT()
1917 if (hspi->State == HAL_SPI_STATE_BUSY_TX_RX) in HAL_SPI_Reload_TransmitReceive_IT()
1920 if (hspi->Reload.Requested == 1UL) in HAL_SPI_Reload_TransmitReceive_IT()
1923 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_TransmitReceive_IT()
1928 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSER, (Size & 0xFFFFFFFFUL) << 16UL); in HAL_SPI_Reload_TransmitReceive_IT()
1931 hspi->Reload.Requested = 1UL; in HAL_SPI_Reload_TransmitReceive_IT()
1932 hspi->Reload.pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_Reload_TransmitReceive_IT()
1933 hspi->Reload.TxXferSize = Size; in HAL_SPI_Reload_TransmitReceive_IT()
1934 hspi->Reload.pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_Reload_TransmitReceive_IT()
1935 hspi->Reload.RxXferSize = Size; in HAL_SPI_Reload_TransmitReceive_IT()
1937 tmp_state = hspi->State; in HAL_SPI_Reload_TransmitReceive_IT()
1940 if (((hspi->Instance->CR2 & SPI_CR2_TSER) != 0UL) && (tmp_state == HAL_SPI_STATE_READY)) in HAL_SPI_Reload_TransmitReceive_IT()
1942 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TSERF); in HAL_SPI_Reload_TransmitReceive_IT()
1943 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSER, 0UL); in HAL_SPI_Reload_TransmitReceive_IT()
1944 hspi->Reload.Requested = 0UL; in HAL_SPI_Reload_TransmitReceive_IT()
1946 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_TransmitReceive_IT()
1956 __HAL_UNLOCK(hspi); in HAL_SPI_Reload_TransmitReceive_IT()
1969 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_DMA() argument
1974 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit_DMA()
1977 __HAL_LOCK(hspi); in HAL_SPI_Transmit_DMA()
1979 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_DMA()
1982 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1989 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1994 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_DMA()
1995 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_DMA()
1996 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_DMA()
1997 hspi->TxXferSize = Size; in HAL_SPI_Transmit_DMA()
1998 hspi->TxXferCount = Size; in HAL_SPI_Transmit_DMA()
2001 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit_DMA()
2002 hspi->TxISR = NULL; in HAL_SPI_Transmit_DMA()
2003 hspi->RxISR = NULL; in HAL_SPI_Transmit_DMA()
2004 hspi->RxXferSize = (uint16_t)0UL; in HAL_SPI_Transmit_DMA()
2005 hspi->RxXferCount = (uint16_t)0UL; in HAL_SPI_Transmit_DMA()
2008 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_DMA()
2010 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_DMA()
2014 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit_DMA()
2018 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmatx->Init.MemDataAlignment != DMA_MDA… in HAL_SPI_Transmit_DMA()
2019 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && ((hspi->hdmatx->Init.MemDataAlignment != DMA_MDATAAL… in HAL_SPI_Transmit_DMA()
2020 … (hspi->hdmatx->Init.MemDataAlignment != DMA_MDATAALIGN_WORD)))) in HAL_SPI_Transmit_DMA()
2024 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
2029 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_DMA()
2031 if (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) in HAL_SPI_Transmit_DMA()
2033 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Transmit_DMA()
2035 if (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_WORD) in HAL_SPI_Transmit_DMA()
2037 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_Transmit_DMA()
2040 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Transmit_DMA()
2042 if (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_WORD) in HAL_SPI_Transmit_DMA()
2044 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Transmit_DMA()
2053 hspi->hdmatx->XferHalfCpltCallback = SPI_DMAHalfTransmitCplt; in HAL_SPI_Transmit_DMA()
2056 hspi->hdmatx->XferCpltCallback = SPI_DMATransmitCplt; in HAL_SPI_Transmit_DMA()
2059 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Transmit_DMA()
2062 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Transmit_DMA()
2065 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_Transmit_DMA()
2068 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance… in HAL_SPI_Transmit_DMA()
2069 hspi->TxXferCount)) in HAL_SPI_Transmit_DMA()
2072 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Transmit_DMA()
2075 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
2077 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit_DMA()
2083 if (hspi->hdmatx->Init.Mode == DMA_CIRCULAR) in HAL_SPI_Transmit_DMA()
2085 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_Transmit_DMA()
2089 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit_DMA()
2093 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_Transmit_DMA()
2096 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Transmit_DMA()
2099 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_DMA()
2101 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Transmit_DMA()
2104 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit_DMA()
2108 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
2121 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_DMA() argument
2126 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive_DMA()
2129 __HAL_LOCK(hspi); in HAL_SPI_Receive_DMA()
2131 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_DMA()
2134 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2141 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2146 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_DMA()
2147 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_DMA()
2148 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_DMA()
2149 hspi->RxXferSize = Size; in HAL_SPI_Receive_DMA()
2150 hspi->RxXferCount = Size; in HAL_SPI_Receive_DMA()
2153 hspi->RxISR = NULL; in HAL_SPI_Receive_DMA()
2154 hspi->TxISR = NULL; in HAL_SPI_Receive_DMA()
2155 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive_DMA()
2156 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive_DMA()
2159 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_DMA()
2161 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_DMA()
2165 SPI_2LINES_RX(hspi); in HAL_SPI_Receive_DMA()
2169 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmarx->Init.MemDataAlignment != DMA_MDA… in HAL_SPI_Receive_DMA()
2170 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && ((hspi->hdmarx->Init.MemDataAlignment != DMA_MDATAAL… in HAL_SPI_Receive_DMA()
2171 … (hspi->hdmarx->Init.MemDataAlignment != DMA_MDATAALIGN_WORD)))) in HAL_SPI_Receive_DMA()
2175 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2180 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_Receive_DMA()
2183 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Receive_DMA()
2185 if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) in HAL_SPI_Receive_DMA()
2187 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Receive_DMA()
2189 if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_WORD) in HAL_SPI_Receive_DMA()
2191 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_Receive_DMA()
2194 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Receive_DMA()
2196 if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_WORD) in HAL_SPI_Receive_DMA()
2198 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Receive_DMA()
2207 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; in HAL_SPI_Receive_DMA()
2210 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; in HAL_SPI_Receive_DMA()
2213 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Receive_DMA()
2216 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Receive_DMA()
2219 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->RXDR, (uint32_t)hspi->pRxB… in HAL_SPI_Receive_DMA()
2220 hspi->RxXferCount)) in HAL_SPI_Receive_DMA()
2223 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Receive_DMA()
2226 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2228 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive_DMA()
2234 if (hspi->hdmarx->Init.Mode == DMA_CIRCULAR) in HAL_SPI_Receive_DMA()
2236 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_Receive_DMA()
2240 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive_DMA()
2244 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_Receive_DMA()
2247 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_OVR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Receive_DMA()
2250 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_DMA()
2252 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Receive_DMA()
2255 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive_DMA()
2259 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2273 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint… in HAL_SPI_TransmitReceive_DMA() argument
2279 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_DMA()
2282 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2284 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive_DMA()
2287 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2294 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2299 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_DMA()
2300 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_DMA()
2301 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_DMA()
2302 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2303 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2304 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_DMA()
2305 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2306 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2309 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2310 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2313 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive_DMA()
2316 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2319 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmarx->Init.MemDataAlignment != DMA_MDA… in HAL_SPI_TransmitReceive_DMA()
2320 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && ((hspi->hdmarx->Init.MemDataAlignment != DMA_MDATAAL… in HAL_SPI_TransmitReceive_DMA()
2321 … (hspi->hdmarx->Init.MemDataAlignment != DMA_MDATAALIGN_WORD)))) in HAL_SPI_TransmitReceive_DMA()
2326 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2331 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2333 if (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2335 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2337 if (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_WORD) in HAL_SPI_TransmitReceive_DMA()
2339 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_TransmitReceive_DMA()
2341 if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2343 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2345 if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_WORD) in HAL_SPI_TransmitReceive_DMA()
2347 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_TransmitReceive_DMA()
2350 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2352 if (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_WORD) in HAL_SPI_TransmitReceive_DMA()
2354 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2356 if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_WORD) in HAL_SPI_TransmitReceive_DMA()
2358 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2367 if (hspi->State == HAL_SPI_STATE_BUSY_RX) in HAL_SPI_TransmitReceive_DMA()
2370 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2371 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2376 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfTransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2377 hspi->hdmarx->XferCpltCallback = SPI_DMATransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2381 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
2384 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2387 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->RXDR, (uint32_t)hspi->pRxB… in HAL_SPI_TransmitReceive_DMA()
2388 hspi->RxXferCount)) in HAL_SPI_TransmitReceive_DMA()
2391 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2394 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2396 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2402 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2406 hspi->hdmatx->XferHalfCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2407 hspi->hdmatx->XferCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2408 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2411 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
2414 …if (HAL_OK != HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance… in HAL_SPI_TransmitReceive_DMA()
2415 hspi->TxXferCount)) in HAL_SPI_TransmitReceive_DMA()
2418 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2421 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2423 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2428 if (hspi->hdmatx->Init.Mode == DMA_CIRCULAR) in HAL_SPI_TransmitReceive_DMA()
2430 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_TransmitReceive_DMA()
2434 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive_DMA()
2438 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2441 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_OVR | SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_TransmitReceive_DMA()
2444 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_DMA()
2446 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_TransmitReceive_DMA()
2449 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive_DMA()
2453 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2470 HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort() argument
2477 __HAL_LOCK(hspi); in HAL_SPI_Abort()
2480 hspi->State = HAL_SPI_STATE_ABORT; in HAL_SPI_Abort()
2487 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Abort()
2490 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_Abort()
2496 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2500 while (HAL_IS_BIT_SET(hspi->Instance->IER, SPI_IT_EOT)); in HAL_SPI_Abort()
2503 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSUSP); in HAL_SPI_Abort()
2509 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2513 while (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)); in HAL_SPI_Abort()
2516 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Abort()
2522 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2526 while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_SUSP)); in HAL_SPI_Abort()
2530 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN)) in HAL_SPI_Abort()
2532 if (hspi->hdmatx != NULL) in HAL_SPI_Abort()
2535 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2538 if (HAL_DMA_Abort(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort()
2540 if (HAL_DMA_GetError(hspi->hdmatx) == HAL_DMA_ERROR_TIMEOUT) in HAL_SPI_Abort()
2542 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2549 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN)) in HAL_SPI_Abort()
2551 if (hspi->hdmarx != NULL) in HAL_SPI_Abort()
2554 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2557 if (HAL_DMA_Abort(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort()
2559 if (HAL_DMA_GetError(hspi->hdmarx) == HAL_DMA_ERROR_TIMEOUT) in HAL_SPI_Abort()
2561 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2568 SPI_AbortTransfer(hspi); in HAL_SPI_Abort()
2571 if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) in HAL_SPI_Abort()
2579 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort()
2583 __HAL_UNLOCK(hspi); in HAL_SPI_Abort()
2586 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort()
2606 HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort_IT() argument
2614 hspi->State = HAL_SPI_STATE_ABORT; in HAL_SPI_Abort_IT()
2621 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Abort_IT()
2624 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_Abort_IT()
2630 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2634 while (HAL_IS_BIT_SET(hspi->Instance->IER, SPI_IT_EOT)); in HAL_SPI_Abort_IT()
2637 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSUSP); in HAL_SPI_Abort_IT()
2643 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2647 while (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)); in HAL_SPI_Abort_IT()
2650 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Abort_IT()
2656 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2660 while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_SUSP)); in HAL_SPI_Abort_IT()
2666 if (hspi->hdmatx != NULL) in HAL_SPI_Abort_IT()
2668 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN)) in HAL_SPI_Abort_IT()
2671 hspi->hdmatx->XferAbortCallback = SPI_DMATxAbortCallback; in HAL_SPI_Abort_IT()
2676 if (HAL_DMA_Abort_IT(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort_IT()
2678 if (HAL_DMA_GetError(hspi->hdmatx) == HAL_DMA_ERROR_NO_XFER) in HAL_SPI_Abort_IT()
2681 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2687 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2691 if (hspi->hdmarx != NULL) in HAL_SPI_Abort_IT()
2693 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN)) in HAL_SPI_Abort_IT()
2696 hspi->hdmarx->XferAbortCallback = SPI_DMARxAbortCallback; in HAL_SPI_Abort_IT()
2701 if (HAL_DMA_Abort_IT(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort_IT()
2703 if (HAL_DMA_GetError(hspi->hdmarx) == HAL_DMA_ERROR_NO_XFER) in HAL_SPI_Abort_IT()
2706 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2712 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2720 SPI_AbortTransfer(hspi); in HAL_SPI_Abort_IT()
2723 if (hspi->ErrorCode == HAL_SPI_ERROR_ABORT) in HAL_SPI_Abort_IT()
2731 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort_IT()
2735 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort_IT()
2739 hspi->AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2741 HAL_SPI_AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2755 HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAPause() argument
2758 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAPause()
2770 HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAResume() argument
2773 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAResume()
2785 HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAStop() argument
2788 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAStop()
2799 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) in HAL_SPI_IRQHandler() argument
2801 uint32_t itsource = hspi->Instance->IER; in HAL_SPI_IRQHandler()
2802 uint32_t itflag = hspi->Instance->SR; in HAL_SPI_IRQHandler()
2804 uint32_t cfg1 = hspi->Instance->CFG1; in HAL_SPI_IRQHandler()
2807 HAL_SPI_StateTypeDef State = hspi->State; in HAL_SPI_IRQHandler()
2809 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_IRQHandler()
2816 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_IRQHandler()
2820 hspi->SuspendCallback(hspi); in HAL_SPI_IRQHandler()
2822 HAL_SPI_SuspendCallback(hspi); in HAL_SPI_IRQHandler()
2831 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
2832 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
2840 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
2848 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
2856 hspi->Reload.Requested = 0UL; in HAL_SPI_IRQHandler()
2857 __HAL_SPI_CLEAR_TSERFFLAG(hspi); in HAL_SPI_IRQHandler()
2870 __HAL_SPI_CLEAR_EOTFLAG(hspi); in HAL_SPI_IRQHandler()
2871 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in HAL_SPI_IRQHandler()
2872 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_IRQHandler()
2875 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_IRQHandler()
2878 if (HAL_IS_BIT_CLR(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN)) in HAL_SPI_IRQHandler()
2881 while (hspi->RxXferCount != 0UL) in HAL_SPI_IRQHandler()
2884 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_IRQHandler()
2886 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
2887 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_IRQHandler()
2890 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_IRQHandler()
2893 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_IRQHandler()
2895 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
2897 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_IRQHandler()
2902 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
2903 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_IRQHandler()
2906 hspi->RxXferCount--; in HAL_SPI_IRQHandler()
2911 SPI_CloseTransfer(hspi); in HAL_SPI_IRQHandler()
2913 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
2914 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
2917 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2919 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2928 hspi->TxRxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2932 hspi->RxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2936 hspi->TxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2942 HAL_SPI_TxRxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2946 HAL_SPI_RxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2950 HAL_SPI_TxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2967 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in HAL_SPI_IRQHandler()
2968 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_IRQHandler()
2974 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in HAL_SPI_IRQHandler()
2975 __HAL_SPI_CLEAR_MODFFLAG(hspi); in HAL_SPI_IRQHandler()
2981 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); in HAL_SPI_IRQHandler()
2982 __HAL_SPI_CLEAR_FREFLAG(hspi); in HAL_SPI_IRQHandler()
2988 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_UDR); in HAL_SPI_IRQHandler()
2989 __HAL_SPI_CLEAR_UDRFLAG(hspi); in HAL_SPI_IRQHandler()
2992 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
2995 __HAL_SPI_DISABLE(hspi); in HAL_SPI_IRQHandler()
2998 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_RXP | SPI_IT_TXP | SPI_IT_MODF | in HAL_SPI_IRQHandler()
3005 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in HAL_SPI_IRQHandler()
3008 if (hspi->hdmarx != NULL) in HAL_SPI_IRQHandler()
3012 hspi->hdmarx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
3013 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmarx)) in HAL_SPI_IRQHandler()
3015 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
3019 if (hspi->hdmatx != NULL) in HAL_SPI_IRQHandler()
3023 hspi->hdmatx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
3024 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmatx)) in HAL_SPI_IRQHandler()
3026 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
3033 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
3037 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
3039 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
3053 __weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxCpltCallback() argument
3056 UNUSED(hspi); in HAL_SPI_TxCpltCallback()
3069 __weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_RxCpltCallback() argument
3072 UNUSED(hspi); in HAL_SPI_RxCpltCallback()
3085 __weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxRxCpltCallback() argument
3088 UNUSED(hspi); in HAL_SPI_TxRxCpltCallback()
3101 __weak void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxHalfCpltCallback() argument
3104 UNUSED(hspi); in HAL_SPI_TxHalfCpltCallback()
3117 __weak void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_RxHalfCpltCallback() argument
3120 UNUSED(hspi); in HAL_SPI_RxHalfCpltCallback()
3133 __weak void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_TxRxHalfCpltCallback() argument
3136 UNUSED(hspi); in HAL_SPI_TxRxHalfCpltCallback()
3149 __weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_ErrorCallback() argument
3152 UNUSED(hspi); in HAL_SPI_ErrorCallback()
3167 __weak void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_AbortCpltCallback() argument
3170 UNUSED(hspi); in HAL_SPI_AbortCpltCallback()
3182 __weak void HAL_SPI_SuspendCallback(SPI_HandleTypeDef *hspi) in HAL_SPI_SuspendCallback() argument
3185 UNUSED(hspi); in HAL_SPI_SuspendCallback()
3217 HAL_SPI_StateTypeDef HAL_SPI_GetState(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetState() argument
3220 return hspi->State; in HAL_SPI_GetState()
3229 uint32_t HAL_SPI_GetError(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetError() argument
3232 return hspi->ErrorCode; in HAL_SPI_GetError()
3256 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATransmitCplt() local
3258 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMATransmitCplt()
3260 if (hspi->hdmatx->Init.Mode == DMA_CIRCULAR) in SPI_DMATransmitCplt()
3263 hspi->TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3265 HAL_SPI_TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3271 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMATransmitCplt()
3284 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAReceiveCplt() local
3286 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMAReceiveCplt()
3288 if (hspi->hdmarx->Init.Mode == DMA_CIRCULAR) in SPI_DMAReceiveCplt()
3291 hspi->RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3293 HAL_SPI_RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3299 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMAReceiveCplt()
3312 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATransmitReceiveCplt() local
3314 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMATransmitReceiveCplt()
3316 if (hspi->hdmatx->Init.Mode == DMA_CIRCULAR) in SPI_DMATransmitReceiveCplt()
3319 hspi->TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3321 HAL_SPI_TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3327 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMATransmitReceiveCplt()
3340 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAHalfTransmitCplt() local
3343 hspi->TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3345 HAL_SPI_TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3357 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAHalfReceiveCplt() local
3360 hspi->RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3362 HAL_SPI_RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3374 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAHalfTransmitReceiveCplt() local
3377 hspi->TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3379 HAL_SPI_TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3391 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAError() local
3397 SPI_CloseTransfer(hspi); in SPI_DMAError()
3399 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in SPI_DMAError()
3400 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAError()
3402 hspi->ErrorCallback(hspi); in SPI_DMAError()
3404 HAL_SPI_ErrorCallback(hspi); in SPI_DMAError()
3417 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAAbortOnError() local
3418 hspi->RxXferCount = (uint16_t) 0UL; in SPI_DMAAbortOnError()
3419 hspi->TxXferCount = (uint16_t) 0UL; in SPI_DMAAbortOnError()
3422 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAAbortOnError()
3425 hspi->ErrorCallback(hspi); in SPI_DMAAbortOnError()
3427 HAL_SPI_ErrorCallback(hspi); in SPI_DMAAbortOnError()
3441 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATxAbortCallback() local
3443 hspi->hdmatx->XferAbortCallback = NULL; in SPI_DMATxAbortCallback()
3446 if (hspi->hdmarx != NULL) in SPI_DMATxAbortCallback()
3448 if (hspi->hdmarx->XferAbortCallback != NULL) in SPI_DMATxAbortCallback()
3455 SPI_AbortTransfer(hspi); in SPI_DMATxAbortCallback()
3458 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATxAbortCallback()
3462 hspi->AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3464 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3478 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMARxAbortCallback() local
3480 hspi->hdmarx->XferAbortCallback = NULL; in SPI_DMARxAbortCallback()
3483 if (hspi->hdmatx != NULL) in SPI_DMARxAbortCallback()
3485 if (hspi->hdmatx->XferAbortCallback != NULL) in SPI_DMARxAbortCallback()
3492 SPI_AbortTransfer(hspi); in SPI_DMARxAbortCallback()
3495 hspi->State = HAL_SPI_STATE_READY; in SPI_DMARxAbortCallback()
3499 hspi->AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3501 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3511 static void SPI_RxISR_8BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_8BIT() argument
3514 *((uint8_t *)hspi->pRxBuffPtr) = (*(__IO uint8_t *)&hspi->Instance->RXDR); in SPI_RxISR_8BIT()
3515 hspi->pRxBuffPtr += sizeof(uint8_t); in SPI_RxISR_8BIT()
3516 hspi->RxXferCount--; in SPI_RxISR_8BIT()
3519 if (hspi->RxXferCount == 0UL) in SPI_RxISR_8BIT()
3523 if (hspi->Reload.Requested == 1UL) in SPI_RxISR_8BIT()
3525 hspi->RxXferSize = hspi->Reload.RxXferSize; in SPI_RxISR_8BIT()
3526 hspi->RxXferCount = hspi->Reload.RxXferSize; in SPI_RxISR_8BIT()
3527 hspi->pRxBuffPtr = hspi->Reload.pRxBuffPtr; in SPI_RxISR_8BIT()
3532 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_8BIT()
3536 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_8BIT()
3548 static void SPI_RxISR_16BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_16BIT() argument
3552 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in SPI_RxISR_16BIT()
3554 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in SPI_RxISR_16BIT()
3556 *((uint16_t *)hspi->pRxBuffPtr) = (*(__IO uint16_t *)&hspi->Instance->RXDR); in SPI_RxISR_16BIT()
3558 hspi->pRxBuffPtr += sizeof(uint16_t); in SPI_RxISR_16BIT()
3559 hspi->RxXferCount--; in SPI_RxISR_16BIT()
3562 if (hspi->RxXferCount == 0UL) in SPI_RxISR_16BIT()
3566 if (hspi->Reload.Requested == 1UL) in SPI_RxISR_16BIT()
3568 hspi->RxXferSize = hspi->Reload.RxXferSize; in SPI_RxISR_16BIT()
3569 hspi->RxXferCount = hspi->Reload.RxXferSize; in SPI_RxISR_16BIT()
3570 hspi->pRxBuffPtr = hspi->Reload.pRxBuffPtr; in SPI_RxISR_16BIT()
3575 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_16BIT()
3579 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_16BIT()
3591 static void SPI_RxISR_32BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_32BIT() argument
3594 *((uint32_t *)hspi->pRxBuffPtr) = (*(__IO uint32_t *)&hspi->Instance->RXDR); in SPI_RxISR_32BIT()
3595 hspi->pRxBuffPtr += sizeof(uint32_t); in SPI_RxISR_32BIT()
3596 hspi->RxXferCount--; in SPI_RxISR_32BIT()
3599 if (hspi->RxXferCount == 0UL) in SPI_RxISR_32BIT()
3603 if (hspi->Reload.Requested == 1UL) in SPI_RxISR_32BIT()
3605 hspi->RxXferSize = hspi->Reload.RxXferSize; in SPI_RxISR_32BIT()
3606 hspi->RxXferCount = hspi->Reload.RxXferSize; in SPI_RxISR_32BIT()
3607 hspi->pRxBuffPtr = hspi->Reload.pRxBuffPtr; in SPI_RxISR_32BIT()
3612 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_32BIT()
3616 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_32BIT()
3628 static void SPI_TxISR_8BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_8BIT() argument
3631 *(__IO uint8_t *)&hspi->Instance->TXDR = *((const uint8_t *)hspi->pTxBuffPtr); in SPI_TxISR_8BIT()
3632 hspi->pTxBuffPtr += sizeof(uint8_t); in SPI_TxISR_8BIT()
3633 hspi->TxXferCount--; in SPI_TxISR_8BIT()
3636 if (hspi->TxXferCount == 0UL) in SPI_TxISR_8BIT()
3640 if (hspi->Reload.Requested == 1UL) in SPI_TxISR_8BIT()
3642 hspi->TxXferSize = hspi->Reload.TxXferSize; in SPI_TxISR_8BIT()
3643 hspi->TxXferCount = hspi->Reload.TxXferSize; in SPI_TxISR_8BIT()
3644 hspi->pTxBuffPtr = hspi->Reload.pTxBuffPtr; in SPI_TxISR_8BIT()
3649 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_8BIT()
3653 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_8BIT()
3664 static void SPI_TxISR_16BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_16BIT() argument
3668 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in SPI_TxISR_16BIT()
3670 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3672 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3674 hspi->pTxBuffPtr += sizeof(uint16_t); in SPI_TxISR_16BIT()
3675 hspi->TxXferCount--; in SPI_TxISR_16BIT()
3678 if (hspi->TxXferCount == 0UL) in SPI_TxISR_16BIT()
3682 if (hspi->Reload.Requested == 1UL) in SPI_TxISR_16BIT()
3684 hspi->TxXferSize = hspi->Reload.TxXferSize; in SPI_TxISR_16BIT()
3685 hspi->TxXferCount = hspi->Reload.TxXferSize; in SPI_TxISR_16BIT()
3686 hspi->pTxBuffPtr = hspi->Reload.pTxBuffPtr; in SPI_TxISR_16BIT()
3691 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_16BIT()
3695 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_16BIT()
3706 static void SPI_TxISR_32BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_32BIT() argument
3709 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in SPI_TxISR_32BIT()
3710 hspi->pTxBuffPtr += sizeof(uint32_t); in SPI_TxISR_32BIT()
3711 hspi->TxXferCount--; in SPI_TxISR_32BIT()
3714 if (hspi->TxXferCount == 0UL) in SPI_TxISR_32BIT()
3718 if (hspi->Reload.Requested == 1UL) in SPI_TxISR_32BIT()
3720 hspi->TxXferSize = hspi->Reload.TxXferSize; in SPI_TxISR_32BIT()
3721 hspi->TxXferCount = hspi->Reload.TxXferSize; in SPI_TxISR_32BIT()
3722 hspi->pTxBuffPtr = hspi->Reload.pTxBuffPtr; in SPI_TxISR_32BIT()
3727 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_32BIT()
3731 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_32BIT()
3742 static void SPI_AbortTransfer(SPI_HandleTypeDef *hspi) in SPI_AbortTransfer() argument
3745 __HAL_SPI_DISABLE(hspi); in SPI_AbortTransfer()
3748 …__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()
3752 __HAL_SPI_CLEAR_EOTFLAG(hspi); in SPI_AbortTransfer()
3753 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in SPI_AbortTransfer()
3756 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in SPI_AbortTransfer()
3759 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_AbortTransfer()
3760 __HAL_SPI_CLEAR_UDRFLAG(hspi); in SPI_AbortTransfer()
3761 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_AbortTransfer()
3762 __HAL_SPI_CLEAR_MODFFLAG(hspi); in SPI_AbortTransfer()
3763 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in SPI_AbortTransfer()
3766 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_AbortTransfer()
3769 hspi->TxXferCount = (uint16_t)0UL; in SPI_AbortTransfer()
3770 hspi->RxXferCount = (uint16_t)0UL; in SPI_AbortTransfer()
3781 static void SPI_CloseTransfer(SPI_HandleTypeDef *hspi) in SPI_CloseTransfer() argument
3783 uint32_t itflag = hspi->Instance->SR; in SPI_CloseTransfer()
3785 __HAL_SPI_CLEAR_EOTFLAG(hspi); in SPI_CloseTransfer()
3786 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in SPI_CloseTransfer()
3789 __HAL_SPI_DISABLE(hspi); in SPI_CloseTransfer()
3792 …__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()
3796 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in SPI_CloseTransfer()
3799 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in SPI_CloseTransfer()
3803 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_UDR); in SPI_CloseTransfer()
3804 __HAL_SPI_CLEAR_UDRFLAG(hspi); in SPI_CloseTransfer()
3809 if (hspi->State != HAL_SPI_STATE_BUSY_TX) in SPI_CloseTransfer()
3813 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in SPI_CloseTransfer()
3814 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_CloseTransfer()
3819 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_CloseTransfer()
3823 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_CloseTransfer()
3824 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_CloseTransfer()
3833 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in SPI_CloseTransfer()
3834 __HAL_SPI_CLEAR_MODFFLAG(hspi); in SPI_CloseTransfer()
3840 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); in SPI_CloseTransfer()
3841 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_CloseTransfer()
3844 hspi->TxXferCount = (uint16_t)0UL; in SPI_CloseTransfer()
3845 hspi->RxXferCount = (uint16_t)0UL; in SPI_CloseTransfer()
3858 static HAL_StatusTypeDef SPI_WaitOnFlagUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagSta… in SPI_WaitOnFlagUntilTimeout() argument
3862 while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) == Status) in SPI_WaitOnFlagUntilTimeout()
3879 static uint32_t SPI_GetPacketSize(SPI_HandleTypeDef *hspi) in SPI_GetPacketSize() argument
3881 uint32_t fifo_threashold = (hspi->Init.FifoThreshold >> SPI_CFG1_FTHLV_Pos) + 1UL; in SPI_GetPacketSize()
3882 uint32_t data_size = (hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) + 1UL; in SPI_GetPacketSize()