/**
  ******************************************************************************
  * @file    stm32h7xx_hal_spi.h
  * @author  MCD Application Team
  * @brief   Header file of SPI HAL module.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef STM32H7xx_HAL_SPI_H
#define STM32H7xx_HAL_SPI_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32h7xx_hal_def.h"

/** @addtogroup STM32H7xx_HAL_Driver
  * @{
  */

/** @addtogroup SPI
  * @{
  */

/* Exported types ------------------------------------------------------------*/
/** @defgroup SPI_Exported_Types SPI Exported Types
  * @{
  */

/**
  * @brief  SPI Configuration Structure definition
  */
typedef struct
{
  uint32_t Mode;                              /*!< Specifies the SPI operating mode.
                                                     This parameter can be a value of @ref SPI_Mode */

  uint32_t Direction;                         /*!< Specifies the SPI bidirectional mode state.
                                                     This parameter can be a value of @ref SPI_Direction */

  uint32_t DataSize;                          /*!< Specifies the SPI data size.
                                                     This parameter can be a value of @ref SPI_Data_Size */

  uint32_t CLKPolarity;                       /*!< Specifies the serial clock steady state.
                                                     This parameter can be a value of @ref SPI_Clock_Polarity */

  uint32_t CLKPhase;                          /*!< Specifies the clock active edge for the bit capture.
                                                     This parameter can be a value of @ref SPI_Clock_Phase */

  uint32_t NSS;                               /*!< Specifies whether the NSS signal is managed by
                                                     hardware (NSS pin) or by software using the SSI bit.
                                                     This parameter can be a value of @ref SPI_Slave_Select_Management */

  uint32_t BaudRatePrescaler;                 /*!< Specifies the Baud Rate prescaler value which will be
                                                     used to configure the transmit and receive SCK clock.
                                                     This parameter can be a value of @ref SPI_BaudRate_Prescaler
                                                     @note The communication clock is derived from the master
                                                     clock. The slave clock does not need to be set. */

  uint32_t FirstBit;                          /*!< Specifies whether data transfers start from MSB or LSB bit.
                                                     This parameter can be a value of @ref SPI_MSB_LSB_Transmission */

  uint32_t TIMode;                            /*!< Specifies if the TI mode is enabled or not.
                                                     This parameter can be a value of @ref SPI_TI_Mode */

  uint32_t CRCCalculation;                    /*!< Specifies if the CRC calculation is enabled or not.
                                                     This parameter can be a value of @ref SPI_CRC_Calculation */

  uint32_t CRCPolynomial;                     /*!< Specifies the polynomial used for the CRC calculation.
                                                     This parameter must be an odd number between Min_Data = 0 and Max_Data = 65535 */

  uint32_t CRCLength;                         /*!< Specifies the CRC Length used for the CRC calculation.
                                                     This parameter can be a value of @ref SPI_CRC_length */

  uint32_t NSSPMode;                          /*!< Specifies whether the NSSP signal is enabled or not .
                                                     This parameter can be a value of @ref SPI_NSSP_Mode
                                                     This mode is activated by the SSOM bit in the SPIx_CR2 register and
                                                     it takes effect only if the SPI interface is configured as Motorola SPI
                                                     master (FRF=0). */

  uint32_t NSSPolarity;                       /*!< Specifies which level of SS input/output external signal (present on SS pin) is
                                                     considered as active one.
                                                     This parameter can be a value of @ref SPI_NSS_Polarity */

  uint32_t FifoThreshold;                     /*!< Specifies the FIFO threshold level.
                                                     This parameter can be a value of @ref SPI_Fifo_Threshold */

  uint32_t TxCRCInitializationPattern;        /*!< Specifies the transmitter CRC initialization Pattern used for the CRC calculation.
                                                     This parameter can be a value of @ref SPI_CRC_Calculation_Initialization_Pattern */

  uint32_t RxCRCInitializationPattern;        /*!< Specifies the receiver CRC initialization Pattern used for the CRC calculation.
                                                     This parameter can be a value of @ref SPI_CRC_Calculation_Initialization_Pattern */

  uint32_t MasterSSIdleness;                  /*!< Specifies an extra delay, expressed in number of SPI clock cycle periods, inserted
                                                     additionally between active edge of SS and first data transaction start in master mode.
                                                     This parameter can be a value of @ref SPI_Master_SS_Idleness */

  uint32_t MasterInterDataIdleness;           /*!< Specifies minimum time delay (expressed in SPI clock cycles periods) inserted between
                                                     two consecutive data frames in master mode
                                                     This parameter can be a value of @ref SPI_Master_InterData_Idleness */

  uint32_t MasterReceiverAutoSusp;            /*!< Control continuous SPI transfer in master receiver mode and automatic management
                                                     in order to avoid overrun condition.
                                                     This parameter can be a value of @ref SPI_Master_RX_AutoSuspend*/

  uint32_t MasterKeepIOState;                 /*!< Control of Alternate function GPIOs state
                                                     This parameter can be a value of @ref SPI_Master_Keep_IO_State */

  uint32_t IOSwap;                            /*!< Invert MISO/MOSI alternate functions
                                                     This parameter can be a value of @ref SPI_IO_Swap */

} SPI_InitTypeDef;

/**
  * @brief  HAL SPI State structure definition
  */
typedef enum
{
  HAL_SPI_STATE_RESET      = 0x00UL,    /*!< Peripheral not Initialized                         */
  HAL_SPI_STATE_READY      = 0x01UL,    /*!< Peripheral Initialized and ready for use           */
  HAL_SPI_STATE_BUSY       = 0x02UL,    /*!< an internal process is ongoing                     */
  HAL_SPI_STATE_BUSY_TX    = 0x03UL,    /*!< Data Transmission process is ongoing               */
  HAL_SPI_STATE_BUSY_RX    = 0x04UL,    /*!< Data Reception process is ongoing                  */
  HAL_SPI_STATE_BUSY_TX_RX = 0x05UL,    /*!< Data Transmission and Reception process is ongoing */
  HAL_SPI_STATE_ERROR      = 0x06UL,    /*!< SPI error state                                    */
  HAL_SPI_STATE_ABORT      = 0x07UL     /*!< SPI abort is ongoing                               */
} HAL_SPI_StateTypeDef;

