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))
260 static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout(
QSPI_HandleTypeDef *hqspi, uint32_t Flag, FlagStatus State, uint32_t Tickstart, uint32_t Timeout);
261 static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout_CPUCycle(
QSPI_HandleTypeDef *hqspi, uint32_t Flag, FlagStatus State, uint32_t Timeout);
294 HAL_StatusTypeDef status;
304 assert_param(IS_QSPI_ALL_INSTANCE(hqspi->Instance));
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 )
315 assert_param(IS_QSPI_FLASH_ID(hqspi->Init.FlashID));
321 hqspi->Lock = HAL_UNLOCKED;
323 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
336 if(hqspi->MspInitCallback == NULL)
342 hqspi->MspInitCallback(hqspi);
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;
402 __HAL_QSPI_DISABLE(hqspi);
404 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
405 if(hqspi->MspDeInitCallback == NULL)
411 hqspi->MspDeInitCallback(hqspi);
418 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
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;
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);
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);
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);
566 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
569 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
572 __HAL_DMA_DISABLE(hqspi->hdma);
582 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
583 hqspi->TxCpltCallback(hqspi);
590 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
593 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
596 __HAL_DMA_DISABLE(hqspi->hdma);
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--;
625 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
626 hqspi->RxCpltCallback(hqspi);
637 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
638 hqspi->CmdCpltCallback(hqspi);
646 CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE);
651 if (hqspi->ErrorCode == HAL_QSPI_ERROR_NONE)
656 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
657 hqspi->AbortCpltCallback(hqspi);
667 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
668 hqspi->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));
697 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
698 hqspi->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;
732 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
733 hqspi->ErrorCallback(hqspi);
745 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
746 hqspi->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);
783 HAL_StatusTypeDef status;
787 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
788 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
790 assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction));
793 assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode));
794 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
796 assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize));
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));
805 assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles));
806 assert_param(IS_QSPI_DATA_MODE(cmd->DataMode));
808 assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode));
809 assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle));
810 assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode));
817 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
823 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout);
825 if (status == HAL_OK)
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);
836 if (status == HAL_OK)
838 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
872 HAL_StatusTypeDef status;
875 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
876 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
878 assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction));
881 assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode));
882 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
884 assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize));
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));
893 assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles));
894 assert_param(IS_QSPI_DATA_MODE(cmd->DataMode));
896 assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode));
897 assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle));
898 assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode));
905 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
911 status = QSPI_WaitFlagStateUntilTimeout_CPUCycle(hqspi, QSPI_FLAG_BUSY, RESET, hqspi->Timeout);
913 if (status == HAL_OK)
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);
971 HAL_StatusTypeDef status = HAL_OK;
973 __IO uint32_t *data_reg = &hqspi->Instance->DR;
980 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
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);
1000 if (status != HAL_OK)
1005 *((__IO uint8_t *)data_reg) = *hqspi->pTxBuffPtr;
1006 hqspi->pTxBuffPtr++;
1007 hqspi->TxXferCount--;
1010 if (status == HAL_OK)
1013 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout);
1015 if (status == HAL_OK)
1018 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
1030 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1040 __HAL_UNLOCK(hqspi);
1056 HAL_StatusTypeDef status = HAL_OK;
1058 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1059 __IO uint32_t *data_reg = &hqspi->Instance->DR;
1066 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
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);
1089 if (status != HAL_OK)
1094 *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg);
1095 hqspi->pRxBuffPtr++;
1096 hqspi->RxXferCount--;
1099 if (status == HAL_OK)
1102 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout);
1104 if (status == HAL_OK)
1107 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
1119 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1129 __HAL_UNLOCK(hqspi);
1143 HAL_StatusTypeDef status = HAL_OK;
1150 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
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);
1169 __HAL_UNLOCK(hqspi);
1172 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_FT | QSPI_IT_TC);
1176 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1180 __HAL_UNLOCK(hqspi);
1188 __HAL_UNLOCK(hqspi);
1203 HAL_StatusTypeDef status = HAL_OK;
1204 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1211 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
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);
1233 __HAL_UNLOCK(hqspi);
1236 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_FT | QSPI_IT_TC);
1240 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1244 __HAL_UNLOCK(hqspi);
1252 __HAL_UNLOCK(hqspi);
1271 HAL_StatusTypeDef status = HAL_OK;
1272 uint32_t data_size = (READ_REG(hqspi->Instance->DLR) + 1U);
1280 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1285 if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_BYTE)
1287 hqspi->TxXferCount = data_size;
1289 else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_HALFWORD)
1291 if (((data_size % 2U) != 0U) || ((hqspi->Init.FifoThreshold % 2U) != 0U))
1295 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1299 __HAL_UNLOCK(hqspi);
1303 hqspi->TxXferCount = (data_size >> 1U);
1306 else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_WORD)
1308 if (((data_size % 4U) != 0U) || ((hqspi->Init.FifoThreshold % 4U) != 0U))
1312 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1316 __HAL_UNLOCK(hqspi);
1320 hqspi->TxXferCount = (data_size >> 2U);
1328 if (status == HAL_OK)
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)
1364 hqspi->hdma->Init.PeriphInc = DMA_PINC_ENABLE;
1367 hqspi->hdma->Init.MemInc = DMA_MINC_DISABLE;
1370 MODIFY_REG(hqspi->hdma->Instance->CR, (DMA_SxCR_MINC | DMA_SxCR_PINC), (hqspi->hdma->Init.MemInc | hqspi->hdma->Init.PeriphInc));
1373 hqspi->hdma->Init.Direction = DMA_PERIPH_TO_MEMORY;
1376 hqspi->hdma->Init.Direction = DMA_MEMORY_TO_PERIPH;
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)
1386 __HAL_UNLOCK(hqspi);
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;
1401 __HAL_UNLOCK(hqspi);
1407 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1411 __HAL_UNLOCK(hqspi);
1419 __HAL_UNLOCK(hqspi);
1438 HAL_StatusTypeDef status = HAL_OK;
1439 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1440 uint32_t data_size = (READ_REG(hqspi->Instance->DLR) + 1U);
1448 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1453 if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_BYTE)
1455 hqspi->RxXferCount = data_size;
1457 else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_HALFWORD)
1459 if (((data_size % 2U) != 0U) || ((hqspi->Init.FifoThreshold % 2U) != 0U))
1463 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1467 __HAL_UNLOCK(hqspi);
1471 hqspi->RxXferCount = (data_size >> 1U);
1474 else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_WORD)
1476 if (((data_size % 4U) != 0U) || ((hqspi->Init.FifoThreshold % 4U) != 0U))
1480 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1484 __HAL_UNLOCK(hqspi);
1488 hqspi->RxXferCount = (data_size >> 2U);
1496 if (status == HAL_OK)
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)
1531 hqspi->hdma->Init.PeriphInc = DMA_PINC_ENABLE;
1534 hqspi->hdma->Init.MemInc = DMA_MINC_DISABLE;
1537 MODIFY_REG(hqspi->hdma->Instance->CR, (DMA_SxCR_MINC | DMA_SxCR_PINC), (hqspi->hdma->Init.MemInc | hqspi->hdma->Init.PeriphInc));
1540 hqspi->hdma->Init.Direction = DMA_MEMORY_TO_PERIPH;
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);
1562 __HAL_UNLOCK(hqspi);
1565 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE);
1570 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
1574 __HAL_UNLOCK(hqspi);
1578 hqspi->hdma->Init.Direction = DMA_PERIPH_TO_MEMORY;
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);
1593 __HAL_UNLOCK(hqspi);
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;
1608 __HAL_UNLOCK(hqspi);
1615 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1619 __HAL_UNLOCK(hqspi);
1627 __HAL_UNLOCK(hqspi);
1644 HAL_StatusTypeDef status;
1648 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
1649 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
1651 assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction));
1654 assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode));
1655 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
1657 assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize));
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));
1666 assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles));
1667 assert_param(IS_QSPI_DATA_MODE(cmd->DataMode));
1669 assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode));
1670 assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle));
1671 assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode));
1673 assert_param(IS_QSPI_INTERVAL(cfg->Interval));
1674 assert_param(IS_QSPI_STATUS_BYTES_SIZE(cfg->StatusBytesSize));
1675 assert_param(IS_QSPI_MATCH_MODE(cfg->MatchMode));
1682 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1688 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout);
1690 if (status == HAL_OK)
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);
1713 if (status == HAL_OK)
1715 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_SM);
1728 __HAL_UNLOCK(hqspi);
1744 HAL_StatusTypeDef status;
1747 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
1748 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
1750 assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction));
1753 assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode));
1754 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
1756 assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize));
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));
1765 assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles));
1766 assert_param(IS_QSPI_DATA_MODE(cmd->DataMode));
1768 assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode));
1769 assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle));
1770 assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode));
1772 assert_param(IS_QSPI_INTERVAL(cfg->Interval));
1773 assert_param(IS_QSPI_STATUS_BYTES_SIZE(cfg->StatusBytesSize));
1774 assert_param(IS_QSPI_MATCH_MODE(cfg->MatchMode));
1775 assert_param(IS_QSPI_AUTOMATIC_STOP(cfg->AutomaticStop));
1782 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1788 status = QSPI_WaitFlagStateUntilTimeout_CPUCycle(hqspi, QSPI_FLAG_BUSY, RESET, hqspi->Timeout);
1790 if (status == HAL_OK)
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);
1813 __HAL_UNLOCK(hqspi);
1816 __HAL_QSPI_ENABLE_IT(hqspi, (QSPI_IT_SM | QSPI_IT_TE));
1822 __HAL_UNLOCK(hqspi);
1830 __HAL_UNLOCK(hqspi);
1847 HAL_StatusTypeDef status;
1851 assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode));
1852 if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
1854 assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction));
1857 assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode));
1858 if (cmd->AddressMode != QSPI_ADDRESS_NONE)
1860 assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize));
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));
1869 assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles));
1870 assert_param(IS_QSPI_DATA_MODE(cmd->DataMode));
1872 assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode));
1873 assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle));
1874 assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode));
1876 assert_param(IS_QSPI_TIMEOUT_ACTIVATION(cfg->TimeOutActivation));
1883 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1889 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout);
1891 if (status == HAL_OK)
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);
1920 __HAL_UNLOCK(hqspi);
2075 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2099 HAL_StatusTypeDef status = HAL_OK;
2101 if(pCallback == NULL)
2104 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2116 hqspi->ErrorCallback = pCallback;
2119 hqspi->AbortCpltCallback = pCallback;
2122 hqspi->FifoThresholdCallback = pCallback;
2125 hqspi->CmdCpltCallback = pCallback;
2128 hqspi->RxCpltCallback = pCallback;
2131 hqspi->TxCpltCallback = pCallback;
2134 hqspi->RxHalfCpltCallback = pCallback;
2137 hqspi->TxHalfCpltCallback = pCallback;
2140 hqspi->StatusMatchCallback = pCallback;
2143 hqspi->TimeOutCallback = pCallback;
2146 hqspi->MspInitCallback = pCallback;
2149 hqspi->MspDeInitCallback = pCallback;
2153 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2164 hqspi->MspInitCallback = pCallback;
2167 hqspi->MspDeInitCallback = pCallback;
2171 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2180 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2186 __HAL_UNLOCK(hqspi);
2212 HAL_StatusTypeDef status = HAL_OK;
2259 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2277 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2286 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2292 __HAL_UNLOCK(hqspi);
2327 return hqspi->State;
2337 return hqspi->ErrorCode;
2347 HAL_StatusTypeDef status = HAL_OK;
2351 if (((uint32_t)hqspi->State & 0x2U) != 0U)
2354 __HAL_UNLOCK(hqspi);
2356 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
2359 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2363 if(status != HAL_OK)
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);
2377 if (status == HAL_OK)
2379 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2382 status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout);
2385 if (status == HAL_OK)
2388 CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE);
2411 HAL_StatusTypeDef status = HAL_OK;
2414 if (((uint32_t)hqspi->State & 0x2U) != 0U)
2417 __HAL_UNLOCK(hqspi);
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;
2438 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2439 hqspi->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);
2475 hqspi->Timeout = Timeout;
2485 HAL_StatusTypeDef status = HAL_OK;
2493 hqspi->Init.FifoThreshold = Threshold;
2496 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES,
2497 ((hqspi->Init.FifoThreshold - 1U) << QUADSPI_CR_FTHRES_Pos));
2505 __HAL_UNLOCK(hqspi);
2517 return ((READ_BIT(hqspi->Instance->CR, QUADSPI_CR_FTHRES) >> QUADSPI_CR_FTHRES_Pos) + 1U);
2529 HAL_StatusTypeDef status = HAL_OK;
2532 assert_param(IS_QSPI_FLASH_ID(FlashID));
2540 hqspi->Init.FlashID = FlashID;
2543 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FSEL, FlashID);
2551 __HAL_UNLOCK(hqspi);
2577 hqspi->RxXferCount = 0U;
2580 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2591 hqspi->TxXferCount = 0U;
2594 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2606 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2607 hqspi->RxHalfCpltCallback(hqspi);
2622 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2623 hqspi->TxHalfCpltCallback(hqspi);
2641 hqspi->RxXferCount = 0U;
2642 hqspi->TxXferCount = 0U;
2643 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
2646 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2663 hqspi->RxXferCount = 0U;
2664 hqspi->TxXferCount = 0U;
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);
2685 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2686 hqspi->ErrorCallback(hqspi);
2702 static 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)
2709 if (Timeout != HAL_MAX_DELAY)
2711 if(((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
2714 hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT;
2731 static 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);
2739 hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT;
2743 while ((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State);
2762 assert_param(IS_QSPI_FUNCTIONAL_MODE(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);
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.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
HAL_StatusTypeDef HAL_QSPI_Init(QSPI_HandleTypeDef *hqspi)
Initialize the QSPI mode according to the specified parameters in the QSPI_InitTypeDef and initialize...
void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi)
DeInitialize the QSPI MSP.
void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi)
Initialize the QSPI MSP.
HAL_StatusTypeDef HAL_QSPI_DeInit(QSPI_HandleTypeDef *hqspi)
De-Initialize the QSPI peripheral.
HAL_StatusTypeDef HAL_QSPI_Receive_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
Receive an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_QSPI_MemoryMapped(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_MemoryMappedTypeDef *cfg)
Configure the Memory Mapped mode.
HAL_StatusTypeDef HAL_QSPI_AutoPolling(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg, uint32_t Timeout)
Configure the QSPI Automatic Polling Mode in blocking mode.
HAL_StatusTypeDef HAL_QSPI_Command(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t Timeout)
Set the command configuration.
HAL_StatusTypeDef HAL_QSPI_Transmit_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
Send an amount of data in non-blocking mode with interrupt.
void HAL_QSPI_TxCpltCallback(QSPI_HandleTypeDef *hqspi)
Tx Transfer completed callback.
HAL_StatusTypeDef HAL_QSPI_Transmit(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout)
Transmit an amount of data in blocking mode.
HAL_StatusTypeDef HAL_QSPI_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout)
Receive an amount of data in blocking mode.
HAL_StatusTypeDef HAL_QSPI_Transmit_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
Send an amount of data in non-blocking mode with DMA.
void HAL_QSPI_FifoThresholdCallback(QSPI_HandleTypeDef *hqspi)
FIFO Threshold callback.
void HAL_QSPI_TimeOutCallback(QSPI_HandleTypeDef *hqspi)
Timeout callback.
HAL_StatusTypeDef HAL_QSPI_Command_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd)
Set the command configuration in interrupt mode.
void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi)
Handle QSPI interrupt request.
HAL_StatusTypeDef HAL_QSPI_RegisterCallback(QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId, pQSPI_CallbackTypeDef pCallback)
Register a User QSPI Callback To be used to override the weak predefined callback.
HAL_StatusTypeDef HAL_QSPI_Receive_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
Receive an amount of data in non-blocking mode with interrupt.
void HAL_QSPI_AbortCpltCallback(QSPI_HandleTypeDef *hqspi)
Abort completed callback.
void HAL_QSPI_RxCpltCallback(QSPI_HandleTypeDef *hqspi)
Rx Transfer completed callback.
void HAL_QSPI_RxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
Rx Half Transfer completed callback.
HAL_StatusTypeDef HAL_QSPI_AutoPolling_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg)
Configure the QSPI Automatic Polling Mode in non-blocking mode.
void HAL_QSPI_ErrorCallback(QSPI_HandleTypeDef *hqspi)
Transfer Error callback.
void HAL_QSPI_CmdCpltCallback(QSPI_HandleTypeDef *hqspi)
Command completed callback.
HAL_StatusTypeDef HAL_QSPI_UnRegisterCallback(QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId)
Unregister a User QSPI Callback QSPI Callback is redirected to the weak predefined callback.
void HAL_QSPI_StatusMatchCallback(QSPI_HandleTypeDef *hqspi)
Status Match callback.
void HAL_QSPI_TxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
Tx Half Transfer completed callback.
HAL_StatusTypeDef HAL_QSPI_Abort(QSPI_HandleTypeDef *hqspi)
Abort the current transmission.
HAL_StatusTypeDef HAL_QSPI_SetFlashID(QSPI_HandleTypeDef *hqspi, uint32_t FlashID)
Set FlashID.
HAL_QSPI_StateTypeDef HAL_QSPI_GetState(const QSPI_HandleTypeDef *hqspi)
Return the QSPI handle state.
uint32_t HAL_QSPI_GetError(const QSPI_HandleTypeDef *hqspi)
Return the QSPI error code.
HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t Threshold)
Set QSPI Fifo threshold.
uint32_t HAL_QSPI_GetFifoThreshold(const QSPI_HandleTypeDef *hqspi)
Get QSPI Fifo threshold.
void HAL_QSPI_SetTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Timeout)
Set QSPI timeout.
HAL_StatusTypeDef HAL_QSPI_Abort_IT(QSPI_HandleTypeDef *hqspi)
Abort the current transmission (non-blocking function)
This file contains all the functions prototypes for the HAL module driver.
HAL_QSPI_CallbackIDTypeDef
HAL QSPI Callback ID enumeration definition.
@ HAL_QSPI_MSP_DEINIT_CB_ID
@ HAL_QSPI_FIFO_THRESHOLD_CB_ID
@ HAL_QSPI_TX_HALF_CPLT_CB_ID
@ HAL_QSPI_MSP_INIT_CB_ID
@ HAL_QSPI_CMD_CPLT_CB_ID
@ HAL_QSPI_RX_HALF_CPLT_CB_ID
@ HAL_QSPI_STATUS_MATCH_CB_ID
struct __QSPI_HandleTypeDef else typedef struct endif QSPI_HandleTypeDef
QSPI Handle Structure definition.
void(* pQSPI_CallbackTypeDef)(QSPI_HandleTypeDef *hqspi)
HAL QSPI Callback pointer definition.
HAL_QSPI_StateTypeDef
HAL QSPI State structures definition.
@ HAL_QSPI_STATE_BUSY_INDIRECT_RX
@ HAL_QSPI_STATE_BUSY_INDIRECT_TX
@ HAL_QSPI_STATE_BUSY_AUTO_POLLING
@ HAL_QSPI_STATE_BUSY_MEM_MAPPED
QSPI Auto Polling mode configuration structure definition.
QSPI Command structure definition.
QSPI Memory Mapped mode configuration structure definition.
DMA handle Structure definition.