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 (void)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 (void)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 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE);
1386 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1390 if (
HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)pData, (uint32_t)&hqspi->Instance->DR, hqspi->TxXferSize) ==
HAL_OK)
1398 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1401 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
1402 hqspi->State = HAL_QSPI_STATE_READY;
1411 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1440HAL_StatusTypeDef HAL_QSPI_Receive_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
1443 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1444 uint32_t data_size = (READ_REG(hqspi->Instance->DLR) + 1U);
1449 if(hqspi->State == HAL_QSPI_STATE_READY)
1452 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1459 hqspi->RxXferCount = data_size;
1463 if (((data_size % 2U) != 0U) || ((hqspi->Init.FifoThreshold % 2U) != 0U))
1467 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1475 hqspi->RxXferCount = (data_size >> 1U);
1480 if (((data_size % 4U) != 0U) || ((hqspi->Init.FifoThreshold % 4U) != 0U))
1484 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1492 hqspi->RxXferCount = (data_size >> 2U);
1503 hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_RX;
1506 __HAL_QSPI_CLEAR_FLAG(hqspi, (QSPI_FLAG_TE | QSPI_FLAG_TC));
1509 hqspi->RxXferSize = hqspi->RxXferCount;
1510 hqspi->pRxBuffPtr = pData;
1513 hqspi->hdma->XferCpltCallback = QSPI_DMARxCplt;
1516 hqspi->hdma->XferHalfCpltCallback = QSPI_DMARxHalfCplt;
1519 hqspi->hdma->XferErrorCallback = QSPI_DMAError;
1522 hqspi->hdma->XferAbortCallback = NULL;
1524#if defined (QSPI1_V2_1L)
1541 MODIFY_REG(hqspi->hdma->Instance->CR, (DMA_SxCR_MINC | DMA_SxCR_PINC), (hqspi->hdma->Init.MemInc | hqspi->hdma->Init.PeriphInc));
1548 WRITE_REG(hqspi->Instance->DLR, (data_size - 1U + 16U));
1551 MODIFY_REG(hqspi->hdma->Instance->CR, DMA_SxCR_DIR, hqspi->hdma->Init.Direction);
1554 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ);
1557 WRITE_REG(hqspi->Instance->AR, addr_reg);
1560 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE);
1563 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1566 if(
HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)&hqspi->Instance->DR, (uint32_t)pData, hqspi->RxXferSize) ==
HAL_OK)
1574 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1577 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
1578 hqspi->State = HAL_QSPI_STATE_READY;
1588 MODIFY_REG(hqspi->hdma->Instance->CR, DMA_SxCR_DIR, hqspi->hdma->Init.Direction);
1591 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ);
1594 WRITE_REG(hqspi->Instance->AR, addr_reg);
1597 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE);
1600 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1603 if(
HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)&hqspi->Instance->DR, (uint32_t)pData, hqspi->RxXferSize)==
HAL_OK)
1611 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1614 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
1615 hqspi->State = HAL_QSPI_STATE_READY;
1625 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1652HAL_StatusTypeDef HAL_QSPI_AutoPolling(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg, uint32_t Timeout)
1658 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
1659 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
1665 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
1670 assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode));
1671 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
1673 assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize));
1684 assert_param(IS_QSPI_STATUS_BYTES_SIZE(cfg->StatusBytesSize));
1690 if(hqspi->State == HAL_QSPI_STATE_READY)
1692 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1695 hqspi->State = HAL_QSPI_STATE_BUSY_AUTO_POLLING;
1698 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout);
1703 WRITE_REG(hqspi->Instance->PSMAR, cfg->Match);
1706 WRITE_REG(hqspi->Instance->PSMKR, cfg->Mask);
1709 WRITE_REG(hqspi->Instance->PIR, cfg->Interval);
1713 MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS),
1714 (cfg->MatchMode | QSPI_AUTOMATIC_STOP_ENABLE));
1717 cmd->NbData = cfg->StatusBytesSize;
1718 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING);
1721 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_SM, SET, tickstart, Timeout);
1725 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_SM);
1728 hqspi->State = HAL_QSPI_STATE_READY;
1752HAL_StatusTypeDef HAL_QSPI_AutoPolling_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg)
1757 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
1758 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
1764 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
1769 assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode));
1770 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
1772 assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize));
1783 assert_param(IS_QSPI_STATUS_BYTES_SIZE(cfg->StatusBytesSize));
1785 assert_param(IS_QSPI_AUTOMATIC_STOP(cfg->AutomaticStop));
1790 if(hqspi->State == HAL_QSPI_STATE_READY)
1792 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1795 hqspi->State = HAL_QSPI_STATE_BUSY_AUTO_POLLING;
1798 status = QSPI_WaitFlagStateUntilTimeout_CPUCycle(hqspi, QSPI_FLAG_BUSY, RESET, hqspi->Timeout);
1803 WRITE_REG(hqspi->Instance->PSMAR, cfg->Match);
1806 WRITE_REG(hqspi->Instance->PSMKR, cfg->Mask);
1809 WRITE_REG(hqspi->Instance->PIR, cfg->Interval);
1812 MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS),
1813 (cfg->MatchMode | cfg->AutomaticStop));
1816 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_SM);
1819 cmd->NbData = cfg->StatusBytesSize;
1820 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING);
1826 __HAL_QSPI_ENABLE_IT(hqspi, (QSPI_IT_SM | QSPI_IT_TE));
1855HAL_StatusTypeDef HAL_QSPI_MemoryMapped(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_MemoryMappedTypeDef *cfg)
1861 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
1862 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
1868 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
1873 assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode));
1874 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
1876 assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize));
1886 assert_param(IS_QSPI_TIMEOUT_ACTIVATION(cfg->TimeOutActivation));
1891 if(hqspi->State == HAL_QSPI_STATE_READY)
1893 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1896 hqspi->State = HAL_QSPI_STATE_BUSY_MEM_MAPPED;
1899 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout);
1904 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_TCEN, cfg->TimeOutActivation);
1906 if (cfg->TimeOutActivation == QSPI_TIMEOUT_COUNTER_ENABLE)
1908 assert_param(IS_QSPI_TIMEOUT_PERIOD(cfg->TimeOutPeriod));
1911 WRITE_REG(hqspi->Instance->LPTR, cfg->TimeOutPeriod);
1914 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TO);
1917 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TO);
1921 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED);
1941__weak
void HAL_QSPI_ErrorCallback(QSPI_HandleTypeDef *hqspi)
1956__weak
void HAL_QSPI_AbortCpltCallback(QSPI_HandleTypeDef *hqspi)
1971__weak
void HAL_QSPI_CmdCpltCallback(QSPI_HandleTypeDef *hqspi)
1986__weak
void HAL_QSPI_RxCpltCallback(QSPI_HandleTypeDef *hqspi)
2001__weak
void HAL_QSPI_TxCpltCallback(QSPI_HandleTypeDef *hqspi)
2016__weak
void HAL_QSPI_RxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
2031__weak
void HAL_QSPI_TxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
2046__weak
void HAL_QSPI_FifoThresholdCallback(QSPI_HandleTypeDef *hqspi)
2061__weak
void HAL_QSPI_StatusMatchCallback(QSPI_HandleTypeDef *hqspi)
2076__weak
void HAL_QSPI_TimeOutCallback(QSPI_HandleTypeDef *hqspi)
2085#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2107HAL_StatusTypeDef HAL_QSPI_RegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId, pQSPI_CallbackTypeDef pCallback)
2111 if(pCallback == NULL)
2114 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2121 if(hqspi->State == HAL_QSPI_STATE_READY)
2125 case HAL_QSPI_ERROR_CB_ID :
2126 hqspi->ErrorCallback = pCallback;
2128 case HAL_QSPI_ABORT_CB_ID :
2129 hqspi->AbortCpltCallback = pCallback;
2131 case HAL_QSPI_FIFO_THRESHOLD_CB_ID :
2132 hqspi->FifoThresholdCallback = pCallback;
2134 case HAL_QSPI_CMD_CPLT_CB_ID :
2135 hqspi->CmdCpltCallback = pCallback;
2137 case HAL_QSPI_RX_CPLT_CB_ID :
2138 hqspi->RxCpltCallback = pCallback;
2140 case HAL_QSPI_TX_CPLT_CB_ID :
2141 hqspi->TxCpltCallback = pCallback;
2143 case HAL_QSPI_RX_HALF_CPLT_CB_ID :
2144 hqspi->RxHalfCpltCallback = pCallback;
2146 case HAL_QSPI_TX_HALF_CPLT_CB_ID :
2147 hqspi->TxHalfCpltCallback = pCallback;
2149 case HAL_QSPI_STATUS_MATCH_CB_ID :
2150 hqspi->StatusMatchCallback = pCallback;
2152 case HAL_QSPI_TIMEOUT_CB_ID :
2153 hqspi->TimeOutCallback = pCallback;
2155 case HAL_QSPI_MSP_INIT_CB_ID :
2156 hqspi->MspInitCallback = pCallback;
2158 case HAL_QSPI_MSP_DEINIT_CB_ID :
2159 hqspi->MspDeInitCallback = pCallback;
2163 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2169 else if (hqspi->State == HAL_QSPI_STATE_RESET)
2173 case HAL_QSPI_MSP_INIT_CB_ID :
2174 hqspi->MspInitCallback = pCallback;
2176 case HAL_QSPI_MSP_DEINIT_CB_ID :
2177 hqspi->MspDeInitCallback = pCallback;
2181 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2190 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2220HAL_StatusTypeDef HAL_QSPI_UnRegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId)
2227 if(hqspi->State == HAL_QSPI_STATE_READY)
2231 case HAL_QSPI_ERROR_CB_ID :
2232 hqspi->ErrorCallback = HAL_QSPI_ErrorCallback;
2234 case HAL_QSPI_ABORT_CB_ID :
2235 hqspi->AbortCpltCallback = HAL_QSPI_AbortCpltCallback;
2237 case HAL_QSPI_FIFO_THRESHOLD_CB_ID :
2238 hqspi->FifoThresholdCallback = HAL_QSPI_FifoThresholdCallback;
2240 case HAL_QSPI_CMD_CPLT_CB_ID :
2241 hqspi->CmdCpltCallback = HAL_QSPI_CmdCpltCallback;
2243 case HAL_QSPI_RX_CPLT_CB_ID :
2244 hqspi->RxCpltCallback = HAL_QSPI_RxCpltCallback;
2246 case HAL_QSPI_TX_CPLT_CB_ID :
2247 hqspi->TxCpltCallback = HAL_QSPI_TxCpltCallback;
2249 case HAL_QSPI_RX_HALF_CPLT_CB_ID :
2250 hqspi->RxHalfCpltCallback = HAL_QSPI_RxHalfCpltCallback;
2252 case HAL_QSPI_TX_HALF_CPLT_CB_ID :
2253 hqspi->TxHalfCpltCallback = HAL_QSPI_TxHalfCpltCallback;
2255 case HAL_QSPI_STATUS_MATCH_CB_ID :
2256 hqspi->StatusMatchCallback = HAL_QSPI_StatusMatchCallback;
2258 case HAL_QSPI_TIMEOUT_CB_ID :
2259 hqspi->TimeOutCallback = HAL_QSPI_TimeOutCallback;
2261 case HAL_QSPI_MSP_INIT_CB_ID :
2262 hqspi->MspInitCallback = HAL_QSPI_MspInit;
2264 case HAL_QSPI_MSP_DEINIT_CB_ID :
2265 hqspi->MspDeInitCallback = HAL_QSPI_MspDeInit;
2269 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2275 else if (hqspi->State == HAL_QSPI_STATE_RESET)
2279 case HAL_QSPI_MSP_INIT_CB_ID :
2280 hqspi->MspInitCallback = HAL_QSPI_MspInit;
2282 case HAL_QSPI_MSP_DEINIT_CB_ID :
2283 hqspi->MspDeInitCallback = HAL_QSPI_MspDeInit;
2287 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2296 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2334HAL_QSPI_StateTypeDef HAL_QSPI_GetState(
const QSPI_HandleTypeDef *hqspi)
2337 return hqspi->State;
2345uint32_t HAL_QSPI_GetError(
const QSPI_HandleTypeDef *hqspi)
2347 return hqspi->ErrorCode;
2361 if (((uint32_t)hqspi->State & 0x2U) != 0U)
2366 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
2369 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2375 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
2379 if (__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_BUSY) != RESET)
2382 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2385 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, hqspi->Timeout);
2389 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2392 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout);
2398 CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE);
2401 hqspi->State = HAL_QSPI_STATE_READY;
2407 hqspi->State = HAL_QSPI_STATE_READY;
2424 if (((uint32_t)hqspi->State & 0x2U) != 0U)
2430 hqspi->State = HAL_QSPI_STATE_ABORT;
2433 __HAL_QSPI_DISABLE_IT(hqspi, (QSPI_IT_TO | QSPI_IT_SM | QSPI_IT_FT | QSPI_IT_TC | QSPI_IT_TE));
2435 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
2438 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2441 hqspi->hdma->XferAbortCallback = QSPI_DMAAbortCplt;
2445 hqspi->State = HAL_QSPI_STATE_READY;
2448#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2449 hqspi->AbortCpltCallback(hqspi);
2451 HAL_QSPI_AbortCpltCallback(hqspi);
2457 if (__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_BUSY) != RESET)
2460 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2463 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2466 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2471 hqspi->State = HAL_QSPI_STATE_READY;
2483void HAL_QSPI_SetTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Timeout)
2485 hqspi->Timeout = Timeout;
2493HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t Threshold)
2500 if(hqspi->State == HAL_QSPI_STATE_READY)
2503 hqspi->Init.FifoThreshold = Threshold;
2506 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES,
2507 ((hqspi->Init.FifoThreshold - 1U) << QUADSPI_CR_FTHRES_Pos));
2525uint32_t HAL_QSPI_GetFifoThreshold(
const QSPI_HandleTypeDef *hqspi)
2527 return ((READ_BIT(hqspi->Instance->CR, QUADSPI_CR_FTHRES) >> QUADSPI_CR_FTHRES_Pos) + 1U);
2537HAL_StatusTypeDef HAL_QSPI_SetFlashID(QSPI_HandleTypeDef *hqspi, uint32_t FlashID)
2547 if(hqspi->State == HAL_QSPI_STATE_READY)
2550 hqspi->Init.FlashID = FlashID;
2553 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FSEL, FlashID);
2586 QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->
Parent);
2587 hqspi->RxXferCount = 0U;
2590 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2600 QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->
Parent);
2601 hqspi->TxXferCount = 0U;
2604 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2614 QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->
Parent);
2616#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2617 hqspi->RxHalfCpltCallback(hqspi);
2619 HAL_QSPI_RxHalfCpltCallback(hqspi);
2630 QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->
Parent);
2632#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2633 hqspi->TxHalfCpltCallback(hqspi);
2635 HAL_QSPI_TxHalfCpltCallback(hqspi);
2646 QSPI_HandleTypeDef* hqspi = ( QSPI_HandleTypeDef* )(hdma->
Parent);
2651 hqspi->RxXferCount = 0U;
2652 hqspi->TxXferCount = 0U;
2653 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
2656 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2659 (void)HAL_QSPI_Abort_IT(hqspi);
2671 QSPI_HandleTypeDef* hqspi = ( QSPI_HandleTypeDef* )(hdma->
Parent);
2673 hqspi->RxXferCount = 0U;
2674 hqspi->TxXferCount = 0U;
2676 if(hqspi->State == HAL_QSPI_STATE_ABORT)
2680 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2683 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2686 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2692 hqspi->State = HAL_QSPI_STATE_READY;
2695#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2696 hqspi->ErrorCallback(hqspi);
2698 HAL_QSPI_ErrorCallback(hqspi);
2712static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Flag,
2713 FlagStatus State, uint32_t Tickstart, uint32_t Timeout)
2716 while((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State)
2721 if(((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
2723 hqspi->State = HAL_QSPI_STATE_ERROR;
2724 hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT;
2741static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout_CPUCycle(QSPI_HandleTypeDef *hqspi, uint32_t Flag, FlagStatus State, uint32_t Timeout)
2743 __IO uint32_t count = Timeout * (SystemCoreClock / 16U / 1000U);
2748 hqspi->State = HAL_QSPI_STATE_ERROR;
2749 hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT;
2753 while ((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State);
2770static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t FunctionalMode)
2774 if ((cmd->DataMode != QSPI_DATA_NONE) && (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED))
2777 WRITE_REG(hqspi->Instance->DLR, (cmd->NbData - 1U));
2780 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
2782 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
2785 WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes);
2787 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2791 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2792 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2793 cmd->AlternateBytesSize | cmd->AlternateByteMode |
2794 cmd->AddressSize | cmd->AddressMode | cmd->InstructionMode |
2795 cmd->Instruction | FunctionalMode));
2797 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2800 WRITE_REG(hqspi->Instance->AR, cmd->Address);
2807 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2808 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2809 cmd->AlternateBytesSize | cmd->AlternateByteMode |
2810 cmd->AddressMode | cmd->InstructionMode |
2811 cmd->Instruction | FunctionalMode));
2814 CLEAR_REG(hqspi->Instance->AR);
2819 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2823 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2824 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2825 cmd->AlternateByteMode | cmd->AddressSize | cmd->AddressMode |
2826 cmd->InstructionMode | cmd->Instruction | FunctionalMode));
2828 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2831 WRITE_REG(hqspi->Instance->AR, cmd->Address);
2838 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2839 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2840 cmd->AlternateByteMode | cmd->AddressMode |
2841 cmd->InstructionMode | cmd->Instruction | FunctionalMode));
2844 CLEAR_REG(hqspi->Instance->AR);
2850 if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
2853 WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes);
2855 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2859 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2860 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2861 cmd->AlternateBytesSize | cmd->AlternateByteMode |
2862 cmd->AddressSize | cmd->AddressMode |
2863 cmd->InstructionMode | FunctionalMode));
2865 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2868 WRITE_REG(hqspi->Instance->AR, cmd->Address);
2875 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2876 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2877 cmd->AlternateBytesSize | cmd->AlternateByteMode |
2878 cmd->AddressMode | cmd->InstructionMode | FunctionalMode));
2881 CLEAR_REG(hqspi->Instance->AR);
2886 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2890 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2891 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2892 cmd->AlternateByteMode | cmd->AddressSize |
2893 cmd->AddressMode | cmd->InstructionMode | FunctionalMode));
2895 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2898 WRITE_REG(hqspi->Instance->AR, cmd->Address);
2904 if (cmd->DataMode != QSPI_DATA_NONE)
2907 WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2908 cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2909 cmd->AlternateByteMode | cmd->AddressMode |
2910 cmd->InstructionMode | FunctionalMode));
2913 CLEAR_REG(hqspi->Instance->AR);
#define DMA_MEMORY_TO_PERIPH
#define DMA_PERIPH_TO_MEMORY
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma)
struct __DMA_HandleTypeDef DMA_HandleTypeDef
DMA handle Structure definition.
#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__)