#if defined(USE_SPI_RELOAD_TRANSFER)
/**
  * @brief  SPI Reload Structure definition
  */
typedef struct
{
  uint8_t                    *pTxBuffPtr;                  /*!< Pointer to SPI Tx transfer Buffer        */

  uint16_t                   TxXferSize;                   /*!< SPI Tx Transfer size to reload           */

  uint8_t                    *pRxBuffPtr;                  /*!< Pointer to SPI Rx transfer Buffer        */

  uint16_t                   RxXferSize;                   /*!< SPI Rx Transfer size to reload           */

  uint32_t                   Requested;                    /*!< SPI reload request                       */

} SPI_ReloadTypeDef;
#endif /* USE_HSPI_RELOAD_TRANSFER */

/**
  * @brief  SPI handle Structure definition
  */
typedef struct __SPI_HandleTypeDef
{
  SPI_TypeDef                *Instance;                    /*!< SPI registers base address               */

  SPI_InitTypeDef            Init;                         /*!< SPI communication parameters             */

  uint8_t                    *pTxBuffPtr;                  /*!< Pointer to SPI Tx transfer Buffer        */

  uint16_t                   TxXferSize;                   /*!< SPI Tx Transfer size                     */

  __IO uint16_t              TxXferCount;                  /*!< SPI Tx Transfer Counter                  */

  uint8_t                    *pRxBuffPtr;                  /*!< Pointer to SPI Rx transfer Buffer        */

  uint16_t                   RxXferSize;                   /*!< SPI Rx Transfer size                     */

  __IO uint16_t              RxXferCount;                  /*!< SPI Rx Transfer Counter                  */

  uint32_t                   CRCSize;                      /*!< SPI CRC size used for the transfer       */

  void (*RxISR)(struct __SPI_HandleTypeDef *hspi);         /*!< function pointer on Rx ISR               */

  void (*TxISR)(struct __SPI_HandleTypeDef *hspi);         /*!< function pointer on Tx ISR               */

  DMA_HandleTypeDef          *hdmatx;                      /*!< SPI Tx DMA Handle parameters             */

  DMA_HandleTypeDef          *hdmarx;                      /*!< SPI Rx DMA Handle parameters             */

  HAL_LockTypeDef            Lock;                         /*!< Locking object                           */

  __IO HAL_SPI_StateTypeDef  State;                        /*!< SPI communication state                  */

  __IO uint32_t              ErrorCode;                    /*!< SPI Error code                           */
  
#if defined(USE_SPI_RELOAD_TRANSFER)

  SPI_ReloadTypeDef          Reload;                       /*!< SPI reload parameters                    */
  
#endif /* USE_HSPI_RELOAD_TRANSFER */

#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL)
  void (* TxCpltCallback)(struct __SPI_HandleTypeDef *hspi);       /*!< SPI Tx Completed callback          */
  void (* RxCpltCallback)(struct __SPI_HandleTypeDef *hspi);       /*!< SPI Rx Completed callback          */
  void (* TxRxCpltCallback)(struct __SPI_HandleTypeDef *hspi);     /*!< SPI TxRx Completed callback        */
  void (* TxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi);   /*!< SPI Tx Half Completed callback     */
  void (* RxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi);   /*!< SPI Rx Half Completed callback     */
  void (* TxRxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI TxRx Half Completed callback   */
  void (* ErrorCallback)(struct __SPI_HandleTypeDef *hspi);        /*!< SPI Error callback                 */
  void (* AbortCpltCallback)(struct __SPI_HandleTypeDef *hspi);    /*!< SPI Abort callback                 */
  void (* MspInitCallback)(struct __SPI_HandleTypeDef *hspi);      /*!< SPI Msp Init callback              */
  void (* MspDeInitCallback)(struct __SPI_HandleTypeDef *hspi);    /*!< SPI Msp DeInit callback            */

#endif  /* USE_HAL_SPI_REGISTER_CALLBACKS */
} SPI_HandleTypeDef;

#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL)
/**
  * @brief  HAL SPI Callback ID enumeration definition
  */
typedef enum
{
  HAL_SPI_TX_COMPLETE_CB_ID             = 0x00UL,    /*!< SPI Tx Completed callback ID         */
  HAL_SPI_RX_COMPLETE_CB_ID             = 0x01UL,    /*!< SPI Rx Completed callback ID         */
  HAL_SPI_TX_RX_COMPLETE_CB_ID          = 0x02UL,    /*!< SPI TxRx Completed callback ID       */
  HAL_SPI_TX_HALF_COMPLETE_CB_ID        = 0x03UL,    /*!< SPI Tx Half Completed callback ID    */
  HAL_SPI_RX_HALF_COMPLETE_CB_ID        = 0x04UL,    /*!< SPI Rx Half Completed callback ID    */
  HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID     = 0x05UL,    /*!< SPI TxRx Half Completed callback ID  */
  HAL_SPI_ERROR_CB_ID                   = 0x06UL,    /*!< SPI Error callback ID                */
  HAL_SPI_ABORT_CB_ID                   = 0x07UL,    /*!< SPI Abort callback ID                */
  HAL_SPI_MSPINIT_CB_ID                 = 0x08UL,    /*!< SPI Msp Init callback ID             */
  HAL_SPI_MSPDEINIT_CB_ID               = 0x09UL     /*!< SPI Msp DeInit callback ID           */

} HAL_SPI_CallbackIDTypeDef;

/**
  * @brief  HAL SPI Callback pointer definition
  */
typedef  void (*pSPI_CallbackTypeDef)(SPI_HandleTypeDef *hspi); /*!< pointer to an SPI callback function */

#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
/**
  * @}
  */

/* Exported constants --------------------------------------------------------*/

/** @defgroup SPI_Exported_Constants SPI Exported Constants
  * @{
  */

/** @defgroup SPI_FIFO_Type SPI FIFO Type
  * @{
  */
#define SPI_LOWEND_FIFO_SIZE                          8UL
#define SPI_HIGHEND_FIFO_SIZE                         16UL
/**
  * @}
  */

/** @defgroup SPI_Error_Code SPI Error Codes
  * @{
  */
#define HAL_SPI_ERROR_NONE                            (0x00000000UL)   /*!< No error                               */
#define HAL_SPI_ERROR_MODF                            (0x00000001UL)   /*!< MODF error                             */
#define HAL_SPI_ERROR_CRC                             (0x00000002UL)   /*!< CRC error                              */
#define HAL_SPI_ERROR_OVR                             (0x00000004UL)   /*!< OVR error                              */
#define HAL_SPI_ERROR_FRE                             (0x00000008UL)   /*!< FRE error                              */
#define HAL_SPI_ERROR_DMA                             (0x00000010UL)   /*!< DMA transfer error                     */
#define HAL_SPI_ERROR_FLAG                            (0x00000020UL)   /*!< Error on RXNE/TXE/BSY/FTLVL/FRLVL Flag */
#define HAL_SPI_ERROR_ABORT                           (0x00000040UL)   /*!< Error during SPI Abort procedure       */
#define HAL_SPI_ERROR_UDR                             (0x00000080UL)   /*!< Underrun error                         */
#define HAL_SPI_ERROR_TIMEOUT                         (0x00000100UL)   /*!< Timeout error                          */
#define HAL_SPI_ERROR_UNKNOW                          (0x00000200UL)   /*!< Unknow error                           */
#define HAL_SPI_ERROR_NOT_SUPPORTED                   (0x00000400UL)   /*!< Requested operation not supported      */
#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL)
#define HAL_SPI_ERROR_INVALID_CALLBACK                (0x00000800UL)   /*!< Invalid Callback error                 */
#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
/**
  * @}
  */

/** @defgroup SPI_Mode SPI Mode
  * @{
  */
#define SPI_MODE_SLAVE                                (0x00000000UL)
#define SPI_MODE_MASTER                               SPI_CFG2_MASTER
/**
  * @}
  */

/** @defgroup SPI_Direction SPI Direction Mode
  * @{
  */
#define SPI_DIRECTION_2LINES                          (0x00000000UL)
#define SPI_DIRECTION_2LINES_TXONLY                   SPI_CFG2_COMM_0
#define SPI_DIRECTION_2LINES_RXONLY                   SPI_CFG2_COMM_1
#define SPI_DIRECTION_1LINE                           SPI_CFG2_COMM
/**
  * @}
  */

/** @defgroup SPI_Data_Size SPI Data Size
  * @{
  */
#define SPI_DATASIZE_4BIT                             (0x00000003UL)
#define SPI_DATASIZE_5BIT                             (0x00000004UL)
#define SPI_DATASIZE_6BIT                             (0x00000005UL)
#define SPI_DATASIZE_7BIT                             (0x00000006UL)
#define SPI_DATASIZE_8BIT                             (0x00000007UL)
#define SPI_DATASIZE_9BIT                             (0x00000008UL)
#define SPI_DATASIZE_10BIT                            (0x00000009UL)
#define SPI_DATASIZE_11BIT                            (0x0000000AUL)
#define SPI_DATASIZE_12BIT                            (0x0000000BUL)
#define SPI_DATASIZE_13BIT                            (0x0000000CUL)
#define SPI_DATASIZE_14BIT                            (0x0000000DUL)
#define SPI_DATASIZE_15BIT                            (0x0000000EUL)
#define SPI_DATASIZE_16BIT                            (0x0000000FUL)
#define SPI_DATASIZE_17BIT                            (0x00000010UL)
#define SPI_DATASIZE_18BIT                            (0x00000011UL)
#define SPI_DATASIZE_19BIT                            (0x00000012UL)
#define SPI_DATASIZE_20BIT                            (0x00000013UL)
#define SPI_DATASIZE_21BIT                            (0x00000014UL)
#define SPI_DATASIZE_22BIT                            (0x00000015UL)
#define SPI_DATASIZE_23BIT                            (0x00000016UL)
#define SPI_DATASIZE_24BIT                            (0x00000017UL)
#define SPI_DATASIZE_25BIT                            (0x00000018UL)
#define SPI_DATASIZE_26BIT                            (0x00000019UL)
#define SPI_DATASIZE_27BIT                            (0x0000001AUL)
#define SPI_DATASIZE_28BIT                            (0x0000001BUL)
#define SPI_DATASIZE_29BIT                            (0x0000001CUL)
#define SPI_DATASIZE_30BIT                            (0x0000001DUL)
#define SPI_DATASIZE_31BIT                            (0x0000001EUL)
#define SPI_DATASIZE_32BIT                            (0x0000001FUL)
/**
  * @}
  */

/** @defgroup SPI_Clock_Polarity SPI Clock Polarity
  * @{
  */
#define SPI_POLARITY_LOW                              (0x00000000UL)
#define SPI_POLARITY_HIGH                             SPI_CFG2_CPOL
/**
  * @}
  */

/** @defgroup SPI_Clock_Phase SPI Clock Phase
  * @{
  */
#define SPI_PHASE_1EDGE                               (0x00000000UL)
#define SPI_PHASE_2EDGE                               SPI_CFG2_CPHA
/**
  * @}
  */

/** @defgroup SPI_Slave_Select_Management SPI Slave Select Management
  * @{
  */
#define SPI_NSS_SOFT                                  SPI_CFG2_SSM
#define SPI_NSS_HARD_INPUT                            (0x00000000UL)
#define SPI_NSS_HARD_OUTPUT                           SPI_CFG2_SSOE
/**
  * @}
  */

/** @defgroup SPI_NSSP_Mode SPI NSS Pulse Mode
  * @{
  */
#define SPI_NSS_PULSE_DISABLE                         (0x00000000UL)
#define SPI_NSS_PULSE_ENABLE                          SPI_CFG2_SSOM
/**
  * @}
  */

/** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler
  * @{
  */
#define SPI_BAUDRATEPRESCALER_2                       (0x00000000UL)
#define SPI_BAUDRATEPRESCALER_4                       (0x10000000UL)
#define SPI_BAUDRATEPRESCALER_8                       (0x20000000UL)
#define SPI_BAUDRATEPRESCALER_16                      (0x30000000UL)
#define SPI_BAUDRATEPRESCALER_32                      (0x40000000UL)
#define SPI_BAUDRATEPRESCALER_64                      (0x50000000UL)
#define SPI_BAUDRATEPRESCALER_128                     (0x60000000UL)
#define SPI_BAUDRATEPRESCALER_256                     (0x70000000UL)
/**
  * @}
  */

/** @defgroup SPI_MSB_LSB_Transmission SPI MSB LSB Transmission
  * @{
  */
#define SPI_FIRSTBIT_MSB                              (0x00000000UL)
#define SPI_FIRSTBIT_LSB                              SPI_CFG2_LSBFRST
/**
  * @}
  */

/** @defgroup SPI_TI_Mode SPI TI Mode
  * @{
  */
#define SPI_TIMODE_DISABLE                            (0x00000000UL)
#define SPI_TIMODE_ENABLE                             SPI_CFG2_SP_0
/**
  * @}
  */

/** @defgroup SPI_CRC_Calculation SPI CRC Calculation
  * @{
  */
#define SPI_CRCCALCULATION_DISABLE                    (0x00000000UL)
#define SPI_CRCCALCULATION_ENABLE                     SPI_CFG1_CRCEN
/**
  * @}
  */

/** @defgroup SPI_CRC_length SPI CRC Length
  * @{
  */
#define SPI_CRC_LENGTH_DATASIZE                       (0x00000000UL)
#define SPI_CRC_LENGTH_4BIT                           (0x00030000UL)
#define SPI_CRC_LENGTH_5BIT                           (0x00040000UL)
#define SPI_CRC_LENGTH_6BIT                           (0x00050000UL)
#define SPI_CRC_LENGTH_7BIT                           (0x00060000UL)
#define SPI_CRC_LENGTH_8BIT                           (0x00070000UL)
#define SPI_CRC_LENGTH_9BIT                           (0x00080000UL)
#define SPI_CRC_LENGTH_10BIT                          (0x00090000UL)
#define SPI_CRC_LENGTH_11BIT                          (0x000A0000UL)
#define SPI_CRC_LENGTH_12BIT                          (0x000B0000UL)
#define SPI_CRC_LENGTH_13BIT                          (0x000C0000UL)
#define SPI_CRC_LENGTH_14BIT                          (0x000D0000UL)
#define SPI_CRC_LENGTH_15BIT                          (0x000E0000UL)
#define SPI_CRC_LENGTH_16BIT                          (0x000F0000UL)
#define SPI_CRC_LENGTH_17BIT                          (0x00100000UL)
#define SPI_CRC_LENGTH_18BIT                          (0x00110000UL)
#define SPI_CRC_LENGTH_19BIT                          (0x00120000UL)
#define SPI_CRC_LENGTH_20BIT                          (0x00130000UL)
#define SPI_CRC_LENGTH_21BIT                          (0x00140000UL)
#define SPI_CRC_LENGTH_22BIT                          (0x00150000UL)
#define SPI_CRC_LENGTH_23BIT                          (0x00160000UL)
#define SPI_CRC_LENGTH_24BIT                          (0x00170000UL)
#define SPI_CRC_LENGTH_25BIT                          (0x00180000UL)
#define SPI_CRC_LENGTH_26BIT                          (0x00190000UL)
#define SPI_CRC_LENGTH_27BIT                          (0x001A0000UL)
#define SPI_CRC_LENGTH_28BIT                          (0x001B0000UL)
#define SPI_CRC_LENGTH_29BIT                          (0x001C0000UL)
#define SPI_CRC_LENGTH_30BIT                          (0x001D0000UL)
#define SPI_CRC_LENGTH_31BIT                          (0x001E0000UL)
#define SPI_CRC_LENGTH_32BIT                          (0x001F0000UL)
/**
  * @}
  */

/** @defgroup SPI_Fifo_Threshold SPI Fifo Threshold
  * @{
  */
#define SPI_FIFO_THRESHOLD_01DATA                     (0x00000000UL)
#define SPI_FIFO_THRESHOLD_02DATA                     (0x00000020UL)
#define SPI_FIFO_THRESHOLD_03DATA                     (0x00000040UL)
#define SPI_FIFO_THRESHOLD_04DATA                     (0x00000060UL)
#define SPI_FIFO_THRESHOLD_05DATA                     (0x00000080UL)
#define SPI_FIFO_THRESHOLD_06DATA                     (0x000000A0UL)
#define SPI_FIFO_THRESHOLD_07DATA                     (0x000000C0UL)
#define SPI_FIFO_THRESHOLD_08DATA                     (0x000000E0UL)
#define SPI_FIFO_THRESHOLD_09DATA                     (0x00000100UL)
#define SPI_FIFO_THRESHOLD_10DATA                     (0x00000120UL)
#define SPI_FIFO_THRESHOLD_11DATA                     (0x00000140UL)
#define SPI_FIFO_THRESHOLD_12DATA                     (0x00000160UL)
#define SPI_FIFO_THRESHOLD_13DATA                     (0x00000180UL)
#define SPI_FIFO_THRESHOLD_14DATA                     (0x000001A0UL)
#define SPI_FIFO_THRESHOLD_15DATA                     (0x000001C0UL)
#define SPI_FIFO_THRESHOLD_16DATA                     (0x000001E0UL)
/**
  * @}
  */

/** @defgroup SPI_CRC_Calculation_Initialization_Pattern SPI CRC Calculation Initialization Pattern
  * @{
  */
#define SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN       (0x00000000UL)
#define SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN        (0x00000001UL)
/**
  * @}
  */

/** @defgroup SPI_NSS_Polarity SPI NSS Polarity
  * @{
  */
#define SPI_NSS_POLARITY_LOW                          (0x00000000UL)
#define SPI_NSS_POLARITY_HIGH                          SPI_CFG2_SSIOP
/**
  * @}
  */

/** @defgroup SPI_Master_Keep_IO_State Keep IO State
  * @{
  */
#define SPI_MASTER_KEEP_IO_STATE_DISABLE              (0x00000000UL)
#define SPI_MASTER_KEEP_IO_STATE_ENABLE               SPI_CFG2_AFCNTR
/**
  * @}
  */

/** @defgroup SPI_IO_Swap Control SPI IO Swap
  * @{
  */
#define SPI_IO_SWAP_DISABLE                           (0x00000000UL)
#define SPI_IO_SWAP_ENABLE                            SPI_CFG2_IOSWP
/**
  * @}
  */

/** @defgroup SPI_Master_SS_Idleness SPI Master SS Idleness
  * @{
  */
#define SPI_MASTER_SS_IDLENESS_00CYCLE                (0x00000000UL)
#define SPI_MASTER_SS_IDLENESS_01CYCLE                (0x00000001UL)
#define SPI_MASTER_SS_IDLENESS_02CYCLE                (0x00000002UL)
#define SPI_MASTER_SS_IDLENESS_03CYCLE                (0x00000003UL)
#define SPI_MASTER_SS_IDLENESS_04CYCLE                (0x00000004UL)
#define SPI_MASTER_SS_IDLENESS_05CYCLE                (0x00000005UL)
#define SPI_MASTER_SS_IDLENESS_06CYCLE                (0x00000006UL)
#define SPI_MASTER_SS_IDLENESS_07CYCLE                (0x00000007UL)
#define SPI_MASTER_SS_IDLENESS_08CYCLE                (0x00000008UL)
#define SPI_MASTER_SS_IDLENESS_09CYCLE                (0x00000009UL)
#define SPI_MASTER_SS_IDLENESS_10CYCLE                (0x0000000AUL)
#define SPI_MASTER_SS_IDLENESS_11CYCLE                (0x0000000BUL)
#define SPI_MASTER_SS_IDLENESS_12CYCLE                (0x0000000CUL)
#define SPI_MASTER_SS_IDLENESS_13CYCLE                (0x0000000DUL)
#define SPI_MASTER_SS_IDLENESS_14CYCLE                (0x0000000EUL)
#define SPI_MASTER_SS_IDLENESS_15CYCLE                (0x0000000FUL)
/**
  * @}
  */

/** @defgroup SPI_Master_InterData_Idleness SPI Master Inter-Data Idleness
  * @{
  */
#define SPI_MASTER_INTERDATA_IDLENESS_00CYCLE         (0x00000000UL)
#define SPI_MASTER_INTERDATA_IDLENESS_01CYCLE         (0x00000010UL)
#define SPI_MASTER_INTERDATA_IDLENESS_02CYCLE         (0x00000020UL)
#define SPI_MASTER_INTERDATA_IDLENESS_03CYCLE         (0x00000030UL)
#define SPI_MASTER_INTERDATA_IDLENESS_04CYCLE         (0x00000040UL)
#define SPI_MASTER_INTERDATA_IDLENESS_05CYCLE         (0x00000050UL)
#define SPI_MASTER_INTERDATA_IDLENESS_06CYCLE         (0x00000060UL)
#define SPI_MASTER_INTERDATA_IDLENESS_07CYCLE         (0x00000070UL)
#define SPI_MASTER_INTERDATA_IDLENESS_08CYCLE         (0x00000080UL)
#define SPI_MASTER_INTERDATA_IDLENESS_09CYCLE         (0x00000090UL)
#define SPI_MASTER_INTERDATA_IDLENESS_10CYCLE         (0x000000A0UL)
#define SPI_MASTER_INTERDATA_IDLENESS_11CYCLE         (0x000000B0UL)
#define SPI_MASTER_INTERDATA_IDLENESS_12CYCLE         (0x000000C0UL)
#define SPI_MASTER_INTERDATA_IDLENESS_13CYCLE         (0x000000D0UL)
#define SPI_MASTER_INTERDATA_IDLENESS_14CYCLE         (0x000000E0UL)
#define SPI_MASTER_INTERDATA_IDLENESS_15CYCLE         (0x000000F0UL)
/**
  * @}
  */

/** @defgroup SPI_Master_RX_AutoSuspend SPI Master Receiver AutoSuspend
  * @{
  */
#define SPI_MASTER_RX_AUTOSUSP_DISABLE                (0x00000000UL)
#define SPI_MASTER_RX_AUTOSUSP_ENABLE                 SPI_CR1_MASRX
/**
  * @}
  */

/** @defgroup SPI_Underrun_Detection SPI Underrun Detection
  * @{
  */
#define SPI_UNDERRUN_DETECT_BEGIN_DATA_FRAME          (0x00000000UL)
#define SPI_UNDERRUN_DETECT_END_DATA_FRAME            SPI_CFG1_UDRDET_0
#define SPI_UNDERRUN_DETECT_BEGIN_ACTIVE_NSS          SPI_CFG1_UDRDET_1
/**
  * @}
  */

/** @defgroup SPI_Underrun_Behaviour SPI Underrun Behavior
  * @{
  */
#define SPI_UNDERRUN_BEHAV_REGISTER_PATTERN           (0x00000000UL)
#define SPI_UNDERRUN_BEHAV_LAST_RECEIVED              SPI_CFG1_UDRCFG_0
#define SPI_UNDERRUN_BEHAV_LAST_TRANSMITTED           SPI_CFG1_UDRCFG_1
/**
  * @}
  */

/** @defgroup SPI_Interrupt_definition SPI Interrupt Definition
  * @{
  */
#define SPI_IT_RXP                      SPI_IER_RXPIE
#define SPI_IT_TXP                      SPI_IER_TXPIE
#define SPI_IT_DXP                      SPI_IER_DXPIE
#define SPI_IT_EOT                      SPI_IER_EOTIE
#define SPI_IT_TXTF                     SPI_IER_TXTFIE
#define SPI_IT_UDR                      SPI_IER_UDRIE
#define SPI_IT_OVR                      SPI_IER_OVRIE
#define SPI_IT_CRCERR                   SPI_IER_CRCEIE
#define SPI_IT_FRE                      SPI_IER_TIFREIE
#define SPI_IT_MODF                     SPI_IER_MODFIE
#define SPI_IT_TSERF                    SPI_IER_TSERFIE
#define SPI_IT_ERR                      (SPI_IT_UDR | SPI_IT_OVR | SPI_IT_FRE | SPI_IT_MODF | SPI_IT_CRCERR)
/**
  * @}
  */

/** @defgroup SPI_Flags_definition SPI Flags Definition
  * @{
  */
#define SPI_FLAG_RXP                    SPI_SR_RXP     /* SPI status flag : Rx-Packet available flag                 */
#define SPI_FLAG_TXP                    SPI_SR_TXP     /* SPI status flag : Tx-Packet space available flag           */
#define SPI_FLAG_DXP                    SPI_SR_DXP     /* SPI status flag : Duplex Packet flag                       */
#define SPI_FLAG_EOT                    SPI_SR_EOT     /* SPI status flag : End of transfer flag                     */
#define SPI_FLAG_TXTF                   SPI_SR_TXTF    /* SPI status flag : Transmission Transfer Filled flag        */
#define SPI_FLAG_UDR                    SPI_SR_UDR     /* SPI Error flag  : Underrun flag                            */
#define SPI_FLAG_OVR                    SPI_SR_OVR     /* SPI Error flag  : Overrun flag                             */
#define SPI_FLAG_CRCERR                 SPI_SR_CRCE    /* SPI Error flag  : CRC error flag                           */
#define SPI_FLAG_FRE                    SPI_SR_TIFRE   /* SPI Error flag  : TI mode frame format error flag          */
#define SPI_FLAG_MODF                   SPI_SR_MODF    /* SPI Error flag  : Mode fault flag                          */
#define SPI_FLAG_TSERF                  SPI_SR_TSERF   /* SPI status flag : Additional number of data reloaded flag  */
#define SPI_FLAG_SUSP                   SPI_SR_SUSP    /* SPI status flag : Transfer suspend complete flag           */
#define SPI_FLAG_TXC                    SPI_SR_TXC     /* SPI status flag : TxFIFO transmission complete flag        */
#define SPI_FLAG_FRLVL                  SPI_SR_RXPLVL  /* SPI status flag : Fifo reception level flag                */
#define SPI_FLAG_RXWNE                  SPI_SR_RXWNE   /* SPI status flag : RxFIFO word not empty flag               */
/**
  * @}
  */

/** @defgroup SPI_reception_fifo_status_level SPI Reception FIFO Status Level
  * @{
  */
#define SPI_RX_FIFO_0PACKET                           (0x00000000UL)                      /* 0 or multiple of 4 packets available in the RxFIFO */
#define SPI_RX_FIFO_1PACKET                           (SPI_SR_RXPLVL_0)
#define SPI_RX_FIFO_2PACKET                           (SPI_SR_RXPLVL_1)
#define SPI_RX_FIFO_3PACKET                           (SPI_SR_RXPLVL_1 | SPI_SR_RXPLVL_0)
/**
  * @}
  */

/**
  * @}
  */

/* Exported macros -----------------------------------------------------------*/
/** @defgroup SPI_Exported_Macros SPI Exported Macros
  * @{
  */

/** @brief  Reset SPI handle state.
  * @param  __HANDLE__: specifies the SPI Handle.
  *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
  * @retval None
  */
#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL)
#define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__)   do{                                                  \
                                                       (__HANDLE__)->State = HAL_SPI_STATE_RESET;       \
                                                       (__HANDLE__)->MspInitCallback = NULL;            \
                                                       (__HANDLE__)->MspDeInitCallback = NULL;          \
                                                     } while(0)
