STM32L4xx_HAL_Driver  1.14.0
stm32l4xx_hal_qspi.h
Go to the documentation of this file.
1 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32L4xx_HAL_QSPI_H
22 #define STM32L4xx_HAL_QSPI_H
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32l4xx_hal_def.h"
30 
31 #if defined(QUADSPI)
32 
41 /* Exported types ------------------------------------------------------------*/
49 typedef struct
50 {
51  uint32_t ClockPrescaler; /* Specifies the prescaler factor for generating clock based on the AHB clock.
52  This parameter can be a number between 0 and 255 */
53  uint32_t FifoThreshold; /* Specifies the threshold number of bytes in the FIFO (used only in indirect mode)
54  This parameter can be a value between 1 and 16 */
55  uint32_t SampleShifting; /* Specifies the Sample Shift. The data is sampled 1/2 clock cycle delay later to
56  take in account external signal delays. (It should be QSPI_SAMPLE_SHIFTING_NONE in DDR mode)
57  This parameter can be a value of @ref QSPI_SampleShifting */
58  uint32_t FlashSize; /* Specifies the Flash Size. FlashSize+1 is effectively the number of address bits
59  required to address the flash memory. The flash capacity can be up to 4GB
60  (addressed using 32 bits) in indirect mode, but the addressable space in
61  memory-mapped mode is limited to 256MB
62  This parameter can be a number between 0 and 31 */
63  uint32_t ChipSelectHighTime; /* Specifies the Chip Select High Time. ChipSelectHighTime+1 defines the minimum number
64  of clock cycles which the chip select must remain high between commands.
65  This parameter can be a value of @ref QSPI_ChipSelectHighTime */
66  uint32_t ClockMode; /* Specifies the Clock Mode. It indicates the level that clock takes between commands.
67  This parameter can be a value of @ref QSPI_ClockMode */
68 #if defined(QUADSPI_CR_DFM)
69  uint32_t FlashID; /* Specifies the Flash which will be used,
70  This parameter can be a value of @ref QSPI_Flash_Select */
71  uint32_t DualFlash; /* Specifies the Dual Flash Mode State
72  This parameter can be a value of @ref QSPI_DualFlash_Mode */
73 #endif
74 }QSPI_InitTypeDef;
75 
79 typedef enum
80 {
91 
95 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
96 typedef struct __QSPI_HandleTypeDef
97 #else
98 typedef struct
99 #endif
100 {
101  QUADSPI_TypeDef *Instance; /* QSPI registers base address */
102  QSPI_InitTypeDef Init; /* QSPI communication parameters */
103  uint8_t *pTxBuffPtr; /* Pointer to QSPI Tx transfer Buffer */
104  __IO uint32_t TxXferSize; /* QSPI Tx Transfer size */
105  __IO uint32_t TxXferCount; /* QSPI Tx Transfer Counter */
106  uint8_t *pRxBuffPtr; /* Pointer to QSPI Rx transfer Buffer */
107  __IO uint32_t RxXferSize; /* QSPI Rx Transfer size */
108  __IO uint32_t RxXferCount; /* QSPI Rx Transfer Counter */
109  DMA_HandleTypeDef *hdma; /* QSPI Rx/Tx DMA Handle parameters */
110  __IO HAL_LockTypeDef Lock; /* Locking object */
111  __IO HAL_QSPI_StateTypeDef State; /* QSPI communication state */
112  __IO uint32_t ErrorCode; /* QSPI Error code */
113  uint32_t Timeout; /* Timeout for the QSPI memory access */
114 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
115  void (* ErrorCallback) (struct __QSPI_HandleTypeDef *hqspi);
116  void (* AbortCpltCallback) (struct __QSPI_HandleTypeDef *hqspi);
117  void (* FifoThresholdCallback)(struct __QSPI_HandleTypeDef *hqspi);
118  void (* CmdCpltCallback) (struct __QSPI_HandleTypeDef *hqspi);
119  void (* RxCpltCallback) (struct __QSPI_HandleTypeDef *hqspi);
120  void (* TxCpltCallback) (struct __QSPI_HandleTypeDef *hqspi);
121  void (* RxHalfCpltCallback) (struct __QSPI_HandleTypeDef *hqspi);
122  void (* TxHalfCpltCallback) (struct __QSPI_HandleTypeDef *hqspi);
123  void (* StatusMatchCallback) (struct __QSPI_HandleTypeDef *hqspi);
124  void (* TimeOutCallback) (struct __QSPI_HandleTypeDef *hqspi);
125 
126  void (* MspInitCallback) (struct __QSPI_HandleTypeDef *hqspi);
127  void (* MspDeInitCallback) (struct __QSPI_HandleTypeDef *hqspi);
128 #endif
130 
134 typedef struct
135 {
136  uint32_t Instruction; /* Specifies the Instruction to be sent
137  This parameter can be a value (8-bit) between 0x00 and 0xFF */
138  uint32_t Address; /* Specifies the Address to be sent (Size from 1 to 4 bytes according AddressSize)
139  This parameter can be a value (32-bits) between 0x0 and 0xFFFFFFFF */
140  uint32_t AlternateBytes; /* Specifies the Alternate Bytes to be sent (Size from 1 to 4 bytes according AlternateBytesSize)
141  This parameter can be a value (32-bits) between 0x0 and 0xFFFFFFFF */
142  uint32_t AddressSize; /* Specifies the Address Size
143  This parameter can be a value of @ref QSPI_AddressSize */
144  uint32_t AlternateBytesSize; /* Specifies the Alternate Bytes Size
145  This parameter can be a value of @ref QSPI_AlternateBytesSize */
146  uint32_t DummyCycles; /* Specifies the Number of Dummy Cycles.
147  This parameter can be a number between 0 and 31 */
148  uint32_t InstructionMode; /* Specifies the Instruction Mode
149  This parameter can be a value of @ref QSPI_InstructionMode */
150  uint32_t AddressMode; /* Specifies the Address Mode
151  This parameter can be a value of @ref QSPI_AddressMode */
152  uint32_t AlternateByteMode; /* Specifies the Alternate Bytes Mode
153  This parameter can be a value of @ref QSPI_AlternateBytesMode */
154  uint32_t DataMode; /* Specifies the Data Mode (used for dummy cycles and data phases)
155  This parameter can be a value of @ref QSPI_DataMode */
156  uint32_t NbData; /* Specifies the number of data to transfer. (This is the number of bytes)
157  This parameter can be any value between 0 and 0xFFFFFFFF (0 means undefined length
158  until end of memory)*/
159  uint32_t DdrMode; /* Specifies the double data rate mode for address, alternate byte and data phase
160  This parameter can be a value of @ref QSPI_DdrMode */
161  uint32_t DdrHoldHalfCycle; /* Specifies if the DDR hold is enabled. When enabled it delays the data
162  output by one half of system clock in DDR mode.
163  Not available on all devices.
164  This parameter can be a value of @ref QSPI_DdrHoldHalfCycle */
165  uint32_t SIOOMode; /* Specifies the send instruction only once mode
166  This parameter can be a value of @ref QSPI_SIOOMode */
168 
172 typedef struct
173 {
174  uint32_t Match; /* Specifies the value to be compared with the masked status register to get a match.
175  This parameter can be any value between 0 and 0xFFFFFFFF */
176  uint32_t Mask; /* Specifies the mask to be applied to the status bytes received.
177  This parameter can be any value between 0 and 0xFFFFFFFF */
178  uint32_t Interval; /* Specifies the number of clock cycles between two read during automatic polling phases.
179  This parameter can be any value between 0 and 0xFFFF */
180  uint32_t StatusBytesSize; /* Specifies the size of the status bytes received.
181  This parameter can be any value between 1 and 4 */
182  uint32_t MatchMode; /* Specifies the method used for determining a match.
183  This parameter can be a value of @ref QSPI_MatchMode */
184  uint32_t AutomaticStop; /* Specifies if automatic polling is stopped after a match.
185  This parameter can be a value of @ref QSPI_AutomaticStop */
187 
191 typedef struct
192 {
193  uint32_t TimeOutPeriod; /* Specifies the number of clock to wait when the FIFO is full before to release the chip select.
194  This parameter can be any value between 0 and 0xFFFF */
195  uint32_t TimeOutActivation; /* Specifies if the timeout counter is enabled to release the chip select.
196  This parameter can be a value of @ref QSPI_TimeOutActivation */
198 
199 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
200 
203 typedef enum
204 {
219 
224 #endif
225 
229 /* Exported constants --------------------------------------------------------*/
237 #define HAL_QSPI_ERROR_NONE 0x00000000U
238 #define HAL_QSPI_ERROR_TIMEOUT 0x00000001U
239 #define HAL_QSPI_ERROR_TRANSFER 0x00000002U
240 #define HAL_QSPI_ERROR_DMA 0x00000004U
241 #define HAL_QSPI_ERROR_INVALID_PARAM 0x00000008U
242 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
243 #define HAL_QSPI_ERROR_INVALID_CALLBACK 0x00000010U
244 #endif
245 
252 #define QSPI_SAMPLE_SHIFTING_NONE 0x00000000U
253 #define QSPI_SAMPLE_SHIFTING_HALFCYCLE ((uint32_t)QUADSPI_CR_SSHIFT)
261 #define QSPI_CS_HIGH_TIME_1_CYCLE 0x00000000U
262 #define QSPI_CS_HIGH_TIME_2_CYCLE ((uint32_t)QUADSPI_DCR_CSHT_0)
263 #define QSPI_CS_HIGH_TIME_3_CYCLE ((uint32_t)QUADSPI_DCR_CSHT_1)
264 #define QSPI_CS_HIGH_TIME_4_CYCLE ((uint32_t)QUADSPI_DCR_CSHT_0 | QUADSPI_DCR_CSHT_1)
265 #define QSPI_CS_HIGH_TIME_5_CYCLE ((uint32_t)QUADSPI_DCR_CSHT_2)
266 #define QSPI_CS_HIGH_TIME_6_CYCLE ((uint32_t)QUADSPI_DCR_CSHT_2 | QUADSPI_DCR_CSHT_0)
267 #define QSPI_CS_HIGH_TIME_7_CYCLE ((uint32_t)QUADSPI_DCR_CSHT_2 | QUADSPI_DCR_CSHT_1)
268 #define QSPI_CS_HIGH_TIME_8_CYCLE ((uint32_t)QUADSPI_DCR_CSHT)
276 #define QSPI_CLOCK_MODE_0 0x00000000U
277 #define QSPI_CLOCK_MODE_3 ((uint32_t)QUADSPI_DCR_CKMODE)
282 #if defined(QUADSPI_CR_DFM)
283 
286 #define QSPI_FLASH_ID_1 0x00000000U
287 #define QSPI_FLASH_ID_2 ((uint32_t)QUADSPI_CR_FSEL)
295 #define QSPI_DUALFLASH_ENABLE ((uint32_t)QUADSPI_CR_DFM)
296 #define QSPI_DUALFLASH_DISABLE 0x00000000U
301 #endif
302 
305 #define QSPI_ADDRESS_8_BITS 0x00000000U
306 #define QSPI_ADDRESS_16_BITS ((uint32_t)QUADSPI_CCR_ADSIZE_0)
307 #define QSPI_ADDRESS_24_BITS ((uint32_t)QUADSPI_CCR_ADSIZE_1)
308 #define QSPI_ADDRESS_32_BITS ((uint32_t)QUADSPI_CCR_ADSIZE)
316 #define QSPI_ALTERNATE_BYTES_8_BITS 0x00000000U
317 #define QSPI_ALTERNATE_BYTES_16_BITS ((uint32_t)QUADSPI_CCR_ABSIZE_0)
318 #define QSPI_ALTERNATE_BYTES_24_BITS ((uint32_t)QUADSPI_CCR_ABSIZE_1)
319 #define QSPI_ALTERNATE_BYTES_32_BITS ((uint32_t)QUADSPI_CCR_ABSIZE)
327 #define QSPI_INSTRUCTION_NONE 0x00000000U
328 #define QSPI_INSTRUCTION_1_LINE ((uint32_t)QUADSPI_CCR_IMODE_0)
329 #define QSPI_INSTRUCTION_2_LINES ((uint32_t)QUADSPI_CCR_IMODE_1)
330 #define QSPI_INSTRUCTION_4_LINES ((uint32_t)QUADSPI_CCR_IMODE)
338 #define QSPI_ADDRESS_NONE 0x00000000U
339 #define QSPI_ADDRESS_1_LINE ((uint32_t)QUADSPI_CCR_ADMODE_0)
340 #define QSPI_ADDRESS_2_LINES ((uint32_t)QUADSPI_CCR_ADMODE_1)
341 #define QSPI_ADDRESS_4_LINES ((uint32_t)QUADSPI_CCR_ADMODE)
349 #define QSPI_ALTERNATE_BYTES_NONE 0x00000000U
350 #define QSPI_ALTERNATE_BYTES_1_LINE ((uint32_t)QUADSPI_CCR_ABMODE_0)
351 #define QSPI_ALTERNATE_BYTES_2_LINES ((uint32_t)QUADSPI_CCR_ABMODE_1)
352 #define QSPI_ALTERNATE_BYTES_4_LINES ((uint32_t)QUADSPI_CCR_ABMODE)
360 #define QSPI_DATA_NONE 0x00000000U
361 #define QSPI_DATA_1_LINE ((uint32_t)QUADSPI_CCR_DMODE_0)
362 #define QSPI_DATA_2_LINES ((uint32_t)QUADSPI_CCR_DMODE_1)
363 #define QSPI_DATA_4_LINES ((uint32_t)QUADSPI_CCR_DMODE)
371 #define QSPI_DDR_MODE_DISABLE 0x00000000U
372 #define QSPI_DDR_MODE_ENABLE ((uint32_t)QUADSPI_CCR_DDRM)
380 #define QSPI_DDR_HHC_ANALOG_DELAY 0x00000000U
381 #if defined(QUADSPI_CCR_DHHC)
382 #define QSPI_DDR_HHC_HALF_CLK_DELAY ((uint32_t)QUADSPI_CCR_DHHC)
383 #endif
384 
391 #define QSPI_SIOO_INST_EVERY_CMD 0x00000000U
392 #define QSPI_SIOO_INST_ONLY_FIRST_CMD ((uint32_t)QUADSPI_CCR_SIOO)
400 #define QSPI_MATCH_MODE_AND 0x00000000U
401 #define QSPI_MATCH_MODE_OR ((uint32_t)QUADSPI_CR_PMM)
409 #define QSPI_AUTOMATIC_STOP_DISABLE 0x00000000U
410 #define QSPI_AUTOMATIC_STOP_ENABLE ((uint32_t)QUADSPI_CR_APMS)
418 #define QSPI_TIMEOUT_COUNTER_DISABLE 0x00000000U
419 #define QSPI_TIMEOUT_COUNTER_ENABLE ((uint32_t)QUADSPI_CR_TCEN)
427 #define QSPI_FLAG_BUSY QUADSPI_SR_BUSY
428 #define QSPI_FLAG_TO QUADSPI_SR_TOF
429 #define QSPI_FLAG_SM QUADSPI_SR_SMF
430 #define QSPI_FLAG_FT QUADSPI_SR_FTF
431 #define QSPI_FLAG_TC QUADSPI_SR_TCF
432 #define QSPI_FLAG_TE QUADSPI_SR_TEF
440 #define QSPI_IT_TO QUADSPI_CR_TOIE
441 #define QSPI_IT_SM QUADSPI_CR_SMIE
442 #define QSPI_IT_FT QUADSPI_CR_FTIE
443 #define QSPI_IT_TC QUADSPI_CR_TCIE
444 #define QSPI_IT_TE QUADSPI_CR_TEIE
453 #define HAL_QSPI_TIMEOUT_DEFAULT_VALUE 5000U /* 5 s */
454 
462 /* Exported macros -----------------------------------------------------------*/
470 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
471 #define __HAL_QSPI_RESET_HANDLE_STATE(__HANDLE__) do { \
472  (__HANDLE__)->State = HAL_QSPI_STATE_RESET; \
473  (__HANDLE__)->MspInitCallback = NULL; \
474  (__HANDLE__)->MspDeInitCallback = NULL; \
475  } while(0)
476 #else
477 #define __HAL_QSPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_QSPI_STATE_RESET)
478 #endif
479 
484 #define __HAL_QSPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR, QUADSPI_CR_EN)
485 
490 #define __HAL_QSPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR, QUADSPI_CR_EN)
491 
503 #define __HAL_QSPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__))
504 
505 
517 #define __HAL_QSPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__))
518 
530 #define __HAL_QSPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (READ_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__)) == (__INTERRUPT__))
531 
545 #define __HAL_QSPI_GET_FLAG(__HANDLE__, __FLAG__) ((READ_BIT((__HANDLE__)->Instance->SR, (__FLAG__)) != 0U) ? SET : RESET)
546 
557 #define __HAL_QSPI_CLEAR_FLAG(__HANDLE__, __FLAG__) WRITE_REG((__HANDLE__)->Instance->FCR, (__FLAG__))
558 
562 /* Exported functions --------------------------------------------------------*/
570 /* Initialization/de-initialization functions ********************************/
571 HAL_StatusTypeDef HAL_QSPI_Init (QSPI_HandleTypeDef *hqspi);
572 HAL_StatusTypeDef HAL_QSPI_DeInit (QSPI_HandleTypeDef *hqspi);
582 /* IO operation functions *****************************************************/
583 /* QSPI IRQ handler method */
585 
586 /* QSPI indirect mode */
587 HAL_StatusTypeDef HAL_QSPI_Command (QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t Timeout);
588 HAL_StatusTypeDef HAL_QSPI_Transmit (QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout);
589 HAL_StatusTypeDef HAL_QSPI_Receive (QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout);
590 HAL_StatusTypeDef HAL_QSPI_Command_IT (QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd);
591 HAL_StatusTypeDef HAL_QSPI_Transmit_IT (QSPI_HandleTypeDef *hqspi, uint8_t *pData);
592 HAL_StatusTypeDef HAL_QSPI_Receive_IT (QSPI_HandleTypeDef *hqspi, uint8_t *pData);
593 HAL_StatusTypeDef HAL_QSPI_Transmit_DMA (QSPI_HandleTypeDef *hqspi, uint8_t *pData);
594 HAL_StatusTypeDef HAL_QSPI_Receive_DMA (QSPI_HandleTypeDef *hqspi, uint8_t *pData);
595 
596 /* QSPI status flag polling mode */
597 HAL_StatusTypeDef HAL_QSPI_AutoPolling (QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg, uint32_t Timeout);
599 
600 /* QSPI memory-mapped mode */
602 
603 /* Callback functions in non-blocking modes ***********************************/
607 
608 /* QSPI indirect mode */
614 
615 /* QSPI status flag polling mode */
617 
618 /* QSPI memory-mapped mode */
620 
621 #if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1)
622 /* QSPI callback registering/unregistering */
623 HAL_StatusTypeDef HAL_QSPI_RegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId, pQSPI_CallbackTypeDef pCallback);
624 HAL_StatusTypeDef HAL_QSPI_UnRegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId);
625 #endif
626 
633 /* Peripheral Control and State functions ************************************/
634 HAL_QSPI_StateTypeDef HAL_QSPI_GetState (QSPI_HandleTypeDef *hqspi);
635 uint32_t HAL_QSPI_GetError (QSPI_HandleTypeDef *hqspi);
636 HAL_StatusTypeDef HAL_QSPI_Abort (QSPI_HandleTypeDef *hqspi);
637 HAL_StatusTypeDef HAL_QSPI_Abort_IT (QSPI_HandleTypeDef *hqspi);
638 void HAL_QSPI_SetTimeout (QSPI_HandleTypeDef *hqspi, uint32_t Timeout);
639 HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t Threshold);
641 #if defined(QUADSPI_CR_DFM)
642 HAL_StatusTypeDef HAL_QSPI_SetFlashID (QSPI_HandleTypeDef *hqspi, uint32_t FlashID);
643 #endif
644 
651 /* End of exported functions -------------------------------------------------*/
652 
653 /* Private macros ------------------------------------------------------------*/
657 #define IS_QSPI_CLOCK_PRESCALER(PRESCALER) ((PRESCALER) <= 0xFFU)
658 
659 #define IS_QSPI_FIFO_THRESHOLD(THR) (((THR) > 0U) && ((THR) <= 16U))
660 
661 #define IS_QSPI_SSHIFT(SSHIFT) (((SSHIFT) == QSPI_SAMPLE_SHIFTING_NONE) || \
662  ((SSHIFT) == QSPI_SAMPLE_SHIFTING_HALFCYCLE))
663 
664 #define IS_QSPI_FLASH_SIZE(FSIZE) (((FSIZE) <= 31U))
665 
666 #define IS_QSPI_CS_HIGH_TIME(CSHTIME) (((CSHTIME) == QSPI_CS_HIGH_TIME_1_CYCLE) || \
667  ((CSHTIME) == QSPI_CS_HIGH_TIME_2_CYCLE) || \
668  ((CSHTIME) == QSPI_CS_HIGH_TIME_3_CYCLE) || \
669  ((CSHTIME) == QSPI_CS_HIGH_TIME_4_CYCLE) || \
670  ((CSHTIME) == QSPI_CS_HIGH_TIME_5_CYCLE) || \
671  ((CSHTIME) == QSPI_CS_HIGH_TIME_6_CYCLE) || \
672  ((CSHTIME) == QSPI_CS_HIGH_TIME_7_CYCLE) || \
673  ((CSHTIME) == QSPI_CS_HIGH_TIME_8_CYCLE))
674 
675 #define IS_QSPI_CLOCK_MODE(CLKMODE) (((CLKMODE) == QSPI_CLOCK_MODE_0) || \
676  ((CLKMODE) == QSPI_CLOCK_MODE_3))
677 
678 #if defined(QUADSPI_CR_DFM)
679 #define IS_QSPI_FLASH_ID(FLASH_ID) (((FLASH_ID) == QSPI_FLASH_ID_1) || \
680  ((FLASH_ID) == QSPI_FLASH_ID_2))
681 
682 #define IS_QSPI_DUAL_FLASH_MODE(MODE) (((MODE) == QSPI_DUALFLASH_ENABLE) || \
683  ((MODE) == QSPI_DUALFLASH_DISABLE))
684 
685 #endif
686 #define IS_QSPI_INSTRUCTION(INSTRUCTION) ((INSTRUCTION) <= 0xFFU)
687 
688 #define IS_QSPI_ADDRESS_SIZE(ADDR_SIZE) (((ADDR_SIZE) == QSPI_ADDRESS_8_BITS) || \
689  ((ADDR_SIZE) == QSPI_ADDRESS_16_BITS) || \
690  ((ADDR_SIZE) == QSPI_ADDRESS_24_BITS) || \
691  ((ADDR_SIZE) == QSPI_ADDRESS_32_BITS))
692 
693 #define IS_QSPI_ALTERNATE_BYTES_SIZE(SIZE) (((SIZE) == QSPI_ALTERNATE_BYTES_8_BITS) || \
694  ((SIZE) == QSPI_ALTERNATE_BYTES_16_BITS) || \
695  ((SIZE) == QSPI_ALTERNATE_BYTES_24_BITS) || \
696  ((SIZE) == QSPI_ALTERNATE_BYTES_32_BITS))
697 
698 #define IS_QSPI_DUMMY_CYCLES(DCY) ((DCY) <= 31U)
699 
700 #define IS_QSPI_INSTRUCTION_MODE(MODE) (((MODE) == QSPI_INSTRUCTION_NONE) || \
701  ((MODE) == QSPI_INSTRUCTION_1_LINE) || \
702  ((MODE) == QSPI_INSTRUCTION_2_LINES) || \
703  ((MODE) == QSPI_INSTRUCTION_4_LINES))
704 
705 #define IS_QSPI_ADDRESS_MODE(MODE) (((MODE) == QSPI_ADDRESS_NONE) || \
706  ((MODE) == QSPI_ADDRESS_1_LINE) || \
707  ((MODE) == QSPI_ADDRESS_2_LINES) || \
708  ((MODE) == QSPI_ADDRESS_4_LINES))
709 
710 #define IS_QSPI_ALTERNATE_BYTES_MODE(MODE) (((MODE) == QSPI_ALTERNATE_BYTES_NONE) || \
711  ((MODE) == QSPI_ALTERNATE_BYTES_1_LINE) || \
712  ((MODE) == QSPI_ALTERNATE_BYTES_2_LINES) || \
713  ((MODE) == QSPI_ALTERNATE_BYTES_4_LINES))
714 
715 #define IS_QSPI_DATA_MODE(MODE) (((MODE) == QSPI_DATA_NONE) || \
716  ((MODE) == QSPI_DATA_1_LINE) || \
717  ((MODE) == QSPI_DATA_2_LINES) || \
718  ((MODE) == QSPI_DATA_4_LINES))
719 
720 #define IS_QSPI_DDR_MODE(DDR_MODE) (((DDR_MODE) == QSPI_DDR_MODE_DISABLE) || \
721  ((DDR_MODE) == QSPI_DDR_MODE_ENABLE))
722 
723 #if defined(QUADSPI_CCR_DHHC)
724 #define IS_QSPI_DDR_HHC(DDR_HHC) (((DDR_HHC) == QSPI_DDR_HHC_ANALOG_DELAY) || \
725  ((DDR_HHC) == QSPI_DDR_HHC_HALF_CLK_DELAY))
726 
727 #else
728 #define IS_QSPI_DDR_HHC(DDR_HHC) (((DDR_HHC) == QSPI_DDR_HHC_ANALOG_DELAY))
729 
730 #endif
731 #define IS_QSPI_SIOO_MODE(SIOO_MODE) (((SIOO_MODE) == QSPI_SIOO_INST_EVERY_CMD) || \
732  ((SIOO_MODE) == QSPI_SIOO_INST_ONLY_FIRST_CMD))
733 
734 #define IS_QSPI_INTERVAL(INTERVAL) ((INTERVAL) <= QUADSPI_PIR_INTERVAL)
735 
736 #define IS_QSPI_STATUS_BYTES_SIZE(SIZE) (((SIZE) >= 1U) && ((SIZE) <= 4U))
737 
738 #define IS_QSPI_MATCH_MODE(MODE) (((MODE) == QSPI_MATCH_MODE_AND) || \
739  ((MODE) == QSPI_MATCH_MODE_OR))
740 
741 #define IS_QSPI_AUTOMATIC_STOP(APMS) (((APMS) == QSPI_AUTOMATIC_STOP_DISABLE) || \
742  ((APMS) == QSPI_AUTOMATIC_STOP_ENABLE))
743 
744 #define IS_QSPI_TIMEOUT_ACTIVATION(TCEN) (((TCEN) == QSPI_TIMEOUT_COUNTER_DISABLE) || \
745  ((TCEN) == QSPI_TIMEOUT_COUNTER_ENABLE))
746 
747 #define IS_QSPI_TIMEOUT_PERIOD(PERIOD) ((PERIOD) <= 0xFFFFU)
748 
751 /* End of private macros -----------------------------------------------------*/
752 
761 #endif /* defined(QUADSPI) || defined(QUADSPI1) || defined(QUADSPI2) */
762 
763 #ifdef __cplusplus
764 }
765 #endif
766 
767 #endif /* STM32L4xx_HAL_QSPI_H */
768 
769 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
__IO HAL_QSPI_StateTypeDef State
__IO uint32_t TxXferCount
void HAL_QSPI_TimeOutCallback(QSPI_HandleTypeDef *hqspi)
Timeout callback.
DMA handle Structure definition.
HAL_StatusTypeDef HAL_QSPI_MemoryMapped(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_MemoryMappedTypeDef *cfg)
Configure the Memory Mapped mode.
QUADSPI_TypeDef * Instance
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...
HAL_StatusTypeDef HAL_QSPI_Receive_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData)
Receive an amount of data in non-blocking mode with interrupt.
__IO uint32_t RxXferSize
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.
DMA_HandleTypeDef * hdma
__IO uint32_t TxXferSize
This file contains HAL common defines, enumeration, macros and structures definitions.
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)
QSPI Memory Mapped mode configuration structure definition.
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.
QSPI_InitTypeDef Init
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.
QSPI Auto Polling mode configuration structure definition.
__IO HAL_LockTypeDef Lock
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.
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.
void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi)
Initialize the QSPI MSP.
QSPI Command structure definition.
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 HAL_QSPI_GetError(QSPI_HandleTypeDef *hqspi)
Return the QSPI error code.
HAL_LockTypeDef
HAL Lock structures definition.
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.
__IO uint32_t RxXferCount
ADC handle Structure definition.
void HAL_QSPI_RxHalfCpltCallback(QSPI_HandleTypeDef *hqspi)
Rx Half Transfer completed callback.
uint32_t Timeout
void HAL_QSPI_CmdCpltCallback(QSPI_HandleTypeDef *hqspi)
Command completed 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_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout)
Receive an amount of data in blocking 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_QSPI_CallbackIDTypeDef
HAL QSPI Callback ID enumeration definition.
HAL_StatusTypeDef HAL_QSPI_Abort(QSPI_HandleTypeDef *hqspi)
Abort the current transmission.