223#ifdef HAL_QSPI_MODULE_ENABLED
231#define QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE 0x00000000U
232#define QSPI_FUNCTIONAL_MODE_INDIRECT_READ ((uint32_t)QUADSPI_CCR_FMODE_0)
233#define QSPI_FUNCTIONAL_MODE_AUTO_POLLING ((uint32_t)QUADSPI_CCR_FMODE_1)
234#define QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED ((uint32_t)QUADSPI_CCR_FMODE)
243#define IS_QSPI_FUNCTIONAL_MODE(MODE) (((MODE) == QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE) || \
244 ((MODE) == QSPI_FUNCTIONAL_MODE_INDIRECT_READ) || \
245 ((MODE) == QSPI_FUNCTIONAL_MODE_AUTO_POLLING) || \
246 ((MODE) == QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED))
260static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Flag, FlagStatus State, uint32_t Tickstart, uint32_t Timeout);
261static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout_CPUCycle(QSPI_HandleTypeDef *hqspi, uint32_t Flag, FlagStatus State, uint32_t Timeout);
262static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t FunctionalMode);
305 assert_param(IS_QSPI_CLOCK_PRESCALER(hqspi->Init.ClockPrescaler));
306 assert_param(IS_QSPI_FIFO_THRESHOLD(hqspi->Init.FifoThreshold));
307 assert_param(IS_QSPI_SSHIFT(hqspi->Init.SampleShifting));
308 assert_param(IS_QSPI_FLASH_SIZE(hqspi->Init.FlashSize));
309 assert_param(IS_QSPI_CS_HIGH_TIME(hqspi->Init.ChipSelectHighTime));
310 assert_param(IS_QSPI_CLOCK_MODE(hqspi->Init.ClockMode));
311 assert_param(IS_QSPI_DUAL_FLASH_MODE(hqspi->Init.DualFlash));
313 if (hqspi->Init.DualFlash != QSPI_DUALFLASH_ENABLE )
318 if(hqspi->State == HAL_QSPI_STATE_RESET)
323#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
325 hqspi->ErrorCallback = HAL_QSPI_ErrorCallback;
326 hqspi->AbortCpltCallback = HAL_QSPI_AbortCpltCallback;
327 hqspi->FifoThresholdCallback = HAL_QSPI_FifoThresholdCallback;
328 hqspi->CmdCpltCallback = HAL_QSPI_CmdCpltCallback;
329 hqspi->RxCpltCallback = HAL_QSPI_RxCpltCallback;
330 hqspi->TxCpltCallback = HAL_QSPI_TxCpltCallback;
331 hqspi->RxHalfCpltCallback = HAL_QSPI_RxHalfCpltCallback;
332 hqspi->TxHalfCpltCallback = HAL_QSPI_TxHalfCpltCallback;
333 hqspi->StatusMatchCallback = HAL_QSPI_StatusMatchCallback;
334 hqspi->TimeOutCallback = HAL_QSPI_TimeOutCallback;
336 if(hqspi->MspInitCallback == NULL)
338 hqspi->MspInitCallback = HAL_QSPI_MspInit;
342 hqspi->MspInitCallback(hqspi);
345 HAL_QSPI_MspInit(hqspi);
349 HAL_QSPI_SetTimeout(hqspi, HAL_QSPI_TIMEOUT_DEFAULT_VALUE);
353 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES,
354 ((hqspi->Init.FifoThreshold - 1U) << QUADSPI_CR_FTHRES_Pos));
357 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout);
362 MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PRESCALER | QUADSPI_CR_SSHIFT | QUADSPI_CR_FSEL | QUADSPI_CR_DFM),
363 ((hqspi->Init.ClockPrescaler << QUADSPI_CR_PRESCALER_Pos) |
364 hqspi->Init.SampleShifting | hqspi->Init.FlashID | hqspi->Init.DualFlash));
367 MODIFY_REG(hqspi->Instance->DCR, (QUADSPI_DCR_FSIZE | QUADSPI_DCR_CSHT | QUADSPI_DCR_CKMODE),
368 ((hqspi->Init.FlashSize << QUADSPI_DCR_FSIZE_Pos) |
369 hqspi->Init.ChipSelectHighTime | hqspi->Init.ClockMode));
372 __HAL_QSPI_ENABLE(hqspi);
375 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
378 hqspi->State = HAL_QSPI_STATE_READY;
402 __HAL_QSPI_DISABLE(hqspi);
404#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
405 if(hqspi->MspDeInitCallback == NULL)
407 hqspi->MspDeInitCallback = HAL_QSPI_MspDeInit;
411 hqspi->MspDeInitCallback(hqspi);
414 HAL_QSPI_MspDeInit(hqspi);
418 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
421 hqspi->State = HAL_QSPI_STATE_RESET;
434__weak
void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi)
449__weak
void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi)
488void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi)
490 __IO uint32_t *data_reg;
491 uint32_t flag = READ_REG(hqspi->Instance->SR);
492 uint32_t itsource = READ_REG(hqspi->Instance->CR);
495 if(((flag & QSPI_FLAG_FT) != 0U) && ((itsource & QSPI_IT_FT) != 0U))
497 data_reg = &hqspi->Instance->DR;
499 if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_TX)
502 while(__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_FT) != RESET)
504 if (hqspi->TxXferCount > 0U)
507 *((__IO uint8_t *)data_reg) = *hqspi->pTxBuffPtr;
509 hqspi->TxXferCount--;
515 __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_FT);
520 else if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_RX)
523 while(__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_FT) != RESET)
525 if (hqspi->RxXferCount > 0U)
528 *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg);
530 hqspi->RxXferCount--;
536 __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_FT);
547#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
548 hqspi->FifoThresholdCallback(hqspi);
550 HAL_QSPI_FifoThresholdCallback(hqspi);
555 else if(((flag & QSPI_FLAG_TC) != 0U) && ((itsource & QSPI_IT_TC) != 0U))
558 WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TC);
561 __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_TC | QSPI_IT_TE | QSPI_IT_FT);
564 if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_TX)
566 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
569 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
576 HAL_QSPI_Abort_IT(hqspi);
579 hqspi->State = HAL_QSPI_STATE_READY;
582#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
583 hqspi->TxCpltCallback(hqspi);
585 HAL_QSPI_TxCpltCallback(hqspi);
588 else if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_RX)
590 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
593 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
600 data_reg = &hqspi->Instance->DR;
601 while(READ_BIT(hqspi->Instance->SR, QUADSPI_SR_FLEVEL) != 0U)
603 if (hqspi->RxXferCount > 0U)
606 *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg);
608 hqspi->RxXferCount--;
619 HAL_QSPI_Abort_IT(hqspi);
622 hqspi->State = HAL_QSPI_STATE_READY;
625#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
626 hqspi->RxCpltCallback(hqspi);
628 HAL_QSPI_RxCpltCallback(hqspi);
631 else if(hqspi->State == HAL_QSPI_STATE_BUSY)
634 hqspi->State = HAL_QSPI_STATE_READY;
637#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
638 hqspi->CmdCpltCallback(hqspi);
640 HAL_QSPI_CmdCpltCallback(hqspi);
643 else if(hqspi->State == HAL_QSPI_STATE_ABORT)
646 CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE);
649 hqspi->State = HAL_QSPI_STATE_READY;
651 if (hqspi->ErrorCode == HAL_QSPI_ERROR_NONE)
656#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
657 hqspi->AbortCpltCallback(hqspi);
659 HAL_QSPI_AbortCpltCallback(hqspi);
667#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
668 hqspi->ErrorCallback(hqspi);
670 HAL_QSPI_ErrorCallback(hqspi);
681 else if(((flag & QSPI_FLAG_SM) != 0U) && ((itsource & QSPI_IT_SM) != 0U))
684 WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_SM);
687 if(READ_BIT(hqspi->Instance->CR, QUADSPI_CR_APMS) != 0U)
690 __HAL_QSPI_DISABLE_IT(hqspi, (QSPI_IT_SM | QSPI_IT_TE));
693 hqspi->State = HAL_QSPI_STATE_READY;
697#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
698 hqspi->StatusMatchCallback(hqspi);
700 HAL_QSPI_StatusMatchCallback(hqspi);
705 else if(((flag & QSPI_FLAG_TE) != 0U) && ((itsource & QSPI_IT_TE) != 0U))
708 WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TE);
711 __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_SM | QSPI_IT_TC | QSPI_IT_TE | QSPI_IT_FT);
714 hqspi->ErrorCode |= HAL_QSPI_ERROR_TRANSFER;
716 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
719 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
722 hqspi->hdma->XferAbortCallback = QSPI_DMAAbortCplt;
726 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
729 hqspi->State = HAL_QSPI_STATE_READY;
732#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
733 hqspi->ErrorCallback(hqspi);
735 HAL_QSPI_ErrorCallback(hqspi);
742 hqspi->State = HAL_QSPI_STATE_READY;
745#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
746 hqspi->ErrorCallback(hqspi);
748 HAL_QSPI_ErrorCallback(hqspi);
754 else if(((flag & QSPI_FLAG_TO) != 0U) && ((itsource & QSPI_IT_TO) != 0U))
757 WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TO);
760#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
761 hqspi->TimeOutCallback(hqspi);
763 HAL_QSPI_TimeOutCallback(hqspi);
781HAL_StatusTypeDef HAL_QSPI_Command(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t Timeout)
787 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
788 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
794 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
799 assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode));
800 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
802 assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize));
815 if(hqspi->State == HAL_QSPI_STATE_READY)
817 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
820 hqspi->State = HAL_QSPI_STATE_BUSY;
823 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout);
828 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
830 if (cmd->DataMode == QSPI_DATA_NONE)
834 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout);
838 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
841 hqspi->State = HAL_QSPI_STATE_READY;
847 hqspi->State = HAL_QSPI_STATE_READY;
870HAL_StatusTypeDef HAL_QSPI_Command_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd)
875 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
876 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
882 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
887 assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode));
888 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
890 assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize));
903 if(hqspi->State == HAL_QSPI_STATE_READY)
905 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
908 hqspi->State = HAL_QSPI_STATE_BUSY;
911 status = QSPI_WaitFlagStateUntilTimeout_CPUCycle(hqspi, QSPI_FLAG_BUSY, RESET, hqspi->Timeout);
915 if (cmd->DataMode == QSPI_DATA_NONE)
918 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_TC);
922 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
924 if (cmd->DataMode == QSPI_DATA_NONE)
932 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_TC);
937 hqspi->State = HAL_QSPI_STATE_READY;
969HAL_StatusTypeDef HAL_QSPI_Transmit(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout)
973 __IO uint32_t *data_reg = &hqspi->Instance->DR;
978 if(hqspi->State == HAL_QSPI_STATE_READY)
980 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
985 hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_TX;
988 hqspi->TxXferCount = READ_REG(hqspi->Instance->DLR) + 1U;
989 hqspi->TxXferSize = READ_REG(hqspi->Instance->DLR) + 1U;
990 hqspi->pTxBuffPtr = pData;
993 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
995 while(hqspi->TxXferCount > 0U)
998 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_FT, SET, tickstart, Timeout);
1005 *((__IO uint8_t *)data_reg) = *hqspi->pTxBuffPtr;
1006 hqspi->pTxBuffPtr++;
1007 hqspi->TxXferCount--;
1013 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout);
1018 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
1021 status = HAL_QSPI_Abort(hqspi);
1026 hqspi->State = HAL_QSPI_STATE_READY;
1030 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1054HAL_StatusTypeDef HAL_QSPI_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout)
1058 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1059 __IO uint32_t *data_reg = &hqspi->Instance->DR;
1064 if(hqspi->State == HAL_QSPI_STATE_READY)
1066 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1071 hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_RX;
1074 hqspi->RxXferCount = READ_REG(hqspi->Instance->DLR) + 1U;
1075 hqspi->RxXferSize = READ_REG(hqspi->Instance->DLR) + 1U;
1076 hqspi->pRxBuffPtr = pData;
1079 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ);
1082 WRITE_REG(hqspi->Instance->AR, addr_reg);
1084 while(hqspi->RxXferCount > 0U)
1087 status = QSPI_WaitFlagStateUntilTimeout(hqspi, (QSPI_FLAG_FT | QSPI_FLAG_TC), SET, tickstart, Timeout);
1094 *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg);
1095 hqspi->pRxBuffPtr++;
1096 hqspi->RxXferCount--;
1102 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout);
1107 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
1110 status = HAL_QSPI_Abort(hqspi);
1115 hqspi->State = HAL_QSPI_STATE_READY;
1119 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1141HAL_StatusTypeDef HAL_QSPI_Transmit_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
1148 if(hqspi->State == HAL_QSPI_STATE_READY)
1150 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1155 hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_TX;
1158 hqspi->TxXferCount = READ_REG(hqspi->Instance->DLR) + 1U;
1159 hqspi->TxXferSize = READ_REG(hqspi->Instance->DLR) + 1U;
1160 hqspi->pTxBuffPtr = pData;
1163 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_TC);
1166 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
1172 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_FT | QSPI_IT_TC);
1176 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1204 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1209 if(hqspi->State == HAL_QSPI_STATE_READY)
1211 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1216 hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_RX;
1219 hqspi->RxXferCount = READ_REG(hqspi->Instance->DLR) + 1U;
1220 hqspi->RxXferSize = READ_REG(hqspi->Instance->DLR) + 1U;
1221 hqspi->pRxBuffPtr = pData;
1224 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_TC);
1227 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ);
1230 WRITE_REG(hqspi->Instance->AR, addr_reg);
1236 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_FT | QSPI_IT_TC);
1240 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1269HAL_StatusTypeDef HAL_QSPI_Transmit_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
1272 uint32_t data_size = (READ_REG(hqspi->Instance->DLR) + 1U);
1277 if(hqspi->State == HAL_QSPI_STATE_READY)
1280 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1287 hqspi->TxXferCount = data_size;
1291 if (((data_size % 2U) != 0U) || ((hqspi->Init.FifoThreshold % 2U) != 0U))
1295 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1303 hqspi->TxXferCount = (data_size >> 1U);
1308 if (((data_size % 4U) != 0U) || ((hqspi->Init.FifoThreshold % 4U) != 0U))
1312 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1320 hqspi->TxXferCount = (data_size >> 2U);
1331 hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_TX;
1334 __HAL_QSPI_CLEAR_FLAG(hqspi, (QSPI_FLAG_TE | QSPI_FLAG_TC));
1337 hqspi->TxXferSize = hqspi->TxXferCount;
1338 hqspi->pTxBuffPtr = pData;
1341 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
1344 hqspi->hdma->XferCpltCallback = QSPI_DMATxCplt;
1347 hqspi->hdma->XferHalfCpltCallback = QSPI_DMATxHalfCplt;
1350 hqspi->hdma->XferErrorCallback = QSPI_DMAError;
1353 hqspi->hdma->XferAbortCallback = NULL;
1355#if defined (QSPI1_V2_1L)
1370 MODIFY_REG(hqspi->hdma->Instance->CR, (DMA_SxCR_MINC | DMA_SxCR_PINC), (hqspi->hdma->Init.MemInc | hqspi->hdma->Init.PeriphInc));
1380 MODIFY_REG(hqspi->hdma->Instance->CR, DMA_SxCR_DIR, hqspi->hdma->Init.Direction);
1383 if (
HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)pData, (uint32_t)&hqspi->Instance->DR, hqspi->TxXferSize) ==
HAL_OK)
1389 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE);
1392 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1397 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
1398 hqspi->State = HAL_QSPI_STATE_READY;
1407 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1436HAL_StatusTypeDef HAL_QSPI_Receive_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
1439 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1440 uint32_t data_size = (READ_REG(hqspi->Instance->DLR) + 1U);
1445 if(hqspi->State == HAL_QSPI_STATE_READY)
1448 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1455 hqspi->RxXferCount = data_size;
1459 if (((data_size % 2U) != 0U) || ((hqspi->Init.FifoThreshold % 2U) != 0U))
1463 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1471 hqspi->RxXferCount = (data_size >> 1U);
1476 if (((data_size % 4U) != 0U) || ((hqspi->Init.FifoThreshold % 4U) != 0U))
1480 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1488 hqspi->RxXferCount = (data_size >> 2U);
1499 hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_RX;
1502 __HAL_QSPI_CLEAR_FLAG(hqspi, (QSPI_FLAG_TE | QSPI_FLAG_TC));
1505 hqspi->RxXferSize = hqspi->RxXferCount;
1506 hqspi->pRxBuffPtr = pData;
1509 hqspi->hdma->XferCpltCallback = QSPI_DMARxCplt;
1512 hqspi->hdma->XferHalfCpltCallback = QSPI_DMARxHalfCplt;
1515 hqspi->hdma->XferErrorCallback = QSPI_DMAError;
1518 hqspi->hdma->XferAbortCallback = NULL;
1520#if defined (QSPI1_V2_1L)
1537 MODIFY_REG(hqspi->hdma->Instance->CR, (DMA_SxCR_MINC | DMA_SxCR_PINC), (hqspi->hdma->Init.MemInc | hqspi->hdma->Init.PeriphInc));
1544 WRITE_REG(hqspi->Instance->DLR, (data_size - 1U + 16U));
1547 MODIFY_REG(hqspi->hdma->Instance->CR, DMA_SxCR_DIR, hqspi->hdma->Init.Direction);
1550 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ);
1553 WRITE_REG(hqspi->Instance->AR, addr_reg);
1556 if(
HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)&hqspi->Instance->DR, (uint32_t)pData, hqspi->RxXferSize) ==
HAL_OK)
1559 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1565 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE);
1570 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
1571 hqspi->State = HAL_QSPI_STATE_READY;
1581 MODIFY_REG(hqspi->hdma->Instance->CR, DMA_SxCR_DIR, hqspi->hdma->Init.Direction);
1584 if(
HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)&hqspi->Instance->DR, (uint32_t)pData, hqspi->RxXferSize)==
HAL_OK)
1587 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ);
1590 WRITE_REG(hqspi->Instance->AR, addr_reg);
1596 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE);
1599 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1604 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
1605 hqspi->State = HAL_QSPI_STATE_READY;
1615 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1642HAL_StatusTypeDef HAL_QSPI_AutoPolling(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg, uint32_t Timeout)
1648 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
1649 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
1655 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
1660 assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode));
1661 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
1663 assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize));
1674 assert_param(IS_QSPI_STATUS_BYTES_SIZE(cfg->StatusBytesSize));
1680 if(hqspi->State == HAL_QSPI_STATE_READY)
1682 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1685 hqspi->State = HAL_QSPI_STATE_BUSY_AUTO_POLLING;
1688 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout);
1693 WRITE_REG(hqspi->Instance->PSMAR, cfg->Match);
1696 WRITE_REG(hqspi->Instance->PSMKR, cfg->Mask);
1699 WRITE_REG(hqspi->Instance->PIR, cfg->Interval);
1703 MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS),
1704 (cfg->MatchMode | QSPI_AUTOMATIC_STOP_ENABLE));
1707 cmd->NbData = cfg->StatusBytesSize;
1708 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING);
1711 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_SM, SET, tickstart, Timeout);
1715 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_SM);
1718 hqspi->State = HAL_QSPI_STATE_READY;
1742HAL_StatusTypeDef HAL_QSPI_AutoPolling_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg)
1747 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
1748 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
1754 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
1759 assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode));
1760 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
1762 assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize));
1773 assert_param(IS_QSPI_STATUS_BYTES_SIZE(cfg->StatusBytesSize));
1775 assert_param(IS_QSPI_AUTOMATIC_STOP(cfg->AutomaticStop));
1780 if(hqspi->State == HAL_QSPI_STATE_READY)
1782 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1785 hqspi->State = HAL_QSPI_STATE_BUSY_AUTO_POLLING;
1788 status = QSPI_WaitFlagStateUntilTimeout_CPUCycle(hqspi, QSPI_FLAG_BUSY, RESET, hqspi->Timeout);
1793 WRITE_REG(hqspi->Instance->PSMAR, cfg->Match);
1796 WRITE_REG(hqspi->Instance->PSMKR, cfg->Mask);
1799 WRITE_REG(hqspi->Instance->PIR, cfg->Interval);
1802 MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS),
1803 (cfg->MatchMode | cfg->AutomaticStop));
1806 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_SM);
1809 cmd->NbData = cfg->StatusBytesSize;
1810 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING);
1816 __HAL_QSPI_ENABLE_IT(hqspi, (QSPI_IT_SM | QSPI_IT_TE));
1845HAL_StatusTypeDef HAL_QSPI_MemoryMapped(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_MemoryMappedTypeDef *cfg)
1851 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
1852 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
1858 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
1863 assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode));
1864 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
1866 assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize));
1876 assert_param(IS_QSPI_TIMEOUT_ACTIVATION(cfg->TimeOutActivation));
1881 if(hqspi->State == HAL_QSPI_STATE_READY)
1883 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1886 hqspi->State = HAL_QSPI_STATE_BUSY_MEM_MAPPED;
1889 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout);
1894 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_TCEN, cfg->TimeOutActivation);
1896 if (cfg->TimeOutActivation == QSPI_TIMEOUT_COUNTER_ENABLE)
1898 assert_param(IS_QSPI_TIMEOUT_PERIOD(cfg->TimeOutPeriod));
1901 WRITE_REG(hqspi->Instance->LPTR, cfg->TimeOutPeriod);
1904 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TO);
1907 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TO);
1911 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED);
1931__weak
void HAL_QSPI_ErrorCallback(QSPI_HandleTypeDef *hqspi)
1946__weak
void HAL_QSPI_AbortCpltCallback(QSPI_HandleTypeDef *hqspi)
1961__weak
void HAL_QSPI_CmdCpltCallback(QSPI_HandleTypeDef *hqspi)
1976__weak
void HAL_QSPI_RxCpltCallback(QSPI_HandleTypeDef *hqspi)
1991__weak
void HAL_QSPI_TxCpltCallback(QSPI_HandleTypeDef *hqspi)
2006__weak
void HAL_QSPI_RxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
2021__weak
void HAL_QSPI_TxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
2036__weak
void HAL_QSPI_FifoThresholdCallback(QSPI_HandleTypeDef *hqspi)
2051__weak
void HAL_QSPI_StatusMatchCallback(QSPI_HandleTypeDef *hqspi)
2066__weak
void HAL_QSPI_TimeOutCallback(QSPI_HandleTypeDef *hqspi)
2075#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2097HAL_StatusTypeDef HAL_QSPI_RegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId, pQSPI_CallbackTypeDef pCallback)
2101 if(pCallback == NULL)
2104 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2111 if(hqspi->State == HAL_QSPI_STATE_READY)
2115 case HAL_QSPI_ERROR_CB_ID :
2116 hqspi->ErrorCallback = pCallback;
2118 case HAL_QSPI_ABORT_CB_ID :
2119 hqspi->AbortCpltCallback = pCallback;
2121 case HAL_QSPI_FIFO_THRESHOLD_CB_ID :
2122 hqspi->FifoThresholdCallback = pCallback;
2124 case HAL_QSPI_CMD_CPLT_CB_ID :
2125 hqspi->CmdCpltCallback = pCallback;
2127 case HAL_QSPI_RX_CPLT_CB_ID :
2128 hqspi->RxCpltCallback = pCallback;
2130 case HAL_QSPI_TX_CPLT_CB_ID :
2131 hqspi->TxCpltCallback = pCallback;
2133 case HAL_QSPI_RX_HALF_CPLT_CB_ID :
2134 hqspi->RxHalfCpltCallback = pCallback;
2136 case HAL_QSPI_TX_HALF_CPLT_CB_ID :
2137 hqspi->TxHalfCpltCallback = pCallback;
2139 case HAL_QSPI_STATUS_MATCH_CB_ID :
2140 hqspi->StatusMatchCallback = pCallback;
2142 case HAL_QSPI_TIMEOUT_CB_ID :
2143 hqspi->TimeOutCallback = pCallback;
2145 case HAL_QSPI_MSP_INIT_CB_ID :
2146 hqspi->MspInitCallback = pCallback;
2148 case HAL_QSPI_MSP_DEINIT_CB_ID :
2149 hqspi->MspDeInitCallback = pCallback;
2153 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2159 else if (hqspi->State == HAL_QSPI_STATE_RESET)
2163 case HAL_QSPI_MSP_INIT_CB_ID :
2164 hqspi->MspInitCallback = pCallback;
2166 case HAL_QSPI_MSP_DEINIT_CB_ID :
2167 hqspi->MspDeInitCallback = pCallback;
2171 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2180 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2210HAL_StatusTypeDef HAL_QSPI_UnRegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId)
2217 if(hqspi->State == HAL_QSPI_STATE_READY)
2221 case HAL_QSPI_ERROR_CB_ID :
2222 hqspi->ErrorCallback = HAL_QSPI_ErrorCallback;
2224 case HAL_QSPI_ABORT_CB_ID :
2225 hqspi->AbortCpltCallback = HAL_QSPI_AbortCpltCallback;
2227 case HAL_QSPI_FIFO_THRESHOLD_CB_ID :
2228 hqspi->FifoThresholdCallback = HAL_QSPI_FifoThresholdCallback;
2230 case HAL_QSPI_CMD_CPLT_CB_ID :
2231 hqspi->CmdCpltCallback = HAL_QSPI_CmdCpltCallback;
2233 case HAL_QSPI_RX_CPLT_CB_ID :
2234 hqspi->RxCpltCallback = HAL_QSPI_RxCpltCallback;
2236 case HAL_QSPI_TX_CPLT_CB_ID :
2237 hqspi->TxCpltCallback = HAL_QSPI_TxCpltCallback;
2239 case HAL_QSPI_RX_HALF_CPLT_CB_ID :
2240 hqspi->RxHalfCpltCallback = HAL_QSPI_RxHalfCpltCallback;
2242 case HAL_QSPI_TX_HALF_CPLT_CB_ID :
2243 hqspi->TxHalfCpltCallback = HAL_QSPI_TxHalfCpltCallback;
2245 case HAL_QSPI_STATUS_MATCH_CB_ID :
2246 hqspi->StatusMatchCallback = HAL_QSPI_StatusMatchCallback;
2248 case HAL_QSPI_TIMEOUT_CB_ID :
2249 hqspi->TimeOutCallback = HAL_QSPI_TimeOutCallback;
2251 case HAL_QSPI_MSP_INIT_CB_ID :
2252 hqspi->MspInitCallback = HAL_QSPI_MspInit;
2254 case HAL_QSPI_MSP_DEINIT_CB_ID :
2255 hqspi->MspDeInitCallback = HAL_QSPI_MspDeInit;
2259 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2265 else if (hqspi->State == HAL_QSPI_STATE_RESET)
2269 case HAL_QSPI_MSP_INIT_CB_ID :
2270 hqspi->MspInitCallback = HAL_QSPI_MspInit;
2272 case HAL_QSPI_MSP_DEINIT_CB_ID :
2273 hqspi->MspDeInitCallback = HAL_QSPI_MspDeInit;
2277 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2286 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2324HAL_QSPI_StateTypeDef HAL_QSPI_GetState(
const QSPI_HandleTypeDef *hqspi)
2327 return hqspi->State;
2335uint32_t HAL_QSPI_GetError(
const QSPI_HandleTypeDef *hqspi)
2337 return hqspi->ErrorCode;
2351 if (((uint32_t)hqspi->State & 0x2U) != 0U)
2356 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
2359 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2365 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
2369 if (__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_BUSY) != RESET)
2372 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2375 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, hqspi->Timeout);
2379 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2382 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout);
2388 CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE);
2391 hqspi->State = HAL_QSPI_STATE_READY;
2397 hqspi->State = HAL_QSPI_STATE_READY;
2414 if (((uint32_t)hqspi->State & 0x2U) != 0U)
2420 hqspi->State = HAL_QSPI_STATE_ABORT;
2423 __HAL_QSPI_DISABLE_IT(hqspi, (QSPI_IT_TO | QSPI_IT_SM | QSPI_IT_FT | QSPI_IT_TC | QSPI_IT_TE));
2425 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
2428 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2431 hqspi->hdma->XferAbortCallback = QSPI_DMAAbortCplt;
2435 hqspi->State = HAL_QSPI_STATE_READY;
2438#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2439 hqspi->AbortCpltCallback(hqspi);
2441 HAL_QSPI_AbortCpltCallback(hqspi);
2447 if (__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_BUSY) != RESET)
2450 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2453 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2456 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2461 hqspi->State = HAL_QSPI_STATE_READY;
2473void HAL_QSPI_SetTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Timeout)
2475 hqspi->Timeout = Timeout;
2483HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t Threshold)
2490 if(hqspi->State == HAL_QSPI_STATE_READY)
2493 hqspi->Init.FifoThreshold = Threshold;
2496 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES,
2497 ((hqspi->Init.FifoThreshold - 1U) << QUADSPI_CR_FTHRES_Pos));
2515uint32_t HAL_QSPI_GetFifoThreshold(
const QSPI_HandleTypeDef *hqspi)
2517 return ((READ_BIT(hqspi->Instance->CR, QUADSPI_CR_FTHRES) >> QUADSPI_CR_FTHRES_Pos) + 1U);
2527HAL_StatusTypeDef HAL_QSPI_SetFlashID(QSPI_HandleTypeDef *hqspi, uint32_t FlashID)
2537 if(hqspi->State == HAL_QSPI_STATE_READY)
2540 hqspi->Init.FlashID = FlashID;
2543 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FSEL, FlashID);
2576 QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->
Parent);
2577 hqspi->RxXferCount = 0U;
2580 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2590 QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->
Parent);
2591 hqspi->TxXferCount = 0U;
2594 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2604 QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->
Parent);
2606#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2607 hqspi->RxHalfCpltCallback(hqspi);
2609 HAL_QSPI_RxHalfCpltCallback(hqspi);
2620 QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->
Parent);
2622#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2623 hqspi->TxHalfCpltCallback(hqspi);
2625 HAL_QSPI_TxHalfCpltCallback(hqspi);
2636 QSPI_HandleTypeDef* hqspi = ( QSPI_HandleTypeDef* )(hdma->
Parent);
2641 hqspi->RxXferCount = 0U;
2642 hqspi->TxXferCount = 0U;
2643 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
2646 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2649 (void)HAL_QSPI_Abort_IT(hqspi);
2661 QSPI_HandleTypeDef* hqspi = ( QSPI_HandleTypeDef* )(hdma->
Parent);
2663 hqspi->RxXferCount = 0U;
2664 hqspi->TxXferCount = 0U;
2666 if(hqspi->State == HAL_QSPI_STATE_ABORT)
2670 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2673 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2676 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2682 hqspi->State = HAL_QSPI_STATE_READY;
2685#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2686 hqspi->ErrorCallback(hqspi);
2688 HAL_QSPI_ErrorCallback(hqspi);
2702static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Flag,
2703 FlagStatus State, uint32_t Tickstart, uint32_t Timeout)
2706 while((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State)
2711 if(((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
2713 hqspi->State = HAL_QSPI_STATE_ERROR;
2714 hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT;
2731static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout_CPUCycle(QSPI_HandleTypeDef *hqspi, uint32_t Flag, FlagStatus State, uint32_t Timeout)
2733 __IO uint32_t count = Timeout * (SystemCoreClock / 16U / 1000U);
2738 hqspi->State = HAL_QSPI_STATE_ERROR;
2739 hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT;
2743 while ((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State);
2760static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t FunctionalMode)
2764 if ((cmd->DataMode != QSPI_DATA_NONE) && (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED))
2767 WRITE_REG(hqspi->Instance->DLR, (cmd->NbData - 1U));
2770 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
2772 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
2775 WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes);
2777 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2781 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2782 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2783 cmd->AlternateBytesSize | cmd->AlternateByteMode |
2784 cmd->AddressSize | cmd->AddressMode | cmd->InstructionMode |
2785 cmd->Instruction | FunctionalMode));
2787 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2790 WRITE_REG(hqspi->Instance->AR, cmd->Address);
2797 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2798 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2799 cmd->AlternateBytesSize | cmd->AlternateByteMode |
2800 cmd->AddressMode | cmd->InstructionMode |
2801 cmd->Instruction | FunctionalMode));
2804 CLEAR_REG(hqspi->Instance->AR);
2809 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2813 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2814 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2815 cmd->AlternateByteMode | cmd->AddressSize | cmd->AddressMode |
2816 cmd->InstructionMode | cmd->Instruction | FunctionalMode));
2818 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2821 WRITE_REG(hqspi->Instance->AR, cmd->Address);
2828 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2829 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2830 cmd->AlternateByteMode | cmd->AddressMode |
2831 cmd->InstructionMode | cmd->Instruction | FunctionalMode));
2834 CLEAR_REG(hqspi->Instance->AR);
2840 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
2843 WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes);
2845 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2849 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2850 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2851 cmd->AlternateBytesSize | cmd->AlternateByteMode |
2852 cmd->AddressSize | cmd->AddressMode |
2853 cmd->InstructionMode | FunctionalMode));
2855 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2858 WRITE_REG(hqspi->Instance->AR, cmd->Address);
2865 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2866 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2867 cmd->AlternateBytesSize | cmd->AlternateByteMode |
2868 cmd->AddressMode | cmd->InstructionMode | FunctionalMode));
2871 CLEAR_REG(hqspi->Instance->AR);
2876 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2880 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2881 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2882 cmd->AlternateByteMode | cmd->AddressSize |
2883 cmd->AddressMode | cmd->InstructionMode | FunctionalMode));
2885 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2888 WRITE_REG(hqspi->Instance->AR, cmd->Address);
2894 if (cmd->DataMode != QSPI_DATA_NONE)
2897 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2898 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2899 cmd->AlternateByteMode | cmd->AddressMode |
2900 cmd->InstructionMode | FunctionalMode));
2903 CLEAR_REG(hqspi->Instance->AR);
#define DMA_MEMORY_TO_PERIPH
#define DMA_PERIPH_TO_MEMORY
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer.
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma)
Return the DMA error code.
#define DMA_PDATAALIGN_BYTE
#define DMA_PDATAALIGN_WORD
#define DMA_PDATAALIGN_HALFWORD
#define __HAL_DMA_DISABLE(__HANDLE__)
Disable the specified DMA Stream.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define assert_param(expr)
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef
HAL Status structures definition
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_LOCK(__HANDLE__)
DMA handle Structure definition.