#else
#define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET)
#endif

/** @brief  Enable the specified SPI interrupts.
  * @param  __HANDLE__: specifies the SPI Handle.
  *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
  * @param  __INTERRUPT__: specifies the interrupt source to enable or disable.
  *         This parameter can be one of the following values:
  *            @arg SPI_IT_RXP    : Rx-Packet available interrupt
  *            @arg SPI_IT_TXP    : Tx-Packet space available interrupt
  *            @arg SPI_IT_DXP    : Duplex Packet interrupt
  *            @arg SPI_IT_EOT    : End of transfer interrupt
  *            @arg SPI_IT_TXTF   : Transmission Transfer Filled interrupt
  *            @arg SPI_IT_UDR    : Underrun interrupt
  *            @arg SPI_IT_OVR    : Overrun  interrupt
  *            @arg SPI_IT_CRCERR : CRC error interrupt
  *            @arg SPI_IT_FRE    : TI mode frame format error interrupt
  *            @arg SPI_IT_MODF   : Mode fault interrupt
  *            @arg SPI_IT_TSERF  : Additional number of data reloaded interrupt
  *            @arg SPI_IT_ERR    : Error interrupt
  * @retval None
  */
#define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->IER |= (__INTERRUPT__))

/** @brief  Disable the specified SPI interrupts.
  * @param  __HANDLE__: specifies the SPI Handle.
  *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
  * @param  __INTERRUPT__: specifies the interrupt source to enable or disable.
  *         This parameter can be one of the following values:
  *            @arg SPI_IT_RXP    : Rx-Packet available interrupt
  *            @arg SPI_IT_TXP    : Tx-Packet space available interrupt
  *            @arg SPI_IT_DXP    : Duplex Packet interrupt
  *            @arg SPI_IT_EOT    : End of transfer interrupt
  *            @arg SPI_IT_TXTF   : Transmission Transfer Filled interrupt
  *            @arg SPI_IT_UDR    : Underrun interrupt
  *            @arg SPI_IT_OVR    : Overrun  interrupt
  *            @arg SPI_IT_CRCERR : CRC error interrupt
  *            @arg SPI_IT_FRE    : TI mode frame format error interrupt
  *            @arg SPI_IT_MODF   : Mode fault interrupt
  *            @arg SPI_IT_TSERF  : Additional number of data reloaded interrupt
  *            @arg SPI_IT_ERR    : Error interrupt
  * @retval None
  */
