STM32L4xx_HAL_Driver  1.14.0
QSPI Private Functions

Functions

static void QSPI_DMARxCplt (DMA_HandleTypeDef *hdma)
 DMA QSPI receive process complete callback. More...
 
static void QSPI_DMATxCplt (DMA_HandleTypeDef *hdma)
 DMA QSPI transmit process complete callback. More...
 
static void QSPI_DMARxHalfCplt (DMA_HandleTypeDef *hdma)
 DMA QSPI receive process half complete callback. More...
 
static void QSPI_DMATxHalfCplt (DMA_HandleTypeDef *hdma)
 DMA QSPI transmit process half complete callback. More...
 
static void QSPI_DMAError (DMA_HandleTypeDef *hdma)
 DMA QSPI communication error callback. More...
 
static void QSPI_DMAAbortCplt (DMA_HandleTypeDef *hdma)
 DMA QSPI abort complete callback. More...
 
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. More...
 
static void QSPI_Config (QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t FunctionalMode)
 Configure the communication registers. More...
 

Detailed Description

Function Documentation

◆ QSPI_Config()

static void QSPI_Config ( QSPI_HandleTypeDef hqspi,
QSPI_CommandTypeDef cmd,
uint32_t  FunctionalMode 
)
static

Configure the communication registers.

Parameters
hqspi: QSPI handle
cmd: structure that contains the command configuration information
FunctionalMode: functional mode to configured This parameter can be one of the following values:
  • QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE: Indirect write mode
  • QSPI_FUNCTIONAL_MODE_INDIRECT_READ: Indirect read mode
  • QSPI_FUNCTIONAL_MODE_AUTO_POLLING: Automatic polling mode
  • QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED: Memory-mapped mode
Return values
None

Definition at line 2657 of file stm32l4xx_hal_qspi.c.

2658 {
2659  assert_param(IS_QSPI_FUNCTIONAL_MODE(FunctionalMode));
2660 
2661  if ((cmd->DataMode != QSPI_DATA_NONE) && (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED))
2662  {
2663  /* Configure QSPI: DLR register with the number of data to read or write */
2664  WRITE_REG(hqspi->Instance->DLR, (cmd->NbData - 1U));
2665  }
2666 
2667  if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE)
2668  {
2669  if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
2670  {
2671  /* Configure QSPI: ABR register with alternate bytes value */
2672  WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes);
2673 
2674  if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2675  {
2676  /*---- Command with instruction, address and alternate bytes ----*/
2677  /* Configure QSPI: CCR register with all communications parameters */
2678  WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2679  cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2681  cmd->AddressSize | cmd->AddressMode | cmd->InstructionMode |
2682  cmd->Instruction | FunctionalMode));
2683 
2684  if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2685  {
2686  /* Configure QSPI: AR register with address value */
2687  WRITE_REG(hqspi->Instance->AR, cmd->Address);
2688  }
2689  }
2690  else
2691  {
2692  /*---- Command with instruction and alternate bytes ----*/
2693  /* Configure QSPI: CCR register with all communications parameters */
2694  WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2695  cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2697  cmd->AddressMode | cmd->InstructionMode |
2698  cmd->Instruction | FunctionalMode));
2699  }
2700  }
2701  else
2702  {
2703  if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2704  {
2705  /*---- Command with instruction and address ----*/
2706  /* Configure QSPI: CCR register with all communications parameters */
2707  WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2708  cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2709  cmd->AlternateByteMode | cmd->AddressSize | cmd->AddressMode |
2710  cmd->InstructionMode | cmd->Instruction | FunctionalMode));
2711 
2712  if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2713  {
2714  /* Configure QSPI: AR register with address value */
2715  WRITE_REG(hqspi->Instance->AR, cmd->Address);
2716  }
2717  }
2718  else
2719  {
2720  /*---- Command with only instruction ----*/
2721  /* Configure QSPI: CCR register with all communications parameters */
2722  WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2723  cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2724  cmd->AlternateByteMode | cmd->AddressMode |
2725  cmd->InstructionMode | cmd->Instruction | FunctionalMode));
2726  }
2727  }
2728  }
2729  else
2730  {
2731  if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE)
2732  {
2733  /* Configure QSPI: ABR register with alternate bytes value */
2734  WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes);
2735 
2736  if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2737  {
2738  /*---- Command with address and alternate bytes ----*/
2739  /* Configure QSPI: CCR register with all communications parameters */
2740  WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2741  cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2743  cmd->AddressSize | cmd->AddressMode |
2744  cmd->InstructionMode | FunctionalMode));
2745 
2746  if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2747  {
2748  /* Configure QSPI: AR register with address value */
2749  WRITE_REG(hqspi->Instance->AR, cmd->Address);
2750  }
2751  }
2752  else
2753  {
2754  /*---- Command with only alternate bytes ----*/
2755  /* Configure QSPI: CCR register with all communications parameters */
2756  WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2757  cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2759  cmd->AddressMode | cmd->InstructionMode | FunctionalMode));
2760  }
2761  }
2762  else
2763  {
2764  if (cmd->AddressMode != QSPI_ADDRESS_NONE)
2765  {
2766  /*---- Command with only address ----*/
2767  /* Configure QSPI: CCR register with all communications parameters */
2768  WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2769  cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2770  cmd->AlternateByteMode | cmd->AddressSize |
2771  cmd->AddressMode | cmd->InstructionMode | FunctionalMode));
2772 
2773  if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)
2774  {
2775  /* Configure QSPI: AR register with address value */
2776  WRITE_REG(hqspi->Instance->AR, cmd->Address);
2777  }
2778  }
2779  else
2780  {
2781  /*---- Command with only data phase ----*/
2782  if (cmd->DataMode != QSPI_DATA_NONE)
2783  {
2784  /* Configure QSPI: CCR register with all communications parameters */
2785  WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode |
2786  cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) |
2787  cmd->AlternateByteMode | cmd->AddressMode |
2788  cmd->InstructionMode | FunctionalMode));
2789  }
2790  }
2791  }
2792  }
2793 }
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))

