1 /**
2 ******************************************************************************
3 * @file stm32f0xx_hal_spi_ex.c
4 * @author MCD Application Team
5 * @brief Extended SPI HAL module driver.
6 * This file provides firmware functions to manage the following
7 * SPI peripheral extended functionalities :
8 * + IO operation functions
9 *
10 ******************************************************************************
11 * @attention
12 *
13 * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
14 *
15 * Redistribution and use in source and binary forms, with or without modification,
16 * are permitted provided that the following conditions are met:
17 * 1. Redistributions of source code must retain the above copyright notice,
18 * this list of conditions and the following disclaimer.
19 * 2. Redistributions in binary form must reproduce the above copyright notice,
20 * this list of conditions and the following disclaimer in the documentation
21 * and/or other materials provided with the distribution.
22 * 3. Neither the name of STMicroelectronics nor the names of its contributors
23 * may be used to endorse or promote products derived from this software
24 * without specific prior written permission.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
34 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 ******************************************************************************
38 */
39
40 /* Includes ------------------------------------------------------------------*/
41 #include "stm32f0xx_hal.h"
42
43 /** @addtogroup STM32F0xx_HAL_Driver
44 * @{
45 */
46
47 /** @defgroup SPIEx SPIEx
48 * @brief SPI Extended HAL module driver
49 * @{
50 */
51 #ifdef HAL_SPI_MODULE_ENABLED
52
53 /* Private typedef -----------------------------------------------------------*/
54 /* Private defines -----------------------------------------------------------*/
55 /** @defgroup SPIEx_Private_Constants SPIEx Private Constants
56 * @{
57 */
58 #define SPI_FIFO_SIZE 4
59 /**
60 * @}
61 */
62
63 /* Private macros ------------------------------------------------------------*/
64 /* Private variables ---------------------------------------------------------*/
65 /* Private function prototypes -----------------------------------------------*/
66 /* Exported functions ---------------------------------------------------------*/
67
68 /** @defgroup SPIEx_Exported_Functions SPIEx Exported Functions
69 * @{
70 */
71
72 /** @defgroup SPIEx_Exported_Functions_Group1 IO operation functions
73 * @brief Data transfers functions
74 *
75 @verbatim
76 ==============================================================================
77 ##### IO operation functions #####
78 ===============================================================================
79 [..]
80 This subsection provides a set of extended functions to manage the SPI
81 data transfers.
82
83 (#) Rx data flush function:
84 (++) HAL_SPIEx_FlushRxFifo()
85
86 @endverbatim
87 * @{
88 */
89
90 /**
91 * @brief Flush the RX fifo.
92 * @param hspi pointer to a SPI_HandleTypeDef structure that contains
93 * the configuration information for the specified SPI module.
94 * @retval HAL status
95 */
HAL_SPIEx_FlushRxFifo(SPI_HandleTypeDef * hspi)96 HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo(SPI_HandleTypeDef *hspi)
97 {
98 __IO uint32_t tmpreg;
99 uint8_t count = 0U;
100 while ((hspi->Instance->SR & SPI_FLAG_FRLVL) != SPI_FRLVL_EMPTY)
101 {
102 count++;
103 tmpreg = hspi->Instance->DR;
104 UNUSED(tmpreg); /* To avoid GCC warning */
105 if (count == SPI_FIFO_SIZE)
106 {
107 return HAL_TIMEOUT;
108 }
109 }
110 return HAL_OK;
111 }
112
113 /**
114 * @}
115 */
116
117 /**
118 * @}
119 */
120
121 #endif /* HAL_SPI_MODULE_ENABLED */
122
123 /**
124 * @}
125 */
126
127 /**
128 * @}
129 */
130
131 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
132