#define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((__HANDLE__)->Instance->IER &= (~(__INTERRUPT__)))

/** @brief  Check whether the specified SPI interrupt source is enabled or not.
  * @param  __HANDLE__: specifies the SPI Handle.
  *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
  * @param  __INTERRUPT__: specifies the SPI interrupt source to check.
  *          This parameter can be one of the following values:
  *            @arg SPI_IT_RXP    : Rx-Packet available interrupt
  *            @arg SPI_IT_TXP    : Tx-Packet space available interrupt
  *            @arg SPI_IT_DXP    : Duplex Packet interrupt
  *            @arg SPI_IT_EOT    : End of transfer interrupt
  *            @arg SPI_IT_TXTF   : Transmission Transfer Filled interrupt
  *            @arg SPI_IT_UDR    : Underrun interrupt
  *            @arg SPI_IT_OVR    : Overrun  interrupt
  *            @arg SPI_IT_CRCERR : CRC error interrupt
  *            @arg SPI_IT_FRE    : TI mode frame format error interrupt
  *            @arg SPI_IT_MODF   : Mode fault interrupt
  *            @arg SPI_IT_TSERF  : Additional number of data reloaded interrupt
  *            @arg SPI_IT_ERR    : Error interrupt
  * @retval The new state of __IT__ (TRUE or FALSE).
  */