◆ QSPI_DMAAbortCplt()

static void QSPI_DMAAbortCplt ( DMA_HandleTypeDef hdma)
static

DMA QSPI abort complete callback.

Parameters
hdma: DMA handle
Return values
None

Definition at line 2581 of file stm32l4xx_hal_qspi.c.

2582 {
2583  QSPI_HandleTypeDef* hqspi = ( QSPI_HandleTypeDef* )(hdma->Parent);
2584 
2585  hqspi->RxXferCount = 0U;
2586  hqspi->TxXferCount = 0U;
2587 
2588  if(hqspi->State == HAL_QSPI_STATE_ABORT)
2589  {
2590  /* DMA Abort called by QSPI abort */
2591  /* Clear interrupt */
2592  __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC);
2593 
2594  /* Enable the QSPI Transfer Complete Interrupt */
2595  __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2596 
2597  /* Configure QSPI: CR register with Abort request */
2598  SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT);
2599  }
2600  else
2601  {
2602  /* DMA Abort called due to a transfer error interrupt */
2603  /* Change state of QSPI */
2604  hqspi->State = HAL_QSPI_STATE_READY;
2605 
2606  /* Error callback */
2607 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2608  hqspi->ErrorCallback(hqspi);
2609 #else
2610  HAL_QSPI_ErrorCallback(hqspi);
2611 #endif
2612  }
2613 }
struct __QSPI_HandleTypeDef else typedef struct endif QSPI_HandleTypeDef
QSPI Handle Structure definition.
void HAL_QSPI_ErrorCallback(QSPI_HandleTypeDef *hqspi)
Transfer Error callback.

◆ QSPI_DMAError()

static void QSPI_DMAError ( DMA_HandleTypeDef hdma)
static

DMA QSPI communication error callback.

Parameters
hdma: DMA handle
Return values
None

Definition at line 2560 of file stm32l4xx_hal_qspi.c.

