Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:36

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_hal_spi.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of SPI HAL module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file
0013   * in the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   *
0016   ******************************************************************************
0017   */
0018 
0019 /* Define to prevent recursive inclusion -------------------------------------*/
0020 #ifndef STM32H7xx_HAL_SPI_H
0021 #define STM32H7xx_HAL_SPI_H
0022 
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026 
0027 /* Includes ------------------------------------------------------------------*/
0028 #include "stm32h7xx_hal_def.h"
0029 
0030 /** @addtogroup STM32H7xx_HAL_Driver
0031   * @{
0032   */
0033 
0034 /** @addtogroup SPI
0035   * @{
0036   */
0037 
0038 /* Exported types ------------------------------------------------------------*/
0039 /** @defgroup SPI_Exported_Types SPI Exported Types
0040   * @ingroup RTEMSBSPsARMSTM32H7
0041   * @{
0042   */
0043 
0044 /**
0045   * @brief  SPI Configuration Structure definition
0046   */
0047 typedef struct
0048 {
0049   uint32_t Mode;                              /*!< Specifies the SPI operating mode.
0050                                                      This parameter can be a value of @ref SPI_Mode */
0051 
0052   uint32_t Direction;                         /*!< Specifies the SPI bidirectional mode state.
0053                                                      This parameter can be a value of @ref SPI_Direction */
0054 
0055   uint32_t DataSize;                          /*!< Specifies the SPI data size.
0056                                                      This parameter can be a value of @ref SPI_Data_Size */
0057 
0058   uint32_t CLKPolarity;                       /*!< Specifies the serial clock steady state.
0059                                                      This parameter can be a value of @ref SPI_Clock_Polarity */
0060 
0061   uint32_t CLKPhase;                          /*!< Specifies the clock active edge for the bit capture.
0062                                                      This parameter can be a value of @ref SPI_Clock_Phase */
0063 
0064   uint32_t NSS;                               /*!< Specifies whether the NSS signal is managed by
0065                                                      hardware (NSS pin) or by software using the SSI bit.
0066                                                      This parameter can be a value of
0067                                                      @ref SPI_Slave_Select_Management */
0068 
0069   uint32_t BaudRatePrescaler;                 /*!< Specifies the Baud Rate prescaler value which will be
0070                                                      used to configure the transmit and receive SCK clock.
0071                                                      This parameter can be a value of @ref SPI_BaudRate_Prescaler
0072                                                      @note The communication clock is derived from the master
0073                                                      clock. The slave clock does not need to be set. */
0074 
0075   uint32_t FirstBit;                          /*!< Specifies whether data transfers start from MSB or LSB bit.
0076                                                      This parameter can be a value of @ref SPI_MSB_LSB_Transmission */
0077 
0078   uint32_t TIMode;                            /*!< Specifies if the TI mode is enabled or not.
0079                                                      This parameter can be a value of @ref SPI_TI_Mode */
0080 
0081   uint32_t CRCCalculation;                    /*!< Specifies if the CRC calculation is enabled or not.
0082                                                      This parameter can be a value of @ref SPI_CRC_Calculation */
0083 
0084   uint32_t CRCPolynomial;                     /*!< Specifies the polynomial used for the CRC calculation.
0085                                                      This parameter must be an odd number between
0086                                                      Min_Data = 0 and Max_Data = 65535 */
0087 
0088   uint32_t CRCLength;                         /*!< Specifies the CRC Length used for the CRC calculation.
0089                                                      This parameter can be a value of @ref SPI_CRC_length */
0090 
0091   uint32_t NSSPMode;                          /*!< Specifies whether the NSSP signal is enabled or not .
0092                                                      This parameter can be a value of @ref SPI_NSSP_Mode
0093                                                      This mode is activated by the SSOM bit in the SPIx_CR2 register
0094                                                      and it takes effect only if the SPI interface is configured
0095                                                      as Motorola SPI master (FRF=0). */
0096 
0097   uint32_t NSSPolarity;                       /*!< Specifies which level of SS input/output external signal
0098                                                      (present on SS pin) is considered as active one.
0099                                                      This parameter can be a value of @ref SPI_NSS_Polarity */
0100 
0101   uint32_t FifoThreshold;                     /*!< Specifies the FIFO threshold level.
0102                                                      This parameter can be a value of @ref SPI_Fifo_Threshold */
0103 
0104   uint32_t TxCRCInitializationPattern;        /*!< Specifies the transmitter CRC initialization Pattern used for
0105                                                      the CRC calculation. This parameter can be a value of
0106                                                      @ref SPI_CRC_Calculation_Initialization_Pattern */
0107 
0108   uint32_t RxCRCInitializationPattern;        /*!< Specifies the receiver CRC initialization Pattern used for
0109                                                      the CRC calculation. This parameter can be a value of
0110                                                      @ref SPI_CRC_Calculation_Initialization_Pattern */
0111 
0112   uint32_t MasterSSIdleness;                  /*!< Specifies an extra delay, expressed in number of SPI clock cycle
0113                                                      periods, inserted additionally between active edge of SS
0114                                                      and first data transaction start in master mode.
0115                                                      This parameter can be a value of @ref SPI_Master_SS_Idleness */
0116 
0117   uint32_t MasterInterDataIdleness;           /*!< Specifies minimum time delay (expressed in SPI clock cycles periods)
0118                                                      inserted between two consecutive data frames in master mode.
0119                                                      This parameter can be a value of
0120                                                      @ref SPI_Master_InterData_Idleness */
0121 
0122   uint32_t MasterReceiverAutoSusp;            /*!< Control continuous SPI transfer in master receiver mode
0123                                                      and automatic management in order to avoid overrun condition.
0124                                                      This parameter can be a value of @ref SPI_Master_RX_AutoSuspend*/
0125 
0126   uint32_t MasterKeepIOState;                 /*!< Control of Alternate function GPIOs state
0127                                                      This parameter can be a value of @ref SPI_Master_Keep_IO_State */
0128 
0129   uint32_t IOSwap;                            /*!< Invert MISO/MOSI alternate functions
0130                                                      This parameter can be a value of @ref SPI_IO_Swap */
0131 } SPI_InitTypeDef;
0132 
0133 /**
0134   * @brief  HAL SPI State structure definition
0135   */
0136 typedef enum
0137 {
0138   HAL_SPI_STATE_RESET      = 0x00UL,    /*!< Peripheral not Initialized                         */
0139   HAL_SPI_STATE_READY      = 0x01UL,    /*!< Peripheral Initialized and ready for use           */
0140   HAL_SPI_STATE_BUSY       = 0x02UL,    /*!< an internal process is ongoing                     */
0141   HAL_SPI_STATE_BUSY_TX    = 0x03UL,    /*!< Data Transmission process is ongoing               */
0142   HAL_SPI_STATE_BUSY_RX    = 0x04UL,    /*!< Data Reception process is ongoing                  */
0143   HAL_SPI_STATE_BUSY_TX_RX = 0x05UL,    /*!< Data Transmission and Reception process is ongoing */
0144   HAL_SPI_STATE_ERROR      = 0x06UL,    /*!< SPI error state                                    */
0145   HAL_SPI_STATE_ABORT      = 0x07UL     /*!< SPI abort is ongoing                               */
0146 } HAL_SPI_StateTypeDef;
0147 
0148 #if defined(USE_SPI_RELOAD_TRANSFER)
0149 /**
0150   * @brief  SPI Reload Structure definition
0151   */
0152 typedef struct
0153 {
0154   const uint8_t              *pTxBuffPtr;                  /*!< Pointer to SPI Tx transfer Buffer        */
0155 
0156   uint16_t                   TxXferSize;                   /*!< SPI Tx Transfer size to reload           */
0157 
0158   uint8_t                    *pRxBuffPtr;                  /*!< Pointer to SPI Rx transfer Buffer        */
0159 
0160   uint16_t                   RxXferSize;                   /*!< SPI Rx Transfer size to reload           */
0161 
0162   uint32_t                   Requested;                    /*!< SPI reload request                       */
0163 
0164 } SPI_ReloadTypeDef;
0165 #endif /* USE_SPI_RELOAD_TRANSFER */
0166 
0167 /**
0168   * @brief  SPI handle Structure definition
0169   */
0170 typedef struct __SPI_HandleTypeDef
0171 {
0172   SPI_TypeDef                *Instance;                    /*!< SPI registers base address               */
0173 
0174   SPI_InitTypeDef            Init;                         /*!< SPI communication parameters             */
0175 
0176   const uint8_t              *pTxBuffPtr;                  /*!< Pointer to SPI Tx transfer Buffer        */
0177 
0178   uint16_t                   TxXferSize;                   /*!< SPI Tx Transfer size                     */
0179 
0180   __IO uint16_t              TxXferCount;                  /*!< SPI Tx Transfer Counter                  */
0181 
0182   uint8_t                    *pRxBuffPtr;                  /*!< Pointer to SPI Rx transfer Buffer        */
0183 
0184   uint16_t                   RxXferSize;                   /*!< SPI Rx Transfer size                     */
0185 
0186   __IO uint16_t              RxXferCount;                  /*!< SPI Rx Transfer Counter                  */
0187 
0188   uint32_t                   CRCSize;                      /*!< SPI CRC size used for the transfer       */
0189 
0190   void (*RxISR)(struct __SPI_HandleTypeDef *hspi);         /*!< function pointer on Rx ISR               */
0191 
0192   void (*TxISR)(struct __SPI_HandleTypeDef *hspi);         /*!< function pointer on Tx ISR               */
0193 
0194   DMA_HandleTypeDef          *hdmatx;                      /*!< SPI Tx DMA Handle parameters             */
0195 
0196   DMA_HandleTypeDef          *hdmarx;                      /*!< SPI Rx DMA Handle parameters             */
0197 
0198   HAL_LockTypeDef            Lock;                         /*!< Locking object                           */
0199 
0200   __IO HAL_SPI_StateTypeDef  State;                        /*!< SPI communication state                  */
0201 
0202   __IO uint32_t              ErrorCode;                    /*!< SPI Error code                           */
0203 
0204 #if defined(USE_SPI_RELOAD_TRANSFER)
0205 
0206   SPI_ReloadTypeDef          Reload;                       /*!< SPI reload parameters                    */
0207 
0208 #endif /* USE_SPI_RELOAD_TRANSFER */
0209 
0210 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL)
0211   void (* TxCpltCallback)(struct __SPI_HandleTypeDef *hspi);       /*!< SPI Tx Completed callback          */
0212   void (* RxCpltCallback)(struct __SPI_HandleTypeDef *hspi);       /*!< SPI Rx Completed callback          */
0213   void (* TxRxCpltCallback)(struct __SPI_HandleTypeDef *hspi);     /*!< SPI TxRx Completed callback        */
0214   void (* TxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi);   /*!< SPI Tx Half Completed callback     */
0215   void (* RxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi);   /*!< SPI Rx Half Completed callback     */
0216   void (* TxRxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI TxRx Half Completed callback   */
0217   void (* ErrorCallback)(struct __SPI_HandleTypeDef *hspi);        /*!< SPI Error callback                 */
0218   void (* AbortCpltCallback)(struct __SPI_HandleTypeDef *hspi);    /*!< SPI Abort callback                 */
0219   void (* SuspendCallback)(struct __SPI_HandleTypeDef *hspi);      /*!< SPI Suspend callback               */
0220   void (* MspInitCallback)(struct __SPI_HandleTypeDef *hspi);      /*!< SPI Msp Init callback              */
0221   void (* MspDeInitCallback)(struct __SPI_HandleTypeDef *hspi);    /*!< SPI Msp DeInit callback            */
0222 
0223 #endif  /* USE_HAL_SPI_REGISTER_CALLBACKS */
0224 } SPI_HandleTypeDef;
0225 
0226 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL)
0227 /**
0228   * @brief  HAL SPI Callback ID enumeration definition
0229   */
0230 typedef enum
0231 {
0232   HAL_SPI_TX_COMPLETE_CB_ID             = 0x00UL,    /*!< SPI Tx Completed callback ID         */
0233   HAL_SPI_RX_COMPLETE_CB_ID             = 0x01UL,    /*!< SPI Rx Completed callback ID         */
0234   HAL_SPI_TX_RX_COMPLETE_CB_ID          = 0x02UL,    /*!< SPI TxRx Completed callback ID       */
0235   HAL_SPI_TX_HALF_COMPLETE_CB_ID        = 0x03UL,    /*!< SPI Tx Half Completed callback ID    */
0236   HAL_SPI_RX_HALF_COMPLETE_CB_ID        = 0x04UL,    /*!< SPI Rx Half Completed callback ID    */
0237   HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID     = 0x05UL,    /*!< SPI TxRx Half Completed callback ID  */
0238   HAL_SPI_ERROR_CB_ID                   = 0x06UL,    /*!< SPI Error callback ID                */
0239   HAL_SPI_ABORT_CB_ID                   = 0x07UL,    /*!< SPI Abort callback ID                */
0240   HAL_SPI_SUSPEND_CB_ID                 = 0x08UL,    /*!< SPI Suspend callback ID              */
0241   HAL_SPI_MSPINIT_CB_ID                 = 0x09UL,    /*!< SPI Msp Init callback ID             */
0242   HAL_SPI_MSPDEINIT_CB_ID               = 0x0AUL     /*!< SPI Msp DeInit callback ID           */
0243 
0244 } HAL_SPI_CallbackIDTypeDef;
0245 
0246 /**
0247   * @brief  HAL SPI Callback pointer definition
0248   */
0249 typedef  void (*pSPI_CallbackTypeDef)(SPI_HandleTypeDef *hspi); /*!< pointer to an SPI callback function */
0250 
0251 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
0252 /**
0253   * @}
0254   */
0255 
0256 /* Exported constants --------------------------------------------------------*/
0257 
0258 /** @defgroup SPI_Exported_Constants SPI Exported Constants
0259   * @ingroup RTEMSBSPsARMSTM32H7
0260   * @{
0261   */
0262 
0263 /** @defgroup SPI_FIFO_Type SPI FIFO Type
0264   * @ingroup RTEMSBSPsARMSTM32H7
0265   * @{
0266   */
0267 #define SPI_LOWEND_FIFO_SIZE                          8UL
0268 #define SPI_HIGHEND_FIFO_SIZE                         16UL
0269 /**
0270   * @}
0271   */
0272 
0273 /** @defgroup SPI_Error_Code SPI Error Codes
0274   * @ingroup RTEMSBSPsARMSTM32H7
0275   * @{
0276   */
0277 #define HAL_SPI_ERROR_NONE                            (0x00000000UL)   /*!< No error                               */
0278 #define HAL_SPI_ERROR_MODF                            (0x00000001UL)   /*!< MODF error                             */
0279 #define HAL_SPI_ERROR_CRC                             (0x00000002UL)   /*!< CRC error                              */
0280 #define HAL_SPI_ERROR_OVR                             (0x00000004UL)   /*!< OVR error                              */
0281 #define HAL_SPI_ERROR_FRE                             (0x00000008UL)   /*!< FRE error                              */
0282 #define HAL_SPI_ERROR_DMA                             (0x00000010UL)   /*!< DMA transfer error                     */
0283 #define HAL_SPI_ERROR_FLAG                            (0x00000020UL)   /*!< Error on RXP/TXP/DXP/FTLVL/FRLVL Flag  */
0284 #define HAL_SPI_ERROR_ABORT                           (0x00000040UL)   /*!< Error during SPI Abort procedure       */
0285 #define HAL_SPI_ERROR_UDR                             (0x00000080UL)   /*!< Underrun error                         */
0286 #define HAL_SPI_ERROR_TIMEOUT                         (0x00000100UL)   /*!< Timeout error                          */
0287 #define HAL_SPI_ERROR_UNKNOW                          (0x00000200UL)   /*!< Unknown error                          */
0288 #define HAL_SPI_ERROR_NOT_SUPPORTED                   (0x00000400UL)   /*!< Requested operation not supported      */
0289 #define HAL_SPI_ERROR_RELOAD                          (0x00000800UL)   /*!< Reload error                           */
0290 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL)
0291 #define HAL_SPI_ERROR_INVALID_CALLBACK                (0x00001000UL)   /*!< Invalid Callback error                 */
0292 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
0293 /**
0294   * @}
0295   */
0296 
0297 /** @defgroup SPI_Mode SPI Mode
0298   * @ingroup RTEMSBSPsARMSTM32H7
0299   * @{
0300   */
0301 #define SPI_MODE_SLAVE                                (0x00000000UL)
0302 #define SPI_MODE_MASTER                               SPI_CFG2_MASTER
0303 /**
0304   * @}
0305   */
0306 
0307 /** @defgroup SPI_Direction SPI Direction Mode
0308   * @ingroup RTEMSBSPsARMSTM32H7
0309   * @{
0310   */
0311 #define SPI_DIRECTION_2LINES                          (0x00000000UL)
0312 #define SPI_DIRECTION_2LINES_TXONLY                   SPI_CFG2_COMM_0
0313 #define SPI_DIRECTION_2LINES_RXONLY                   SPI_CFG2_COMM_1
0314 #define SPI_DIRECTION_1LINE                           SPI_CFG2_COMM
0315 /**
0316   * @}
0317   */
0318 
0319 /** @defgroup SPI_Data_Size SPI Data Size
0320   * @ingroup RTEMSBSPsARMSTM32H7
0321   * @{
0322   */
0323 #define SPI_DATASIZE_4BIT                             (0x00000003UL)
0324 #define SPI_DATASIZE_5BIT                             (0x00000004UL)
0325 #define SPI_DATASIZE_6BIT                             (0x00000005UL)
0326 #define SPI_DATASIZE_7BIT                             (0x00000006UL)
0327 #define SPI_DATASIZE_8BIT                             (0x00000007UL)
0328 #define SPI_DATASIZE_9BIT                             (0x00000008UL)
0329 #define SPI_DATASIZE_10BIT                            (0x00000009UL)
0330 #define SPI_DATASIZE_11BIT                            (0x0000000AUL)
0331 #define SPI_DATASIZE_12BIT                            (0x0000000BUL)
0332 #define SPI_DATASIZE_13BIT                            (0x0000000CUL)
0333 #define SPI_DATASIZE_14BIT                            (0x0000000DUL)
0334 #define SPI_DATASIZE_15BIT                            (0x0000000EUL)
0335 #define SPI_DATASIZE_16BIT                            (0x0000000FUL)
0336 #define SPI_DATASIZE_17BIT                            (0x00000010UL)
0337 #define SPI_DATASIZE_18BIT                            (0x00000011UL)
0338 #define SPI_DATASIZE_19BIT                            (0x00000012UL)
0339 #define SPI_DATASIZE_20BIT                            (0x00000013UL)
0340 #define SPI_DATASIZE_21BIT                            (0x00000014UL)
0341 #define SPI_DATASIZE_22BIT                            (0x00000015UL)
0342 #define SPI_DATASIZE_23BIT                            (0x00000016UL)
0343 #define SPI_DATASIZE_24BIT                            (0x00000017UL)
0344 #define SPI_DATASIZE_25BIT                            (0x00000018UL)
0345 #define SPI_DATASIZE_26BIT                            (0x00000019UL)
0346 #define SPI_DATASIZE_27BIT                            (0x0000001AUL)
0347 #define SPI_DATASIZE_28BIT                            (0x0000001BUL)
0348 #define SPI_DATASIZE_29BIT                            (0x0000001CUL)
0349 #define SPI_DATASIZE_30BIT                            (0x0000001DUL)
0350 #define SPI_DATASIZE_31BIT                            (0x0000001EUL)
0351 #define SPI_DATASIZE_32BIT                            (0x0000001FUL)
0352 /**
0353   * @}
0354   */
0355 
0356 /** @defgroup SPI_Clock_Polarity SPI Clock Polarity
0357   * @ingroup RTEMSBSPsARMSTM32H7
0358   * @{
0359   */
0360 #define SPI_POLARITY_LOW                              (0x00000000UL)
0361 #define SPI_POLARITY_HIGH                             SPI_CFG2_CPOL
0362 /**
0363   * @}
0364   */
0365 
0366 /** @defgroup SPI_Clock_Phase SPI Clock Phase
0367   * @ingroup RTEMSBSPsARMSTM32H7
0368   * @{
0369   */
0370 #define SPI_PHASE_1EDGE                               (0x00000000UL)
0371 #define SPI_PHASE_2EDGE                               SPI_CFG2_CPHA
0372 /**
0373   * @}
0374   */
0375 
0376 /** @defgroup SPI_Slave_Select_Management SPI Slave Select Management
0377   * @ingroup RTEMSBSPsARMSTM32H7
0378   * @{
0379   */
0380 #define SPI_NSS_SOFT                                  SPI_CFG2_SSM
0381 #define SPI_NSS_HARD_INPUT                            (0x00000000UL)
0382 #define SPI_NSS_HARD_OUTPUT                           SPI_CFG2_SSOE
0383 /**
0384   * @}
0385   */
0386 
0387 /** @defgroup SPI_NSSP_Mode SPI NSS Pulse Mode
0388   * @ingroup RTEMSBSPsARMSTM32H7
0389   * @{
0390   */
0391 #define SPI_NSS_PULSE_DISABLE                         (0x00000000UL)
0392 #define SPI_NSS_PULSE_ENABLE                          SPI_CFG2_SSOM
0393 /**
0394   * @}
0395   */
0396 
0397 /** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler
0398   * @ingroup RTEMSBSPsARMSTM32H7
0399   * @{
0400   */
0401 #define SPI_BAUDRATEPRESCALER_2                       (0x00000000UL)
0402 #define SPI_BAUDRATEPRESCALER_4                       (0x10000000UL)
0403 #define SPI_BAUDRATEPRESCALER_8                       (0x20000000UL)
0404 #define SPI_BAUDRATEPRESCALER_16                      (0x30000000UL)
0405 #define SPI_BAUDRATEPRESCALER_32                      (0x40000000UL)
0406 #define SPI_BAUDRATEPRESCALER_64                      (0x50000000UL)
0407 #define SPI_BAUDRATEPRESCALER_128                     (0x60000000UL)
0408 #define SPI_BAUDRATEPRESCALER_256                     (0x70000000UL)
0409 /**
0410   * @}
0411   */
0412 
0413 /** @defgroup SPI_MSB_LSB_Transmission SPI MSB LSB Transmission
0414   * @ingroup RTEMSBSPsARMSTM32H7
0415   * @{
0416   */
0417 #define SPI_FIRSTBIT_MSB                              (0x00000000UL)
0418 #define SPI_FIRSTBIT_LSB                              SPI_CFG2_LSBFRST
0419 /**
0420   * @}
0421   */
0422 
0423 /** @defgroup SPI_TI_Mode SPI TI Mode
0424   * @ingroup RTEMSBSPsARMSTM32H7
0425   * @{
0426   */
0427 #define SPI_TIMODE_DISABLE                            (0x00000000UL)
0428 #define SPI_TIMODE_ENABLE                             SPI_CFG2_SP_0
0429 /**
0430   * @}
0431   */
0432 
0433 /** @defgroup SPI_CRC_Calculation SPI CRC Calculation
0434   * @ingroup RTEMSBSPsARMSTM32H7
0435   * @{
0436   */
0437 #define SPI_CRCCALCULATION_DISABLE                    (0x00000000UL)
0438 #define SPI_CRCCALCULATION_ENABLE                     SPI_CFG1_CRCEN
0439 /**
0440   * @}
0441   */
0442 
0443 /** @defgroup SPI_CRC_length SPI CRC Length
0444   * @ingroup RTEMSBSPsARMSTM32H7
0445   * @{
0446   */
0447 #define SPI_CRC_LENGTH_DATASIZE                       (0x00000000UL)
0448 #define SPI_CRC_LENGTH_4BIT                           (0x00030000UL)
0449 #define SPI_CRC_LENGTH_5BIT                           (0x00040000UL)
0450 #define SPI_CRC_LENGTH_6BIT                           (0x00050000UL)
0451 #define SPI_CRC_LENGTH_7BIT                           (0x00060000UL)
0452 #define SPI_CRC_LENGTH_8BIT                           (0x00070000UL)
0453 #define SPI_CRC_LENGTH_9BIT                           (0x00080000UL)
0454 #define SPI_CRC_LENGTH_10BIT                          (0x00090000UL)
0455 #define SPI_CRC_LENGTH_11BIT                          (0x000A0000UL)
0456 #define SPI_CRC_LENGTH_12BIT                          (0x000B0000UL)
0457 #define SPI_CRC_LENGTH_13BIT                          (0x000C0000UL)
0458 #define SPI_CRC_LENGTH_14BIT                          (0x000D0000UL)
0459 #define SPI_CRC_LENGTH_15BIT                          (0x000E0000UL)
0460 #define SPI_CRC_LENGTH_16BIT                          (0x000F0000UL)
0461 #define SPI_CRC_LENGTH_17BIT                          (0x00100000UL)
0462 #define SPI_CRC_LENGTH_18BIT                          (0x00110000UL)
0463 #define SPI_CRC_LENGTH_19BIT                          (0x00120000UL)
0464 #define SPI_CRC_LENGTH_20BIT                          (0x00130000UL)
0465 #define SPI_CRC_LENGTH_21BIT                          (0x00140000UL)
0466 #define SPI_CRC_LENGTH_22BIT                          (0x00150000UL)
0467 #define SPI_CRC_LENGTH_23BIT                          (0x00160000UL)
0468 #define SPI_CRC_LENGTH_24BIT                          (0x00170000UL)
0469 #define SPI_CRC_LENGTH_25BIT                          (0x00180000UL)
0470 #define SPI_CRC_LENGTH_26BIT                          (0x00190000UL)
0471 #define SPI_CRC_LENGTH_27BIT                          (0x001A0000UL)
0472 #define SPI_CRC_LENGTH_28BIT                          (0x001B0000UL)
0473 #define SPI_CRC_LENGTH_29BIT                          (0x001C0000UL)
0474 #define SPI_CRC_LENGTH_30BIT                          (0x001D0000UL)
0475 #define SPI_CRC_LENGTH_31BIT                          (0x001E0000UL)
0476 #define SPI_CRC_LENGTH_32BIT                          (0x001F0000UL)
0477 /**
0478   * @}
0479   */
0480 
0481 /** @defgroup SPI_Fifo_Threshold SPI Fifo Threshold
0482   * @ingroup RTEMSBSPsARMSTM32H7
0483   * @{
0484   */
0485 #define SPI_FIFO_THRESHOLD_01DATA                     (0x00000000UL)
0486 #define SPI_FIFO_THRESHOLD_02DATA                     (0x00000020UL)
0487 #define SPI_FIFO_THRESHOLD_03DATA                     (0x00000040UL)
0488 #define SPI_FIFO_THRESHOLD_04DATA                     (0x00000060UL)
0489 #define SPI_FIFO_THRESHOLD_05DATA                     (0x00000080UL)
0490 #define SPI_FIFO_THRESHOLD_06DATA                     (0x000000A0UL)
0491 #define SPI_FIFO_THRESHOLD_07DATA                     (0x000000C0UL)
0492 #define SPI_FIFO_THRESHOLD_08DATA                     (0x000000E0UL)
0493 #define SPI_FIFO_THRESHOLD_09DATA                     (0x00000100UL)
0494 #define SPI_FIFO_THRESHOLD_10DATA                     (0x00000120UL)
0495 #define SPI_FIFO_THRESHOLD_11DATA                     (0x00000140UL)
0496 #define SPI_FIFO_THRESHOLD_12DATA                     (0x00000160UL)
0497 #define SPI_FIFO_THRESHOLD_13DATA                     (0x00000180UL)
0498 #define SPI_FIFO_THRESHOLD_14DATA                     (0x000001A0UL)
0499 #define SPI_FIFO_THRESHOLD_15DATA                     (0x000001C0UL)
0500 #define SPI_FIFO_THRESHOLD_16DATA                     (0x000001E0UL)
0501 /**
0502   * @}
0503   */
0504 
0505 /** @defgroup SPI_CRC_Calculation_Initialization_Pattern SPI CRC Calculation Initialization Pattern
0506   * @ingroup RTEMSBSPsARMSTM32H7
0507   * @{
0508   */
0509 #define SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN       (0x00000000UL)
0510 #define SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN        (0x00000001UL)
0511 /**
0512   * @}
0513   */
0514 
0515 /** @defgroup SPI_NSS_Polarity SPI NSS Polarity
0516   * @ingroup RTEMSBSPsARMSTM32H7
0517   * @{
0518   */
0519 #define SPI_NSS_POLARITY_LOW                          (0x00000000UL)
0520 #define SPI_NSS_POLARITY_HIGH                          SPI_CFG2_SSIOP
0521 /**
0522   * @}
0523   */
0524 
0525 /** @defgroup SPI_Master_Keep_IO_State Keep IO State
0526   * @ingroup RTEMSBSPsARMSTM32H7
0527   * @{
0528   */
0529 #define SPI_MASTER_KEEP_IO_STATE_DISABLE              (0x00000000UL)
0530 #define SPI_MASTER_KEEP_IO_STATE_ENABLE               SPI_CFG2_AFCNTR
0531 /**
0532   * @}
0533   */
0534 
0535 /** @defgroup SPI_IO_Swap Control SPI IO Swap
0536   * @ingroup RTEMSBSPsARMSTM32H7
0537   * @{
0538   */
0539 #define SPI_IO_SWAP_DISABLE                           (0x00000000UL)
0540 #define SPI_IO_SWAP_ENABLE                            SPI_CFG2_IOSWP
0541 /**
0542   * @}
0543   */
0544 
0545 /** @defgroup SPI_Master_SS_Idleness SPI Master SS Idleness
0546   * @ingroup RTEMSBSPsARMSTM32H7
0547   * @{
0548   */
0549 #define SPI_MASTER_SS_IDLENESS_00CYCLE                (0x00000000UL)
0550 #define SPI_MASTER_SS_IDLENESS_01CYCLE                (0x00000001UL)
0551 #define SPI_MASTER_SS_IDLENESS_02CYCLE                (0x00000002UL)
0552 #define SPI_MASTER_SS_IDLENESS_03CYCLE                (0x00000003UL)
0553 #define SPI_MASTER_SS_IDLENESS_04CYCLE                (0x00000004UL)
0554 #define SPI_MASTER_SS_IDLENESS_05CYCLE                (0x00000005UL)
0555 #define SPI_MASTER_SS_IDLENESS_06CYCLE                (0x00000006UL)
0556 #define SPI_MASTER_SS_IDLENESS_07CYCLE                (0x00000007UL)
0557 #define SPI_MASTER_SS_IDLENESS_08CYCLE                (0x00000008UL)
0558 #define SPI_MASTER_SS_IDLENESS_09CYCLE                (0x00000009UL)
0559 #define SPI_MASTER_SS_IDLENESS_10CYCLE                (0x0000000AUL)
0560 #define SPI_MASTER_SS_IDLENESS_11CYCLE                (0x0000000BUL)
0561 #define SPI_MASTER_SS_IDLENESS_12CYCLE                (0x0000000CUL)
0562 #define SPI_MASTER_SS_IDLENESS_13CYCLE                (0x0000000DUL)
0563 #define SPI_MASTER_SS_IDLENESS_14CYCLE                (0x0000000EUL)
0564 #define SPI_MASTER_SS_IDLENESS_15CYCLE                (0x0000000FUL)
0565 /**
0566   * @}
0567   */
0568 
0569 /** @defgroup SPI_Master_InterData_Idleness SPI Master Inter-Data Idleness
0570   * @ingroup RTEMSBSPsARMSTM32H7
0571   * @{
0572   */
0573 #define SPI_MASTER_INTERDATA_IDLENESS_00CYCLE         (0x00000000UL)
0574 #define SPI_MASTER_INTERDATA_IDLENESS_01CYCLE         (0x00000010UL)
0575 #define SPI_MASTER_INTERDATA_IDLENESS_02CYCLE         (0x00000020UL)
0576 #define SPI_MASTER_INTERDATA_IDLENESS_03CYCLE         (0x00000030UL)
0577 #define SPI_MASTER_INTERDATA_IDLENESS_04CYCLE         (0x00000040UL)
0578 #define SPI_MASTER_INTERDATA_IDLENESS_05CYCLE         (0x00000050UL)
0579 #define SPI_MASTER_INTERDATA_IDLENESS_06CYCLE         (0x00000060UL)
0580 #define SPI_MASTER_INTERDATA_IDLENESS_07CYCLE         (0x00000070UL)
0581 #define SPI_MASTER_INTERDATA_IDLENESS_08CYCLE         (0x00000080UL)
0582 #define SPI_MASTER_INTERDATA_IDLENESS_09CYCLE         (0x00000090UL)
0583 #define SPI_MASTER_INTERDATA_IDLENESS_10CYCLE         (0x000000A0UL)
0584 #define SPI_MASTER_INTERDATA_IDLENESS_11CYCLE         (0x000000B0UL)
0585 #define SPI_MASTER_INTERDATA_IDLENESS_12CYCLE         (0x000000C0UL)
0586 #define SPI_MASTER_INTERDATA_IDLENESS_13CYCLE         (0x000000D0UL)
0587 #define SPI_MASTER_INTERDATA_IDLENESS_14CYCLE         (0x000000E0UL)
0588 #define SPI_MASTER_INTERDATA_IDLENESS_15CYCLE         (0x000000F0UL)
0589 /**
0590   * @}
0591   */
0592 
0593 /** @defgroup SPI_Master_RX_AutoSuspend SPI Master Receiver AutoSuspend
0594   * @ingroup RTEMSBSPsARMSTM32H7
0595   * @{
0596   */
0597 #define SPI_MASTER_RX_AUTOSUSP_DISABLE                (0x00000000UL)
0598 #define SPI_MASTER_RX_AUTOSUSP_ENABLE                 SPI_CR1_MASRX
0599 /**
0600   * @}
0601   */
0602 
0603 /** @defgroup SPI_Underrun_Behaviour SPI Underrun Behavior
0604   * @ingroup RTEMSBSPsARMSTM32H7
0605   * @{
0606   */
0607 #define SPI_UNDERRUN_BEHAV_REGISTER_PATTERN           (0x00000000UL)
0608 #define SPI_UNDERRUN_BEHAV_LAST_RECEIVED              SPI_CFG1_UDRCFG_0
0609 #define SPI_UNDERRUN_BEHAV_LAST_TRANSMITTED           SPI_CFG1_UDRCFG_1
0610 /**
0611   * @}
0612   */
0613 
0614 /** @defgroup SPI_Underrun_Detection SPI Underrun Detection
0615   * @ingroup RTEMSBSPsARMSTM32H7
0616   * @{
0617   */
0618 #define SPI_UNDERRUN_DETECT_BEGIN_DATA_FRAME          (0x00000000UL)
0619 #define SPI_UNDERRUN_DETECT_END_DATA_FRAME            SPI_CFG1_UDRDET_0
0620 #define SPI_UNDERRUN_DETECT_BEGIN_ACTIVE_NSS          SPI_CFG1_UDRDET_1
0621 /**
0622   * @}
0623   */
0624 
0625 /** @defgroup SPI_Interrupt_definition SPI Interrupt Definition
0626   * @ingroup RTEMSBSPsARMSTM32H7
0627   * @{
0628   */
0629 #define SPI_IT_RXP                      SPI_IER_RXPIE
0630 #define SPI_IT_TXP                      SPI_IER_TXPIE
0631 #define SPI_IT_DXP                      SPI_IER_DXPIE
0632 #define SPI_IT_EOT                      SPI_IER_EOTIE
0633 #define SPI_IT_TXTF                     SPI_IER_TXTFIE
0634 #define SPI_IT_UDR                      SPI_IER_UDRIE
0635 #define SPI_IT_OVR                      SPI_IER_OVRIE
0636 #define SPI_IT_CRCERR                   SPI_IER_CRCEIE
0637 #define SPI_IT_FRE                      SPI_IER_TIFREIE
0638 #define SPI_IT_MODF                     SPI_IER_MODFIE
0639 #define SPI_IT_TSERF                    SPI_IER_TSERFIE
0640 #define SPI_IT_ERR                      (SPI_IT_UDR | SPI_IT_OVR | SPI_IT_FRE | SPI_IT_MODF | SPI_IT_CRCERR)
0641 /**
0642   * @}
0643   */
0644 
0645 /** @defgroup SPI_Flags_definition SPI Flags Definition
0646   * @ingroup RTEMSBSPsARMSTM32H7
0647   * @{
0648   */
0649 #define SPI_FLAG_RXP                    SPI_SR_RXP     /* SPI status flag : Rx-Packet available flag                 */
0650 #define SPI_FLAG_TXP                    SPI_SR_TXP     /* SPI status flag : Tx-Packet space available flag           */
0651 #define SPI_FLAG_DXP                    SPI_SR_DXP     /* SPI status flag : Duplex Packet flag                       */
0652 #define SPI_FLAG_EOT                    SPI_SR_EOT     /* SPI status flag : End of transfer flag                     */
0653 #define SPI_FLAG_TXTF                   SPI_SR_TXTF    /* SPI status flag : Transmission Transfer Filled flag        */
0654 #define SPI_FLAG_UDR                    SPI_SR_UDR     /* SPI Error flag  : Underrun flag                            */
0655 #define SPI_FLAG_OVR                    SPI_SR_OVR     /* SPI Error flag  : Overrun flag                             */
0656 #define SPI_FLAG_CRCERR                 SPI_SR_CRCE    /* SPI Error flag  : CRC error flag                           */
0657 #define SPI_FLAG_FRE                    SPI_SR_TIFRE   /* SPI Error flag  : TI mode frame format error flag          */
0658 #define SPI_FLAG_MODF                   SPI_SR_MODF    /* SPI Error flag  : Mode fault flag                          */
0659 #define SPI_FLAG_TSERF                  SPI_SR_TSERF   /* SPI status flag : Additional number of data reloaded flag  */
0660 #define SPI_FLAG_SUSP                   SPI_SR_SUSP    /* SPI status flag : Transfer suspend complete flag           */
0661 #define SPI_FLAG_TXC                    SPI_SR_TXC     /* SPI status flag : TxFIFO transmission complete flag        */
0662 #define SPI_FLAG_FRLVL                  SPI_SR_RXPLVL  /* SPI status flag : Fifo reception level flag                */
0663 #define SPI_FLAG_RXWNE                  SPI_SR_RXWNE   /* SPI status flag : RxFIFO word not empty flag               */
0664 /**
0665   * @}
0666   */
0667 
0668 /** @defgroup SPI_reception_fifo_status_level SPI Reception FIFO Status Level
0669   * @ingroup RTEMSBSPsARMSTM32H7
0670   * @{
0671   */
0672 #define SPI_RX_FIFO_0PACKET             (0x00000000UL)         /* 0 or multiple of 4 packets available in the RxFIFO */
0673 #define SPI_RX_FIFO_1PACKET             (SPI_SR_RXPLVL_0)
0674 #define SPI_RX_FIFO_2PACKET             (SPI_SR_RXPLVL_1)
0675 #define SPI_RX_FIFO_3PACKET             (SPI_SR_RXPLVL_1 | SPI_SR_RXPLVL_0)
0676 /**
0677   * @}
0678   */
0679 
0680 /**
0681   * @}
0682   */
0683 
0684 /* Exported macros -----------------------------------------------------------*/
0685 /** @defgroup SPI_Exported_Macros SPI Exported Macros
0686   * @ingroup RTEMSBSPsARMSTM32H7
0687   * @{
0688   */
0689 
0690 /** @brief  Reset SPI handle state.
0691   * @param  __HANDLE__: specifies the SPI Handle.
0692   *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
0693   * @retval None
0694   */
0695 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL)
0696 #define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__)   do{                                                  \
0697                                                        (__HANDLE__)->State = HAL_SPI_STATE_RESET;       \
0698                                                        (__HANDLE__)->MspInitCallback = NULL;            \
0699                                                        (__HANDLE__)->MspDeInitCallback = NULL;          \
0700                                                      } while(0)
0701 #else
0702 #define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET)
0703 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
0704 
0705 /** @brief  Enable the specified SPI interrupts.
0706   * @param  __HANDLE__: specifies the SPI Handle.
0707   *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
0708   * @param  __INTERRUPT__: specifies the interrupt source to enable or disable.
0709   *         This parameter can be one of the following values:
0710   *            @arg SPI_IT_RXP    : Rx-Packet available interrupt
0711   *            @arg SPI_IT_TXP    : Tx-Packet space available interrupt
0712   *            @arg SPI_IT_DXP    : Duplex Packet interrupt
0713   *            @arg SPI_IT_EOT    : End of transfer interrupt
0714   *            @arg SPI_IT_TXTF   : Transmission Transfer Filled interrupt
0715   *            @arg SPI_IT_UDR    : Underrun interrupt
0716   *            @arg SPI_IT_OVR    : Overrun  interrupt
0717   *            @arg SPI_IT_CRCERR : CRC error interrupt
0718   *            @arg SPI_IT_FRE    : TI mode frame format error interrupt
0719   *            @arg SPI_IT_MODF   : Mode fault interrupt
0720   *            @arg SPI_IT_TSERF  : Additional number of data reloaded interrupt
0721   *            @arg SPI_IT_ERR    : Error interrupt
0722   * @retval None
0723   */
0724 #define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->IER |= (__INTERRUPT__))
0725 
0726 /** @brief  Disable the specified SPI interrupts.
0727   * @param  __HANDLE__: specifies the SPI Handle.
0728   *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
0729   * @param  __INTERRUPT__: specifies the interrupt source to enable or disable.
0730   *         This parameter can be one of the following values:
0731   *            @arg SPI_IT_RXP    : Rx-Packet available interrupt
0732   *            @arg SPI_IT_TXP    : Tx-Packet space available interrupt
0733   *            @arg SPI_IT_DXP    : Duplex Packet interrupt
0734   *            @arg SPI_IT_EOT    : End of transfer interrupt
0735   *            @arg SPI_IT_TXTF   : Transmission Transfer Filled interrupt
0736   *            @arg SPI_IT_UDR    : Underrun interrupt
0737   *            @arg SPI_IT_OVR    : Overrun  interrupt
0738   *            @arg SPI_IT_CRCERR : CRC error interrupt
0739   *            @arg SPI_IT_FRE    : TI mode frame format error interrupt
0740   *            @arg SPI_IT_MODF   : Mode fault interrupt
0741   *            @arg SPI_IT_TSERF  : Additional number of data reloaded interrupt
0742   *            @arg SPI_IT_ERR    : Error interrupt
0743   * @retval None
0744   */
0745 #define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((__HANDLE__)->Instance->IER &= (~(__INTERRUPT__)))
0746 
0747 /** @brief  Check whether the specified SPI interrupt source is enabled or not.
0748   * @param  __HANDLE__: specifies the SPI Handle.
0749   *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
0750   * @param  __INTERRUPT__: specifies the SPI interrupt source to check.
0751   *          This parameter can be one of the following values:
0752   *            @arg SPI_IT_RXP    : Rx-Packet available interrupt
0753   *            @arg SPI_IT_TXP    : Tx-Packet space available interrupt
0754   *            @arg SPI_IT_DXP    : Duplex Packet interrupt
0755   *            @arg SPI_IT_EOT    : End of transfer interrupt
0756   *            @arg SPI_IT_TXTF   : Transmission Transfer Filled interrupt
0757   *            @arg SPI_IT_UDR    : Underrun interrupt
0758   *            @arg SPI_IT_OVR    : Overrun  interrupt
0759   *            @arg SPI_IT_CRCERR : CRC error interrupt
0760   *            @arg SPI_IT_FRE    : TI mode frame format error interrupt
0761   *            @arg SPI_IT_MODF   : Mode fault interrupt
0762   *            @arg SPI_IT_TSERF  : Additional number of data reloaded interrupt
0763   *            @arg SPI_IT_ERR    : Error interrupt
0764   * @retval The new state of __IT__ (TRUE or FALSE).
0765   */
0766 #define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & \
0767                                                               (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
0768 
0769 /** @brief  Check whether the specified SPI flag is set or not.
0770   * @param  __HANDLE__: specifies the SPI Handle.
0771   *         This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral.
0772   * @param  __FLAG__: specifies the flag to check.
0773   *         This parameter can be one of the following values:
0774   *            @arg SPI_FLAG_RXP    : Rx-Packet available flag
0775   *            @arg SPI_FLAG_TXP    : Tx-Packet space available flag
0776   *            @arg SPI_FLAG_DXP    : Duplex Packet flag
0777   *            @arg SPI_FLAG_EOT    : End of transfer flag
0778   *            @arg SPI_FLAG_TXTF   : Transmission Transfer Filled flag
0779   *            @arg SPI_FLAG_UDR    : Underrun flag
0780   *            @arg SPI_FLAG_OVR    : Overrun flag
0781   *            @arg SPI_FLAG_CRCERR : CRC error flag
0782   *            @arg SPI_FLAG_FRE    : TI mode frame format error flag
0783   *            @arg SPI_FLAG_MODF   : Mode fault flag
0784   *            @arg SPI_FLAG_TSERF  : Additional number of data reloaded flag
0785   *            @arg SPI_FLAG_SUSP   : Transfer suspend complete flag
0786   *            @arg SPI_FLAG_TXC    : TxFIFO transmission complete flag
0787   *            @arg SPI_FLAG_FRLVL  : Fifo reception level flag
0788   *            @arg SPI_FLAG_RXWNE  : RxFIFO word not empty flag
0789   * @retval The new state of __FLAG__ (TRUE or FALSE).
0790   */
0791 #define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
0792 
0793 /** @brief  Clear the SPI CRCERR pending flag.
0794   * @param  __HANDLE__: specifies the SPI Handle.
0795   * @retval None
0796   */
0797 #define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_CRCEC)
0798 
0799 /** @brief  Clear the SPI MODF pending flag.
0800   * @param  __HANDLE__: specifies the SPI Handle.
0801   * @retval None
0802   */
0803 #define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__)  SET_BIT((__HANDLE__)->Instance->IFCR , (uint32_t)(SPI_IFCR_MODFC));
0804 
0805 /** @brief  Clear the SPI OVR pending flag.
0806   * @param  __HANDLE__: specifies the SPI Handle.
0807   * @retval None
0808   */
0809 #define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_OVRC)
0810 
0811 /** @brief  Clear the SPI FRE pending flag.
0812   * @param  __HANDLE__: specifies the SPI Handle.
0813   * @retval None
0814   */
0815 #define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_TIFREC)
0816 
0817 /** @brief  Clear the SPI UDR pending flag.
0818   * @param  __HANDLE__: specifies the SPI Handle.
0819   * @retval None
0820   */
0821 #define __HAL_SPI_CLEAR_UDRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_UDRC)
0822 
0823 /** @brief  Clear the SPI EOT pending flag.
0824   * @param  __HANDLE__: specifies the SPI Handle.
0825   * @retval None
0826   */
0827 #define __HAL_SPI_CLEAR_EOTFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_EOTC)
0828 
0829 /** @brief  Clear the SPI UDR pending flag.
0830   * @param  __HANDLE__: specifies the SPI Handle.
0831   * @retval None
0832   */
0833 #define __HAL_SPI_CLEAR_TXTFFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_TXTFC)
0834 
0835 /** @brief  Clear the SPI SUSP pending flag.
0836   * @param  __HANDLE__: specifies the SPI Handle.
0837   * @retval None
0838   */
0839 #define __HAL_SPI_CLEAR_SUSPFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_SUSPC)
0840 
0841 /** @brief  Clear the SPI TSERF pending flag.
0842   * @param  __HANDLE__: specifies the SPI Handle.
0843   * @retval None
0844   */
0845 #define __HAL_SPI_CLEAR_TSERFFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_TSERFC)
0846 
0847 /** @brief  Enable the SPI peripheral.
0848   * @param  __HANDLE__: specifies the SPI Handle.
0849   * @retval None
0850   */
0851 #define __HAL_SPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1 , SPI_CR1_SPE)
0852 
0853 /** @brief  Disable the SPI peripheral.
0854   * @param  __HANDLE__: specifies the SPI Handle.
0855   * @retval None
0856   */
0857 #define __HAL_SPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1 , SPI_CR1_SPE)
0858 /**
0859   * @}
0860   */
0861 
0862 
0863 /* Include SPI HAL Extension module */
0864 #include "stm32h7xx_hal_spi_ex.h"
0865 
0866 
0867 /* Exported functions --------------------------------------------------------*/
0868 /** @addtogroup SPI_Exported_Functions
0869   * @{
0870   */
0871 
0872 /** @addtogroup SPI_Exported_Functions_Group1 Initialization and de-initialization functions
0873   * @{
0874   */
0875 /* Initialization/de-initialization functions  ********************************/
0876 HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi);
0877 HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi);
0878 void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi);
0879 void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi);
0880 
0881 /* Callbacks Register/UnRegister functions  ***********************************/
0882 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
0883 HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID,
0884                                            pSPI_CallbackTypeDef pCallback);
0885 HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID);
0886 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
0887 /**
0888   * @}
0889   */
0890 
0891 /** @addtogroup SPI_Exported_Functions_Group2 IO operation functions
0892   * @{
0893   */
0894 /* I/O operation functions  ***************************************************/
0895 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
0896 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
0897 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData,
0898                                           uint16_t Size, uint32_t Timeout);
0899 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size);
0900 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
0901 HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData,
0902                                              uint16_t Size);
0903 
0904 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size);
0905 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
0906 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData,
0907                                               uint16_t Size);
0908 
0909 #if defined(USE_SPI_RELOAD_TRANSFER)
0910 HAL_StatusTypeDef HAL_SPI_Reload_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size);
0911 HAL_StatusTypeDef HAL_SPI_Reload_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
0912 HAL_StatusTypeDef HAL_SPI_Reload_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData,
0913                                                     uint8_t *pRxData, uint16_t Size);
0914 #endif /* USE_SPI_RELOAD_TRANSFER */
0915 
0916 HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
0917 HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
0918 HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);
0919 
0920 /* Transfer Abort functions */
0921 HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi);
0922 HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi);
0923 
0924 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);
0925 void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
0926 void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi);
0927 void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
0928 void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi);
0929 void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi);
0930 void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi);
0931 void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);
0932 void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi);
0933 void HAL_SPI_SuspendCallback(SPI_HandleTypeDef *hspi);
0934 /**
0935   * @}
0936   */
0937 
0938 /** @addtogroup SPI_Exported_Functions_Group3 Peripheral State and Errors functions
0939   * @{
0940   */
0941 
0942 /* Peripheral State and Error functions ***************************************/
0943 HAL_SPI_StateTypeDef HAL_SPI_GetState(const SPI_HandleTypeDef *hspi);
0944 uint32_t             HAL_SPI_GetError(const SPI_HandleTypeDef *hspi);
0945 /**
0946   * @}
0947   */
0948 
0949 /**
0950   * @}
0951   */
0952 
0953 /* Private macros ------------------------------------------------------------*/
0954 /** @defgroup SPI_Private_Macros SPI Private Macros
0955   * @ingroup RTEMSBSPsARMSTM32H7
0956   * @{
0957   */
0958 
0959 /** @brief  Set the SPI transmit-only mode in 1Line configuration.
0960   * @param  __HANDLE__: specifies the SPI Handle.
0961   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
0962   * @retval None
0963   */
0964 #define SPI_1LINE_TX(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_HDDIR)
0965 
0966 /** @brief  Set the SPI receive-only mode in 1Line configuration.
0967   * @param  __HANDLE__: specifies the SPI Handle.
0968   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
0969   * @retval None
0970   */
0971 #define SPI_1LINE_RX(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_HDDIR)
0972 
0973 /** @brief  Set the SPI transmit-only mode in 2Lines configuration.
0974   * @param  __HANDLE__: specifies the SPI Handle.
0975   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
0976   * @retval None
0977   */
0978 #define SPI_2LINES_TX(__HANDLE__) MODIFY_REG((__HANDLE__)->Instance->CFG2, SPI_CFG2_COMM, SPI_CFG2_COMM_0)
0979 
0980 /** @brief  Set the SPI receive-only mode in 2Lines configuration.
0981   * @param  __HANDLE__: specifies the SPI Handle.
0982   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
0983   * @retval None
0984   */
0985 #define SPI_2LINES_RX(__HANDLE__) MODIFY_REG((__HANDLE__)->Instance->CFG2, SPI_CFG2_COMM, SPI_CFG2_COMM_1)
0986 
0987 /** @brief  Set the SPI Transmit-Receive mode in 2Lines configuration.
0988   * @param  __HANDLE__: specifies the SPI Handle.
0989   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
0990   * @retval None
0991   */
0992 #define SPI_2LINES(__HANDLE__) MODIFY_REG((__HANDLE__)->Instance->CFG2, SPI_CFG2_COMM, 0x00000000UL)
0993 
0994 #define IS_SPI_MODE(MODE)                          (((MODE) == SPI_MODE_SLAVE) || \
0995                                                     ((MODE) == SPI_MODE_MASTER))
0996 
0997 #define IS_SPI_DIRECTION(MODE)                     (((MODE) == SPI_DIRECTION_2LINES)        || \
0998                                                     ((MODE) == SPI_DIRECTION_2LINES_RXONLY) || \
0999                                                     ((MODE) == SPI_DIRECTION_1LINE)         || \
1000                                                     ((MODE) == SPI_DIRECTION_2LINES_TXONLY))
1001 
1002 #define IS_SPI_DIRECTION_2LINES(MODE) ((MODE) == SPI_DIRECTION_2LINES)
1003 
1004 #define IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(MODE) (((MODE) == SPI_DIRECTION_2LINES)|| \
1005                                                               ((MODE) == SPI_DIRECTION_1LINE) || \
1006                                                               ((MODE) == SPI_DIRECTION_2LINES_TXONLY))
1007 
1008 #define IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(MODE) (((MODE) == SPI_DIRECTION_2LINES)|| \
1009                                                               ((MODE) == SPI_DIRECTION_1LINE) || \
1010                                                               ((MODE) == SPI_DIRECTION_2LINES_RXONLY))
1011 
1012 #define IS_SPI_DATASIZE(DATASIZE)                  (((DATASIZE) == SPI_DATASIZE_32BIT) || \
1013                                                     ((DATASIZE) == SPI_DATASIZE_31BIT) || \
1014                                                     ((DATASIZE) == SPI_DATASIZE_30BIT) || \
1015                                                     ((DATASIZE) == SPI_DATASIZE_29BIT) || \
1016                                                     ((DATASIZE) == SPI_DATASIZE_28BIT) || \
1017                                                     ((DATASIZE) == SPI_DATASIZE_27BIT) || \
1018                                                     ((DATASIZE) == SPI_DATASIZE_26BIT) || \
1019                                                     ((DATASIZE) == SPI_DATASIZE_25BIT) || \
1020                                                     ((DATASIZE) == SPI_DATASIZE_24BIT) || \
1021                                                     ((DATASIZE) == SPI_DATASIZE_23BIT) || \
1022                                                     ((DATASIZE) == SPI_DATASIZE_22BIT) || \
1023                                                     ((DATASIZE) == SPI_DATASIZE_21BIT) || \
1024                                                     ((DATASIZE) == SPI_DATASIZE_20BIT) || \
1025                                                     ((DATASIZE) == SPI_DATASIZE_22BIT) || \
1026                                                     ((DATASIZE) == SPI_DATASIZE_19BIT) || \
1027                                                     ((DATASIZE) == SPI_DATASIZE_18BIT) || \
1028                                                     ((DATASIZE) == SPI_DATASIZE_17BIT) || \
1029                                                     ((DATASIZE) == SPI_DATASIZE_16BIT) || \
1030                                                     ((DATASIZE) == SPI_DATASIZE_15BIT) || \
1031                                                     ((DATASIZE) == SPI_DATASIZE_14BIT) || \
1032                                                     ((DATASIZE) == SPI_DATASIZE_13BIT) || \
1033                                                     ((DATASIZE) == SPI_DATASIZE_12BIT) || \
1034                                                     ((DATASIZE) == SPI_DATASIZE_11BIT) || \
1035                                                     ((DATASIZE) == SPI_DATASIZE_10BIT) || \
1036                                                     ((DATASIZE) == SPI_DATASIZE_9BIT)  || \
1037                                                     ((DATASIZE) == SPI_DATASIZE_8BIT)  || \
1038                                                     ((DATASIZE) == SPI_DATASIZE_7BIT)  || \
1039                                                     ((DATASIZE) == SPI_DATASIZE_6BIT)  || \
1040                                                     ((DATASIZE) == SPI_DATASIZE_5BIT)  || \
1041                                                     ((DATASIZE) == SPI_DATASIZE_4BIT))
1042 
1043 #define IS_SPI_FIFOTHRESHOLD(THRESHOLD)            (((THRESHOLD) == SPI_FIFO_THRESHOLD_01DATA) || \
1044                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_02DATA) || \
1045                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_03DATA) || \
1046                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_04DATA) || \
1047                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_05DATA) || \
1048                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_06DATA) || \
1049                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_07DATA) || \
1050                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_08DATA) || \
1051                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_09DATA) || \
1052                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_10DATA) || \
1053                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_11DATA) || \
1054                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_12DATA) || \
1055                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_13DATA) || \
1056                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_14DATA) || \
1057                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_15DATA) || \
1058                                                     ((THRESHOLD) == SPI_FIFO_THRESHOLD_16DATA))
1059 
1060 #define IS_SPI_CPOL(CPOL)                          (((CPOL) == SPI_POLARITY_LOW) || \
1061                                                     ((CPOL) == SPI_POLARITY_HIGH))
1062 
1063 #define IS_SPI_CPHA(CPHA)                          (((CPHA) == SPI_PHASE_1EDGE) || \
1064                                                     ((CPHA) == SPI_PHASE_2EDGE))
1065 
1066 #define IS_SPI_NSS(NSS)                            (((NSS) == SPI_NSS_SOFT)       || \
1067                                                     ((NSS) == SPI_NSS_HARD_INPUT) || \
1068                                                     ((NSS) == SPI_NSS_HARD_OUTPUT))
1069 
1070 #define IS_SPI_NSSP(NSSP)                          (((NSSP) == SPI_NSS_PULSE_ENABLE) || \
1071                                                     ((NSSP) == SPI_NSS_PULSE_DISABLE))
1072 
1073 #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER)       (((PRESCALER) == SPI_BAUDRATEPRESCALER_2)      || \
1074                                                     ((PRESCALER) == SPI_BAUDRATEPRESCALER_4)      || \
1075                                                     ((PRESCALER) == SPI_BAUDRATEPRESCALER_8)      || \
1076                                                     ((PRESCALER) == SPI_BAUDRATEPRESCALER_16)     || \
1077                                                     ((PRESCALER) == SPI_BAUDRATEPRESCALER_32)     || \
1078                                                     ((PRESCALER) == SPI_BAUDRATEPRESCALER_64)     || \
1079                                                     ((PRESCALER) == SPI_BAUDRATEPRESCALER_128)    || \
1080                                                     ((PRESCALER) == SPI_BAUDRATEPRESCALER_256))
1081 
1082 #define IS_SPI_FIRST_BIT(BIT)                      (((BIT) == SPI_FIRSTBIT_MSB) || \
1083                                                     ((BIT) == SPI_FIRSTBIT_LSB))
1084 
1085 #define IS_SPI_TIMODE(MODE)                        (((MODE) == SPI_TIMODE_DISABLE) || \
1086                                                     ((MODE) == SPI_TIMODE_ENABLE))
1087 
1088 #define IS_SPI_CRC_CALCULATION(CALCULATION)        (((CALCULATION) == SPI_CRCCALCULATION_DISABLE) || \
1089                                                     ((CALCULATION) == SPI_CRCCALCULATION_ENABLE))
1090 
1091 #define IS_SPI_CRC_INITIALIZATION_PATTERN(PATTERN) (((PATTERN) == SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN) || \
1092                                                     ((PATTERN) == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN))
1093 
1094 #define IS_SPI_CRC_LENGTH(LENGTH)                  (((LENGTH) == SPI_CRC_LENGTH_DATASIZE) || \
1095                                                     ((LENGTH) == SPI_CRC_LENGTH_32BIT)    || \
1096                                                     ((LENGTH) == SPI_CRC_LENGTH_31BIT)    || \
1097                                                     ((LENGTH) == SPI_CRC_LENGTH_30BIT)    || \
1098                                                     ((LENGTH) == SPI_CRC_LENGTH_29BIT)    || \
1099                                                     ((LENGTH) == SPI_CRC_LENGTH_28BIT)    || \
1100                                                     ((LENGTH) == SPI_CRC_LENGTH_27BIT)    || \
1101                                                     ((LENGTH) == SPI_CRC_LENGTH_26BIT)    || \
1102                                                     ((LENGTH) == SPI_CRC_LENGTH_25BIT)    || \
1103                                                     ((LENGTH) == SPI_CRC_LENGTH_24BIT)    || \
1104                                                     ((LENGTH) == SPI_CRC_LENGTH_23BIT)    || \
1105                                                     ((LENGTH) == SPI_CRC_LENGTH_22BIT)    || \
1106                                                     ((LENGTH) == SPI_CRC_LENGTH_21BIT)    || \
1107                                                     ((LENGTH) == SPI_CRC_LENGTH_20BIT)    || \
1108                                                     ((LENGTH) == SPI_CRC_LENGTH_19BIT)    || \
1109                                                     ((LENGTH) == SPI_CRC_LENGTH_18BIT)    || \
1110                                                     ((LENGTH) == SPI_CRC_LENGTH_17BIT)    || \
1111                                                     ((LENGTH) == SPI_CRC_LENGTH_16BIT)    || \
1112                                                     ((LENGTH) == SPI_CRC_LENGTH_15BIT)    || \
1113                                                     ((LENGTH) == SPI_CRC_LENGTH_14BIT)    || \
1114                                                     ((LENGTH) == SPI_CRC_LENGTH_13BIT)    || \
1115                                                     ((LENGTH) == SPI_CRC_LENGTH_12BIT)    || \
1116                                                     ((LENGTH) == SPI_CRC_LENGTH_11BIT)    || \
1117                                                     ((LENGTH) == SPI_CRC_LENGTH_10BIT)    || \
1118                                                     ((LENGTH) == SPI_CRC_LENGTH_9BIT)     || \
1119                                                     ((LENGTH) == SPI_CRC_LENGTH_8BIT)     || \
1120                                                     ((LENGTH) == SPI_CRC_LENGTH_7BIT)     || \
1121                                                     ((LENGTH) == SPI_CRC_LENGTH_6BIT)     || \
1122                                                     ((LENGTH) == SPI_CRC_LENGTH_5BIT)     || \
1123                                                     ((LENGTH) == SPI_CRC_LENGTH_4BIT))
1124 
1125 
1126 #define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL)          ((POLYNOMIAL) > 0x0UL)
1127 
1128 #define IS_SPI_CRC_POLYNOMIAL_SIZE(POLYNOM, LENGTH) (((POLYNOM) >> (((LENGTH) >> SPI_CFG1_CRCSIZE_Pos) + 1UL)) == 0UL)
1129 
1130 
1131 #define IS_SPI_UNDERRUN_DETECTION(MODE)            (((MODE) == SPI_UNDERRUN_DETECT_BEGIN_DATA_FRAME) || \
1132                                                     ((MODE) == SPI_UNDERRUN_DETECT_END_DATA_FRAME)   || \
1133                                                     ((MODE) == SPI_UNDERRUN_DETECT_BEGIN_ACTIVE_NSS))
1134 
1135 #define IS_SPI_UNDERRUN_BEHAVIOUR(MODE)            (((MODE) == SPI_UNDERRUN_BEHAV_REGISTER_PATTERN) || \
1136                                                     ((MODE) == SPI_UNDERRUN_BEHAV_LAST_RECEIVED)    || \
1137                                                     ((MODE) == SPI_UNDERRUN_BEHAV_LAST_TRANSMITTED))
1138 
1139 #define IS_SPI_MASTER_RX_AUTOSUSP(MODE)            (((MODE) == SPI_MASTER_RX_AUTOSUSP_DISABLE) || \
1140                                                     ((MODE) == SPI_MASTER_RX_AUTOSUSP_ENABLE))
1141 /**
1142   * @}
1143   */
1144 
1145 /**
1146   * @}
1147   */
1148 
1149 /**
1150   * @}
1151   */
1152 
1153 #ifdef __cplusplus
1154 }
1155 #endif
1156 
1157 #endif /* STM32H7xx_HAL_SPI_H */
1158 
1159 /**
1160   * @}
1161   */