#define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)

/** @brief  Check whether the specified SPI flag is set or not.
  * @param  __HANDLE__: specifies the SPI Handle.
  *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
  * @param  __FLAG__: specifies the flag to check.
  *         This parameter can be one of the following values:
  *            @arg SPI_FLAG_RXP    : Rx-Packet available flag
  *            @arg SPI_FLAG_TXP    : Tx-Packet space available flag
  *            @arg SPI_FLAG_DXP    : Duplex Packet flag
  *            @arg SPI_FLAG_EOT    : End of transfer flag
  *            @arg SPI_FLAG_TXTF   : Transmission Transfer Filled flag
  *            @arg SPI_FLAG_UDR    : Underrun flag
  *            @arg SPI_FLAG_OVR    : Overrun flag
  *            @arg SPI_FLAG_CRCERR : CRC error flag
  *            @arg SPI_FLAG_FRE    : TI mode frame format error flag
  *            @arg SPI_FLAG_MODF   : Mode fault flag
  *            @arg SPI_FLAG_TSERF  : Additional number of data reloaded flag
  *            @arg SPI_FLAG_SUSP   : Transfer suspend complete flag
  *            @arg SPI_FLAG_TXC    : TxFIFO transmission complete flag
  *            @arg SPI_FLAG_FRLVL  : Fifo reception level flag
  *            @arg SPI_FLAG_RXWNE  : RxFIFO word not empty flag
  * @retval The new state of __FLAG__ (TRUE or FALSE).
  */
