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)) 293 HAL_StatusTypeDef status;
304 assert_param(IS_QSPI_CLOCK_PRESCALER(hqspi->Init.ClockPrescaler));
305 assert_param(IS_QSPI_FIFO_THRESHOLD(hqspi->Init.FifoThreshold));
306 assert_param(IS_QSPI_SSHIFT(hqspi->Init.SampleShifting));
307 assert_param(IS_QSPI_FLASH_SIZE(hqspi->Init.FlashSize));
308 assert_param(IS_QSPI_CS_HIGH_TIME(hqspi->Init.ChipSelectHighTime));
309 assert_param(IS_QSPI_CLOCK_MODE(hqspi->Init.ClockMode));
310 #if defined(QUADSPI_CR_DFM) 311 assert_param(IS_QSPI_DUAL_FLASH_MODE(hqspi->Init.DualFlash));
313 if (hqspi->Init.DualFlash != QSPI_DUALFLASH_ENABLE )
327 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 340 if(hqspi->MspInitCallback == NULL)
346 hqspi->MspInitCallback(hqspi);
357 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES,
358 ((hqspi->Init.FifoThreshold - 1U) << QUADSPI_CR_FTHRES_Pos));
366 #if defined(QUADSPI_CR_DFM) 367 MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PRESCALER | QUADSPI_CR_SSHIFT | QUADSPI_CR_FSEL | QUADSPI_CR_DFM),
368 ((hqspi->Init.ClockPrescaler << QUADSPI_CR_PRESCALER_Pos) |
369 hqspi->Init.SampleShifting | hqspi->Init.FlashID | hqspi->Init.DualFlash));
371 MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PRESCALER | QUADSPI_CR_SSHIFT),
372 ((hqspi->Init.ClockPrescaler << QUADSPI_CR_PRESCALER_Pos) |
373 hqspi->Init.SampleShifting));
377 MODIFY_REG(hqspi->Instance->DCR, (QUADSPI_DCR_FSIZE | QUADSPI_DCR_CSHT | QUADSPI_DCR_CKMODE),
378 ((hqspi->Init.FlashSize << QUADSPI_DCR_FSIZE_Pos) |
379 hqspi->Init.ChipSelectHighTime | hqspi->Init.ClockMode));
382 __HAL_QSPI_ENABLE(hqspi);
385 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
415 __HAL_QSPI_DISABLE(hqspi);
417 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 418 if(hqspi->MspDeInitCallback == NULL)
424 hqspi->MspDeInitCallback(hqspi);
431 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
503 __IO uint32_t *data_reg;
504 uint32_t flag = READ_REG(hqspi->Instance->SR);
505 uint32_t itsource = READ_REG(hqspi->Instance->CR);
508 if(((flag & QSPI_FLAG_FT) != 0U) && ((itsource & QSPI_IT_FT) != 0U))
510 data_reg = &hqspi->Instance->DR;
515 while(__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_FT) != RESET)
517 if (hqspi->TxXferCount > 0U)
520 *((__IO uint8_t *)data_reg) = *hqspi->pTxBuffPtr;
522 hqspi->TxXferCount--;
528 __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_FT);
536 while(__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_FT) != RESET)
538 if (hqspi->RxXferCount > 0U)
541 *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg);
543 hqspi->RxXferCount--;
549 __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_FT);
560 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 561 hqspi->FifoThresholdCallback(hqspi);
568 else if(((flag & QSPI_FLAG_TC) != 0U) && ((itsource & QSPI_IT_TC) != 0U))
571 WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TC);
574 __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_TC | QSPI_IT_TE | QSPI_IT_FT);
579 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
582 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
585 __HAL_DMA_DISABLE(hqspi->hdma);
588 #if (defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx)) 597 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 598 hqspi->TxCpltCallback(hqspi);
605 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
608 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
611 __HAL_DMA_DISABLE(hqspi->hdma);
615 data_reg = &hqspi->Instance->DR;
616 while(READ_BIT(hqspi->Instance->SR, QUADSPI_SR_FLEVEL) != 0U)
618 if (hqspi->RxXferCount > 0U)
621 *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg);
623 hqspi->RxXferCount--;
633 #if (defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx)) 642 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 643 hqspi->RxCpltCallback(hqspi);
654 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 655 hqspi->CmdCpltCallback(hqspi);
663 CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE);
668 if (hqspi->ErrorCode == HAL_QSPI_ERROR_NONE)
673 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 674 hqspi->AbortCpltCallback(hqspi);
684 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 685 hqspi->ErrorCallback(hqspi);
698 else if(((flag & QSPI_FLAG_SM) != 0U) && ((itsource & QSPI_IT_SM) != 0U))
701 WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_SM);
704 if(READ_BIT(hqspi->Instance->CR, QUADSPI_CR_APMS) != 0U)
707 __HAL_QSPI_DISABLE_IT(hqspi, (QSPI_IT_SM | QSPI_IT_TE));
714 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 715 hqspi->StatusMatchCallback(hqspi);
722 else if(((flag & QSPI_FLAG_TE) != 0U) && ((itsource & QSPI_IT_TE) != 0U))
725 WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TE);
728 __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_SM | QSPI_IT_TC | QSPI_IT_TE | QSPI_IT_FT);
731 hqspi->ErrorCode |= HAL_QSPI_ERROR_TRANSFER;
733 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
736 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
743 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
749 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 750 hqspi->ErrorCallback(hqspi);
762 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 763 hqspi->ErrorCallback(hqspi);
771 else if(((flag & QSPI_FLAG_TO) != 0U) && ((itsource & QSPI_IT_TO) != 0U))
774 WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TO);
777 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 778 hqspi->TimeOutCallback(hqspi);
800 HAL_StatusTypeDef status;
834 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
845 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
847 if (cmd->
DataMode == QSPI_DATA_NONE)
855 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
889 HAL_StatusTypeDef status;
923 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
933 if (cmd->
DataMode == QSPI_DATA_NONE)
936 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_TC);
940 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
942 if (cmd->
DataMode == QSPI_DATA_NONE)
950 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_TC);
989 HAL_StatusTypeDef status =
HAL_OK;
991 __IO uint32_t *data_reg = &hqspi->Instance->DR;
998 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1006 hqspi->TxXferCount = READ_REG(hqspi->Instance->DLR) + 1U;
1007 hqspi->TxXferSize = READ_REG(hqspi->Instance->DLR) + 1U;
1008 hqspi->pTxBuffPtr = pData;
1011 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
1013 while(hqspi->TxXferCount > 0U)
1023 *((__IO uint8_t *)data_reg) = *hqspi->pTxBuffPtr;
1024 hqspi->pTxBuffPtr++;
1025 hqspi->TxXferCount--;
1036 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
1038 #if (defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx)) 1050 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1076 HAL_StatusTypeDef status =
HAL_OK;
1078 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1079 __IO uint32_t *data_reg = &hqspi->Instance->DR;
1086 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1094 hqspi->RxXferCount = READ_REG(hqspi->Instance->DLR) + 1U;
1095 hqspi->RxXferSize = READ_REG(hqspi->Instance->DLR) + 1U;
1096 hqspi->pRxBuffPtr = pData;
1099 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ);
1102 WRITE_REG(hqspi->Instance->AR, addr_reg);
1104 while(hqspi->RxXferCount > 0U)
1114 *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg);
1115 hqspi->pRxBuffPtr++;
1116 hqspi->RxXferCount--;
1127 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
1129 #if (defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx)) 1141 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1165 HAL_StatusTypeDef status =
HAL_OK;
1172 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1180 hqspi->TxXferCount = READ_REG(hqspi->Instance->DLR) + 1U;
1181 hqspi->TxXferSize = READ_REG(hqspi->Instance->DLR) + 1U;
1182 hqspi->pTxBuffPtr = pData;
1185 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_TC);
1188 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
1194 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_FT | QSPI_IT_TC);
1198 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1225 HAL_StatusTypeDef status =
HAL_OK;
1226 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1233 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1241 hqspi->RxXferCount = READ_REG(hqspi->Instance->DLR) + 1U;
1242 hqspi->RxXferSize = READ_REG(hqspi->Instance->DLR) + 1U;
1243 hqspi->pRxBuffPtr = pData;
1246 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_TC);
1249 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ);
1252 WRITE_REG(hqspi->Instance->AR, addr_reg);
1258 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_FT | QSPI_IT_TC);
1262 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1293 HAL_StatusTypeDef status =
HAL_OK;
1294 uint32_t data_size = (READ_REG(hqspi->Instance->DLR) + 1U);
1302 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1307 if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_BYTE)
1309 hqspi->TxXferCount = data_size;
1311 else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_HALFWORD)
1313 if (((data_size % 2U) != 0U) || ((hqspi->Init.FifoThreshold % 2U) != 0U))
1317 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1325 hqspi->TxXferCount = (data_size >> 1U);
1328 else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_WORD)
1330 if (((data_size % 4U) != 0U) || ((hqspi->Init.FifoThreshold % 4U) != 0U))
1334 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1342 hqspi->TxXferCount = (data_size >> 2U);
1356 __HAL_QSPI_CLEAR_FLAG(hqspi, (QSPI_FLAG_TE | QSPI_FLAG_TC));
1359 hqspi->TxXferSize = hqspi->TxXferCount;
1360 hqspi->pTxBuffPtr = pData;
1363 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE);
1375 hqspi->hdma->XferAbortCallback = NULL;
1378 hqspi->hdma->Init.Direction = DMA_MEMORY_TO_PERIPH;
1379 MODIFY_REG(hqspi->hdma->Instance->CCR, DMA_CCR_DIR, hqspi->hdma->Init.Direction);
1382 if (
HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)pData, (uint32_t)&hqspi->Instance->DR, hqspi->TxXferSize) ==
HAL_OK)
1388 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE);
1391 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1396 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
1406 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1437 HAL_StatusTypeDef status =
HAL_OK;
1438 uint32_t addr_reg = READ_REG(hqspi->Instance->AR);
1439 uint32_t data_size = (READ_REG(hqspi->Instance->DLR) + 1U);
1447 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1452 if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_BYTE)
1454 hqspi->RxXferCount = data_size;
1456 else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_HALFWORD)
1458 if (((data_size % 2U) != 0U) || ((hqspi->Init.FifoThreshold % 2U) != 0U))
1462 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1470 hqspi->RxXferCount = (data_size >> 1U);
1473 else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_WORD)
1475 if (((data_size % 4U) != 0U) || ((hqspi->Init.FifoThreshold % 4U) != 0U))
1479 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1487 hqspi->RxXferCount = (data_size >> 2U);
1501 __HAL_QSPI_CLEAR_FLAG(hqspi, (QSPI_FLAG_TE | QSPI_FLAG_TC));
1504 hqspi->RxXferSize = hqspi->RxXferCount;
1505 hqspi->pRxBuffPtr = pData;
1517 hqspi->hdma->XferAbortCallback = NULL;
1520 hqspi->hdma->Init.Direction = DMA_PERIPH_TO_MEMORY;
1521 MODIFY_REG(hqspi->hdma->Instance->CCR, DMA_CCR_DIR, hqspi->hdma->Init.Direction);
1524 if (
HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)&hqspi->Instance->DR, (uint32_t)pData, hqspi->RxXferSize) ==
HAL_OK)
1527 MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ);
1530 WRITE_REG(hqspi->Instance->AR, addr_reg);
1536 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE);
1539 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
1544 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
1554 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM;
1583 HAL_StatusTypeDef status;
1621 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1632 WRITE_REG(hqspi->Instance->PSMAR, cfg->
Match);
1635 WRITE_REG(hqspi->Instance->PSMKR, cfg->
Mask);
1638 WRITE_REG(hqspi->Instance->PIR, cfg->
Interval);
1642 MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS),
1643 (cfg->
MatchMode | QSPI_AUTOMATIC_STOP_ENABLE));
1647 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING);
1654 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_SM);
1683 HAL_StatusTypeDef status;
1722 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1733 WRITE_REG(hqspi->Instance->PSMAR, cfg->
Match);
1736 WRITE_REG(hqspi->Instance->PSMKR, cfg->
Mask);
1739 WRITE_REG(hqspi->Instance->PIR, cfg->
Interval);
1742 MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS),
1746 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_SM);
1750 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING);
1756 __HAL_QSPI_ENABLE_IT(hqspi, (QSPI_IT_SM | QSPI_IT_TE));
1787 HAL_StatusTypeDef status;
1823 hqspi->ErrorCode = HAL_QSPI_ERROR_NONE;
1844 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TO);
1847 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TO);
1851 QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED);
2015 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 2039 HAL_StatusTypeDef status =
HAL_OK;
2041 if(pCallback == NULL)
2044 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2056 hqspi->ErrorCallback = pCallback;
2059 hqspi->AbortCpltCallback = pCallback;
2062 hqspi->FifoThresholdCallback = pCallback;
2065 hqspi->CmdCpltCallback = pCallback;
2068 hqspi->RxCpltCallback = pCallback;
2071 hqspi->TxCpltCallback = pCallback;
2074 hqspi->RxHalfCpltCallback = pCallback;
2077 hqspi->TxHalfCpltCallback = pCallback;
2080 hqspi->StatusMatchCallback = pCallback;
2083 hqspi->TimeOutCallback = pCallback;
2086 hqspi->MspInitCallback = pCallback;
2089 hqspi->MspDeInitCallback = pCallback;
2093 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2104 hqspi->MspInitCallback = pCallback;
2107 hqspi->MspDeInitCallback = pCallback;
2111 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2120 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2152 HAL_StatusTypeDef status =
HAL_OK;
2199 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2217 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2226 hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK;
2267 return hqspi->State;
2277 return hqspi->ErrorCode;
2287 HAL_StatusTypeDef status =
HAL_OK;
2291 if (((uint32_t)hqspi->State & 0x2U) != 0U)
2296 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
2299 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2305 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
2310 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2317 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2326 CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE);
2343 HAL_StatusTypeDef status =
HAL_OK;
2346 if (((uint32_t)hqspi->State & 0x2U) != 0U)
2355 __HAL_QSPI_DISABLE_IT(hqspi, (QSPI_IT_TO | QSPI_IT_SM | QSPI_IT_FT | QSPI_IT_TC | QSPI_IT_TE));
2357 if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U)
2360 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2370 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 2371 hqspi->AbortCpltCallback(hqspi);
2380 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2383 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2386 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2399 hqspi->Timeout = Timeout;
2409 HAL_StatusTypeDef status =
HAL_OK;
2417 hqspi->Init.FifoThreshold = Threshold;
2420 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES,
2421 ((hqspi->Init.FifoThreshold - 1U) << QUADSPI_CR_FTHRES_Pos));
2441 return ((READ_BIT(hqspi->Instance->CR, QUADSPI_CR_FTHRES) >> QUADSPI_CR_FTHRES_Pos) + 1U);
2444 #if defined(QUADSPI_CR_DFM) 2454 HAL_StatusTypeDef status =
HAL_OK;
2465 hqspi->Init.FlashID = FlashID;
2468 MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FSEL, FlashID);
2503 hqspi->RxXferCount = 0U;
2506 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2517 hqspi->TxXferCount = 0U;
2520 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2532 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 2533 hqspi->RxHalfCpltCallback(hqspi);
2548 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 2549 hqspi->TxHalfCpltCallback(hqspi);
2564 hqspi->RxXferCount = 0U;
2565 hqspi->TxXferCount = 0U;
2566 hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
2569 CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2585 hqspi->RxXferCount = 0U;
2586 hqspi->TxXferCount = 0U;
2592 __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2595 __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2598 SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2607 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) 2608 hqspi->ErrorCallback(hqspi);
2625 FlagStatus
State, uint32_t Tickstart, uint32_t Timeout)
2628 while((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State)
2631 if (Timeout != HAL_MAX_DELAY)
2633 if(((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
2636 hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT;
2661 if ((cmd->
DataMode != QSPI_DATA_NONE) && (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED))
2664 WRITE_REG(hqspi->Instance->DLR, (cmd->
NbData - 1U));
2684 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2687 WRITE_REG(hqspi->Instance->AR, cmd->
Address);
2712 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2715 WRITE_REG(hqspi->Instance->AR, cmd->
Address);
2746 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2749 WRITE_REG(hqspi->Instance->AR, cmd->
Address);
2773 if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2776 WRITE_REG(hqspi->Instance->AR, cmd->
Address);
2782 if (cmd->
DataMode != QSPI_DATA_NONE)
static void QSPI_DMAError(DMA_HandleTypeDef *hdma)
DMA QSPI communication error callback.
void HAL_QSPI_TimeOutCallback(QSPI_HandleTypeDef *hqspi)
Timeout callback.
uint32_t TimeOutActivation
DMA handle Structure definition.
HAL_StatusTypeDef HAL_QSPI_MemoryMapped(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_MemoryMappedTypeDef *cfg)
Configure the Memory Mapped mode.
HAL_StatusTypeDef HAL_QSPI_RegisterCallback(QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId, pQSPI_CallbackTypeDef pCallback)
Register a User QSPI Callback To be used instead of the weak (surcharged) predefined callback...
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef HAL_QSPI_Receive_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
Receive an amount of data in non-blocking mode with interrupt.
void(* pQSPI_CallbackTypeDef)(QSPI_HandleTypeDef *hqspi)
HAL QSPI Callback pointer definition.
HAL_StatusTypeDef HAL_QSPI_Init(QSPI_HandleTypeDef *hqspi)
Initialize the QSPI mode according to the specified parameters in the QSPI_InitTypeDef and initialize...
HAL_StatusTypeDef HAL_QSPI_SetFlashID(QSPI_HandleTypeDef *hqspi, uint32_t FlashID)
Set FlashID.
static void QSPI_DMATxHalfCplt(DMA_HandleTypeDef *hdma)
DMA QSPI transmit process half complete callback.
static void QSPI_DMARxHalfCplt(DMA_HandleTypeDef *hdma)
DMA QSPI receive process half complete callback.
struct __QSPI_HandleTypeDef else typedef struct endif QSPI_HandleTypeDef
QSPI Handle Structure definition.
HAL_StatusTypeDef HAL_QSPI_Abort_IT(QSPI_HandleTypeDef *hqspi)
Abort the current transmission (non-blocking function)
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
QSPI Memory Mapped mode configuration structure definition.
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
uint32_t AlternateByteMode
HAL_StatusTypeDef HAL_QSPI_Command_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd)
Set the command configuration in interrupt mode.
HAL_QSPI_StateTypeDef
HAL QSPI State structures definition.
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.
void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi)
DeInitialize the QSPI MSP.
HAL_StatusTypeDef HAL_QSPI_Receive_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
Receive an amount of data in non-blocking mode with DMA.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
QSPI Auto Polling mode configuration structure definition.
HAL_QSPI_StateTypeDef HAL_QSPI_GetState(QSPI_HandleTypeDef *hqspi)
Return the QSPI handle state.
HAL_StatusTypeDef HAL_QSPI_Command(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t Timeout)
Set the command configuration.
static void QSPI_DMARxCplt(DMA_HandleTypeDef *hdma)
DMA QSPI receive process complete callback.
void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi)
Handle QSPI interrupt request.
uint32_t HAL_QSPI_GetFifoThreshold(QSPI_HandleTypeDef *hqspi)
Get QSPI Fifo threshold.
HAL_StatusTypeDef HAL_QSPI_UnRegisterCallback(QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId)
Unregister a User QSPI Callback QSPI Callback is redirected to the weak (surcharged) predefined callb...
HAL_StatusTypeDef HAL_QSPI_DeInit(QSPI_HandleTypeDef *hqspi)
De-Initialize the QSPI peripheral.
static void QSPI_DMATxCplt(DMA_HandleTypeDef *hdma)
DMA QSPI transmit process complete callback.
static void QSPI_DMAAbortCplt(DMA_HandleTypeDef *hdma)
DMA QSPI abort complete callback.
void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi)
Initialize the QSPI MSP.
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Abort the DMA Transfer.
QSPI Command structure definition.
static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t FunctionalMode)
Configure the communication registers.
HAL_StatusTypeDef HAL_QSPI_Transmit_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
Send an amount of data in non-blocking mode with interrupt.
HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t Threshold)
Set QSPI Fifo threshold.
void HAL_QSPI_RxCpltCallback(QSPI_HandleTypeDef *hqspi)
Rx Transfer completed callback.
uint32_t DdrHoldHalfCycle
uint32_t HAL_QSPI_GetError(QSPI_HandleTypeDef *hqspi)
Return the QSPI error code.
void HAL_QSPI_AbortCpltCallback(QSPI_HandleTypeDef *hqspi)
Abort completed callback.
void HAL_QSPI_ErrorCallback(QSPI_HandleTypeDef *hqspi)
Transfer Error callback.
void HAL_QSPI_SetTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Timeout)
Set QSPI timeout.
void HAL_QSPI_FifoThresholdCallback(QSPI_HandleTypeDef *hqspi)
FIFO Threshold callback.
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_TxCpltCallback(QSPI_HandleTypeDef *hqspi)
Tx 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.
HAL_StatusTypeDef HAL_QSPI_Transmit(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout)
Transmit an amount of data in blocking mode.
void HAL_QSPI_RxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
Rx Half Transfer completed callback.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
uint32_t AlternateBytesSize
void HAL_QSPI_CmdCpltCallback(QSPI_HandleTypeDef *hqspi)
Command completed callback.
static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Flag, FlagStatus State, uint32_t Tickstart, uint32_t Timeout)
Wait for a flag state until timeout.
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_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout)
Receive an amount of data in blocking mode.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
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_QSPI_CallbackIDTypeDef
HAL QSPI Callback ID enumeration definition.
HAL_StatusTypeDef HAL_QSPI_Abort(QSPI_HandleTypeDef *hqspi)
Abort the current transmission.