Hal Drivers for L4

Dependents:   BSP OneHopeOnePrayer FINAL_AUDIO_RECORD AudioDemo

Fork of STM32L4xx_HAL_Driver by Senior Design: Sound Monitor

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers stm32l4xx_ll_spi.h Source File

stm32l4xx_ll_spi.h

Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32l4xx_ll_spi.h
00004   * @author  MCD Application Team
00005   * @version V1.1.0
00006   * @date    16-September-2015
00007   * @brief   Header file of SPI LL module.
00008   ******************************************************************************
00009   * @attention
00010   *
00011   * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
00012   *
00013   * Redistribution and use in source and binary forms, with or without modification,
00014   * are permitted provided that the following conditions are met:
00015   *   1. Redistributions of source code must retain the above copyright notice,
00016   *      this list of conditions and the following disclaimer.
00017   *   2. Redistributions in binary form must reproduce the above copyright notice,
00018   *      this list of conditions and the following disclaimer in the documentation
00019   *      and/or other materials provided with the distribution.
00020   *   3. Neither the name of STMicroelectronics nor the names of its contributors
00021   *      may be used to endorse or promote products derived from this software
00022   *      without specific prior written permission.
00023   *
00024   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00025   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00026   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00027   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
00028   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00029   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00030   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00032   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034   *
00035   ******************************************************************************
00036   */
00037 
00038 /* Define to prevent recursive inclusion -------------------------------------*/
00039 #ifndef __STM32L4xx_LL_SPI_H
00040 #define __STM32L4xx_LL_SPI_H
00041 
00042 #ifdef __cplusplus
00043 extern "C" {
00044 #endif
00045 
00046 /* Includes ------------------------------------------------------------------*/
00047 #include "stm32l4xx.h"
00048 
00049 /** @addtogroup STM32L4xx_LL_Driver
00050   * @{
00051   */
00052 
00053 #if defined (SPI1) || defined (SPI2) || defined (SPI3)
00054 
00055 /** @defgroup SPI_LL SPI
00056   * @{
00057   */
00058 
00059 /* Private types -------------------------------------------------------------*/
00060 /* Private variables ---------------------------------------------------------*/
00061 
00062 /* Private constants ---------------------------------------------------------*/
00063 
00064 /* Private macros ------------------------------------------------------------*/
00065 
00066 /* Exported types ------------------------------------------------------------*/
00067 /* Exported constants --------------------------------------------------------*/
00068 /** @defgroup SPI_LL_Exported_Constants SPI Exported Constants
00069   * @{
00070   */
00071 
00072 /** @defgroup SPI_LL_EC_GET_FLAG Get Flags Defines
00073   * @brief    Flags defines which can be used with LL_SPI_ReadReg function
00074   * @{
00075   */
00076 #define LL_SPI_SR_RXNE                     SPI_SR_RXNE               /*!< Rx buffer not empty flag         */
00077 #define LL_SPI_SR_TXE                      SPI_SR_TXE                /*!< Tx buffer empty flag             */
00078 #define LL_SPI_SR_BSY                      SPI_SR_BSY                /*!< Busy flag                        */
00079 #define LL_SPI_SR_UDR                      SPI_SR_UDR                /*!< Underrun flag                    */
00080 #define LL_SPI_SR_CRCERR                   SPI_SR_CRCERR             /*!< CRC error flag                   */
00081 #define LL_SPI_SR_MODF                     SPI_SR_MODF               /*!< Mode fault flag                  */
00082 #define LL_SPI_SR_OVR                      SPI_SR_OVR                /*!< Overrun flag                     */
00083 #define LL_SPI_SR_FRE                      SPI_SR_FRE                /*!< TI mode frame format error flag  */
00084 /**
00085   * @}
00086   */
00087 
00088 /** @defgroup SPI_LL_EC_IT IT Defines
00089   * @brief    IT defines which can be used with LL_SPI_ReadReg and  LL_SPI_WriteReg functions
00090   * @{
00091   */
00092 #define LL_SPI_CR2_RXNEIE                  SPI_CR2_RXNEIE            /*!< Rx buffer not empty interrupt enable */
00093 #define LL_SPI_CR2_TXEIE                   SPI_CR2_TXEIE             /*!< Tx buffer empty interrupt enable     */
00094 #define LL_SPI_CR2_ERRIE                   SPI_CR2_ERRIE             /*!< Error interrupt enable               */
00095 /**
00096   * @}
00097   */
00098 
00099 /** @defgroup SPI_LL_EC_MODE MODE
00100   * @{
00101   */
00102 #define LL_SPI_MODE_MASTER                 ((uint32_t)0x00000104)    /*!< Master configuration  */
00103 #define LL_SPI_MODE_SLAVE                  ((uint32_t)0x00000000)    /*!< Slave configuration   */
00104 /**
00105   * @}
00106   */
00107 
00108 /** @defgroup SPI_LL_EC_PROTOCOL PROTOCOL
00109   * @{
00110   */
00111 #define LL_SPI_PROTOCOL_MOTOROLA           ((uint32_t)0x00000000)    /*!< Motorola mode. Used as default value */
00112 #define LL_SPI_PROTOCOL_TI                 (SPI_CR2_FRF)             /*!< TI mode                              */
00113 /**
00114   * @}
00115   */
00116 
00117 /** @defgroup SPI_LL_EC_PHASE PHASE
00118   * @{
00119   */
00120 #define LL_SPI_PHASE_1EDGE                 ((uint32_t)0x00000000)    /*!< First clock transition is the first data capture edge  */
00121 #define LL_SPI_PHASE_2EDGE                 (SPI_CR1_CPHA)            /*!< Second clock transition is the first data capture edge */
00122 /**
00123   * @}
00124   */
00125 
00126 /** @defgroup SPI_LL_EC_POLARITY POLARITY
00127   * @{
00128   */
00129 #define LL_SPI_POLARITY_LOW                ((uint32_t)0x00000000)    /*!< Clock to 0 when idle */
00130 #define LL_SPI_POLARITY_HIGH               (SPI_CR1_CPOL)            /*!< Clock to 1 when idle */
00131 /**
00132   * @}
00133   */
00134 
00135 /** @defgroup SPI_LL_EC_BAUDRATEPRESCALER BAUDRATEPRESCALER
00136   * @{
00137   */
00138 #define LL_SPI_BAUDRATEPRESCALER_DIV2      ((uint32_t)0x00000000)                         /*!< Baudrate control equal to fPCLK/2   */
00139 #define LL_SPI_BAUDRATEPRESCALER_DIV4      (SPI_CR1_BR_0)                                 /*!< Baudrate control equal to fPCLK/4   */
00140 #define LL_SPI_BAUDRATEPRESCALER_DIV8      (SPI_CR1_BR_1)                                 /*!< Baudrate control equal to fPCLK/8   */
00141 #define LL_SPI_BAUDRATEPRESCALER_DIV16     (SPI_CR1_BR_1 | SPI_CR1_BR_0)                  /*!< Baudrate control equal to fPCLK/16  */
00142 #define LL_SPI_BAUDRATEPRESCALER_DIV32     (SPI_CR1_BR_2)                                 /*!< Baudrate control equal to fPCLK/32  */
00143 #define LL_SPI_BAUDRATEPRESCALER_DIV64     (SPI_CR1_BR_2 | SPI_CR1_BR_0)                  /*!< Baudrate control equal to fPCLK/64  */
00144 #define LL_SPI_BAUDRATEPRESCALER_DIV128    (SPI_CR1_BR_2 | SPI_CR1_BR_1)                  /*!< Baudrate control equal to fPCLK/128 */
00145 #define LL_SPI_BAUDRATEPRESCALER_DIV256    (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0)   /*!< Baudrate control equal to fPCLK/256 */
00146 /**
00147   * @}
00148   */
00149 
00150 /** @defgroup SPI_LL_EC_BIT_ORDER TRANSMISSION BIT ORDER
00151   * @{
00152   */
00153 #define LL_SPI_LSB_FIRST                   (SPI_CR1_LSBFIRST)        /*!< Data is transmitted/received withthe LSB first */
00154 #define LL_SPI_MSB_FIRST                   ((uint32_t)0x00000000)    /*!< Data is transmitted/received withthe MSB first */
00155 /**
00156   * @}
00157   */
00158 
00159 /** @defgroup SPI_LL_EC_TRANSFER_MODE TRANSFER MODE
00160   * @{
00161   */
00162 #define LL_SPI_FULL_DUPLEX                 ((uint32_t)0x00000000)    /*!< Full-Duplex mode. Rx and Tx transfer on 2 lines */
00163 #define LL_SPI_SIMPLEX_RX                  (SPI_CR1_RXONLY)          /*!< Simplex Rx mode.  Rx transfer only on 1 line    */
00164 #define LL_SPI_HALF_DUPLEX                 (SPI_CR1_BIDIMODE)        /*!< Half-Duplex mode. Rx or Tx transfer on 1 line   */
00165 /**
00166   * @}
00167   */
00168 
00169 /** @defgroup SPI_LL_EC_DIRECTION_HALF_DUPLEX DIRECTION HALF DUPLEX
00170   * @{
00171   */
00172 #define LL_SPI_DIRECTION_HALF_DUPLEX_TX    (SPI_CR1_BIDIOE)          /*!< Tx transfer selection for Half-Duplex mode */
00173 #define LL_SPI_DIRECTION_HALF_DUPLEX_RX    (0x00000000)              /*!< Rx transfer selection for Half-Duplex mode */
00174 /**
00175   * @}
00176   */
00177 
00178 /** @defgroup SPI_LL_EC_DATAWIDTH DATAWIDTH
00179   * @{
00180   */
00181 #define LL_SPI_DATAWIDTH_4BIT              (SPI_CR2_DS_0 | SPI_CR2_DS_1)                               /*!< Data length for SPI transfer:  4 bits */
00182 #define LL_SPI_DATAWIDTH_5BIT              (SPI_CR2_DS_2)                                              /*!< Data length for SPI transfer:  5 bits */
00183 #define LL_SPI_DATAWIDTH_6BIT              (SPI_CR2_DS_2 | SPI_CR2_DS_0)                               /*!< Data length for SPI transfer:  6 bits */
00184 #define LL_SPI_DATAWIDTH_7BIT              (SPI_CR2_DS_2 | SPI_CR2_DS_1)                               /*!< Data length for SPI transfer:  7 bits */
00185 #define LL_SPI_DATAWIDTH_8BIT              (SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0)                /*!< Data length for SPI transfer:  8 bits */
00186 #define LL_SPI_DATAWIDTH_9BIT              (SPI_CR2_DS_3)                                              /*!< Data length for SPI transfer:  9 bits */
00187 #define LL_SPI_DATAWIDTH_10BIT             (SPI_CR2_DS_3 | SPI_CR2_DS_0)                               /*!< Data length for SPI transfer: 10 bits */
00188 #define LL_SPI_DATAWIDTH_11BIT             (SPI_CR2_DS_3 | SPI_CR2_DS_1)                               /*!< Data length for SPI transfer: 11 bits */
00189 #define LL_SPI_DATAWIDTH_12BIT             (SPI_CR2_DS_3 | SPI_CR2_DS_1 | SPI_CR2_DS_0)                /*!< Data length for SPI transfer: 12 bits */
00190 #define LL_SPI_DATAWIDTH_13BIT             (SPI_CR2_DS_3 | SPI_CR2_DS_2)                               /*!< Data length for SPI transfer: 13 bits */
00191 #define LL_SPI_DATAWIDTH_14BIT             (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_0)                /*!< Data length for SPI transfer: 14 bits */
00192 #define LL_SPI_DATAWIDTH_15BIT             (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1)                /*!< Data length for SPI transfer: 15 bits */
00193 #define LL_SPI_DATAWIDTH_16BIT             (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 16 bits */
00194 /**
00195   * @}
00196   */
00197 
00198 /** @defgroup SPI_LL_EC_RX_FIFO_TH RX FIFO THRESHOLD
00199   * @{
00200   */
00201 #define LL_SPI_RX_FIFO_TH_HALF             ((uint32_t)0x00000000)    /*!< RXNE event is generated if FIFO level is greater than or equel to 1/2 (16-bit) */
00202 #define LL_SPI_RX_FIFO_TH_QUARTER          (SPI_CR2_FRXTH)           /*!< RXNE event is generated if FIFO level is greater than or equel to 1/4 (8-bit)  */
00203 /**
00204   * @}
00205   */
00206 
00207 /** @defgroup SPI_LL_EC_CRC_LENGTH CRC LENGTH
00208   * @{
00209   */
00210 #define LL_SPI_CRC_8BIT                    ((uint32_t)0x00000000)    /*!<  8-bit CRC length */
00211 #define LL_SPI_CRC_16BIT                   (SPI_CR1_CRCL)            /*!< 16-bit CRC length */
00212 /**
00213   * @}
00214   */
00215 
00216 /** @defgroup SPI_LL_EC_NSS_MODE NSS MODE
00217   * @{
00218   */
00219 #define LL_SPI_NSS_SOFT                    (SPI_CR1_SSM)                     /*!< NSS managed internally. NSS pin not used and free              */
00220 #define LL_SPI_NSS_HARD_INPUT              ((uint32_t)0x00000000)            /*!< NSS pin used in Input. Only used in Master mode                */
00221 #define LL_SPI_NSS_HARD_OUTPUT             (((uint32_t)SPI_CR2_SSOE << 16))  /*!< NSS pin used in Output. Only used in Slave mode as chip select */
00222 /**
00223   * @}
00224   */
00225 
00226 /** @defgroup SPI_LL_EC_RX_FIFO RX FIFO LEVEL
00227   * @{
00228   */
00229 #define LL_SPI_RX_FIFO_EMPTY               ((uint32_t)0x00000000)            /*!< FIFO reception empty */
00230 #define LL_SPI_RX_FIFO_QUARTER_FULL        (SPI_SR_FRLVL_0)                  /*!< FIFO reception 1/4   */
00231 #define LL_SPI_RX_FIFO_HALF_FULL           (SPI_SR_FRLVL_1)                  /*!< FIFO reception 1/2   */
00232 #define LL_SPI_RX_FIFO_FULL                (SPI_SR_FRLVL_1 | SPI_SR_FRLVL_0) /*!< FIFO reception full  */
00233 /**
00234   * @}
00235   */
00236 
00237 /** @defgroup SPI_LL_EC_TX_FIFO TX FIFO LEVEL
00238   * @{
00239   */
00240 #define LL_SPI_TX_FIFO_EMPTY               ((uint32_t)0x00000000)            /*!< FIFO transmission empty */
00241 #define LL_SPI_TX_FIFO_QUARTER_FULL        (SPI_SR_FTLVL_0)                  /*!< FIFO transmission 1/4   */
00242 #define LL_SPI_TX_FIFO_HALF_FULL           (SPI_SR_FTLVL_1)                  /*!< FIFO transmission 1/2   */
00243 #define LL_SPI_TX_FIFO_FULL                (SPI_SR_FTLVL_1 | SPI_SR_FTLVL_0) /*!< FIFO transmission full  */
00244 /**
00245   * @}
00246   */
00247 
00248 /** @defgroup SPI_LL_EC_DMA_PARITY DMA PARITY
00249   * @{
00250   */
00251 #define LL_SPI_DMA_PARITY_EVEN             ((uint32_t)0x00000000)    /*!< Select DMA parity Even */
00252 #define LL_SPI_DMA_PARITY_ODD              ((uint32_t)0x00000001)    /*!< Select DMA parity Odd  */
00253 
00254 /**
00255   * @}
00256   */
00257 
00258 /**
00259   * @}
00260   */
00261 
00262 /* Exported macro ------------------------------------------------------------*/
00263 /** @defgroup SPI_LL_Exported_Macros SPI Exported Macros
00264   * @{
00265   */
00266 
00267 /** @defgroup SPI_LL_EM_WRITE_READ Common Write and read registers Macros
00268   * @{
00269   */
00270 
00271 /**
00272   * @brief  Write a value in SPI register
00273   * @param  __INSTANCE__ SPI Instance
00274   * @param  __REG__ Register to be written
00275   * @param  __VALUE__ Value to be written in the register
00276   * @retval None
00277   */
00278 #define LL_SPI_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
00279 
00280 /**
00281   * @brief  Read a value in SPI register
00282   * @param  __INSTANCE__ SPI Instance
00283   * @param  __REG__ Register to be read
00284   * @retval Register value
00285   */
00286 #define LL_SPI_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
00287 /**
00288   * @}
00289   */
00290 
00291 /**
00292   * @}
00293   */
00294 
00295 /* Exported functions --------------------------------------------------------*/
00296 /** @defgroup SPI_LL_Exported_Functions SPI Exported Functions
00297   * @{
00298   */
00299 
00300 /** @defgroup SPI_LL_EF_Configuration Configuration
00301   * @{
00302   */
00303 
00304 /**
00305   * @brief  Enable SPI peripheral
00306   * @rmtoll CR1          SPE           LL_SPI_Enable
00307   * @param  SPIx SPI Instance
00308   * @retval None
00309   */
00310 __STATIC_INLINE void LL_SPI_Enable(SPI_TypeDef *SPIx)
00311 {
00312   SET_BIT(SPIx->CR1, SPI_CR1_SPE);
00313 }
00314 
00315 /**
00316   * @brief  Disable SPI peripheral
00317   * @note   When disabling the SPI, follow the procedure described in the Reference Manual.
00318   * @rmtoll CR1          SPE           LL_SPI_Disable
00319   * @param  SPIx SPI Instance
00320   * @retval None
00321   */
00322 __STATIC_INLINE void LL_SPI_Disable(SPI_TypeDef *SPIx)
00323 {
00324   CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE);
00325 }
00326 
00327 /**
00328   * @brief  Check if SPI peripheral is enabled
00329   * @rmtoll CR1          SPE           LL_SPI_IsEnabled
00330   * @param  SPIx SPI Instance
00331   * @retval None
00332   */
00333 __STATIC_INLINE void LL_SPI_IsEnabled(SPI_TypeDef *SPIx)
00334 {
00335 }
00336 
00337 /**
00338   * @brief  Set SPI Mode to Master or Slave
00339   * @note   This bit should not be changed when communication is ongoing.
00340   * @rmtoll CR1          MSTR          LL_SPI_SetMode\n
00341   *         CR1          SSI           LL_SPI_SetMode
00342   * @param  SPIx SPI Instance
00343   * @param  Mode This parameter can be one of the following values:
00344   *         @arg @ref LL_SPI_MODE_MASTER
00345   *         @arg @ref LL_SPI_MODE_SLAVE
00346   * @retval None
00347   */
00348 __STATIC_INLINE void LL_SPI_SetMode(SPI_TypeDef *SPIx, uint32_t Mode)
00349 {
00350   MODIFY_REG(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI, Mode);
00351 }
00352 
00353 /**
00354   * @brief  Get SPI Mode (Master or Slave)
00355   * @rmtoll CR1          MSTR          LL_SPI_GetMode\n
00356   *         CR1          SSI           LL_SPI_GetMode
00357   * @param  SPIx SPI Instance
00358   * @retval Returned value can be one of the following values:
00359   *         @arg @ref LL_SPI_MODE_MASTER
00360   *         @arg @ref LL_SPI_MODE_SLAVE
00361   */
00362 __STATIC_INLINE uint32_t LL_SPI_GetMode(SPI_TypeDef *SPIx)
00363 {
00364   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI));
00365 }
00366 
00367 /**
00368   * @brief  Set Serial protocol used
00369   * @note   This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
00370   * @rmtoll CR2          FRF           LL_SPI_SetStandard
00371   * @param  SPIx SPI Instance
00372   * @param  Standard This parameter can be one of the following values:
00373   *         @arg @ref LL_SPI_PROTOCOL_MOTOROLA
00374   *         @arg @ref LL_SPI_PROTOCOL_TI
00375   * @retval None
00376   */
00377 __STATIC_INLINE void LL_SPI_SetStandard(SPI_TypeDef *SPIx, uint32_t Standard)
00378 {
00379   MODIFY_REG(SPIx->CR2, SPI_CR2_FRF, Standard);
00380 }
00381 
00382 /**
00383   * @brief  Set Serial protocol used
00384   * @rmtoll CR2          FRF           LL_SPI_GetStandard
00385   * @param  SPIx SPI Instance
00386   * @retval Returned value can be one of the following values:
00387   *         @arg @ref LL_SPI_PROTOCOL_MOTOROLA
00388   *         @arg @ref LL_SPI_PROTOCOL_TI
00389   */
00390 __STATIC_INLINE uint32_t LL_SPI_GetStandard(SPI_TypeDef *SPIx)
00391 {
00392   return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_FRF));
00393 }
00394 
00395 /**
00396   * @brief  Set Clock phase
00397   * @note   This bit should not be changed when communication is ongoing.
00398   *         This bit is not used in SPI TI mode.
00399   * @rmtoll CR1          CPHA          LL_SPI_SetClockPhase
00400   * @param  SPIx SPI Instance
00401   * @param  ClockPhase This parameter can be one of the following values:
00402   *         @arg @ref LL_SPI_PHASE_1EDGE
00403   *         @arg @ref LL_SPI_PHASE_2EDGE
00404   * @retval None
00405   */
00406 __STATIC_INLINE void LL_SPI_SetClockPhase(SPI_TypeDef *SPIx, uint32_t ClockPhase)
00407 {
00408   MODIFY_REG(SPIx->CR1, SPI_CR1_CPHA, ClockPhase);
00409 }
00410 
00411 /**
00412   * @brief  Get Clock phase
00413   * @rmtoll CR1          CPHA          LL_SPI_GetClockPhase
00414   * @param  SPIx SPI Instance
00415   * @retval Returned value can be one of the following values:
00416   *         @arg @ref LL_SPI_PHASE_1EDGE
00417   *         @arg @ref LL_SPI_PHASE_2EDGE
00418   */
00419 __STATIC_INLINE uint32_t LL_SPI_GetClockPhase(SPI_TypeDef *SPIx)
00420 {
00421   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPHA));
00422 }
00423 
00424 /**
00425   * @brief  Set Clock polarity
00426   * @note   This bit should not be changed when communication is ongoing.
00427   *         This bit is not used in SPI TI mode.
00428   * @rmtoll CR1          CPOL          LL_SPI_SetClockPolarity
00429   * @param  SPIx SPI Instance
00430   * @param  ClockPolarity This parameter can be one of the following values:
00431   *         @arg @ref LL_SPI_POLARITY_LOW
00432   *         @arg @ref LL_SPI_POLARITY_HIGH
00433   * @retval None
00434   */
00435 __STATIC_INLINE void LL_SPI_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity)
00436 {
00437   MODIFY_REG(SPIx->CR1, SPI_CR1_CPOL, ClockPolarity);
00438 }
00439 
00440 /**
00441   * @brief  Get Clock polarity
00442   * @rmtoll CR1          CPOL          LL_SPI_GetClockPolarity
00443   * @param  SPIx SPI Instance
00444   * @retval Returned value can be one of the following values:
00445   *         @arg @ref LL_SPI_POLARITY_LOW
00446   *         @arg @ref LL_SPI_POLARITY_HIGH
00447   */
00448 __STATIC_INLINE uint32_t LL_SPI_GetClockPolarity(SPI_TypeDef *SPIx)
00449 {
00450   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPOL));
00451 }
00452 
00453 /**
00454   * @brief  Set Baudrate Prescaler
00455   * @note   These bits should not be changed when communication is ongoing. SPI BaudRate = fPCLK/Pescaler.
00456   * @rmtoll CR1          BR            LL_SPI_SetBaudRatePrescaler
00457   * @param  SPIx SPI Instance
00458   * @param  Baudrate This parameter can be one of the following values:
00459   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2
00460   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4
00461   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8
00462   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16
00463   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32
00464   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64
00465   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128
00466   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256
00467   * @retval None
00468   */
00469 __STATIC_INLINE void LL_SPI_SetBaudRatePrescaler(SPI_TypeDef *SPIx, uint32_t Baudrate)
00470 {
00471   MODIFY_REG(SPIx->CR1, SPI_CR1_BR, Baudrate);
00472 }
00473 
00474 /**
00475   * @brief  Get Baudrate Prescaler
00476   * @rmtoll CR1          BR            LL_SPI_GetBaudRatePrescaler
00477   * @param  SPIx SPI Instance
00478   * @retval Returned value can be one of the following values:
00479   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2
00480   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4
00481   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8
00482   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16
00483   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32
00484   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64
00485   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128
00486   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256
00487   */
00488 __STATIC_INLINE uint32_t LL_SPI_GetBaudRatePrescaler(SPI_TypeDef *SPIx)
00489 {
00490   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_BR));
00491 }
00492 
00493 /**
00494   * @brief  Set Transfer Bit Order
00495   * @note   This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode.
00496   * @rmtoll CR1          LSBFIRST      LL_SPI_SetTransferBitOrder
00497   * @param  SPIx SPI Instance
00498   * @param  BitOrder This parameter can be one of the following values:
00499   *         @arg @ref LL_SPI_LSB_FIRST
00500   *         @arg @ref LL_SPI_MSB_FIRST
00501   * @retval None
00502   */
00503 __STATIC_INLINE void LL_SPI_SetTransferBitOrder(SPI_TypeDef *SPIx, uint32_t BitOrder)
00504 {
00505   MODIFY_REG(SPIx->CR1, SPI_CR1_LSBFIRST, BitOrder);
00506 }
00507 
00508 /**
00509   * @brief  Get Transfer Bit Order
00510   * @rmtoll CR1          LSBFIRST      LL_SPI_GetTransferBitOrder
00511   * @param  SPIx SPI Instance
00512   * @retval Returned value can be one of the following values:
00513   *         @arg @ref LL_SPI_LSB_FIRST
00514   *         @arg @ref LL_SPI_MSB_FIRST
00515   */
00516 __STATIC_INLINE uint32_t LL_SPI_GetTransferBitOrder(SPI_TypeDef *SPIx)
00517 {
00518   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_LSBFIRST));
00519 }
00520 
00521 /**
00522   * @brief  Set Transfer Direction Mode
00523   * @note   For Half-Duplex mode, Rx Direction is set by default.
00524   *         In master mode, the MOSI pin is used and in slave mode, the MISO pin is used for Half-Duplex.
00525   * @rmtoll CR1          RXONLY        LL_SPI_SetTransferDirection\n
00526   *         CR1          BIDIMODE      LL_SPI_SetTransferDirection
00527   * @param  SPIx SPI Instance
00528   * @param  TransferDirection This parameter can be one of the following values:
00529   *         @arg @ref LL_SPI_FULL_DUPLEX
00530   *         @arg @ref LL_SPI_SIMPLEX_RX
00531   *         @arg @ref LL_SPI_HALF_DUPLEX
00532   * @retval None
00533   */
00534 __STATIC_INLINE void LL_SPI_SetTransferDirection(SPI_TypeDef *SPIx, uint32_t TransferDirection)
00535 {
00536   MODIFY_REG(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE, TransferDirection);
00537 }
00538 
00539 /**
00540   * @brief  Get Transfer Direction Mode
00541   * @rmtoll CR1          RXONLY        LL_SPI_GetTransferDirection\n
00542   *         CR1          BIDIMODE      LL_SPI_GetTransferDirection
00543   * @param  SPIx SPI Instance
00544   * @retval Returned value can be one of the following values:
00545   *         @arg @ref LL_SPI_FULL_DUPLEX
00546   *         @arg @ref LL_SPI_SIMPLEX_RX
00547   *         @arg @ref LL_SPI_HALF_DUPLEX
00548   */
00549 __STATIC_INLINE uint32_t LL_SPI_GetTransferDirection(SPI_TypeDef *SPIx)
00550 {
00551   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE));
00552 }
00553 
00554 /**
00555   * @brief  Set direction for Half-Duplex Mode
00556   * @note   In master mode, the MOSI pin is used and in slave mode, the MISO pin is used for Half-Duplex.
00557   * @rmtoll CR1          BIDIOE        LL_SPI_SetHalfDuplexDirection
00558   * @param  SPIx SPI Instance
00559   * @param  HalfDuplexDirection This parameter can be one of the following values:
00560   *         @arg @ref LL_SPI_DIRECTION_HALF_DUPLEX_TX
00561   *         @arg @ref LL_SPI_DIRECTION_HALF_DUPLEX_RX
00562   * @retval None
00563   */
00564 __STATIC_INLINE void LL_SPI_SetHalfDuplexDirection(SPI_TypeDef *SPIx, uint32_t HalfDuplexDirection)
00565 {
00566   MODIFY_REG(SPIx->CR1, SPI_CR1_BIDIOE, HalfDuplexDirection);
00567 }
00568 
00569 /**
00570   * @brief  Get direction for Half-Duplex Mode
00571   * @note   In master mode, the MOSI pin is used and in slave mode, the MISO pin is used for Half-Duplex.
00572   * @rmtoll CR1          BIDIOE        LL_SPI_GetHalfDuplexDirection
00573   * @param  SPIx SPI Instance
00574   * @retval Returned value can be one of the following values:
00575   *         @arg @ref LL_SPI_DIRECTION_HALF_DUPLEX_TX
00576   *         @arg @ref LL_SPI_DIRECTION_HALF_DUPLEX_RX
00577   */
00578 __STATIC_INLINE uint32_t LL_SPI_GetHalfDuplexDirection(SPI_TypeDef *SPIx)
00579 {
00580   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_BIDIOE));
00581 }
00582 
00583 /**
00584   * @brief  Set Frame Data Size
00585   * @rmtoll CR2          DS            LL_SPI_SetDataWidth
00586   * @param  SPIx SPI Instance
00587   * @param  DataWidth This parameter can be one of the following values:
00588   *         @arg @ref LL_SPI_DATAWIDTH_4BIT
00589   *         @arg @ref LL_SPI_DATAWIDTH_5BIT
00590   *         @arg @ref LL_SPI_DATAWIDTH_6BIT
00591   *         @arg @ref LL_SPI_DATAWIDTH_7BIT
00592   *         @arg @ref LL_SPI_DATAWIDTH_8BIT
00593   *         @arg @ref LL_SPI_DATAWIDTH_9BIT
00594   *         @arg @ref LL_SPI_DATAWIDTH_10BIT
00595   *         @arg @ref LL_SPI_DATAWIDTH_11BIT
00596   *         @arg @ref LL_SPI_DATAWIDTH_12BIT
00597   *         @arg @ref LL_SPI_DATAWIDTH_13BIT
00598   *         @arg @ref LL_SPI_DATAWIDTH_14BIT
00599   *         @arg @ref LL_SPI_DATAWIDTH_15BIT
00600   *         @arg @ref LL_SPI_DATAWIDTH_16BIT
00601   * @retval None
00602   */
00603 __STATIC_INLINE void LL_SPI_SetDataWidth(SPI_TypeDef *SPIx, uint32_t DataWidth)
00604 {
00605   MODIFY_REG(SPIx->CR2, SPI_CR2_DS, DataWidth);
00606 }
00607 
00608 /**
00609   * @brief  Get Frame Data Size
00610   * @rmtoll CR2          DS            LL_SPI_GetDataWidth
00611   * @param  SPIx SPI Instance
00612   * @retval Returned value can be one of the following values:
00613   *         @arg @ref LL_SPI_DATAWIDTH_4BIT
00614   *         @arg @ref LL_SPI_DATAWIDTH_5BIT
00615   *         @arg @ref LL_SPI_DATAWIDTH_6BIT
00616   *         @arg @ref LL_SPI_DATAWIDTH_7BIT
00617   *         @arg @ref LL_SPI_DATAWIDTH_8BIT
00618   *         @arg @ref LL_SPI_DATAWIDTH_9BIT
00619   *         @arg @ref LL_SPI_DATAWIDTH_10BIT
00620   *         @arg @ref LL_SPI_DATAWIDTH_11BIT
00621   *         @arg @ref LL_SPI_DATAWIDTH_12BIT
00622   *         @arg @ref LL_SPI_DATAWIDTH_13BIT
00623   *         @arg @ref LL_SPI_DATAWIDTH_14BIT
00624   *         @arg @ref LL_SPI_DATAWIDTH_15BIT
00625   *         @arg @ref LL_SPI_DATAWIDTH_16BIT
00626   */
00627 __STATIC_INLINE uint32_t LL_SPI_GetDataWidth(SPI_TypeDef *SPIx)
00628 {
00629   return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_DS));
00630 }
00631 
00632 /**
00633   * @brief  Set threshold of RXFIFO that triggers an RXNE event
00634   * @rmtoll CR2          FRXTH         LL_SPI_SetRxFIFOThreshold
00635   * @param  SPIx SPI Instance
00636   * @param  Threshold This parameter can be one of the following values:
00637   *         @arg @ref LL_SPI_RX_FIFO_TH_HALF
00638   *         @arg @ref LL_SPI_RX_FIFO_TH_QUARTER
00639   * @retval None
00640   */
00641 __STATIC_INLINE void LL_SPI_SetRxFIFOThreshold(SPI_TypeDef *SPIx, uint32_t Threshold)
00642 {
00643   MODIFY_REG(SPIx->CR2, SPI_CR2_FRXTH, Threshold);
00644 }
00645 
00646 /**
00647   * @brief  Get threshold of RXFIFO that triggers an RXNE event
00648   * @rmtoll CR2          FRXTH         LL_SPI_GetRxFIFOThreshold
00649   * @param  SPIx SPI Instance
00650   * @retval Returned value can be one of the following values:
00651   *         @arg @ref LL_SPI_RX_FIFO_TH_HALF
00652   *         @arg @ref LL_SPI_RX_FIFO_TH_QUARTER
00653   */
00654 __STATIC_INLINE uint32_t LL_SPI_GetRxFIFOThreshold(SPI_TypeDef *SPIx)
00655 {
00656   return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_FRXTH));
00657 }
00658 
00659 /**
00660   * @}
00661   */
00662 
00663 /** @defgroup SPI_EF_CRC_Management CRC_Management
00664   * @{
00665   */
00666 
00667 /**
00668   * @brief  Enable CRC
00669   * @note   This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
00670   * @rmtoll CR1          CRCEN         LL_SPI_EnableCRC
00671   * @param  SPIx SPI Instance
00672   * @retval None
00673   */
00674 __STATIC_INLINE void LL_SPI_EnableCRC(SPI_TypeDef *SPIx)
00675 {
00676   SET_BIT(SPIx->CR1, SPI_CR1_CRCEN);
00677 }
00678 
00679 /**
00680   * @brief  Disable CRC
00681   * @note   This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
00682   * @rmtoll CR1          CRCEN         LL_SPI_DisableCRC
00683   * @param  SPIx SPI Instance
00684   * @retval None
00685   */
00686 __STATIC_INLINE void LL_SPI_DisableCRC(SPI_TypeDef *SPIx)
00687 {
00688   CLEAR_BIT(SPIx->CR1, SPI_CR1_CRCEN);
00689 }
00690 
00691 /**
00692   * @brief  Check if CRC is enabled
00693   * @note   This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
00694   * @rmtoll CR1          CRCEN         LL_SPI_IsEnabledCRC
00695   * @param  SPIx SPI Instance
00696   * @retval None
00697   */
00698 __STATIC_INLINE void LL_SPI_IsEnabledCRC(SPI_TypeDef *SPIx)
00699 {
00700 }
00701 
00702 /**
00703   * @brief  Set CRC Length
00704   * @note   This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
00705   * @rmtoll CR1          CRCL          LL_SPI_SetCRCWidth
00706   * @param  SPIx SPI Instance
00707   * @param  CRCLength This parameter can be one of the following values:
00708   *         @arg @ref LL_SPI_CRC_8BIT
00709   *         @arg @ref LL_SPI_CRC_16BIT
00710   * @retval None
00711   */
00712 __STATIC_INLINE void LL_SPI_SetCRCWidth(SPI_TypeDef *SPIx, uint32_t CRCLength)
00713 {
00714   MODIFY_REG(SPIx->CR1, SPI_CR1_CRCL, CRCLength);
00715 }
00716 
00717 /**
00718   * @brief  Get CRC Length
00719   * @rmtoll CR1          CRCL          LL_SPI_GetCRCWidth
00720   * @param  SPIx SPI Instance
00721   * @retval Returned value can be one of the following values:
00722   *         @arg @ref LL_SPI_CRC_8BIT
00723   *         @arg @ref LL_SPI_CRC_16BIT
00724   */
00725 __STATIC_INLINE uint32_t LL_SPI_GetCRCWidth(SPI_TypeDef *SPIx)
00726 {
00727   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CRCL));
00728 }
00729 
00730 /**
00731   * @brief  Set CRCNext to transfer CRC on the line
00732   * @note   This bit has to be written as soon as the last data is written in the SPIx_DR register.
00733   * @rmtoll CR1          CRCNEXT       LL_SPI_SetCRCNext
00734   * @param  SPIx SPI Instance
00735   * @retval None
00736   */
00737 __STATIC_INLINE void LL_SPI_SetCRCNext(SPI_TypeDef *SPIx)
00738 {
00739   SET_BIT(SPIx->CR1, SPI_CR1_CRCNEXT);
00740 }
00741 
00742 /**
00743   * @brief  Set polynomial for CRC calculation
00744   * @rmtoll CRCPR        CRCPOLY       LL_SPI_SetCRCPolynomial
00745   * @param  SPIx SPI Instance
00746   * @param  CRCPoly 0..0xFFFF
00747   * @retval None
00748   */
00749 __STATIC_INLINE void LL_SPI_SetCRCPolynomial(SPI_TypeDef *SPIx, uint32_t CRCPoly)
00750 {
00751   MODIFY_REG(SPIx->CRCPR, SPI_CRCPR_CRCPOLY, CRCPoly);
00752 }
00753 
00754 /**
00755   * @brief  Get polynomial for CRC calculation
00756   * @rmtoll CRCPR        CRCPOLY       LL_SPI_GetCRCPolynomial
00757   * @param  SPIx SPI Instance
00758   * @retval 0..0xFFFF
00759   */
00760 __STATIC_INLINE uint32_t LL_SPI_GetCRCPolynomial(SPI_TypeDef *SPIx)
00761 {
00762   return (uint32_t)(READ_REG(SPIx->CRCPR));
00763 }
00764 
00765 /**
00766   * @brief  Get Rx CRC
00767   * @rmtoll RXCRCR       RXCRC         LL_SPI_GetRxCRC
00768   * @param  SPIx SPI Instance
00769   * @retval 0..0xFFFF
00770   */
00771 __STATIC_INLINE uint32_t LL_SPI_GetRxCRC(SPI_TypeDef *SPIx)
00772 {
00773   return (uint32_t)(READ_REG(SPIx->RXCRCR));
00774 }
00775 
00776 /**
00777   * @brief  Get Tx CRC
00778   * @rmtoll TXCRCR       TXCRC         LL_SPI_GetTxCRC
00779   * @param  SPIx SPI Instance
00780   * @retval 0..0xFFFF
00781   */
00782 __STATIC_INLINE uint32_t LL_SPI_GetTxCRC(SPI_TypeDef *SPIx)
00783 {
00784   return (uint32_t)(READ_REG(SPIx->TXCRCR));
00785 }
00786 
00787 /**
00788   * @}
00789   */
00790 
00791 /** @defgroup SPI_EF_NSS_Management NSS_Management
00792   * @{
00793   */
00794 
00795 /**
00796   * @brief  Set NSS Mode
00797   * @note   LL_SPI_NSS_SOFT Mode is not used in SPI TI mode.
00798   * @rmtoll CR1          SSM           LL_SPI_SetNSSMode\n
00799   * @rmtoll CR2          SSOE          LL_SPI_SetNSSMode
00800   * @param  SPIx SPI Instance
00801   * @param  NSS This parameter can be one of the following values:
00802   *         @arg @ref LL_SPI_NSS_SOFT
00803   *         @arg @ref LL_SPI_NSS_HARD_INPUT
00804   *         @arg @ref LL_SPI_NSS_HARD_OUTPUT
00805   * @retval None
00806   */
00807 __STATIC_INLINE void LL_SPI_SetNSSMode(SPI_TypeDef *SPIx, uint32_t NSS)
00808 {
00809   MODIFY_REG(SPIx->CR1, SPI_CR1_SSM,  NSS);
00810   MODIFY_REG(SPIx->CR2, SPI_CR2_SSOE, ((uint32_t)(NSS >> 16)));
00811 }
00812 
00813 /**
00814   * @brief  Get NSS Mode
00815   * @rmtoll CR1          SSM           LL_SPI_GetNSSMode\n
00816   * @rmtoll CR2          SSOE          LL_SPI_GetNSSMode
00817   * @param  SPIx SPI Instance
00818   * @retval Returned value can be one of the following values:
00819   *         @arg @ref LL_SPI_NSS_SOFT
00820   *         @arg @ref LL_SPI_NSS_HARD_INPUT
00821   *         @arg @ref LL_SPI_NSS_HARD_OUTPUT
00822   */
00823 __STATIC_INLINE uint32_t LL_SPI_GetNSSMode(SPI_TypeDef *SPIx)
00824 {
00825   register uint32_t Ssm  = (READ_BIT(SPIx->CR1, SPI_CR1_SSM));
00826   register uint32_t Ssoe = (READ_BIT(SPIx->CR2,  SPI_CR2_SSOE) << 16);
00827   return (Ssm | Ssoe);
00828 }
00829 
00830 /**
00831   * @brief  Enable NSS pulse mgt
00832   * @note   This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode.
00833   * @rmtoll CR2          NSSP          LL_SPI_EnableNSSPulseMgt
00834   * @param  SPIx SPI Instance
00835   * @retval None
00836   */
00837 __STATIC_INLINE void LL_SPI_EnableNSSPulseMgt(SPI_TypeDef *SPIx)
00838 {
00839   SET_BIT(SPIx->CR2, SPI_CR2_NSSP);
00840 }
00841 
00842 /**
00843   * @brief  Disable NSS pulse mgt
00844   * @note   This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode.
00845   * @rmtoll CR2          NSSP          LL_SPI_DisableNSSPulseMgt
00846   * @param  SPIx SPI Instance
00847   * @retval None
00848   */
00849 __STATIC_INLINE void LL_SPI_DisableNSSPulseMgt(SPI_TypeDef *SPIx)
00850 {
00851   CLEAR_BIT(SPIx->CR2, SPI_CR2_NSSP);
00852 }
00853 
00854 /**
00855   * @brief  Check if NSS pulse is enabled
00856   * @note   This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode.
00857   * @rmtoll CR2          NSSP          LL_SPI_IsEnabledNSSPulse
00858   * @param  SPIx SPI Instance
00859   * @retval None
00860   */
00861 __STATIC_INLINE void LL_SPI_IsEnabledNSSPulse(SPI_TypeDef *SPIx)
00862 {
00863 }
00864 
00865 /**
00866   * @}
00867   */
00868 
00869 /** @defgroup SPI_LL_EF_FLAG_Management FLAG_Management
00870   * @{
00871   */
00872 
00873 /**
00874   * @brief  Check if Rx buffer is not empty
00875   * @rmtoll SR           RXNE          LL_SPI_IsActiveFlag_RXNE
00876   * @param  SPIx SPI Instance
00877   * @retval State of bit (1 or 0).
00878   */
00879 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_RXNE(SPI_TypeDef *SPIx)
00880 {
00881   return (READ_BIT(SPIx->SR, SPI_SR_RXNE) == (SPI_SR_RXNE));
00882 }
00883 
00884 /**
00885   * @brief  Check if Tx buffer is empty
00886   * @rmtoll SR           TXE           LL_SPI_IsActiveFlag_TXE
00887   * @param  SPIx SPI Instance
00888   * @retval State of bit (1 or 0).
00889   */
00890 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_TXE(SPI_TypeDef *SPIx)
00891 {
00892   return (READ_BIT(SPIx->SR, SPI_SR_TXE) == (SPI_SR_TXE));
00893 }
00894 
00895 /**
00896   * @brief  Get Underrun error flag
00897   * @rmtoll SR           UDR           LL_SPI_IsActiveFlag_UDR
00898   * @param  SPIx SPI Instance
00899   * @retval State of bit (1 or 0).
00900   */
00901 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_UDR(SPI_TypeDef *SPIx)
00902 {
00903   return (READ_BIT(SPIx->SR, SPI_SR_UDR) == (SPI_SR_UDR));
00904 }
00905 
00906 /**
00907   * @brief  Get CRC error flag
00908   * @rmtoll SR           CRCERR        LL_SPI_IsActiveFlag_CRCERR
00909   * @param  SPIx SPI Instance
00910   * @retval State of bit (1 or 0).
00911   */
00912 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_CRCERR(SPI_TypeDef *SPIx)
00913 {
00914   return (READ_BIT(SPIx->SR, SPI_SR_CRCERR) == (SPI_SR_CRCERR));
00915 }
00916 
00917 /**
00918   * @brief  Get  Mode fault error flag
00919   * @rmtoll SR           MODF          LL_SPI_IsActiveFlag_MODF
00920   * @param  SPIx SPI Instance
00921   * @retval State of bit (1 or 0).
00922   */
00923 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_MODF(SPI_TypeDef *SPIx)
00924 {
00925   return (READ_BIT(SPIx->SR, SPI_SR_MODF) == (SPI_SR_MODF));
00926 }
00927 
00928 /**
00929   * @brief  Get Overrun error flag
00930   * @rmtoll SR           OVR           LL_SPI_IsActiveFlag_OVR
00931   * @param  SPIx SPI Instance
00932   * @retval State of bit (1 or 0).
00933   */
00934 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_OVR(SPI_TypeDef *SPIx)
00935 {
00936   return (READ_BIT(SPIx->SR, SPI_SR_OVR) == (SPI_SR_OVR));
00937 }
00938 
00939 /**
00940   * @brief  Get Busy flag
00941   * @note   The BSY flag is cleared under any one of the following conditions:
00942   * -When the SPI is correctly disabled
00943   * -When a fault is detected in Master mode (MODF bit set to 1)
00944   * -In Master mode, when it finishes a data transmission and no new data is ready to be
00945   * sent
00946   * -In Slave mode, when the BSY flag is set to '0' for at least one SPI clock cycle between
00947   * each data transfer.
00948   * @rmtoll SR           BSY           LL_SPI_IsActiveFlag_BSY
00949   * @param  SPIx SPI Instance
00950   * @retval State of bit (1 or 0).
00951   */
00952 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_BSY(SPI_TypeDef *SPIx)
00953 {
00954   return (READ_BIT(SPIx->SR, SPI_SR_BSY) == (SPI_SR_BSY));
00955 }
00956 
00957 /**
00958   * @brief  Get Frame format error flag
00959   * @rmtoll SR           FRE           LL_SPI_IsActiveFlag_FRE
00960   * @param  SPIx SPI Instance
00961   * @retval State of bit (1 or 0).
00962   */
00963 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_FRE(SPI_TypeDef *SPIx)
00964 {
00965   return (READ_BIT(SPIx->SR, SPI_SR_FRE) == (SPI_SR_FRE));
00966 }
00967 
00968 /**
00969   * @brief  Get FIFO reception Level
00970   * @rmtoll SR           FRLVL         LL_SPI_GetRxFIFOLevel
00971   * @param  SPIx SPI Instance
00972   * @retval Returned value can be one of the following values:
00973   *         @arg @ref LL_SPI_RX_FIFO_EMPTY
00974   *         @arg @ref LL_SPI_RX_FIFO_QUARTER_FULL
00975   *         @arg @ref LL_SPI_RX_FIFO_HALF_FULL
00976   *         @arg @ref LL_SPI_RX_FIFO_FULL
00977   */
00978 __STATIC_INLINE uint32_t LL_SPI_GetRxFIFOLevel(SPI_TypeDef *SPIx)
00979 {
00980   return (uint32_t)(READ_BIT(SPIx->SR, SPI_SR_FRLVL));
00981 }
00982 
00983 /**
00984   * @brief  Get FIFO Transmission Level
00985   * @rmtoll SR           FTLVL         LL_SPI_GetTxFIFOLevel
00986   * @param  SPIx SPI Instance
00987   * @retval Returned value can be one of the following values:
00988   *         @arg @ref LL_SPI_TX_FIFO_EMPTY
00989   *         @arg @ref LL_SPI_TX_FIFO_QUARTER_FULL
00990   *         @arg @ref LL_SPI_TX_FIFO_HALF_FULL
00991   *         @arg @ref LL_SPI_TX_FIFO_FULL
00992   */
00993 __STATIC_INLINE uint32_t LL_SPI_GetTxFIFOLevel(SPI_TypeDef *SPIx)
00994 {
00995   return (uint32_t)(READ_BIT(SPIx->SR, SPI_SR_FTLVL));
00996 }
00997 
00998 /**
00999   * @brief  Clear Underrun error flag
01000   * @rmtoll SR           UDR           LL_SPI_ClearFlag_UDR
01001   * @param  SPIx SPI Instance
01002   * @retval None
01003   */
01004 __STATIC_INLINE void LL_SPI_ClearFlag_UDR(SPI_TypeDef *SPIx)
01005 {
01006   __IO uint32_t tmpreg;
01007   tmpreg = SPIx->SR;
01008   (void) tmpreg;
01009 }
01010 
01011 /**
01012   * @brief  Clear CRC error flag
01013   * @rmtoll SR           CRCERR        LL_SPI_ClearFlag_CRCERR
01014   * @param  SPIx SPI Instance
01015   * @retval None
01016   */
01017 __STATIC_INLINE void LL_SPI_ClearFlag_CRCERR(SPI_TypeDef *SPIx)
01018 {
01019   CLEAR_BIT(SPIx->SR, SPI_SR_CRCERR);
01020 }
01021 
01022 /**
01023   * @brief  Clear  Mode fault error flag
01024   * @rmtoll SR           MODF          LL_SPI_ClearFlag_MODF
01025   * @param  SPIx SPI Instance
01026   * @retval None
01027   */
01028 __STATIC_INLINE void LL_SPI_ClearFlag_MODF(SPI_TypeDef *SPIx)
01029 {
01030   __IO uint32_t tmpreg;
01031   tmpreg = SPIx->SR;
01032   (void) tmpreg;
01033   tmpreg = CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE);
01034   (void) tmpreg;
01035 }
01036 
01037 /**
01038   * @brief  Clear Overrun error flag
01039   * @rmtoll SR           OVR           LL_SPI_ClearFlag_OVR
01040   * @param  SPIx SPI Instance
01041   * @retval None
01042   */
01043 __STATIC_INLINE void LL_SPI_ClearFlag_OVR(SPI_TypeDef *SPIx)
01044 {
01045   __IO uint32_t tmpreg;
01046   tmpreg = SPIx->DR;
01047   (void) tmpreg;
01048   tmpreg = SPIx->SR;
01049   (void) tmpreg;
01050 }
01051 
01052 /**
01053   * @brief  Clear Frame format error flag
01054   * @rmtoll SR           FRE           LL_SPI_ClearFlag_FRE
01055   * @param  SPIx SPI Instance
01056   * @retval None
01057   */
01058 __STATIC_INLINE void LL_SPI_ClearFlag_FRE(SPI_TypeDef *SPIx)
01059 {
01060   __IO uint32_t tmpreg;
01061   tmpreg = SPIx->SR;
01062   (void) tmpreg;
01063 }
01064 
01065 /**
01066   * @}
01067   */
01068 
01069 /** @defgroup SPI_LL_EF_IT_Management IT_Management
01070   * @{
01071   */
01072 
01073 /**
01074   * @brief  Enable Error IT
01075   * @note   This bit controls the generation of an interrupt when an error condition occurs (CRCERR,OVR, MODF in SPI mode, FRE at TI mode).
01076   * @rmtoll CR2          ERRIE         LL_SPI_EnableIT_ERR
01077   * @param  SPIx SPI Instance
01078   * @retval None
01079   */
01080 __STATIC_INLINE void LL_SPI_EnableIT_ERR(SPI_TypeDef *SPIx)
01081 {
01082   SET_BIT(SPIx->CR2, SPI_CR2_ERRIE);
01083 }
01084 
01085 /**
01086   * @brief  Enable Rx buffer not empty IT
01087   * @rmtoll CR2          RXNEIE        LL_SPI_EnableIT_RXNE
01088   * @param  SPIx SPI Instance
01089   * @retval None
01090   */
01091 __STATIC_INLINE void LL_SPI_EnableIT_RXNE(SPI_TypeDef *SPIx)
01092 {
01093   SET_BIT(SPIx->CR2, SPI_CR2_RXNEIE);
01094 }
01095 
01096 /**
01097   * @brief  Enable Tx buffer empty IT
01098   * @rmtoll CR2          TXEIE         LL_SPI_EnableIT_TXE
01099   * @param  SPIx SPI Instance
01100   * @retval None
01101   */
01102 __STATIC_INLINE void LL_SPI_EnableIT_TXE(SPI_TypeDef *SPIx)
01103 {
01104   SET_BIT(SPIx->CR2, SPI_CR2_TXEIE);
01105 }
01106 
01107 /**
01108   * @brief  Disable Error IT
01109   * @note   This bit controls the generation of an interrupt when an error condition occurs (CRCERR, OVR, MODF in SPI mode, FRE at TI mode).
01110   * @rmtoll CR2          ERRIE         LL_SPI_DisableIT_ERR
01111   * @param  SPIx SPI Instance
01112   * @retval None
01113   */
01114 __STATIC_INLINE void LL_SPI_DisableIT_ERR(SPI_TypeDef *SPIx)
01115 {
01116   CLEAR_BIT(SPIx->CR2, SPI_CR2_ERRIE);
01117 }
01118 
01119 /**
01120   * @brief  Disable Rx buffer not empty IT
01121   * @rmtoll CR2          RXNEIE        LL_SPI_DisableIT_RXNE
01122   * @param  SPIx SPI Instance
01123   * @retval None
01124   */
01125 __STATIC_INLINE void LL_SPI_DisableIT_RXNE(SPI_TypeDef *SPIx)
01126 {
01127   CLEAR_BIT(SPIx->CR2, SPI_CR2_RXNEIE);
01128 }
01129 
01130 /**
01131   * @brief  Disable Tx buffer empty IT
01132   * @rmtoll CR2          TXEIE         LL_SPI_DisableIT_TXE
01133   * @param  SPIx SPI Instance
01134   * @retval None
01135   */
01136 __STATIC_INLINE void LL_SPI_DisableIT_TXE(SPI_TypeDef *SPIx)
01137 {
01138   CLEAR_BIT(SPIx->CR2, SPI_CR2_TXEIE);
01139 }
01140 
01141 /**
01142   * @brief  Check if ERR IT is enabled
01143   * @rmtoll CR2          ERRIE         LL_SPI_IsEnabledIT_ERR
01144   * @param  SPIx SPI Instance
01145   * @retval State of bit (1 or 0).
01146   */
01147 __STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_ERR(SPI_TypeDef *SPIx)
01148 {
01149   return (READ_BIT(SPIx->CR2, SPI_CR2_ERRIE) == (SPI_CR2_ERRIE));
01150 }
01151 
01152 /**
01153   * @brief  Check if RXNE IT is enabled
01154   * @rmtoll CR2          RXNEIE        LL_SPI_IsEnabledIT_RXNE
01155   * @param  SPIx SPI Instance
01156   * @retval State of bit (1 or 0).
01157   */
01158 __STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_RXNE(SPI_TypeDef *SPIx)
01159 {
01160   return (READ_BIT(SPIx->CR2, SPI_CR2_RXNEIE) == (SPI_CR2_RXNEIE));
01161 }
01162 
01163 /**
01164   * @brief  Check if TXE IT is enabled
01165   * @rmtoll CR2          TXEIE         LL_SPI_IsEnabledIT_TXE
01166   * @param  SPIx SPI Instance
01167   * @retval State of bit (1 or 0).
01168   */
01169 __STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_TXE(SPI_TypeDef *SPIx)
01170 {
01171   return (READ_BIT(SPIx->CR2, SPI_CR2_TXEIE) == (SPI_CR2_TXEIE));
01172 }
01173 
01174 /**
01175   * @}
01176   */
01177 
01178 /** @defgroup SPI_LL_EF_DMA_Management DMA_Management
01179   * @{
01180   */
01181 
01182 /**
01183   * @brief  Enable DMA Rx
01184   * @rmtoll CR2          RXDMAEN       LL_SPI_EnableDMAReq_RX
01185   * @param  SPIx SPI Instance
01186   * @retval None
01187   */
01188 __STATIC_INLINE void LL_SPI_EnableDMAReq_RX(SPI_TypeDef *SPIx)
01189 {
01190   SET_BIT(SPIx->CR2, SPI_CR2_RXDMAEN);
01191 }
01192 
01193 /**
01194   * @brief  Disable DMA Rx
01195   * @rmtoll CR2          RXDMAEN       LL_SPI_DisableDMAReq_RX
01196   * @param  SPIx SPI Instance
01197   * @retval None
01198   */
01199 __STATIC_INLINE void LL_SPI_DisableDMAReq_RX(SPI_TypeDef *SPIx)
01200 {
01201   CLEAR_BIT(SPIx->CR2, SPI_CR2_RXDMAEN);
01202 }
01203 
01204 /**
01205   * @brief  Check if DMA Rx is enabled
01206   * @rmtoll CR2          RXDMAEN       LL_SPI_IsEnabledDMAReq_RX
01207   * @param  SPIx SPI Instance
01208   * @retval State of bit (1 or 0).
01209   */
01210 __STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx)
01211 {
01212   return (READ_BIT(SPIx->CR2, SPI_CR2_RXDMAEN) == (SPI_CR2_RXDMAEN));
01213 }
01214 
01215 /**
01216   * @brief  Enable DMA Tx
01217   * @rmtoll CR2          TXDMAEN       LL_SPI_EnableDMAReq_TX
01218   * @param  SPIx SPI Instance
01219   * @retval None
01220   */
01221 __STATIC_INLINE void LL_SPI_EnableDMAReq_TX(SPI_TypeDef *SPIx)
01222 {
01223   SET_BIT(SPIx->CR2, SPI_CR2_TXDMAEN);
01224 }
01225 
01226 /**
01227   * @brief  Disable DMA Tx
01228   * @rmtoll CR2          TXDMAEN       LL_SPI_DisableDMAReq_TX
01229   * @param  SPIx SPI Instance
01230   * @retval None
01231   */
01232 __STATIC_INLINE void LL_SPI_DisableDMAReq_TX(SPI_TypeDef *SPIx)
01233 {
01234   CLEAR_BIT(SPIx->CR2, SPI_CR2_TXDMAEN);
01235 }
01236 
01237 /**
01238   * @brief  Check if DMA Tx is enabled
01239   * @rmtoll CR2          TXDMAEN       LL_SPI_IsEnabledDMAReq_TX
01240   * @param  SPIx SPI Instance
01241   * @retval State of bit (1 or 0).
01242   */
01243 __STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx)
01244 {
01245   return (READ_BIT(SPIx->CR2, SPI_CR2_TXDMAEN) == (SPI_CR2_TXDMAEN));
01246 }
01247 
01248 /**
01249   * @brief  Set parity of  Last DMA reception
01250   * @rmtoll CR2          LDMARX        LL_SPI_SetDMAParity_RX
01251   * @param  SPIx SPI Instance
01252   * @param  Parity This parameter can be one of the following values:
01253   *         @arg @ref LL_SPI_DMA_PARITY_ODD
01254   *         @arg @ref LL_SPI_DMA_PARITY_EVEN
01255   * @retval None
01256   */
01257 __STATIC_INLINE void LL_SPI_SetDMAParity_RX(SPI_TypeDef *SPIx, uint32_t Parity)
01258 {
01259   MODIFY_REG(SPIx->CR2, SPI_CR2_LDMARX, (Parity << POSITION_VAL(SPI_CR2_LDMARX)));
01260 }
01261 
01262 /**
01263   * @brief  Get parity configuration for  Last DMA reception
01264   * @rmtoll CR2          LDMARX        LL_SPI_GetDMAParity_RX
01265   * @param  SPIx SPI Instance
01266   * @retval Returned value can be one of the following values:
01267   *         @arg @ref LL_SPI_DMA_PARITY_ODD
01268   *         @arg @ref LL_SPI_DMA_PARITY_EVEN
01269   */
01270 __STATIC_INLINE uint32_t LL_SPI_GetDMAParity_RX(SPI_TypeDef *SPIx)
01271 {
01272   return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_LDMARX) >> POSITION_VAL(SPI_CR2_LDMARX));
01273 }
01274 
01275 /**
01276   * @brief  Set parity of  Last DMA transmission
01277   * @rmtoll CR2          LDMATX        LL_SPI_SetDMAParity_TX
01278   * @param  SPIx SPI Instance
01279   * @param  Parity This parameter can be one of the following values:
01280   *         @arg @ref LL_SPI_DMA_PARITY_ODD
01281   *         @arg @ref LL_SPI_DMA_PARITY_EVEN
01282   * @retval None
01283   */
01284 __STATIC_INLINE void LL_SPI_SetDMAParity_TX(SPI_TypeDef *SPIx, uint32_t Parity)
01285 {
01286   MODIFY_REG(SPIx->CR2, SPI_CR2_LDMATX, (Parity << POSITION_VAL(SPI_CR2_LDMATX)));
01287 }
01288 
01289 /**
01290   * @brief  Get parity configuration for Last DMA transmission
01291   * @rmtoll CR2          LDMATX        LL_SPI_GetDMAParity_TX
01292   * @param  SPIx SPI Instance
01293   * @retval Returned value can be one of the following values:
01294   *         @arg @ref LL_SPI_DMA_PARITY_ODD
01295   *         @arg @ref LL_SPI_DMA_PARITY_EVEN
01296   */
01297 __STATIC_INLINE uint32_t LL_SPI_GetDMAParity_TX(SPI_TypeDef *SPIx)
01298 {
01299   return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_LDMATX) >> POSITION_VAL(SPI_CR2_LDMATX));
01300 }
01301 
01302 /**
01303   * @brief  Get the data register address used for DMA transfer
01304   * @rmtoll DR           DR            LL_SPI_DMA_GetRegAddr
01305   * @param  SPIx SPI Instance
01306   * @retval Address of data register
01307   */
01308 __STATIC_INLINE uint32_t LL_SPI_DMA_GetRegAddr(SPI_TypeDef *SPIx)
01309 {
01310   return (uint32_t)&(SPIx->DR);
01311 }
01312 
01313 /**
01314   * @}
01315   */
01316 
01317 /** @defgroup SPI_LL_EF_DATA_Management DATA_Management
01318   * @{
01319   */
01320 
01321 /**
01322   * @brief  Read  8-Bits in the Data Register
01323   * @rmtoll DR           DR            LL_SPI_ReceiveData8
01324   * @param  SPIx SPI Instance
01325   * @retval RxData 0..0xFF
01326   */
01327 __STATIC_INLINE uint8_t LL_SPI_ReceiveData8(SPI_TypeDef *SPIx)
01328 {
01329   return (uint8_t)(READ_REG(SPIx->DR));
01330 }
01331 
01332 /**
01333   * @brief  Read  16-Bits in the Data Register
01334   * @rmtoll DR           DR            LL_SPI_ReceiveData16
01335   * @param  SPIx SPI Instance
01336   * @retval RxData 0..0xFFFF
01337   */
01338 __STATIC_INLINE uint16_t LL_SPI_ReceiveData16(SPI_TypeDef *SPIx)
01339 {
01340   return (uint16_t)(READ_REG(SPIx->DR));
01341 }
01342 
01343 /**
01344   * @brief  Write  8-Bits in the Data Register
01345   * @rmtoll DR           DR            LL_SPI_TransmitData8
01346   * @param  SPIx SPI Instance
01347   * @param  TxData 0..0xFF
01348   * @retval None
01349   */
01350 __STATIC_INLINE void LL_SPI_TransmitData8(SPI_TypeDef *SPIx, uint8_t TxData)
01351 {
01352   *((__IO uint8_t*)&SPIx->DR) = TxData;
01353 }
01354 
01355 /**
01356   * @brief  Write 16-Bits in the Data Register
01357   * @rmtoll DR           DR            LL_SPI_TransmitData16
01358   * @param  SPIx SPI Instance
01359   * @param  TxData 0..0xFFFF
01360   * @retval None
01361   */
01362 __STATIC_INLINE void LL_SPI_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData)
01363 {
01364   *((__IO uint16_t*)&SPIx->DR) = TxData;
01365 }
01366 
01367 /**
01368   * @}
01369   */
01370 
01371 /**
01372   * @}
01373   */
01374 
01375 /**
01376   * @}
01377   */
01378 
01379 #endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) */
01380 
01381 /**
01382   * @}
01383   */
01384 
01385 #ifdef __cplusplus
01386 }
01387 #endif
01388 
01389 #endif /* __STM32L4xx_LL_SPI_H */
01390 
01391 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
01392