#define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))

/** @brief  Clear the SPI CRCERR pending flag.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_CRCEC)

/** @brief  Clear the SPI MODF pending flag.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__)  SET_BIT((__HANDLE__)->Instance->IFCR , (uint32_t)(SPI_IFCR_MODFC));

/** @brief  Clear the SPI OVR pending flag.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_OVRC)

/** @brief  Clear the SPI FRE pending flag.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_TIFREC)

/** @brief  Clear the SPI UDR pending flag.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_CLEAR_UDRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_UDRC)

/** @brief  Clear the SPI EOT pending flag.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_CLEAR_EOTFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_EOTC)

/** @brief  Clear the SPI UDR pending flag.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_CLEAR_TXTFFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_TXTFC)

/** @brief  Clear the SPI SUSP pending flag.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_CLEAR_SUSPFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_SUSPC)

/** @brief  Clear the SPI TSERF pending flag.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_CLEAR_TSERFFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_TSERFC)

/** @brief  Enable the SPI peripheral.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1 , SPI_CR1_SPE)

/** @brief  Disable the SPI peripheral.
  * @param  __HANDLE__: specifies the SPI Handle.
  * @retval None
  */
#define __HAL_SPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1 , SPI_CR1_SPE)
/**
  * @}
  */


/* Include SPI HAL Extension module */
#include "stm32h7xx_hal_spi_ex.h"