2561 {
2562  QSPI_HandleTypeDef* hqspi = ( QSPI_HandleTypeDef* )(hdma->Parent);
2563 
2564  hqspi->RxXferCount = 0U;
2565  hqspi->TxXferCount = 0U;
2566  hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA;
2567 
2568  /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */
2569  CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN);
2570 
2571  /* Abort the QSPI */
2572  (void)HAL_QSPI_Abort_IT(hqspi);
2573 
2574 }
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)
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)

◆ QSPI_DMARxCplt()

static void QSPI_DMARxCplt ( DMA_HandleTypeDef hdma)
static

DMA QSPI receive process complete callback.

Parameters
hdma: DMA handle
Return values
None

Definition at line 2500 of file stm32l4xx_hal_qspi.c.

2501 {
2502  QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->Parent);
2503  hqspi->RxXferCount = 0U;
2504 
2505  /* Enable the QSPI transfer complete Interrupt */
2506  __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2507 }
struct __QSPI_HandleTypeDef else typedef struct endif QSPI_HandleTypeDef
QSPI Handle Structure definition.

◆ QSPI_DMARxHalfCplt()

static void QSPI_DMARxHalfCplt ( DMA_HandleTypeDef hdma)
static

DMA QSPI receive process half complete callback.

Parameters
hdma: DMA handle
Return values
None

Definition at line 2528 of file stm32l4xx_hal_qspi.c.

2529 {
2530  QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->Parent);
2531 
2532 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2533  hqspi->RxHalfCpltCallback(hqspi);
2534 #else
2536 #endif
2537 }
struct __QSPI_HandleTypeDef else typedef struct endif QSPI_HandleTypeDef
QSPI Handle Structure definition.
void HAL_QSPI_RxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
Rx Half Transfer completed callback.

◆ QSPI_DMATxCplt()

static void QSPI_DMATxCplt ( DMA_HandleTypeDef hdma)
static

DMA QSPI transmit process complete callback.

Parameters
hdma: DMA handle
Return values
None

Definition at line 2514 of file stm32l4xx_hal_qspi.c.

2515 {
2516  QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->Parent);
2517  hqspi->TxXferCount = 0U;
2518 
2519  /* Enable the QSPI transfer complete Interrupt */
2520  __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
2521 }
struct __QSPI_HandleTypeDef else typedef struct endif QSPI_HandleTypeDef
QSPI Handle Structure definition.

◆ QSPI_DMATxHalfCplt()

static void QSPI_DMATxHalfCplt ( DMA_HandleTypeDef hdma)
static

DMA QSPI transmit process half complete callback.

Parameters
hdma: DMA handle
Return values
None

Definition at line 2544 of file stm32l4xx_hal_qspi.c.

2545 {
2546  QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->Parent);
2547 
2548 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
2549  hqspi->TxHalfCpltCallback(hqspi);
2550 #else
2552 #endif
2553 }
struct __QSPI_HandleTypeDef else typedef struct endif QSPI_HandleTypeDef
QSPI Handle Structure definition.
void HAL_QSPI_TxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
Tx Half Transfer completed callback.

◆ QSPI_WaitFlagStateUntilTimeout()

static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout ( QSPI_HandleTypeDef hqspi,
uint32_t  Flag,
FlagStatus  State,
uint32_t  Tickstart,
uint32_t  Timeout 
)
static

Wait for a flag state until timeout.

Parameters
hqspi: QSPI handle
Flag: Flag checked
State: Value of the flag expected
Tickstart: Tick start value
Timeout: Duration of the timeout
Return values
HALstatus

Definition at line 2624 of file stm32l4xx_hal_qspi.c.

2626 {
2627  /* Wait until flag is in expected state */
2628  while((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State)
2629  {
2630  /* Check for the Timeout */
2631  if (Timeout != HAL_MAX_DELAY)
2632  {
2633  if(((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
2634  {
2635  hqspi->State = HAL_QSPI_STATE_ERROR;
2636  hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT;
2637 
2638  return HAL_ERROR;
2639  }
2640  }
2641  }
2642  return HAL_OK;
2643 }
hrtc State
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
return HAL_OK