Lines Matching refs:hspi
176 static HAL_StatusTypeDef SPI_WaitOnFlagUntilTimeout(const SPI_HandleTypeDef *hspi, uint32_t Flag,
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(const 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 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Init()
258 assert_param(IS_SPI_LIMITED_DATASIZE(hspi->Init.DataSize)); in HAL_SPI_Init()
259 assert_param(IS_SPI_LIMITED_FIFOTHRESHOLD(hspi->Init.FifoThreshold)); in HAL_SPI_Init()
263 assert_param(IS_SPI_DATASIZE(hspi->Init.DataSize)); in HAL_SPI_Init()
264 assert_param(IS_SPI_FIFOTHRESHOLD(hspi->Init.FifoThreshold)); in HAL_SPI_Init()
266 assert_param(IS_SPI_NSS(hspi->Init.NSS)); in HAL_SPI_Init()
267 assert_param(IS_SPI_NSSP(hspi->Init.NSSPMode)); in HAL_SPI_Init()
268 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); in HAL_SPI_Init()
269 assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); in HAL_SPI_Init()
270 assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); in HAL_SPI_Init()
271 if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) in HAL_SPI_Init()
273 assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); in HAL_SPI_Init()
274 assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); in HAL_SPI_Init()
277 assert_param(IS_SPI_CRC_CALCULATION(hspi->Init.CRCCalculation)); in HAL_SPI_Init()
278 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
280 if (IS_SPI_LIMITED_INSTANCE(hspi->Instance)) in HAL_SPI_Init()
282 assert_param(IS_SPI_LIMITED_CRC_LENGTH(hspi->Init.CRCLength)); in HAL_SPI_Init()
286 assert_param(IS_SPI_CRC_LENGTH(hspi->Init.CRCLength)); in HAL_SPI_Init()
288 assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); in HAL_SPI_Init()
289 assert_param(IS_SPI_CRC_INITIALIZATION_PATTERN(hspi->Init.TxCRCInitializationPattern)); in HAL_SPI_Init()
290 assert_param(IS_SPI_CRC_INITIALIZATION_PATTERN(hspi->Init.RxCRCInitializationPattern)); in HAL_SPI_Init()
293 hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; in HAL_SPI_Init()
296 assert_param(IS_SPI_RDY_MASTER_MANAGEMENT(hspi->Init.ReadyMasterManagement)); in HAL_SPI_Init()
297 assert_param(IS_SPI_RDY_POLARITY(hspi->Init.ReadyPolarity)); in HAL_SPI_Init()
298 assert_param(IS_SPI_MASTER_RX_AUTOSUSP(hspi->Init.MasterReceiverAutoSusp)); in HAL_SPI_Init()
301 if ((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (hspi->Init.DataSize > SPI_DATASIZE_16BIT)) in HAL_SPI_Init()
307 packet_length = SPI_GetPacketSize(hspi); in HAL_SPI_Init()
308 if (((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (packet_length > SPI_LOWEND_FIFO_SIZE)) || in HAL_SPI_Init()
309 ((IS_SPI_FULL_INSTANCE(hspi->Instance)) && (packet_length > SPI_HIGHEND_FIFO_SIZE))) in HAL_SPI_Init()
314 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
317 if ((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (hspi->Init.CRCLength > SPI_CRC_LENGTH_16BIT)) in HAL_SPI_Init()
323 if (hspi->Init.CRCLength == SPI_CRC_LENGTH_DATASIZE) in HAL_SPI_Init()
325 crc_length = (hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) << SPI_CFG1_CRCSIZE_Pos; in HAL_SPI_Init()
329 crc_length = hspi->Init.CRCLength; in HAL_SPI_Init()
333 if ((hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) > (crc_length >> SPI_CFG1_CRCSIZE_Pos)) in HAL_SPI_Init()
340 crc_length = hspi->Init.DataSize << SPI_CFG1_CRCSIZE_Pos; in HAL_SPI_Init()
344 if (hspi->State == HAL_SPI_STATE_RESET) in HAL_SPI_Init()
347 hspi->Lock = HAL_UNLOCKED; in HAL_SPI_Init()
351 … hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_Init()
352 … hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_Init()
353 … hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_Init()
354 … hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_Init()
355 … hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_Init()
356 … hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_Init()
357 … hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_Init()
358 … hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_Init()
359 … hspi->SuspendCallback = HAL_SPI_SuspendCallback; /* Legacy weak SuspendCallback */ in HAL_SPI_Init()
361 if (hspi->MspInitCallback == NULL) in HAL_SPI_Init()
363 hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_Init()
367 hspi->MspInitCallback(hspi); in HAL_SPI_Init()
370 HAL_SPI_MspInit(hspi); in HAL_SPI_Init()
374 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_Init()
377 __HAL_SPI_DISABLE(hspi); in HAL_SPI_Init()
381 crc_length = hspi->Instance->CFG1 & SPI_CFG1_CRCSIZE; in HAL_SPI_Init()
389 if ((hspi->Init.NSS == SPI_NSS_SOFT) && (((hspi->Init.Mode == SPI_MODE_MASTER) && \ in HAL_SPI_Init()
390 (hspi->Init.NSSPolarity == SPI_NSS_POLARITY_LOW)) || \ in HAL_SPI_Init()
391 ((hspi->Init.Mode == SPI_MODE_SLAVE) && \ in HAL_SPI_Init()
392 (hspi->Init.NSSPolarity == SPI_NSS_POLARITY_HIGH)))) in HAL_SPI_Init()
394 SET_BIT(hspi->Instance->CR1, SPI_CR1_SSI); in HAL_SPI_Init()
398 …if (((hspi->Init.Mode & SPI_MODE_MASTER) == SPI_MODE_MASTER) && (hspi->Init.DataSize >= SPI_DATASI… in HAL_SPI_Init()
400 MODIFY_REG(hspi->Instance->CR1, SPI_CR1_MASRX, hspi->Init.MasterReceiverAutoSusp); in HAL_SPI_Init()
404 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_MASRX); in HAL_SPI_Init()
408 …WRITE_REG(hspi->Instance->CFG1, (hspi->Init.BaudRatePrescaler | hspi->Init.CRCCalculation | crc_le… in HAL_SPI_Init()
409 hspi->Init.FifoThreshold | hspi->Init.DataSize)); in HAL_SPI_Init()
412 WRITE_REG(hspi->Instance->CFG2, (hspi->Init.NSSPMode | hspi->Init.TIMode | in HAL_SPI_Init()
413 hspi->Init.NSSPolarity | hspi->Init.NSS | in HAL_SPI_Init()
414 hspi->Init.CLKPolarity | hspi->Init.CLKPhase | in HAL_SPI_Init()
415 hspi->Init.FirstBit | hspi->Init.Mode | in HAL_SPI_Init()
416 hspi->Init.MasterInterDataIdleness | hspi->Init.Direction | in HAL_SPI_Init()
417 hspi->Init.MasterSSIdleness | hspi->Init.IOSwap | in HAL_SPI_Init()
418 hspi->Init.ReadyMasterManagement | hspi->Init.ReadyPolarity)); in HAL_SPI_Init()
423 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Init()
426 if (hspi->Init.TxCRCInitializationPattern == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN) in HAL_SPI_Init()
428 SET_BIT(hspi->Instance->CR1, SPI_CR1_TCRCINI); in HAL_SPI_Init()
432 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_TCRCINI); in HAL_SPI_Init()
436 if (hspi->Init.RxCRCInitializationPattern == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN) in HAL_SPI_Init()
438 SET_BIT(hspi->Instance->CR1, SPI_CR1_RCRCINI); in HAL_SPI_Init()
442 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_RCRCINI); in HAL_SPI_Init()
446 if (((IS_SPI_LIMITED_INSTANCE(hspi->Instance)) && (crc_length == SPI_CRC_LENGTH_16BIT)) || in HAL_SPI_Init()
447 ((IS_SPI_FULL_INSTANCE(hspi->Instance)) && (crc_length == SPI_CRC_LENGTH_32BIT))) in HAL_SPI_Init()
449 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRC33_17); in HAL_SPI_Init()
453 CLEAR_BIT(hspi->Instance->CR1, SPI_CR1_CRC33_17); in HAL_SPI_Init()
457 WRITE_REG(hspi->Instance->CRCPOLY, hspi->Init.CRCPolynomial); in HAL_SPI_Init()
462 if (hspi->Init.Mode == SPI_MODE_SLAVE) in HAL_SPI_Init()
465 MODIFY_REG(hspi->Instance->CFG1, SPI_CFG1_UDRCFG, SPI_CFG1_UDRCFG); in HAL_SPI_Init()
471 CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); in HAL_SPI_Init()
475 if ((hspi->Init.Mode & SPI_MODE_MASTER) == SPI_MODE_MASTER) in HAL_SPI_Init()
478 MODIFY_REG(hspi->Instance->CFG2, SPI_CFG2_AFCNTR, (hspi->Init.MasterKeepIOState)); in HAL_SPI_Init()
481 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Init()
482 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Init()
493 HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_DeInit() argument
496 if (hspi == NULL) in HAL_SPI_DeInit()
502 assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance)); in HAL_SPI_DeInit()
504 hspi->State = HAL_SPI_STATE_BUSY; in HAL_SPI_DeInit()
507 __HAL_SPI_DISABLE(hspi); in HAL_SPI_DeInit()
510 if (hspi->MspDeInitCallback == NULL) in HAL_SPI_DeInit()
512 hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_DeInit()
516 hspi->MspDeInitCallback(hspi); in HAL_SPI_DeInit()
519 HAL_SPI_MspDeInit(hspi); in HAL_SPI_DeInit()
522 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_DeInit()
523 hspi->State = HAL_SPI_STATE_RESET; in HAL_SPI_DeInit()
526 __HAL_UNLOCK(hspi); in HAL_SPI_DeInit()
537 __weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspInit() argument
540 UNUSED(hspi); in HAL_SPI_MspInit()
553 __weak void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) in HAL_SPI_MspDeInit() argument
556 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 __HAL_LOCK(hspi); in HAL_SPI_RegisterCallback()
588 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_RegisterCallback()
593 hspi->TxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
597 hspi->RxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
601 hspi->TxRxCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
605 hspi->TxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
609 hspi->RxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
613 hspi->TxRxHalfCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
617 hspi->ErrorCallback = pCallback; in HAL_SPI_RegisterCallback()
621 hspi->AbortCpltCallback = pCallback; in HAL_SPI_RegisterCallback()
625 hspi->SuspendCallback = pCallback; in HAL_SPI_RegisterCallback()
629 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
633 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
638 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
645 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_RegisterCallback()
650 hspi->MspInitCallback = pCallback; in HAL_SPI_RegisterCallback()
654 hspi->MspDeInitCallback = pCallback; in HAL_SPI_RegisterCallback()
659 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
669 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_RegisterCallback()
676 __HAL_UNLOCK(hspi); in HAL_SPI_RegisterCallback()
688 HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef Cal… in HAL_SPI_UnRegisterCallback() argument
693 __HAL_LOCK(hspi); in HAL_SPI_UnRegisterCallback()
695 if (HAL_SPI_STATE_READY == hspi->State) in HAL_SPI_UnRegisterCallback()
700 … hspi->TxCpltCallback = HAL_SPI_TxCpltCallback; /* Legacy weak TxCpltCallback */ in HAL_SPI_UnRegisterCallback()
704 … hspi->RxCpltCallback = HAL_SPI_RxCpltCallback; /* Legacy weak RxCpltCallback */ in HAL_SPI_UnRegisterCallback()
708 … hspi->TxRxCpltCallback = HAL_SPI_TxRxCpltCallback; /* Legacy weak TxRxCpltCallback */ in HAL_SPI_UnRegisterCallback()
712 … hspi->TxHalfCpltCallback = HAL_SPI_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
716 … hspi->RxHalfCpltCallback = HAL_SPI_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
720 … hspi->TxRxHalfCpltCallback = HAL_SPI_TxRxHalfCpltCallback; /* Legacy weak TxRxHalfCpltCallback */ in HAL_SPI_UnRegisterCallback()
724 … hspi->ErrorCallback = HAL_SPI_ErrorCallback; /* Legacy weak ErrorCallback */ in HAL_SPI_UnRegisterCallback()
728 … hspi->AbortCpltCallback = HAL_SPI_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ in HAL_SPI_UnRegisterCallback()
732 … hspi->SuspendCallback = HAL_SPI_SuspendCallback; /* Legacy weak SuspendCallback */ in HAL_SPI_UnRegisterCallback()
736 … hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
740 … hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
745 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
752 else if (HAL_SPI_STATE_RESET == hspi->State) in HAL_SPI_UnRegisterCallback()
757 … hspi->MspInitCallback = HAL_SPI_MspInit; /* Legacy weak MspInit */ in HAL_SPI_UnRegisterCallback()
761 … hspi->MspDeInitCallback = HAL_SPI_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SPI_UnRegisterCallback()
766 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
776 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK); in HAL_SPI_UnRegisterCallback()
783 __HAL_UNLOCK(hspi); in HAL_SPI_UnRegisterCallback()
833 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size, ui… in HAL_SPI_Transmit() argument
836 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_Transmit()
843 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit()
846 __HAL_LOCK(hspi); in HAL_SPI_Transmit()
851 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit()
854 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
861 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
866 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit()
867 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit()
868 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit()
869 hspi->TxXferSize = Size; in HAL_SPI_Transmit()
870 hspi->TxXferCount = Size; in HAL_SPI_Transmit()
873 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit()
874 hspi->RxXferSize = (uint16_t) 0UL; in HAL_SPI_Transmit()
875 hspi->RxXferCount = (uint16_t) 0UL; in HAL_SPI_Transmit()
876 hspi->TxISR = NULL; in HAL_SPI_Transmit()
877 hspi->RxISR = NULL; in HAL_SPI_Transmit()
880 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit()
882 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit()
886 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit()
890 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit()
893 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit()
895 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Transmit()
898 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit()
902 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Transmit()
905 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
908 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
910 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
911 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
912 hspi->TxXferCount--; in HAL_SPI_Transmit()
920 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
923 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
925 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
926 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
933 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit()
936 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
939 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
941 if ((hspi->TxXferCount > 1UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_01DATA)) in HAL_SPI_Transmit()
943 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
944 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
945 hspi->TxXferCount -= (uint16_t)2UL; in HAL_SPI_Transmit()
950 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
952 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
954 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
955 hspi->TxXferCount--; in HAL_SPI_Transmit()
964 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
967 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
969 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
970 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
979 while (hspi->TxXferCount > 0UL) in HAL_SPI_Transmit()
982 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) in HAL_SPI_Transmit()
984 if ((hspi->TxXferCount > 3UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_03DATA)) in HAL_SPI_Transmit()
986 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
987 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_Transmit()
988 hspi->TxXferCount -= (uint16_t)4UL; in HAL_SPI_Transmit()
990 … else if ((hspi->TxXferCount > 1UL) && (hspi->Init.FifoThreshold > SPI_FIFO_THRESHOLD_01DATA)) in HAL_SPI_Transmit()
993 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
995 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
997 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_Transmit()
998 hspi->TxXferCount -= (uint16_t)2UL; in HAL_SPI_Transmit()
1002 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_Transmit()
1003 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_Transmit()
1004 hspi->TxXferCount--; in HAL_SPI_Transmit()
1013 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
1016 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
1018 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Transmit()
1019 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
1027 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Transmit()
1029 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_Transmit()
1033 SPI_CloseTransfer(hspi); in HAL_SPI_Transmit()
1036 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit()
1038 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit()
1040 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Transmit()
1056 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t … in HAL_SPI_Receive() argument
1061 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_Receive()
1065 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive()
1068 __HAL_LOCK(hspi); in HAL_SPI_Receive()
1073 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive()
1076 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1083 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1088 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive()
1089 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive()
1090 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive()
1091 hspi->RxXferSize = Size; in HAL_SPI_Receive()
1092 hspi->RxXferCount = Size; in HAL_SPI_Receive()
1095 hspi->pTxBuffPtr = NULL; in HAL_SPI_Receive()
1096 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive()
1097 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive()
1098 hspi->RxISR = NULL; in HAL_SPI_Receive()
1099 hspi->TxISR = NULL; in HAL_SPI_Receive()
1102 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive()
1104 SPI_1LINE_RX(hspi); in HAL_SPI_Receive()
1108 SPI_2LINES_RX(hspi); in HAL_SPI_Receive()
1112 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive()
1115 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive()
1117 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Receive()
1120 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive()
1124 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Receive()
1127 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1130 if ((hspi->Instance->SR & (SPI_FLAG_RXWNE | SPI_FLAG_EOT)) != 0UL) in HAL_SPI_Receive()
1132 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1133 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_Receive()
1134 hspi->RxXferCount--; in HAL_SPI_Receive()
1142 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1145 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1147 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1148 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1155 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive()
1158 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1161 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_Receive()
1164 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_Receive()
1166 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1168 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_Receive()
1169 hspi->RxXferCount--; in HAL_SPI_Receive()
1177 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1180 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1182 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1183 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1193 while (hspi->RxXferCount > 0UL) in HAL_SPI_Receive()
1196 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) in HAL_SPI_Receive()
1198 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_Receive()
1199 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_Receive()
1200 hspi->RxXferCount--; in HAL_SPI_Receive()
1208 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1211 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1213 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_Receive()
1214 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1222 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in HAL_SPI_Receive()
1225 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, Timeout, tickstart) != HAL_OK) in HAL_SPI_Receive()
1227 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_Receive()
1233 SPI_CloseTransfer(hspi); in HAL_SPI_Receive()
1236 __HAL_UNLOCK(hspi); in HAL_SPI_Receive()
1238 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive()
1240 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_Receive()
1257 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t … in HAL_SPI_TransmitReceive() argument
1262 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_TransmitReceive()
1263 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_TransmitReceive()
1271 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive()
1274 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive()
1282 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive()
1285 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1292 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1297 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive()
1298 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive()
1299 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive()
1300 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive()
1301 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive()
1302 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive()
1303 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive()
1304 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive()
1307 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive()
1308 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive()
1311 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive()
1314 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive()
1316 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive()
1318 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_TransmitReceive()
1321 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive()
1325 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_TransmitReceive()
1330 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1332 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1333 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive()
1334 hspi->TxXferCount --; in HAL_SPI_TransmitReceive()
1335 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1339 …if (((hspi->Instance->SR & (SPI_FLAG_RXWNE | SPI_FLAG_EOT)) != 0UL) && (initial_RxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1341 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1342 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive()
1343 hspi->RxXferCount --; in HAL_SPI_TransmitReceive()
1344 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1351 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1354 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1356 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1357 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1363 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive()
1368 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP) && (initial_TxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1371 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1373 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1375 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1376 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1377 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1381 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) && (initial_RxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1384 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_TransmitReceive()
1386 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1388 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive()
1389 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1390 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1397 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1400 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1402 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1403 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1414 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (initial_TxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1416 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive()
1417 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1418 hspi->TxXferCount--; in HAL_SPI_TransmitReceive()
1419 initial_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive()
1423 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXP)) && (initial_RxXferCount > 0UL)) in HAL_SPI_TransmitReceive()
1425 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_TransmitReceive()
1426 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive()
1427 hspi->RxXferCount--; in HAL_SPI_TransmitReceive()
1428 initial_RxXferCount = hspi->RxXferCount; in HAL_SPI_TransmitReceive()
1435 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1438 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1440 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT); in HAL_SPI_TransmitReceive()
1441 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1448 if (SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_EOT, RESET, Timeout, tickstart) != HAL_OK) in HAL_SPI_TransmitReceive()
1450 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); in HAL_SPI_TransmitReceive()
1454 SPI_CloseTransfer(hspi); in HAL_SPI_TransmitReceive()
1457 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive()
1459 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive()
1461 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_TransmitReceive()
1476 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_IT() argument
1481 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit_IT()
1484 __HAL_LOCK(hspi); in HAL_SPI_Transmit_IT()
1489 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1493 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_IT()
1496 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1501 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_IT()
1502 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_IT()
1503 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_IT()
1504 hspi->TxXferSize = Size; in HAL_SPI_Transmit_IT()
1505 hspi->TxXferCount = Size; in HAL_SPI_Transmit_IT()
1508 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit_IT()
1509 hspi->RxXferSize = (uint16_t) 0UL; in HAL_SPI_Transmit_IT()
1510 hspi->RxXferCount = (uint16_t) 0UL; in HAL_SPI_Transmit_IT()
1511 hspi->RxISR = NULL; in HAL_SPI_Transmit_IT()
1514 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Transmit_IT()
1516 hspi->TxISR = SPI_TxISR_32BIT; in HAL_SPI_Transmit_IT()
1518 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_IT()
1520 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_Transmit_IT()
1524 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_Transmit_IT()
1528 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_IT()
1530 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_IT()
1534 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit_IT()
1538 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit_IT()
1541 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_IT()
1544 __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()
1546 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Transmit_IT()
1549 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit_IT()
1552 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_IT()
1564 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_IT() argument
1569 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive_IT()
1572 __HAL_LOCK(hspi); in HAL_SPI_Receive_IT()
1574 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_IT()
1577 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1584 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1589 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_IT()
1590 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_IT()
1591 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_IT()
1592 hspi->RxXferSize = Size; in HAL_SPI_Receive_IT()
1593 hspi->RxXferCount = Size; in HAL_SPI_Receive_IT()
1596 hspi->pTxBuffPtr = NULL; in HAL_SPI_Receive_IT()
1597 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive_IT()
1598 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive_IT()
1599 hspi->TxISR = NULL; in HAL_SPI_Receive_IT()
1602 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_Receive_IT()
1604 hspi->RxISR = SPI_RxISR_32BIT; in HAL_SPI_Receive_IT()
1606 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_Receive_IT()
1608 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_Receive_IT()
1612 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_Receive_IT()
1616 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_IT()
1618 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_IT()
1622 SPI_2LINES_RX(hspi); in HAL_SPI_Receive_IT()
1630 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive_IT()
1633 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_IT()
1636 __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()
1638 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Receive_IT()
1641 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive_IT()
1645 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_IT()
1658 HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8… in HAL_SPI_TransmitReceive_IT() argument
1665 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in HAL_SPI_TransmitReceive_IT()
1669 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_IT()
1672 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1674 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive_IT()
1677 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1684 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1689 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_IT()
1690 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_IT()
1691 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_IT()
1692 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1693 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1694 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_IT()
1695 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_IT()
1696 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_IT()
1697 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1700 if ((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (IS_SPI_FULL_INSTANCE(hspi->Instance))) in HAL_SPI_TransmitReceive_IT()
1702 hspi->TxISR = SPI_TxISR_32BIT; in HAL_SPI_TransmitReceive_IT()
1703 hspi->RxISR = SPI_RxISR_32BIT; in HAL_SPI_TransmitReceive_IT()
1705 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1707 hspi->RxISR = SPI_RxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1708 hspi->TxISR = SPI_TxISR_16BIT; in HAL_SPI_TransmitReceive_IT()
1712 hspi->RxISR = SPI_RxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1713 hspi->TxISR = SPI_TxISR_8BIT; in HAL_SPI_TransmitReceive_IT()
1717 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive_IT()
1720 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive_IT()
1723 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_IT()
1726 while ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXP)) && (tmp_TxXferCount != 0UL)) in HAL_SPI_TransmitReceive_IT()
1729 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_IT()
1731 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1732 hspi->pTxBuffPtr += sizeof(uint32_t); in HAL_SPI_TransmitReceive_IT()
1733 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1734 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1737 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_IT()
1740 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1742 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1744 hspi->pTxBuffPtr += sizeof(uint16_t); in HAL_SPI_TransmitReceive_IT()
1745 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1746 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1751 *((__IO uint8_t *)&hspi->Instance->TXDR) = *((const uint8_t *)hspi->pTxBuffPtr); in HAL_SPI_TransmitReceive_IT()
1752 hspi->pTxBuffPtr += sizeof(uint8_t); in HAL_SPI_TransmitReceive_IT()
1753 hspi->TxXferCount--; in HAL_SPI_TransmitReceive_IT()
1754 tmp_TxXferCount = hspi->TxXferCount; in HAL_SPI_TransmitReceive_IT()
1759 …__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()
1761 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_TransmitReceive_IT()
1764 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive_IT()
1768 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_IT()
1783 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size) in HAL_SPI_Transmit_DMA() argument
1788 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(hspi->Init.Direction)); in HAL_SPI_Transmit_DMA()
1791 __HAL_LOCK(hspi); in HAL_SPI_Transmit_DMA()
1793 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Transmit_DMA()
1796 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1803 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1808 hspi->State = HAL_SPI_STATE_BUSY_TX; in HAL_SPI_Transmit_DMA()
1809 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Transmit_DMA()
1810 hspi->pTxBuffPtr = (const uint8_t *)pData; in HAL_SPI_Transmit_DMA()
1811 hspi->TxXferSize = Size; in HAL_SPI_Transmit_DMA()
1812 hspi->TxXferCount = Size; in HAL_SPI_Transmit_DMA()
1815 hspi->pRxBuffPtr = NULL; in HAL_SPI_Transmit_DMA()
1816 hspi->TxISR = NULL; in HAL_SPI_Transmit_DMA()
1817 hspi->RxISR = NULL; in HAL_SPI_Transmit_DMA()
1818 hspi->RxXferSize = (uint16_t)0UL; in HAL_SPI_Transmit_DMA()
1819 hspi->RxXferCount = (uint16_t)0UL; in HAL_SPI_Transmit_DMA()
1822 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Transmit_DMA()
1824 SPI_1LINE_TX(hspi); in HAL_SPI_Transmit_DMA()
1828 SPI_2LINES_TX(hspi); in HAL_SPI_Transmit_DMA()
1832 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmatx->Init.SrcDataWidth != DMA_SRC_DA… in HAL_SPI_Transmit_DMA()
1833 (IS_SPI_FULL_INSTANCE(hspi->Instance))) || \ in HAL_SPI_Transmit_DMA()
1834 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWI… in HAL_SPI_Transmit_DMA()
1838 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1843 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_DMA()
1845 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_HALFWORD) in HAL_SPI_Transmit_DMA()
1847 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Transmit_DMA()
1849 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_Transmit_DMA()
1851 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_Transmit_DMA()
1854 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Transmit_DMA()
1856 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_Transmit_DMA()
1858 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Transmit_DMA()
1867 hspi->hdmatx->XferHalfCpltCallback = SPI_DMAHalfTransmitCplt; in HAL_SPI_Transmit_DMA()
1870 hspi->hdmatx->XferCpltCallback = SPI_DMATransmitCplt; in HAL_SPI_Transmit_DMA()
1873 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Transmit_DMA()
1876 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Transmit_DMA()
1879 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_Transmit_DMA()
1881 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Transmit_DMA()
1883 hspi->TxXferCount = Size; in HAL_SPI_Transmit_DMA()
1885 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Transmit_DMA()
1887 hspi->TxXferCount = Size * 2U; in HAL_SPI_Transmit_DMA()
1891 hspi->TxXferCount = Size * 4U; in HAL_SPI_Transmit_DMA()
1895 if ((hspi->hdmatx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_Transmit_DMA()
1897 if (hspi->hdmatx->LinkedListQueue != NULL) in HAL_SPI_Transmit_DMA()
1900 … hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->TxXferCount; in HAL_SPI_Transmit_DMA()
1903 …hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)hspi->pTx… in HAL_SPI_Transmit_DMA()
1906 …hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_Transmit_DMA()
1908 errorcode = HAL_DMAEx_List_Start_IT(hspi->hdmatx); in HAL_SPI_Transmit_DMA()
1913 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Transmit_DMA()
1916 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1918 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit_DMA()
1925 …errorcode = HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->… in HAL_SPI_Transmit_DMA()
1926 hspi->TxXferCount); in HAL_SPI_Transmit_DMA()
1933 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Transmit_DMA()
1936 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1938 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Transmit_DMA()
1944 if (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR) in HAL_SPI_Transmit_DMA()
1946 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_Transmit_DMA()
1950 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Transmit_DMA()
1954 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_Transmit_DMA()
1957 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Transmit_DMA()
1960 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Transmit_DMA()
1962 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Transmit_DMA()
1965 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Transmit_DMA()
1969 __HAL_UNLOCK(hspi); in HAL_SPI_Transmit_DMA()
1982 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) in HAL_SPI_Receive_DMA() argument
1987 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(hspi->Init.Direction)); in HAL_SPI_Receive_DMA()
1990 __HAL_LOCK(hspi); in HAL_SPI_Receive_DMA()
1992 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_Receive_DMA()
1995 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2002 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2007 hspi->State = HAL_SPI_STATE_BUSY_RX; in HAL_SPI_Receive_DMA()
2008 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Receive_DMA()
2009 hspi->pRxBuffPtr = (uint8_t *)pData; in HAL_SPI_Receive_DMA()
2010 hspi->RxXferSize = Size; in HAL_SPI_Receive_DMA()
2011 hspi->RxXferCount = Size; in HAL_SPI_Receive_DMA()
2014 hspi->RxISR = NULL; in HAL_SPI_Receive_DMA()
2015 hspi->TxISR = NULL; in HAL_SPI_Receive_DMA()
2016 hspi->TxXferSize = (uint16_t) 0UL; in HAL_SPI_Receive_DMA()
2017 hspi->TxXferCount = (uint16_t) 0UL; in HAL_SPI_Receive_DMA()
2020 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) in HAL_SPI_Receive_DMA()
2022 SPI_1LINE_RX(hspi); in HAL_SPI_Receive_DMA()
2026 SPI_2LINES_RX(hspi); in HAL_SPI_Receive_DMA()
2030 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmarx->Init.DestDataWidth != DMA_DEST_D… in HAL_SPI_Receive_DMA()
2031 (IS_SPI_FULL_INSTANCE(hspi->Instance))) || \ in HAL_SPI_Receive_DMA()
2032 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAW… in HAL_SPI_Receive_DMA()
2036 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2041 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_Receive_DMA()
2044 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Receive_DMA()
2046 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_HALFWORD) in HAL_SPI_Receive_DMA()
2048 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Receive_DMA()
2050 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_Receive_DMA()
2052 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_Receive_DMA()
2055 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Receive_DMA()
2057 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_Receive_DMA()
2059 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_Receive_DMA()
2068 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfReceiveCplt; in HAL_SPI_Receive_DMA()
2071 hspi->hdmarx->XferCpltCallback = SPI_DMAReceiveCplt; in HAL_SPI_Receive_DMA()
2074 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_Receive_DMA()
2077 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Receive_DMA()
2079 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_Receive_DMA()
2081 hspi->RxXferCount = Size; in HAL_SPI_Receive_DMA()
2083 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_Receive_DMA()
2085 hspi->RxXferCount = Size * 2U; in HAL_SPI_Receive_DMA()
2089 hspi->RxXferCount = Size * 4U; in HAL_SPI_Receive_DMA()
2093 if ((hspi->hdmarx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_Receive_DMA()
2095 if (hspi->hdmarx->LinkedListQueue != NULL) in HAL_SPI_Receive_DMA()
2098 … hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->RxXferCount; in HAL_SPI_Receive_DMA()
2101 …hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_Receive_DMA()
2104 …hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)hspi->pRx… in HAL_SPI_Receive_DMA()
2106 errorcode = HAL_DMAEx_List_Start_IT(hspi->hdmarx); in HAL_SPI_Receive_DMA()
2111 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Receive_DMA()
2114 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2116 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive_DMA()
2123 …errorcode = HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->RXDR, (uint32_t)hspi->pRxBuf… in HAL_SPI_Receive_DMA()
2124 hspi->RxXferCount); in HAL_SPI_Receive_DMA()
2131 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_Receive_DMA()
2134 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2136 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Receive_DMA()
2142 if (hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) in HAL_SPI_Receive_DMA()
2144 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_Receive_DMA()
2148 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_Receive_DMA()
2152 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_Receive_DMA()
2155 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_OVR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_Receive_DMA()
2158 __HAL_SPI_ENABLE(hspi); in HAL_SPI_Receive_DMA()
2160 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_Receive_DMA()
2163 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_Receive_DMA()
2167 __HAL_UNLOCK(hspi); in HAL_SPI_Receive_DMA()
2181 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint… in HAL_SPI_TransmitReceive_DMA() argument
2187 assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); in HAL_SPI_TransmitReceive_DMA()
2190 __HAL_LOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2192 if (hspi->State != HAL_SPI_STATE_READY) in HAL_SPI_TransmitReceive_DMA()
2195 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2202 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2207 hspi->State = HAL_SPI_STATE_BUSY_TX_RX; in HAL_SPI_TransmitReceive_DMA()
2208 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_TransmitReceive_DMA()
2209 hspi->pTxBuffPtr = (const uint8_t *)pTxData; in HAL_SPI_TransmitReceive_DMA()
2210 hspi->TxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2211 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2212 hspi->pRxBuffPtr = (uint8_t *)pRxData; in HAL_SPI_TransmitReceive_DMA()
2213 hspi->RxXferSize = Size; in HAL_SPI_TransmitReceive_DMA()
2214 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2217 hspi->RxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2218 hspi->TxISR = NULL; in HAL_SPI_TransmitReceive_DMA()
2221 SPI_2LINES(hspi); in HAL_SPI_TransmitReceive_DMA()
2224 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2227 …if (((hspi->Init.DataSize > SPI_DATASIZE_16BIT) && (hspi->hdmarx->Init.DestDataWidth != DMA_DEST_D… in HAL_SPI_TransmitReceive_DMA()
2228 (IS_SPI_FULL_INSTANCE(hspi->Instance))) || \ in HAL_SPI_TransmitReceive_DMA()
2229 …((hspi->Init.DataSize > SPI_DATASIZE_8BIT) && (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAW… in HAL_SPI_TransmitReceive_DMA()
2234 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2239 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2241 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2243 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2245 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2247 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_TransmitReceive_DMA()
2249 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_HALFWORD) in HAL_SPI_TransmitReceive_DMA()
2251 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2253 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2255 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 3UL) >> 2UL; in HAL_SPI_TransmitReceive_DMA()
2258 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2260 if (hspi->hdmatx->Init.SrcDataWidth == DMA_SRC_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2262 hspi->TxXferCount = (hspi->TxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2264 if (hspi->hdmarx->Init.DestDataWidth == DMA_DEST_DATAWIDTH_WORD) in HAL_SPI_TransmitReceive_DMA()
2266 hspi->RxXferCount = (hspi->RxXferCount + (uint16_t) 1UL) >> 1UL; in HAL_SPI_TransmitReceive_DMA()
2275 hspi->hdmarx->XferHalfCpltCallback = SPI_DMAHalfTransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2276 hspi->hdmarx->XferCpltCallback = SPI_DMATransmitReceiveCplt; in HAL_SPI_TransmitReceive_DMA()
2279 hspi->hdmarx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
2282 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2284 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2286 hspi->RxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2288 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2290 hspi->RxXferCount = Size * 2U; in HAL_SPI_TransmitReceive_DMA()
2294 hspi->RxXferCount = Size * 4U; in HAL_SPI_TransmitReceive_DMA()
2297 if ((hspi->hdmarx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_TransmitReceive_DMA()
2299 if (hspi->hdmarx->LinkedListQueue != NULL) in HAL_SPI_TransmitReceive_DMA()
2302 … hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->RxXferCount; in HAL_SPI_TransmitReceive_DMA()
2305 …hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_TransmitReceive_DMA()
2308 …hspi->hdmarx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)hspi->pRx… in HAL_SPI_TransmitReceive_DMA()
2310 errorcode = HAL_DMAEx_List_Start_IT(hspi->hdmarx); in HAL_SPI_TransmitReceive_DMA()
2315 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2318 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2320 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2327 …errorcode = HAL_DMA_Start_IT(hspi->hdmarx, (uint32_t)&hspi->Instance->RXDR, (uint32_t)hspi->pRxBuf… in HAL_SPI_TransmitReceive_DMA()
2328 hspi->RxXferCount); in HAL_SPI_TransmitReceive_DMA()
2335 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2338 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2340 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2346 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2350 hspi->hdmatx->XferHalfCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2351 hspi->hdmatx->XferCpltCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2352 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_TransmitReceive_DMA()
2355 hspi->hdmatx->XferErrorCallback = SPI_DMAError; in HAL_SPI_TransmitReceive_DMA()
2357 if (hspi->Init.DataSize <= SPI_DATASIZE_8BIT) in HAL_SPI_TransmitReceive_DMA()
2359 hspi->TxXferCount = Size; in HAL_SPI_TransmitReceive_DMA()
2361 else if (hspi->Init.DataSize <= SPI_DATASIZE_16BIT) in HAL_SPI_TransmitReceive_DMA()
2363 hspi->TxXferCount = Size * 2U; in HAL_SPI_TransmitReceive_DMA()
2367 hspi->TxXferCount = Size * 4U; in HAL_SPI_TransmitReceive_DMA()
2371 if ((hspi->hdmatx->Mode & DMA_LINKEDLIST) == DMA_LINKEDLIST) in HAL_SPI_TransmitReceive_DMA()
2373 if (hspi->hdmatx->LinkedListQueue != NULL) in HAL_SPI_TransmitReceive_DMA()
2376 … hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CBR1_DEFAULT_OFFSET] = hspi->TxXferCount; in HAL_SPI_TransmitReceive_DMA()
2379 …hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CSAR_DEFAULT_OFFSET] = (uint32_t)hspi->pTx… in HAL_SPI_TransmitReceive_DMA()
2382 …hspi->hdmatx->LinkedListQueue->Head->LinkRegisters[NODE_CDAR_DEFAULT_OFFSET] = (uint32_t)&hspi->In… in HAL_SPI_TransmitReceive_DMA()
2384 errorcode = HAL_DMAEx_List_Start_IT(hspi->hdmatx); in HAL_SPI_TransmitReceive_DMA()
2389 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2392 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2394 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2401 …errorcode = HAL_DMA_Start_IT(hspi->hdmatx, (uint32_t)hspi->pTxBuffPtr, (uint32_t)&hspi->Instance->… in HAL_SPI_TransmitReceive_DMA()
2402 hspi->TxXferCount); in HAL_SPI_TransmitReceive_DMA()
2409 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in HAL_SPI_TransmitReceive_DMA()
2412 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2414 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_TransmitReceive_DMA()
2419 …if ((hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) && (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCU… in HAL_SPI_TransmitReceive_DMA()
2421 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, 0UL); in HAL_SPI_TransmitReceive_DMA()
2425 MODIFY_REG(hspi->Instance->CR2, SPI_CR2_TSIZE, Size); in HAL_SPI_TransmitReceive_DMA()
2429 SET_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN); in HAL_SPI_TransmitReceive_DMA()
2432 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_OVR | SPI_IT_UDR | SPI_IT_FRE | SPI_IT_MODF)); in HAL_SPI_TransmitReceive_DMA()
2435 __HAL_SPI_ENABLE(hspi); in HAL_SPI_TransmitReceive_DMA()
2437 if (hspi->Init.Mode == SPI_MODE_MASTER) in HAL_SPI_TransmitReceive_DMA()
2440 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSTART); in HAL_SPI_TransmitReceive_DMA()
2444 __HAL_UNLOCK(hspi); in HAL_SPI_TransmitReceive_DMA()
2461 HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort() argument
2468 __HAL_LOCK(hspi); in HAL_SPI_Abort()
2471 hspi->State = HAL_SPI_STATE_ABORT; in HAL_SPI_Abort()
2478 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Abort()
2481 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_Abort()
2487 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2491 while (HAL_IS_BIT_SET(hspi->Instance->IER, SPI_IT_EOT)); in HAL_SPI_Abort()
2494 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSUSP); in HAL_SPI_Abort()
2500 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2504 while (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)); in HAL_SPI_Abort()
2507 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Abort()
2513 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort()
2517 while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_SUSP)); in HAL_SPI_Abort()
2521 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN)) in HAL_SPI_Abort()
2523 if (hspi->hdmatx != NULL) in HAL_SPI_Abort()
2526 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2529 if (HAL_DMA_Abort(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort()
2531 if (HAL_DMA_GetError(hspi->hdmatx) == HAL_DMA_ERROR_TIMEOUT) in HAL_SPI_Abort()
2533 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2540 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN)) in HAL_SPI_Abort()
2542 if (hspi->hdmarx != NULL) in HAL_SPI_Abort()
2545 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort()
2548 if (HAL_DMA_Abort(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort()
2550 if (HAL_DMA_GetError(hspi->hdmarx) == HAL_DMA_ERROR_TIMEOUT) in HAL_SPI_Abort()
2552 hspi->ErrorCode = HAL_SPI_ERROR_ABORT; in HAL_SPI_Abort()
2559 SPI_AbortTransfer(hspi); in HAL_SPI_Abort()
2562 if (HAL_IS_BIT_SET(hspi->ErrorCode, HAL_SPI_ERROR_ABORT)) in HAL_SPI_Abort()
2570 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort()
2574 __HAL_UNLOCK(hspi); in HAL_SPI_Abort()
2577 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort()
2597 HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi) in HAL_SPI_Abort_IT() argument
2605 hspi->State = HAL_SPI_STATE_ABORT; in HAL_SPI_Abort_IT()
2612 if (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)) in HAL_SPI_Abort_IT()
2615 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_Abort_IT()
2621 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2625 while (HAL_IS_BIT_SET(hspi->Instance->IER, SPI_IT_EOT)); in HAL_SPI_Abort_IT()
2628 SET_BIT(hspi->Instance->CR1, SPI_CR1_CSUSP); in HAL_SPI_Abort_IT()
2634 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2638 while (HAL_IS_BIT_SET(hspi->Instance->CR1, SPI_CR1_CSTART)); in HAL_SPI_Abort_IT()
2641 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_Abort_IT()
2647 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_Abort_IT()
2651 while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_SUSP)); in HAL_SPI_Abort_IT()
2657 if (hspi->hdmatx != NULL) in HAL_SPI_Abort_IT()
2659 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN)) in HAL_SPI_Abort_IT()
2662 hspi->hdmatx->XferAbortCallback = SPI_DMATxAbortCallback; in HAL_SPI_Abort_IT()
2667 if (HAL_DMA_Abort_IT(hspi->hdmatx) != HAL_OK) in HAL_SPI_Abort_IT()
2669 if (HAL_DMA_GetError(hspi->hdmatx) == HAL_DMA_ERROR_NO_XFER) in HAL_SPI_Abort_IT()
2672 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2678 hspi->hdmatx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2682 if (hspi->hdmarx != NULL) in HAL_SPI_Abort_IT()
2684 if (HAL_IS_BIT_SET(hspi->Instance->CFG1, SPI_CFG1_RXDMAEN)) in HAL_SPI_Abort_IT()
2687 hspi->hdmarx->XferAbortCallback = SPI_DMARxAbortCallback; in HAL_SPI_Abort_IT()
2692 if (HAL_DMA_Abort_IT(hspi->hdmarx) != HAL_OK) in HAL_SPI_Abort_IT()
2694 if (HAL_DMA_GetError(hspi->hdmarx) == HAL_DMA_ERROR_NO_XFER) in HAL_SPI_Abort_IT()
2697 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2703 hspi->hdmarx->XferAbortCallback = NULL; in HAL_SPI_Abort_IT()
2711 SPI_AbortTransfer(hspi); in HAL_SPI_Abort_IT()
2714 if (HAL_IS_BIT_SET(hspi->ErrorCode, HAL_SPI_ERROR_ABORT)) in HAL_SPI_Abort_IT()
2722 hspi->ErrorCode = HAL_SPI_ERROR_NONE; in HAL_SPI_Abort_IT()
2726 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_Abort_IT()
2730 hspi->AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2732 HAL_SPI_AbortCpltCallback(hspi); in HAL_SPI_Abort_IT()
2746 HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAPause() argument
2749 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAPause()
2761 HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAResume() argument
2764 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAResume()
2776 HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi) in HAL_SPI_DMAStop() argument
2779 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_NOT_SUPPORTED); in HAL_SPI_DMAStop()
2790 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) in HAL_SPI_IRQHandler() argument
2792 uint32_t itsource = hspi->Instance->IER; in HAL_SPI_IRQHandler()
2793 uint32_t itflag = hspi->Instance->SR; in HAL_SPI_IRQHandler()
2795 uint32_t cfg1 = hspi->Instance->CFG1; in HAL_SPI_IRQHandler()
2798 HAL_SPI_StateTypeDef State = hspi->State; in HAL_SPI_IRQHandler()
2800 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in HAL_SPI_IRQHandler()
2807 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_IRQHandler()
2811 hspi->SuspendCallback(hspi); in HAL_SPI_IRQHandler()
2813 HAL_SPI_SuspendCallback(hspi); in HAL_SPI_IRQHandler()
2822 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
2823 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
2831 hspi->RxISR(hspi); in HAL_SPI_IRQHandler()
2839 hspi->TxISR(hspi); in HAL_SPI_IRQHandler()
2853 __HAL_SPI_CLEAR_EOTFLAG(hspi); in HAL_SPI_IRQHandler()
2854 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in HAL_SPI_IRQHandler()
2855 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in HAL_SPI_IRQHandler()
2858 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_EOT); in HAL_SPI_IRQHandler()
2861 if (HAL_IS_BIT_CLR(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN)) in HAL_SPI_IRQHandler()
2864 while (hspi->RxXferCount != 0UL) in HAL_SPI_IRQHandler()
2867 if (hspi->Init.DataSize > SPI_DATASIZE_16BIT) in HAL_SPI_IRQHandler()
2869 *((uint32_t *)hspi->pRxBuffPtr) = *((__IO uint32_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
2870 hspi->pRxBuffPtr += sizeof(uint32_t); in HAL_SPI_IRQHandler()
2873 else if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) in HAL_SPI_IRQHandler()
2876 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in HAL_SPI_IRQHandler()
2878 *((uint16_t *)hspi->pRxBuffPtr) = *((__IO uint16_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
2880 hspi->pRxBuffPtr += sizeof(uint16_t); in HAL_SPI_IRQHandler()
2885 *((uint8_t *)hspi->pRxBuffPtr) = *((__IO uint8_t *)&hspi->Instance->RXDR); in HAL_SPI_IRQHandler()
2886 hspi->pRxBuffPtr += sizeof(uint8_t); in HAL_SPI_IRQHandler()
2889 hspi->RxXferCount--; in HAL_SPI_IRQHandler()
2894 SPI_CloseTransfer(hspi); in HAL_SPI_IRQHandler()
2896 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
2897 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
2900 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2902 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
2911 hspi->TxRxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2915 hspi->RxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2919 hspi->TxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2925 HAL_SPI_TxRxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2929 HAL_SPI_RxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2933 HAL_SPI_TxCpltCallback(hspi); in HAL_SPI_IRQHandler()
2950 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in HAL_SPI_IRQHandler()
2951 __HAL_SPI_CLEAR_OVRFLAG(hspi); in HAL_SPI_IRQHandler()
2957 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in HAL_SPI_IRQHandler()
2958 __HAL_SPI_CLEAR_MODFFLAG(hspi); in HAL_SPI_IRQHandler()
2964 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); in HAL_SPI_IRQHandler()
2965 __HAL_SPI_CLEAR_FREFLAG(hspi); in HAL_SPI_IRQHandler()
2971 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_UDR); in HAL_SPI_IRQHandler()
2972 __HAL_SPI_CLEAR_UDRFLAG(hspi); in HAL_SPI_IRQHandler()
2975 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) in HAL_SPI_IRQHandler()
2978 __HAL_SPI_DISABLE(hspi); in HAL_SPI_IRQHandler()
2981 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_EOT | SPI_IT_RXP | SPI_IT_TXP | SPI_IT_MODF | in HAL_SPI_IRQHandler()
2988 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in HAL_SPI_IRQHandler()
2991 if (hspi->hdmarx != NULL) in HAL_SPI_IRQHandler()
2995 hspi->hdmarx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
2996 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmarx)) in HAL_SPI_IRQHandler()
2998 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
3002 if (hspi->hdmatx != NULL) in HAL_SPI_IRQHandler()
3006 hspi->hdmatx->XferAbortCallback = SPI_DMAAbortOnError; in HAL_SPI_IRQHandler()
3007 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmatx)) in HAL_SPI_IRQHandler()
3009 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); in HAL_SPI_IRQHandler()
3016 hspi->State = HAL_SPI_STATE_READY; in HAL_SPI_IRQHandler()
3020 hspi->ErrorCallback(hspi); in HAL_SPI_IRQHandler()
3022 HAL_SPI_ErrorCallback(hspi); in HAL_SPI_IRQHandler()
3036 __weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_TxCpltCallback() argument
3039 UNUSED(hspi); in HAL_SPI_TxCpltCallback()
3052 __weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_RxCpltCallback() argument
3055 UNUSED(hspi); in HAL_SPI_RxCpltCallback()
3068 __weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_TxRxCpltCallback() argument
3071 UNUSED(hspi); in HAL_SPI_TxRxCpltCallback()
3084 __weak void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 … in HAL_SPI_TxHalfCpltCallback() argument
3087 UNUSED(hspi); in HAL_SPI_TxHalfCpltCallback()
3100 __weak void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 … in HAL_SPI_RxHalfCpltCallback() argument
3103 UNUSED(hspi); in HAL_SPI_RxHalfCpltCallback()
3116 __weak void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.1… in HAL_SPI_TxRxHalfCpltCallback() argument
3119 UNUSED(hspi); in HAL_SPI_TxRxHalfCpltCallback()
3132 __weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_ErrorCallback() argument
3135 UNUSED(hspi); in HAL_SPI_ErrorCallback()
3150 __weak void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_AbortCpltCallback() argument
3153 UNUSED(hspi); in HAL_SPI_AbortCpltCallback()
3165 __weak void HAL_SPI_SuspendCallback(SPI_HandleTypeDef *hspi) /* Derogation MISRAC2012-Rule-8.13 */ in HAL_SPI_SuspendCallback() argument
3168 UNUSED(hspi); in HAL_SPI_SuspendCallback()
3200 HAL_SPI_StateTypeDef HAL_SPI_GetState(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetState() argument
3203 return hspi->State; in HAL_SPI_GetState()
3212 uint32_t HAL_SPI_GetError(const SPI_HandleTypeDef *hspi) in HAL_SPI_GetError() argument
3215 return hspi->ErrorCode; in HAL_SPI_GetError()
3239 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATransmitCplt() local
3241 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMATransmitCplt()
3243 if (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR) in SPI_DMATransmitCplt()
3246 hspi->TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3248 HAL_SPI_TxCpltCallback(hspi); in SPI_DMATransmitCplt()
3254 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMATransmitCplt()
3267 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAReceiveCplt() local
3269 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMAReceiveCplt()
3271 if (hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) in SPI_DMAReceiveCplt()
3274 hspi->RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3276 HAL_SPI_RxCpltCallback(hspi); in SPI_DMAReceiveCplt()
3282 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMAReceiveCplt()
3295 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATransmitReceiveCplt() local
3297 if (hspi->State != HAL_SPI_STATE_ABORT) in SPI_DMATransmitReceiveCplt()
3299 if ((hspi->hdmarx->Mode == DMA_LINKEDLIST_CIRCULAR) && in SPI_DMATransmitReceiveCplt()
3300 (hspi->hdmatx->Mode == DMA_LINKEDLIST_CIRCULAR)) in SPI_DMATransmitReceiveCplt()
3303 hspi->TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3305 HAL_SPI_TxRxCpltCallback(hspi); in SPI_DMATransmitReceiveCplt()
3311 __HAL_SPI_ENABLE_IT(hspi, SPI_IT_EOT); in SPI_DMATransmitReceiveCplt()
3324 …SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Derogation … in SPI_DMAHalfTransmitCplt() local
3327 hspi->TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3329 HAL_SPI_TxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitCplt()
3341 …SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Derogation … in SPI_DMAHalfReceiveCplt() local
3344 hspi->RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3346 HAL_SPI_RxHalfCpltCallback(hspi); in SPI_DMAHalfReceiveCplt()
3358 …SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Derogation … in SPI_DMAHalfTransmitReceiveCplt() local
3361 hspi->TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3363 HAL_SPI_TxRxHalfCpltCallback(hspi); in SPI_DMAHalfTransmitReceiveCplt()
3375 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAError() local
3381 SPI_CloseTransfer(hspi); in SPI_DMAError()
3383 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_DMA); in SPI_DMAError()
3384 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAError()
3386 hspi->ErrorCallback(hspi); in SPI_DMAError()
3388 HAL_SPI_ErrorCallback(hspi); in SPI_DMAError()
3401 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMAAbortOnError() local
3402 hspi->RxXferCount = (uint16_t) 0UL; in SPI_DMAAbortOnError()
3403 hspi->TxXferCount = (uint16_t) 0UL; in SPI_DMAAbortOnError()
3406 hspi->State = HAL_SPI_STATE_READY; in SPI_DMAAbortOnError()
3409 hspi->ErrorCallback(hspi); in SPI_DMAAbortOnError()
3411 HAL_SPI_ErrorCallback(hspi); in SPI_DMAAbortOnError()
3425 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMATxAbortCallback() local
3427 hspi->hdmatx->XferAbortCallback = NULL; in SPI_DMATxAbortCallback()
3430 if (hspi->hdmarx != NULL) in SPI_DMATxAbortCallback()
3432 if (hspi->hdmarx->XferAbortCallback != NULL) in SPI_DMATxAbortCallback()
3439 SPI_AbortTransfer(hspi); in SPI_DMATxAbortCallback()
3442 hspi->State = HAL_SPI_STATE_READY; in SPI_DMATxAbortCallback()
3446 hspi->AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3448 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMATxAbortCallback()
3462 SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; in SPI_DMARxAbortCallback() local
3464 hspi->hdmarx->XferAbortCallback = NULL; in SPI_DMARxAbortCallback()
3467 if (hspi->hdmatx != NULL) in SPI_DMARxAbortCallback()
3469 if (hspi->hdmatx->XferAbortCallback != NULL) in SPI_DMARxAbortCallback()
3476 SPI_AbortTransfer(hspi); in SPI_DMARxAbortCallback()
3479 hspi->State = HAL_SPI_STATE_READY; in SPI_DMARxAbortCallback()
3483 hspi->AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3485 HAL_SPI_AbortCpltCallback(hspi); in SPI_DMARxAbortCallback()
3495 static void SPI_RxISR_8BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_8BIT() argument
3498 *((uint8_t *)hspi->pRxBuffPtr) = (*(__IO uint8_t *)&hspi->Instance->RXDR); in SPI_RxISR_8BIT()
3499 hspi->pRxBuffPtr += sizeof(uint8_t); in SPI_RxISR_8BIT()
3500 hspi->RxXferCount--; in SPI_RxISR_8BIT()
3503 if (hspi->RxXferCount == 0UL) in SPI_RxISR_8BIT()
3506 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_8BIT()
3517 static void SPI_RxISR_16BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_16BIT() argument
3521 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->RXDR)); in SPI_RxISR_16BIT()
3523 *((uint16_t *)hspi->pRxBuffPtr) = *prxdr_16bits; in SPI_RxISR_16BIT()
3525 *((uint16_t *)hspi->pRxBuffPtr) = (*(__IO uint16_t *)&hspi->Instance->RXDR); in SPI_RxISR_16BIT()
3527 hspi->pRxBuffPtr += sizeof(uint16_t); in SPI_RxISR_16BIT()
3528 hspi->RxXferCount--; in SPI_RxISR_16BIT()
3531 if (hspi->RxXferCount == 0UL) in SPI_RxISR_16BIT()
3534 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_16BIT()
3545 static void SPI_RxISR_32BIT(SPI_HandleTypeDef *hspi) in SPI_RxISR_32BIT() argument
3548 *((uint32_t *)hspi->pRxBuffPtr) = (*(__IO uint32_t *)&hspi->Instance->RXDR); in SPI_RxISR_32BIT()
3549 hspi->pRxBuffPtr += sizeof(uint32_t); in SPI_RxISR_32BIT()
3550 hspi->RxXferCount--; in SPI_RxISR_32BIT()
3553 if (hspi->RxXferCount == 0UL) in SPI_RxISR_32BIT()
3556 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXP); in SPI_RxISR_32BIT()
3567 static void SPI_TxISR_8BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_8BIT() argument
3570 *(__IO uint8_t *)&hspi->Instance->TXDR = *((const uint8_t *)hspi->pTxBuffPtr); in SPI_TxISR_8BIT()
3571 hspi->pTxBuffPtr += sizeof(uint8_t); in SPI_TxISR_8BIT()
3572 hspi->TxXferCount--; in SPI_TxISR_8BIT()
3575 if (hspi->TxXferCount == 0UL) in SPI_TxISR_8BIT()
3578 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_8BIT()
3588 static void SPI_TxISR_16BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_16BIT() argument
3592 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hspi->Instance->TXDR)); in SPI_TxISR_16BIT()
3594 *ptxdr_16bits = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3596 *((__IO uint16_t *)&hspi->Instance->TXDR) = *((const uint16_t *)hspi->pTxBuffPtr); in SPI_TxISR_16BIT()
3598 hspi->pTxBuffPtr += sizeof(uint16_t); in SPI_TxISR_16BIT()
3599 hspi->TxXferCount--; in SPI_TxISR_16BIT()
3602 if (hspi->TxXferCount == 0UL) in SPI_TxISR_16BIT()
3605 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_16BIT()
3615 static void SPI_TxISR_32BIT(SPI_HandleTypeDef *hspi) in SPI_TxISR_32BIT() argument
3618 *((__IO uint32_t *)&hspi->Instance->TXDR) = *((const uint32_t *)hspi->pTxBuffPtr); in SPI_TxISR_32BIT()
3619 hspi->pTxBuffPtr += sizeof(uint32_t); in SPI_TxISR_32BIT()
3620 hspi->TxXferCount--; in SPI_TxISR_32BIT()
3623 if (hspi->TxXferCount == 0UL) in SPI_TxISR_32BIT()
3626 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXP); in SPI_TxISR_32BIT()
3636 static void SPI_AbortTransfer(SPI_HandleTypeDef *hspi) in SPI_AbortTransfer() argument
3639 __HAL_SPI_DISABLE(hspi); in SPI_AbortTransfer()
3642 …__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()
3646 __HAL_SPI_CLEAR_EOTFLAG(hspi); in SPI_AbortTransfer()
3647 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in SPI_AbortTransfer()
3650 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in SPI_AbortTransfer()
3653 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_AbortTransfer()
3654 __HAL_SPI_CLEAR_UDRFLAG(hspi); in SPI_AbortTransfer()
3655 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_AbortTransfer()
3656 __HAL_SPI_CLEAR_MODFFLAG(hspi); in SPI_AbortTransfer()
3657 __HAL_SPI_CLEAR_SUSPFLAG(hspi); in SPI_AbortTransfer()
3660 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_AbortTransfer()
3663 hspi->TxXferCount = (uint16_t)0UL; in SPI_AbortTransfer()
3664 hspi->RxXferCount = (uint16_t)0UL; in SPI_AbortTransfer()
3675 static void SPI_CloseTransfer(SPI_HandleTypeDef *hspi) in SPI_CloseTransfer() argument
3677 uint32_t itflag = hspi->Instance->SR; in SPI_CloseTransfer()
3679 __HAL_SPI_CLEAR_EOTFLAG(hspi); in SPI_CloseTransfer()
3680 __HAL_SPI_CLEAR_TXTFFLAG(hspi); in SPI_CloseTransfer()
3683 __HAL_SPI_DISABLE(hspi); in SPI_CloseTransfer()
3686 …__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()
3690 CLEAR_BIT(hspi->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN); in SPI_CloseTransfer()
3693 if (hspi->State != HAL_SPI_STATE_BUSY_RX) in SPI_CloseTransfer()
3697 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_UDR); in SPI_CloseTransfer()
3698 __HAL_SPI_CLEAR_UDRFLAG(hspi); in SPI_CloseTransfer()
3703 if (hspi->State != HAL_SPI_STATE_BUSY_TX) in SPI_CloseTransfer()
3707 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); in SPI_CloseTransfer()
3708 __HAL_SPI_CLEAR_OVRFLAG(hspi); in SPI_CloseTransfer()
3713 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) in SPI_CloseTransfer()
3717 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC); in SPI_CloseTransfer()
3718 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); in SPI_CloseTransfer()
3727 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); in SPI_CloseTransfer()
3728 __HAL_SPI_CLEAR_MODFFLAG(hspi); in SPI_CloseTransfer()
3734 SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); in SPI_CloseTransfer()
3735 __HAL_SPI_CLEAR_FREFLAG(hspi); in SPI_CloseTransfer()
3738 hspi->TxXferCount = (uint16_t)0UL; in SPI_CloseTransfer()
3739 hspi->RxXferCount = (uint16_t)0UL; in SPI_CloseTransfer()
3752 static HAL_StatusTypeDef SPI_WaitOnFlagUntilTimeout(const SPI_HandleTypeDef *hspi, uint32_t Flag, F… in SPI_WaitOnFlagUntilTimeout() argument
3756 while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) == Status) in SPI_WaitOnFlagUntilTimeout()
3773 static uint32_t SPI_GetPacketSize(const SPI_HandleTypeDef *hspi) in SPI_GetPacketSize() argument
3775 uint32_t fifo_threashold = (hspi->Init.FifoThreshold >> SPI_CFG1_FTHLV_Pos) + 1UL; in SPI_GetPacketSize()
3776 uint32_t data_size = (hspi->Init.DataSize >> SPI_CFG1_DSIZE_Pos) + 1UL; in SPI_GetPacketSize()