/* Exported functions --------------------------------------------------------*/
/** @addtogroup SPI_Exported_Functions
  * @{
  */

/** @addtogroup SPI_Exported_Functions_Group1 Initialization and de-initialization functions
  * @{
  */
/* Initialization/de-initialization functions  ********************************/
HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi);
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi);
void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi);

/* Callbacks Register/UnRegister functions  ***********************************/
#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID, pSPI_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
/**
  * @}
  */

/** @addtogroup SPI_Exported_Functions_Group2 IO operation functions
  * @{
  */
/* I/O operation functions  ***************************************************/
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size,
                                          uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);

HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);

#if defined(USE_SPI_RELOAD_TRANSFER)
HAL_StatusTypeDef HAL_SPI_Reload_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Reload_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Reload_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
#endif /* USE_HSPI_RELOAD_TRANSFER */

HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);

/* Transfer Abort functions */
HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi);

void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi);
/**
  * @}
  */

/** @addtogroup SPI_Exported_Functions_Group3 Peripheral State and Errors functions
  * @{
  */

/* Peripheral State and Error functions ***************************************/
HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi);
uint32_t             HAL_SPI_GetError(SPI_HandleTypeDef *hspi);
/**
  * @}
  */

/**
  * @}
  */

/* Private macros ------------------------------------------------------------*/
/** @defgroup SPI_Private_Macros SPI Private Macros
  * @{
  */

/** @brief  Set the SPI transmit-only mode.
  * @param  __HANDLE__: specifies the SPI Handle.
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  * @retval None
  */
#define SPI_1LINE_TX(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1 , SPI_CR1_HDDIR)

/** @brief  Set the SPI receive-only mode.
  * @param  __HANDLE__: specifies the SPI Handle.
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  * @retval None
  */
#define SPI_1LINE_RX(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1 ,SPI_CR1_HDDIR)

#define IS_SPI_MODE(MODE)                          (((MODE) == SPI_MODE_SLAVE) || \
                                                    ((MODE) == SPI_MODE_MASTER))

#define IS_SPI_DIRECTION(MODE)                     (((MODE) == SPI_DIRECTION_2LINES)        || \
                                                    ((MODE) == SPI_DIRECTION_2LINES_RXONLY) || \
                                                    ((MODE) == SPI_DIRECTION_1LINE)         || \
                                                    ((MODE) == SPI_DIRECTION_2LINES_TXONLY))

