1 /**
2   ******************************************************************************
3   * @file    stm32f7xx_hal_spdifrx.h
4   * @author  MCD Application Team
5   * @brief   Header file of SPDIFRX HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2017 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32F7xx_HAL_SPDIFRX_H
21 #define STM32F7xx_HAL_SPDIFRX_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f7xx_hal_def.h"
29 
30 
31 /** @addtogroup STM32F7xx_HAL_Driver
32   * @{
33   */
34 #if defined (SPDIFRX)
35 
36 /** @addtogroup SPDIFRX
37   * @{
38   */
39 
40 /* Exported types ------------------------------------------------------------*/
41 /** @defgroup SPDIFRX_Exported_Types SPDIFRX Exported Types
42   * @{
43   */
44 
45 /**
46   * @brief SPDIFRX Init structure definition
47   */
48 typedef struct
49 {
50   uint32_t InputSelection;           /*!< Specifies the SPDIF input selection.
51                                           This parameter can be a value of @ref SPDIFRX_Input_Selection */
52 
53   uint32_t Retries;                  /*!< Specifies the Maximum allowed re-tries during synchronization phase.
54                                           This parameter can be a value of @ref SPDIFRX_Max_Retries */
55 
56   uint32_t WaitForActivity;          /*!< Specifies the wait for activity on SPDIF selected input.
57                                           This parameter can be a value of @ref SPDIFRX_Wait_For_Activity. */
58 
59   uint32_t ChannelSelection;         /*!< Specifies whether the control flow will take the channel status
60                                           from channel A or B.
61                                           This parameter can be a value of @ref SPDIFRX_Channel_Selection */
62 
63   uint32_t DataFormat;               /*!< Specifies the Data samples format (LSB, MSB, ...).
64                                           This parameter can be a value of @ref SPDIFRX_Data_Format */
65 
66   uint32_t StereoMode;               /*!< Specifies whether the peripheral is in stereo or mono mode.
67                                           This parameter can be a value of @ref SPDIFRX_Stereo_Mode */
68 
69   uint32_t PreambleTypeMask;         /*!< Specifies whether The preamble type bits are copied or not
70                                           into the received frame.
71                                           This parameter can be a value of @ref SPDIFRX_PT_Mask */
72 
73   uint32_t ChannelStatusMask;        /*!< Specifies whether the channel status and user bits are copied or not
74                                           into the received frame.
75                                           This parameter can be a value of @ref SPDIFRX_ChannelStatus_Mask */
76 
77   uint32_t ValidityBitMask;          /*!< Specifies whether the validity bit is copied or not into the received frame.
78                                           This parameter can be a value of @ref SPDIFRX_V_Mask */
79 
80   uint32_t ParityErrorMask;          /*!< Specifies whether the parity error bit is copied or not
81                                           into the received frame.
82                                           This parameter can be a value of @ref SPDIFRX_PE_Mask */
83 } SPDIFRX_InitTypeDef;
84 
85 /**
86   * @brief SPDIFRX SetDataFormat structure definition
87   */
88 typedef struct
89 {
90   uint32_t DataFormat;               /*!< Specifies the Data samples format (LSB, MSB, ...).
91                                           This parameter can be a value of @ref SPDIFRX_Data_Format */
92 
93   uint32_t StereoMode;               /*!< Specifies whether the peripheral is in stereo or mono mode.
94                                           This parameter can be a value of @ref SPDIFRX_Stereo_Mode */
95 
96   uint32_t PreambleTypeMask;         /*!< Specifies whether The preamble type bits are copied or not
97                                           into the received frame.
98                                           This parameter can be a value of @ref SPDIFRX_PT_Mask */
99 
100   uint32_t ChannelStatusMask;        /*!< Specifies whether the channel status and user bits are copied or not
101                                           into the received frame.
102                                           This parameter can be a value of @ref SPDIFRX_ChannelStatus_Mask */
103 
104   uint32_t ValidityBitMask;          /*!< Specifies whether the validity bit is copied or not into the received frame.
105                                           This parameter can be a value of @ref SPDIFRX_V_Mask */
106 
107   uint32_t ParityErrorMask;          /*!< Specifies whether the parity error bit is copied or not
108                                           into the received frame.
109                                           This parameter can be a value of @ref SPDIFRX_PE_Mask */
110 
111 } SPDIFRX_SetDataFormatTypeDef;
112 
113 /**
114   * @brief  HAL State structures definition
115   */
116 typedef enum
117 {
118   HAL_SPDIFRX_STATE_RESET      = 0x00U,  /*!< SPDIFRX not yet initialized or disabled                */
119   HAL_SPDIFRX_STATE_READY      = 0x01U,  /*!< SPDIFRX initialized and ready for use                  */
120   HAL_SPDIFRX_STATE_BUSY       = 0x02U,  /*!< SPDIFRX internal process is ongoing                    */
121   HAL_SPDIFRX_STATE_BUSY_RX    = 0x03U,  /*!< SPDIFRX internal Data Flow RX process is ongoing       */
122   HAL_SPDIFRX_STATE_BUSY_CX    = 0x04U,  /*!< SPDIFRX internal Control Flow RX process is ongoing    */
123   HAL_SPDIFRX_STATE_ERROR      = 0x07U   /*!< SPDIFRX error state                                    */
124 } HAL_SPDIFRX_StateTypeDef;
125 
126 /**
127   * @brief SPDIFRX handle Structure definition
128   */
129 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
130 typedef struct __SPDIFRX_HandleTypeDef
131 #else
132 typedef struct
133 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
134 {
135   SPDIFRX_TypeDef            *Instance;    /* SPDIFRX registers base address */
136 
137   SPDIFRX_InitTypeDef        Init;         /* SPDIFRX communication parameters */
138 
139   uint32_t                   *pRxBuffPtr;  /* Pointer to SPDIFRX Rx transfer buffer */
140 
141   uint32_t                   *pCsBuffPtr;  /* Pointer to SPDIFRX Cx transfer buffer */
142 
143   __IO uint16_t              RxXferSize;   /* SPDIFRX Rx transfer size */
144 
145   __IO uint16_t              RxXferCount;  /* SPDIFRX Rx transfer counter
146                                               (This field is initialized at the
147                                                same value as transfer size at the
148                                                beginning of the transfer and
149                                                decremented when a sample is received.
150                                                NbSamplesReceived = RxBufferSize-RxBufferCount) */
151 
152   __IO uint16_t              CsXferSize;   /* SPDIFRX Rx transfer size */
153 
154   __IO uint16_t              CsXferCount;  /* SPDIFRX Rx transfer counter
155                                               (This field is initialized at the
156                                                same value as transfer size at the
157                                                beginning of the transfer and
158                                                decremented when a sample is received.
159                                                NbSamplesReceived = RxBufferSize-RxBufferCount) */
160 
161   DMA_HandleTypeDef          *hdmaCsRx;    /* SPDIFRX EC60958_channel_status and user_information
162                                               DMA handle parameters */
163 
164   DMA_HandleTypeDef          *hdmaDrRx;    /* SPDIFRX Rx DMA handle parameters */
165 
166   __IO HAL_LockTypeDef       Lock;         /* SPDIFRX locking object */
167 
168   __IO HAL_SPDIFRX_StateTypeDef  State;    /* SPDIFRX communication state */
169 
170   __IO uint32_t  ErrorCode;                /* SPDIFRX Error code */
171 
172 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
173   void (*RxHalfCpltCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);   /*!< SPDIFRX Data flow half completed
174                                                                              callback */
175   void (*RxCpltCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);       /*!< SPDIFRX Data flow completed callback */
176   void (*CxHalfCpltCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);   /*!< SPDIFRX Control flow half completed
177                                                                              callback */
178   void (*CxCpltCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);       /*!< SPDIFRX Control flow completed callback */
179   void (*ErrorCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);        /*!< SPDIFRX error callback */
180   void (* MspInitCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);     /*!< SPDIFRX Msp Init callback  */
181   void (* MspDeInitCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);   /*!< SPDIFRX Msp DeInit callback  */
182 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
183 
184 } SPDIFRX_HandleTypeDef;
185 
186 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
187 /**
188   * @brief  HAL SPDIFRX Callback ID enumeration definition
189   */
190 typedef enum
191 {
192   HAL_SPDIFRX_RX_HALF_CB_ID   = 0x00U,    /*!< SPDIFRX Data flow half completed callback ID */
193   HAL_SPDIFRX_RX_CPLT_CB_ID   = 0x01U,    /*!< SPDIFRX Data flow completed callback */
194   HAL_SPDIFRX_CX_HALF_CB_ID   = 0x02U,    /*!< SPDIFRX Control flow half completed callback */
195   HAL_SPDIFRX_CX_CPLT_CB_ID   = 0x03U,    /*!< SPDIFRX Control flow completed callback */
196   HAL_SPDIFRX_ERROR_CB_ID     = 0x04U,    /*!< SPDIFRX error callback */
197   HAL_SPDIFRX_MSPINIT_CB_ID   = 0x05U,    /*!< SPDIFRX Msp Init callback ID     */
198   HAL_SPDIFRX_MSPDEINIT_CB_ID = 0x06U     /*!< SPDIFRX Msp DeInit callback ID   */
199 } HAL_SPDIFRX_CallbackIDTypeDef;
200 
201 /**
202   * @brief  HAL SPDIFRX Callback pointer definition
203   */
204 typedef  void (*pSPDIFRX_CallbackTypeDef)(SPDIFRX_HandleTypeDef *hspdif);  /*!< pointer to an SPDIFRX callback
205                                                                                 function */
206 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
207 /**
208   * @}
209   */
210 /* Exported constants --------------------------------------------------------*/
211 /** @defgroup SPDIFRX_Exported_Constants SPDIFRX Exported Constants
212   * @{
213   */
214 /** @defgroup SPDIFRX_ErrorCode SPDIFRX Error Code
215   * @{
216   */
217 #define HAL_SPDIFRX_ERROR_NONE      ((uint32_t)0x00000000U)  /*!< No error           */
218 #define HAL_SPDIFRX_ERROR_TIMEOUT   ((uint32_t)0x00000001U)  /*!< Timeout error      */
219 #define HAL_SPDIFRX_ERROR_OVR       ((uint32_t)0x00000002U)  /*!< OVR error          */
220 #define HAL_SPDIFRX_ERROR_PE        ((uint32_t)0x00000004U)  /*!< Parity error       */
221 #define HAL_SPDIFRX_ERROR_DMA       ((uint32_t)0x00000008U)  /*!< DMA transfer error */
222 #define HAL_SPDIFRX_ERROR_UNKNOWN   ((uint32_t)0x00000010U)  /*!< Unknown Error error */
223 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
224 #define  HAL_SPDIFRX_ERROR_INVALID_CALLBACK   ((uint32_t)0x00000020U)    /*!< Invalid Callback error  */
225 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
226 /**
227   * @}
228   */
229 
230 /** @defgroup SPDIFRX_Input_Selection SPDIFRX Input Selection
231   * @{
232   */
233 #define SPDIFRX_INPUT_IN0   ((uint32_t)0x00000000U)
234 #define SPDIFRX_INPUT_IN1   ((uint32_t)0x00010000U)
235 #define SPDIFRX_INPUT_IN2   ((uint32_t)0x00020000U)
236 #define SPDIFRX_INPUT_IN3   ((uint32_t)0x00030000U)
237 /**
238   * @}
239   */
240 
241 /** @defgroup SPDIFRX_Max_Retries SPDIFRX Maximum Retries
242   * @{
243   */
244 #define SPDIFRX_MAXRETRIES_NONE   ((uint32_t)0x00000000U)
245 #define SPDIFRX_MAXRETRIES_3      ((uint32_t)0x00001000U)
246 #define SPDIFRX_MAXRETRIES_15     ((uint32_t)0x00002000U)
247 #define SPDIFRX_MAXRETRIES_63     ((uint32_t)0x00003000U)
248 /**
249   * @}
250   */
251 
252 /** @defgroup SPDIFRX_Wait_For_Activity SPDIFRX Wait For Activity
253   * @{
254   */
255 #define SPDIFRX_WAITFORACTIVITY_OFF   ((uint32_t)0x00000000U)
256 #define SPDIFRX_WAITFORACTIVITY_ON    ((uint32_t)SPDIFRX_CR_WFA)
257 /**
258   * @}
259   */
260 
261 /** @defgroup SPDIFRX_PT_Mask SPDIFRX Preamble Type Mask
262   * @{
263   */
264 #define SPDIFRX_PREAMBLETYPEMASK_OFF    ((uint32_t)0x00000000U)
265 #define SPDIFRX_PREAMBLETYPEMASK_ON     ((uint32_t)SPDIFRX_CR_PTMSK)
266 /**
267   * @}
268   */
269 
270 /** @defgroup SPDIFRX_ChannelStatus_Mask  SPDIFRX Channel Status Mask
271   * @{
272   */
273 #define SPDIFRX_CHANNELSTATUS_OFF   ((uint32_t)0x00000000U)       /* The channel status and user bits are copied
274                                                                      into the SPDIF_DR */
275 #define SPDIFRX_CHANNELSTATUS_ON    ((uint32_t)SPDIFRX_CR_CUMSK)  /* The channel status and user bits are not copied
276                                                                      into the SPDIF_DR, zeros are written instead*/
277 /**
278   * @}
279   */
280 
281 /** @defgroup SPDIFRX_V_Mask SPDIFRX Validity Mask
282   * @{
283   */
284 #define SPDIFRX_VALIDITYMASK_OFF    ((uint32_t)0x00000000U)
285 #define SPDIFRX_VALIDITYMASK_ON     ((uint32_t)SPDIFRX_CR_VMSK)
286 /**
287   * @}
288   */
289 
290 /** @defgroup SPDIFRX_PE_Mask  SPDIFRX Parity Error Mask
291   * @{
292   */
293 #define SPDIFRX_PARITYERRORMASK_OFF   ((uint32_t)0x00000000U)
294 #define SPDIFRX_PARITYERRORMASK_ON    ((uint32_t)SPDIFRX_CR_PMSK)
295 /**
296   * @}
297   */
298 
299 /** @defgroup SPDIFRX_Channel_Selection  SPDIFRX Channel Selection
300   * @{
301   */
302 #define SPDIFRX_CHANNEL_A   ((uint32_t)0x00000000U)
303 #define SPDIFRX_CHANNEL_B   ((uint32_t)SPDIFRX_CR_CHSEL)
304 /**
305   * @}
306   */
307 
308 /** @defgroup SPDIFRX_Data_Format SPDIFRX Data Format
309   * @{
310   */
311 #define SPDIFRX_DATAFORMAT_LSB      ((uint32_t)0x00000000U)
312 #define SPDIFRX_DATAFORMAT_MSB      ((uint32_t)0x00000010U)
313 #define SPDIFRX_DATAFORMAT_32BITS   ((uint32_t)0x00000020U)
314 /**
315   * @}
316   */
317 
318 /** @defgroup SPDIFRX_Stereo_Mode SPDIFRX Stereo Mode
319   * @{
320   */
321 #define SPDIFRX_STEREOMODE_DISABLE    ((uint32_t)0x00000000U)
322 #define SPDIFRX_STEREOMODE_ENABLE     ((uint32_t)SPDIFRX_CR_RXSTEO)
323 /**
324   * @}
325   */
326 
327 /** @defgroup SPDIFRX_State SPDIFRX State
328   * @{
329   */
330 
331 #define SPDIFRX_STATE_IDLE    ((uint32_t)0xFFFFFFFCU)
332 #define SPDIFRX_STATE_SYNC    ((uint32_t)0x00000001U)
333 #define SPDIFRX_STATE_RCV     ((uint32_t)SPDIFRX_CR_SPDIFEN)
334 /**
335   * @}
336   */
337 
338 /** @defgroup SPDIFRX_Interrupts_Definition SPDIFRX Interrupts Definition
339   * @{
340   */
341 #define SPDIFRX_IT_RXNE       ((uint32_t)SPDIFRX_IMR_RXNEIE)
342 #define SPDIFRX_IT_CSRNE      ((uint32_t)SPDIFRX_IMR_CSRNEIE)
343 #define SPDIFRX_IT_PERRIE     ((uint32_t)SPDIFRX_IMR_PERRIE)
344 #define SPDIFRX_IT_OVRIE      ((uint32_t)SPDIFRX_IMR_OVRIE)
345 #define SPDIFRX_IT_SBLKIE     ((uint32_t)SPDIFRX_IMR_SBLKIE)
346 #define SPDIFRX_IT_SYNCDIE    ((uint32_t)SPDIFRX_IMR_SYNCDIE)
347 #define SPDIFRX_IT_IFEIE      ((uint32_t)SPDIFRX_IMR_IFEIE )
348 /**
349   * @}
350   */
351 
352 /** @defgroup SPDIFRX_Flags_Definition SPDIFRX Flags Definition
353   * @{
354   */
355 #define SPDIFRX_FLAG_RXNE     ((uint32_t)SPDIFRX_SR_RXNE)
356 #define SPDIFRX_FLAG_CSRNE    ((uint32_t)SPDIFRX_SR_CSRNE)
357 #define SPDIFRX_FLAG_PERR     ((uint32_t)SPDIFRX_SR_PERR)
358 #define SPDIFRX_FLAG_OVR      ((uint32_t)SPDIFRX_SR_OVR)
359 #define SPDIFRX_FLAG_SBD      ((uint32_t)SPDIFRX_SR_SBD)
360 #define SPDIFRX_FLAG_SYNCD    ((uint32_t)SPDIFRX_SR_SYNCD)
361 #define SPDIFRX_FLAG_FERR     ((uint32_t)SPDIFRX_SR_FERR)
362 #define SPDIFRX_FLAG_SERR     ((uint32_t)SPDIFRX_SR_SERR)
363 #define SPDIFRX_FLAG_TERR     ((uint32_t)SPDIFRX_SR_TERR)
364 /**
365   * @}
366   */
367 
368 /**
369   * @}
370   */
371 
372 /* Exported macros -----------------------------------------------------------*/
373 /** @defgroup SPDIFRX_Exported_macros SPDIFRX Exported Macros
374   * @{
375   */
376 
377 /** @brief  Reset SPDIFRX handle state
378   * @param  __HANDLE__ SPDIFRX handle.
379   * @retval None
380   */
381 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
382 #define __HAL_SPDIFRX_RESET_HANDLE_STATE(__HANDLE__) do{\
383                                                          (__HANDLE__)->State = HAL_SPDIFRX_STATE_RESET;\
384                                                          (__HANDLE__)->MspInitCallback = NULL;\
385                                                          (__HANDLE__)->MspDeInitCallback = NULL;\
386                                                        }while(0)
387 #else
388 #define __HAL_SPDIFRX_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPDIFRX_STATE_RESET)
389 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
390 
391 /** @brief  Disable the specified SPDIFRX peripheral (IDLE State).
392   * @param  __HANDLE__ specifies the SPDIFRX Handle.
393   * @retval None
394   */
395 #define __HAL_SPDIFRX_IDLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= SPDIFRX_STATE_IDLE)
396 
397 /** @brief  Enable the specified SPDIFRX peripheral (SYNC State).
398   * @param  __HANDLE__ specifies the SPDIFRX Handle.
399   * @retval None
400   */
401 #define __HAL_SPDIFRX_SYNC(__HANDLE__) ((__HANDLE__)->Instance->CR |= SPDIFRX_STATE_SYNC)
402 
403 
404 /** @brief  Enable the specified SPDIFRX peripheral (RCV State).
405   * @param  __HANDLE__ specifies the SPDIFRX Handle.
406   * @retval None
407   */
408 #define __HAL_SPDIFRX_RCV(__HANDLE__) ((__HANDLE__)->Instance->CR |= SPDIFRX_STATE_RCV)
409 
410 
411 /** @brief  Enable or disable the specified SPDIFRX interrupts.
412   * @param  __HANDLE__    specifies the SPDIFRX Handle.
413   * @param  __INTERRUPT__ specifies the interrupt source to enable or disable.
414   *        This parameter can be one of the following values:
415   *            @arg SPDIFRX_IT_RXNE
416   *            @arg SPDIFRX_IT_CSRNE
417   *            @arg SPDIFRX_IT_PERRIE
418   *            @arg SPDIFRX_IT_OVRIE
419   *            @arg SPDIFRX_IT_SBLKIE
420   *            @arg SPDIFRX_IT_SYNCDIE
421   *            @arg SPDIFRX_IT_IFEIE
422   * @retval None
423   */
424 #define __HAL_SPDIFRX_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR |= (__INTERRUPT__))
425 #define __HAL_SPDIFRX_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR\
426                                                              &= (uint16_t)(~(__INTERRUPT__)))
427 
428 /** @brief  Checks if the specified SPDIFRX interrupt source is enabled or disabled.
429   * @param  __HANDLE__    specifies the SPDIFRX Handle.
430   * @param  __INTERRUPT__ specifies the SPDIFRX interrupt source to check.
431   *          This parameter can be one of the following values:
432   *            @arg SPDIFRX_IT_RXNE
433   *            @arg SPDIFRX_IT_CSRNE
434   *            @arg SPDIFRX_IT_PERRIE
435   *            @arg SPDIFRX_IT_OVRIE
436   *            @arg SPDIFRX_IT_SBLKIE
437   *            @arg SPDIFRX_IT_SYNCDIE
438   *            @arg SPDIFRX_IT_IFEIE
439   * @retval The new state of __IT__ (TRUE or FALSE).
440   */
441 #define __HAL_SPDIFRX_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IMR\
442                                                                   & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
443 
444 /** @brief  Checks whether the specified SPDIFRX flag is set or not.
445   * @param  __HANDLE__  specifies the SPDIFRX Handle.
446   * @param  __FLAG__    specifies the flag to check.
447   *        This parameter can be one of the following values:
448   *            @arg SPDIFRX_FLAG_RXNE
449   *            @arg SPDIFRX_FLAG_CSRNE
450   *            @arg SPDIFRX_FLAG_PERR
451   *            @arg SPDIFRX_FLAG_OVR
452   *            @arg SPDIFRX_FLAG_SBD
453   *            @arg SPDIFRX_FLAG_SYNCD
454   *            @arg SPDIFRX_FLAG_FERR
455   *            @arg SPDIFRX_FLAG_SERR
456   *            @arg SPDIFRX_FLAG_TERR
457   * @retval The new state of __FLAG__ (TRUE or FALSE).
458   */
459 #define __HAL_SPDIFRX_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->SR)\
460                                                         & (__FLAG__)) == (__FLAG__)) ? SET : RESET)
461 
462 /** @brief  Clears the specified SPDIFRX SR flag, in setting the proper IFCR register bit.
463   * @param  __HANDLE__    specifies the USART Handle.
464   * @param  __IT_CLEAR__  specifies the interrupt clear register flag that needs to be set
465   *                       to clear the corresponding interrupt
466   *          This parameter can be one of the following values:
467   *            @arg SPDIFRX_FLAG_PERR
468   *            @arg SPDIFRX_FLAG_OVR
469   *            @arg SPDIFRX_SR_SBD
470   *            @arg SPDIFRX_SR_SYNCD
471   * @retval None
472   */
473 #define __HAL_SPDIFRX_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->IFCR = (uint32_t)(__IT_CLEAR__))
474 
475 /**
476   * @}
477   */
478 
479 /* Exported functions --------------------------------------------------------*/
480 /** @addtogroup SPDIFRX_Exported_Functions
481   * @{
482   */
483 
484 /** @addtogroup SPDIFRX_Exported_Functions_Group1
485   * @{
486   */
487 /* Initialization/de-initialization functions  **********************************/
488 HAL_StatusTypeDef HAL_SPDIFRX_Init(SPDIFRX_HandleTypeDef *hspdif);
489 HAL_StatusTypeDef HAL_SPDIFRX_DeInit(SPDIFRX_HandleTypeDef *hspdif);
490 void HAL_SPDIFRX_MspInit(SPDIFRX_HandleTypeDef *hspdif);
491 void HAL_SPDIFRX_MspDeInit(SPDIFRX_HandleTypeDef *hspdif);
492 HAL_StatusTypeDef HAL_SPDIFRX_SetDataFormat(SPDIFRX_HandleTypeDef *hspdif, SPDIFRX_SetDataFormatTypeDef  sDataFormat);
493 
494 /* Callbacks Register/UnRegister functions  ***********************************/
495 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
496 HAL_StatusTypeDef HAL_SPDIFRX_RegisterCallback(SPDIFRX_HandleTypeDef *hspdif, HAL_SPDIFRX_CallbackIDTypeDef CallbackID,
497                                                pSPDIFRX_CallbackTypeDef pCallback);
498 HAL_StatusTypeDef HAL_SPDIFRX_UnRegisterCallback(SPDIFRX_HandleTypeDef *hspdif,
499                                                  HAL_SPDIFRX_CallbackIDTypeDef CallbackID);
500 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
501 /**
502   * @}
503   */
504 
505 /** @addtogroup SPDIFRX_Exported_Functions_Group2
506   * @{
507   */
508 /* I/O operation functions  ***************************************************/
509 /* Blocking mode: Polling */
510 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size,
511                                               uint32_t Timeout);
512 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveControlFlow(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size,
513                                                  uint32_t Timeout);
514 
515 /* Non-Blocking mode: Interrupt */
516 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveControlFlow_IT(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size);
517 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow_IT(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size);
518 void HAL_SPDIFRX_IRQHandler(SPDIFRX_HandleTypeDef *hspdif);
519 
520 /* Non-Blocking mode: DMA */
521 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveControlFlow_DMA(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size);
522 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow_DMA(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size);
523 HAL_StatusTypeDef HAL_SPDIFRX_DMAStop(SPDIFRX_HandleTypeDef *hspdif);
524 
525 /* Callbacks used in non blocking modes (Interrupt and DMA) *******************/
526 void HAL_SPDIFRX_RxHalfCpltCallback(SPDIFRX_HandleTypeDef *hspdif);
527 void HAL_SPDIFRX_RxCpltCallback(SPDIFRX_HandleTypeDef *hspdif);
528 void HAL_SPDIFRX_ErrorCallback(SPDIFRX_HandleTypeDef *hspdif);
529 void HAL_SPDIFRX_CxHalfCpltCallback(SPDIFRX_HandleTypeDef *hspdif);
530 void HAL_SPDIFRX_CxCpltCallback(SPDIFRX_HandleTypeDef *hspdif);
531 /**
532   * @}
533   */
534 
535 /** @addtogroup SPDIFRX_Exported_Functions_Group3
536   * @{
537   */
538 /* Peripheral Control and State functions  ************************************/
539 HAL_SPDIFRX_StateTypeDef HAL_SPDIFRX_GetState(SPDIFRX_HandleTypeDef const *const hspdif);
540 uint32_t HAL_SPDIFRX_GetError(SPDIFRX_HandleTypeDef const *const hspdif);
541 /**
542   * @}
543   */
544 
545 /**
546   * @}
547   */
548 /* Private types -------------------------------------------------------------*/
549 /* Private variables ---------------------------------------------------------*/
550 /* Private constants ---------------------------------------------------------*/
551 /* Private macros ------------------------------------------------------------*/
552 /** @defgroup SPDIFRX_Private_Macros SPDIFRX Private Macros
553   * @{
554   */
555 #define IS_SPDIFRX_INPUT_SELECT(INPUT)      (((INPUT) == SPDIFRX_INPUT_IN1) || \
556                                              ((INPUT) == SPDIFRX_INPUT_IN2)  || \
557                                              ((INPUT) == SPDIFRX_INPUT_IN3)  || \
558                                              ((INPUT) == SPDIFRX_INPUT_IN0))
559 
560 #define IS_SPDIFRX_MAX_RETRIES(RET)         (((RET) == SPDIFRX_MAXRETRIES_NONE) || \
561                                              ((RET) == SPDIFRX_MAXRETRIES_3)     || \
562                                              ((RET) == SPDIFRX_MAXRETRIES_15)    || \
563                                              ((RET) == SPDIFRX_MAXRETRIES_63))
564 
565 #define IS_SPDIFRX_WAIT_FOR_ACTIVITY(VAL)   (((VAL) == SPDIFRX_WAITFORACTIVITY_ON) || \
566                                              ((VAL) == SPDIFRX_WAITFORACTIVITY_OFF))
567 
568 #define IS_PREAMBLE_TYPE_MASK(VAL)          (((VAL) == SPDIFRX_PREAMBLETYPEMASK_ON) || \
569                                              ((VAL) == SPDIFRX_PREAMBLETYPEMASK_OFF))
570 
571 #define IS_VALIDITY_MASK(VAL)               (((VAL) == SPDIFRX_VALIDITYMASK_OFF) || \
572                                              ((VAL) == SPDIFRX_VALIDITYMASK_ON))
573 
574 #define IS_PARITY_ERROR_MASK(VAL)           (((VAL) == SPDIFRX_PARITYERRORMASK_OFF) || \
575                                              ((VAL) == SPDIFRX_PARITYERRORMASK_ON))
576 
577 #define IS_SPDIFRX_CHANNEL(CHANNEL)         (((CHANNEL) == SPDIFRX_CHANNEL_A) || \
578                                              ((CHANNEL) == SPDIFRX_CHANNEL_B))
579 
580 #define IS_SPDIFRX_DATA_FORMAT(FORMAT)      (((FORMAT) == SPDIFRX_DATAFORMAT_LSB) || \
581                                              ((FORMAT) == SPDIFRX_DATAFORMAT_MSB)  || \
582                                              ((FORMAT) == SPDIFRX_DATAFORMAT_32BITS))
583 
584 #define IS_STEREO_MODE(MODE)                (((MODE) == SPDIFRX_STEREOMODE_DISABLE) || \
585                                              ((MODE) == SPDIFRX_STEREOMODE_ENABLE))
586 
587 #define IS_CHANNEL_STATUS_MASK(VAL)         (((VAL) == SPDIFRX_CHANNELSTATUS_ON) || \
588                                              ((VAL) == SPDIFRX_CHANNELSTATUS_OFF))
589 
590 /**
591   * @}
592   */
593 
594 /* Private functions ---------------------------------------------------------*/
595 /** @defgroup SPDIFRX_Private_Functions SPDIFRX Private Functions
596   * @{
597   */
598 /**
599   * @}
600   */
601 
602 /**
603   * @}
604   */
605 #endif /* SPDIFRX */
606 /**
607   * @}
608   */
609 
610 
611 #ifdef __cplusplus
612 }
613 #endif
614 
615 
616 #endif /* STM32F7xx_HAL_SPDIFRX_H */
617