#define IS_SPI_DIRECTION_2LINES(MODE) ((MODE) == SPI_DIRECTION_2LINES)

#define IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(MODE) (                         \
                                                    ((MODE) == SPI_DIRECTION_2LINES)|| \
                                                    ((MODE) == SPI_DIRECTION_1LINE) || \
                                                    ((MODE) == SPI_DIRECTION_2LINES_TXONLY))

#define IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(MODE) (                         \
                                                    ((MODE) == SPI_DIRECTION_2LINES)|| \
                                                    ((MODE) == SPI_DIRECTION_1LINE) || \
                                                    ((MODE) == SPI_DIRECTION_2LINES_RXONLY))

#define IS_SPI_DATASIZE(DATASIZE)                  (((DATASIZE) == SPI_DATASIZE_32BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_31BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_30BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_29BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_28BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_27BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_26BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_25BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_24BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_23BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_22BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_21BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_20BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_22BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_19BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_18BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_17BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_16BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_15BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_14BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_13BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_12BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_11BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_10BIT) || \
                                                    ((DATASIZE) == SPI_DATASIZE_9BIT)  || \
                                                    ((DATASIZE) == SPI_DATASIZE_8BIT)  || \
                                                    ((DATASIZE) == SPI_DATASIZE_7BIT)  || \
                                                    ((DATASIZE) == SPI_DATASIZE_6BIT)  || \
                                                    ((DATASIZE) == SPI_DATASIZE_5BIT)  || \
                                                    ((DATASIZE) == SPI_DATASIZE_4BIT))

#define IS_SPI_FIFOTHRESHOLD(THRESHOLD)            (((THRESHOLD) == SPI_FIFO_THRESHOLD_01DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_02DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_03DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_04DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_05DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_06DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_07DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_08DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_09DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_10DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_11DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_12DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_13DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_14DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_15DATA) || \
                                                    ((THRESHOLD) == SPI_FIFO_THRESHOLD_16DATA))

#define IS_SPI_CPOL(CPOL)                          (((CPOL) == SPI_POLARITY_LOW) || \
                                                    ((CPOL) == SPI_POLARITY_HIGH))

#define IS_SPI_CPHA(CPHA)                          (((CPHA) == SPI_PHASE_1EDGE) || \
                                                    ((CPHA) == SPI_PHASE_2EDGE))

#define IS_SPI_NSS(NSS)                            (((NSS) == SPI_NSS_SOFT)       || \
                                                    ((NSS) == SPI_NSS_HARD_INPUT) || \
                                                    ((NSS) == SPI_NSS_HARD_OUTPUT))

#define IS_SPI_NSSP(NSSP)                          (((NSSP) == SPI_NSS_PULSE_ENABLE) || \
                                                    ((NSSP) == SPI_NSS_PULSE_DISABLE))

#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER)       (((PRESCALER) == SPI_BAUDRATEPRESCALER_2)   || \
                                                    ((PRESCALER) == SPI_BAUDRATEPRESCALER_4)   || \
                                                    ((PRESCALER) == SPI_BAUDRATEPRESCALER_8)   || \
                                                    ((PRESCALER) == SPI_BAUDRATEPRESCALER_16)  || \
                                                    ((PRESCALER) == SPI_BAUDRATEPRESCALER_32)  || \
                                                    ((PRESCALER) == SPI_BAUDRATEPRESCALER_64)  || \
                                                    ((PRESCALER) == SPI_BAUDRATEPRESCALER_128) || \
                                                    ((PRESCALER) == SPI_BAUDRATEPRESCALER_256))

#define IS_SPI_FIRST_BIT(BIT)                      (((BIT) == SPI_FIRSTBIT_MSB) || \
                                                    ((BIT) == SPI_FIRSTBIT_LSB))

#define IS_SPI_TIMODE(MODE)                        (((MODE) == SPI_TIMODE_DISABLE) || \
                                                    ((MODE) == SPI_TIMODE_ENABLE))

#define IS_SPI_CRC_CALCULATION(CALCULATION)        (((CALCULATION) == SPI_CRCCALCULATION_DISABLE) || \
                                                    ((CALCULATION) == SPI_CRCCALCULATION_ENABLE))

#define IS_SPI_CRC_INITIALIZATION_PATTERN(PATTERN) (((PATTERN) == SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN) || \
                                                    ((PATTERN) == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN))

#define IS_SPI_CRC_LENGTH(LENGTH)                  (((LENGTH) == SPI_CRC_LENGTH_DATASIZE) || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_32BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_31BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_30BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_29BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_28BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_27BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_26BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_25BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_24BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_23BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_22BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_21BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_20BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_19BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_18BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_17BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_16BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_15BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_14BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_13BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_12BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_11BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_10BIT)    || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_9BIT)     || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_8BIT)     || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_7BIT)     || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_6BIT)     || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_5BIT)     || \
                                                    ((LENGTH) == SPI_CRC_LENGTH_4BIT))

#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL)           ((POLYNOMIAL) >= 0x1UL)

#define IS_SPI_UNDERRUN_DETECTION(MODE)            (((MODE) == SPI_UNDERRUN_DETECT_BEGIN_DATA_FRAME) || \
                                                    ((MODE) == SPI_UNDERRUN_DETECT_END_DATA_FRAME)   || \
                                                    ((MODE) == SPI_UNDERRUN_DETECT_BEGIN_ACTIVE_NSS))

#define IS_SPI_UNDERRUN_BEHAVIOUR(MODE)            (((MODE) == SPI_UNDERRUN_BEHAV_REGISTER_PATTERN) || \
                                                    ((MODE) == SPI_UNDERRUN_BEHAV_LAST_RECEIVED)    || \
                                                    ((MODE) == SPI_UNDERRUN_BEHAV_LAST_TRANSMITTED))
/**
  * @}
  */

/**
  * @}
  */

/**
  * @}
  */

#ifdef __cplusplus
}
#endif

#endif /* STM32H7xx_HAL_SPI_H */

/**
  * @}
  */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
