STM32H735xx HAL User Manual
stm32h7xx_hal_spdifrx.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32h7xx_hal_spdifrx.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of SPDIFRX HAL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2017 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * This software is licensed under terms that can be found in the LICENSE file
00013   * in the root directory of this software component.
00014   * If no LICENSE file comes with this software, it is provided AS-IS.
00015   *
00016   ******************************************************************************
00017   */
00018 
00019 /* Define to prevent recursive inclusion -------------------------------------*/
00020 #ifndef STM32H7xx_HAL_SPDIFRX_H
00021 #define STM32H7xx_HAL_SPDIFRX_H
00022 
00023 #ifdef __cplusplus
00024  extern "C" {
00025 #endif
00026 
00027 /* Includes ------------------------------------------------------------------*/
00028 #include "stm32h7xx_hal_def.h"
00029 
00030 
00031 /** @addtogroup STM32H7xx_HAL_Driver
00032   * @{
00033   */
00034 #if defined (SPDIFRX)
00035 
00036 /** @addtogroup SPDIFRX
00037   * @{
00038   */
00039 
00040 /* Exported types ------------------------------------------------------------*/
00041 /** @defgroup SPDIFRX_Exported_Types SPDIFRX Exported Types
00042   * @{
00043   */
00044 
00045 /**
00046   * @brief SPDIFRX Init structure definition
00047   */
00048 typedef struct
00049 {
00050   uint32_t InputSelection;           /*!< Specifies the SPDIF input selection.
00051                                           This parameter can be a value of @ref SPDIFRX_Input_Selection */
00052 
00053   uint32_t Retries;                  /*!< Specifies the Maximum allowed re-tries during synchronization phase.
00054                                           This parameter can be a value of @ref SPDIFRX_Max_Retries */
00055 
00056   uint32_t WaitForActivity;          /*!< Specifies the wait for activity on SPDIF selected input.
00057                                           This parameter can be a value of @ref SPDIFRX_Wait_For_Activity. */
00058 
00059   uint32_t ChannelSelection;         /*!< Specifies whether the control flow will take the channel status from channel A or B.
00060                                           This parameter can be a value of @ref SPDIFRX_Channel_Selection */
00061 
00062   uint32_t DataFormat;               /*!< Specifies the Data samples format (LSB, MSB, ...).
00063                                           This parameter can be a value of @ref SPDIFRX_Data_Format */
00064 
00065   uint32_t StereoMode;               /*!< Specifies whether the peripheral is in stereo or mono mode.
00066                                           This parameter can be a value of @ref SPDIFRX_Stereo_Mode */
00067 
00068   uint32_t PreambleTypeMask;          /*!< Specifies whether The preamble type bits are copied or not into the received frame.
00069                                            This parameter can be a value of @ref SPDIFRX_PT_Mask */
00070 
00071   uint32_t ChannelStatusMask;        /*!< Specifies whether the channel status and user bits are copied or not into the received frame.
00072                                           This parameter can be a value of @ref SPDIFRX_ChannelStatus_Mask */
00073 
00074   uint32_t ValidityBitMask;          /*!< Specifies whether the validity bit is copied or not into the received frame.
00075                                           This parameter can be a value of @ref SPDIFRX_V_Mask */
00076 
00077   uint32_t ParityErrorMask;          /*!< Specifies whether the parity error bit is copied or not into the received frame.
00078                                           This parameter can be a value of @ref SPDIFRX_PE_Mask */
00079   FunctionalState SymbolClockGen;     /*!< Enable/Disable the SPDIFRX Symbol Clock generation.
00080                                           This parameter can be set to Enable or Disable */
00081 
00082   FunctionalState BackupSymbolClockGen; /*!< Enable/Disable the SPDIFRX Backup Symbol Clock generation.
00083                                           This parameter can be set to Enable or Disable */
00084 } SPDIFRX_InitTypeDef;
00085 
00086 /**
00087   * @brief SPDIFRX SetDataFormat structure definition
00088   */
00089 typedef struct
00090 {
00091   uint32_t DataFormat;               /*!< Specifies the Data samples format (LSB, MSB, ...).
00092                                           This parameter can be a value of @ref SPDIFRX_Data_Format */
00093 
00094   uint32_t StereoMode;               /*!< Specifies whether the peripheral is in stereo or mono mode.
00095                                           This parameter can be a value of @ref SPDIFRX_Stereo_Mode */
00096 
00097   uint32_t PreambleTypeMask;          /*!< Specifies whether The preamble type bits are copied or not into the received frame.
00098                                                                                    This parameter can be a value of @ref SPDIFRX_PT_Mask */
00099 
00100   uint32_t ChannelStatusMask;        /*!< Specifies whether the channel status and user bits are copied or not into the received frame.
00101                                                                                   This parameter can be a value of @ref SPDIFRX_ChannelStatus_Mask */
00102 
00103   uint32_t ValidityBitMask;          /*!< Specifies whether the validity bit is copied or not into the received frame.
00104                                                                                   This parameter can be a value of @ref SPDIFRX_V_Mask */
00105 
00106   uint32_t ParityErrorMask;          /*!< Specifies whether the parity error bit is copied or not into the received frame.
00107                                                                                   This parameter can be a value of @ref SPDIFRX_PE_Mask */
00108 
00109 } SPDIFRX_SetDataFormatTypeDef;
00110 
00111 /**
00112   * @brief  HAL State structures definition
00113   */
00114 typedef enum
00115 {
00116   HAL_SPDIFRX_STATE_RESET      = 0x00U,  /*!< SPDIFRX not yet initialized or disabled                */
00117   HAL_SPDIFRX_STATE_READY      = 0x01U,  /*!< SPDIFRX initialized and ready for use                  */
00118   HAL_SPDIFRX_STATE_BUSY       = 0x02U,  /*!< SPDIFRX internal process is ongoing                    */
00119   HAL_SPDIFRX_STATE_BUSY_RX    = 0x03U,  /*!< SPDIFRX internal Data Flow RX process is ongoing       */
00120   HAL_SPDIFRX_STATE_BUSY_CX    = 0x04U,  /*!< SPDIFRX internal Control Flow RX process is ongoing    */
00121   HAL_SPDIFRX_STATE_ERROR      = 0x07U   /*!< SPDIFRX error state                                    */
00122 } HAL_SPDIFRX_StateTypeDef;
00123 
00124 /**
00125   * @brief SPDIFRX handle Structure definition
00126   */
00127 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
00128 typedef struct __SPDIFRX_HandleTypeDef
00129 #else
00130 typedef struct
00131 #endif
00132 {
00133   SPDIFRX_TypeDef            *Instance;    /* SPDIFRX registers base address */
00134 
00135   SPDIFRX_InitTypeDef        Init;         /* SPDIFRX communication parameters */
00136 
00137   uint32_t                   *pRxBuffPtr;  /* Pointer to SPDIFRX Rx transfer buffer */
00138 
00139   uint32_t                   *pCsBuffPtr;  /* Pointer to SPDIFRX Cx transfer buffer */
00140 
00141   __IO uint16_t              RxXferSize;   /* SPDIFRX Rx transfer size */
00142 
00143   __IO uint16_t              RxXferCount;  /* SPDIFRX Rx transfer counter
00144                                               (This field is initialized at the
00145                                                same value as transfer size at the
00146                                                beginning of the transfer and
00147                                                decremented when a sample is received.
00148                                                NbSamplesReceived = RxBufferSize-RxBufferCount) */
00149 
00150   __IO uint16_t              CsXferSize;   /* SPDIFRX Rx transfer size */
00151 
00152   __IO uint16_t              CsXferCount;  /* SPDIFRX Rx transfer counter
00153                                               (This field is initialized at the
00154                                                same value as transfer size at the
00155                                                beginning of the transfer and
00156                                                decremented when a sample is received.
00157                                                NbSamplesReceived = RxBufferSize-RxBufferCount) */
00158 
00159   DMA_HandleTypeDef          *hdmaCsRx;    /* SPDIFRX EC60958_channel_status and user_information DMA handle parameters */
00160 
00161   DMA_HandleTypeDef          *hdmaDrRx;    /* SPDIFRX Rx DMA handle parameters */
00162 
00163   __IO HAL_LockTypeDef       Lock;         /* SPDIFRX locking object */
00164 
00165   __IO HAL_SPDIFRX_StateTypeDef  State;    /* SPDIFRX communication state */
00166 
00167   __IO uint32_t  ErrorCode;                /* SPDIFRX Error code */
00168 
00169 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
00170   void (*RxHalfCpltCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);   /*!< SPDIFRX Data flow half completed callback */
00171   void (*RxCpltCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);       /*!< SPDIFRX Data flow completed callback */
00172   void (*CxHalfCpltCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);   /*!< SPDIFRX Control flow half completed callback */
00173   void (*CxCpltCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);       /*!< SPDIFRX Control flow completed callback */
00174   void (*ErrorCallback)(struct __SPDIFRX_HandleTypeDef *hspdif);        /*!< SPDIFRX error callback */
00175   void (* MspInitCallback)( struct __SPDIFRX_HandleTypeDef * hspdif);   /*!< SPDIFRX Msp Init callback  */
00176   void (* MspDeInitCallback)( struct __SPDIFRX_HandleTypeDef * hspdif); /*!< SPDIFRX Msp DeInit callback  */
00177 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
00178 
00179 } SPDIFRX_HandleTypeDef;
00180 /**
00181   * @}
00182   */
00183 
00184 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
00185 /**
00186   * @brief  HAL SPDIFRX Callback ID enumeration definition
00187   */
00188 typedef enum
00189 {
00190   HAL_SPDIFRX_RX_HALF_CB_ID   = 0x00U,    /*!< SPDIFRX Data flow half completed callback ID */
00191   HAL_SPDIFRX_RX_CPLT_CB_ID   = 0x01U,    /*!< SPDIFRX Data flow completed callback */
00192   HAL_SPDIFRX_CX_HALF_CB_ID   = 0x02U,    /*!< SPDIFRX Control flow half completed callback */
00193   HAL_SPDIFRX_CX_CPLT_CB_ID   = 0x03U,    /*!< SPDIFRX Control flow completed callback */
00194   HAL_SPDIFRX_ERROR_CB_ID     = 0x04U,    /*!< SPDIFRX error callback */
00195   HAL_SPDIFRX_MSPINIT_CB_ID   = 0x05U,    /*!< SPDIFRX Msp Init callback ID     */
00196   HAL_SPDIFRX_MSPDEINIT_CB_ID = 0x06U     /*!< SPDIFRX Msp DeInit callback ID   */
00197 }HAL_SPDIFRX_CallbackIDTypeDef;
00198 
00199 /**
00200   * @brief  HAL SPDIFRX Callback pointer definition
00201   */
00202 typedef  void (*pSPDIFRX_CallbackTypeDef)(SPDIFRX_HandleTypeDef * hspdif); /*!< pointer to an SPDIFRX callback function */
00203 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
00204 
00205 /* Exported constants --------------------------------------------------------*/
00206 /** @defgroup SPDIFRX_Exported_Constants SPDIFRX Exported Constants
00207   * @{
00208   */
00209 /** @defgroup SPDIFRX_ErrorCode SPDIFRX Error Code
00210   * @{
00211   */
00212 #define HAL_SPDIFRX_ERROR_NONE      ((uint32_t)0x00000000U)  /*!< No error           */
00213 #define HAL_SPDIFRX_ERROR_TIMEOUT   ((uint32_t)0x00000001U)  /*!< Timeout error      */
00214 #define HAL_SPDIFRX_ERROR_OVR       ((uint32_t)0x00000002U)  /*!< OVR error          */
00215 #define HAL_SPDIFRX_ERROR_PE        ((uint32_t)0x00000004U)  /*!< Parity error       */
00216 #define HAL_SPDIFRX_ERROR_DMA       ((uint32_t)0x00000008U)  /*!< DMA transfer error */
00217 #define HAL_SPDIFRX_ERROR_UNKNOWN   ((uint32_t)0x00000010U)  /*!< Unknown Error error */
00218 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
00219 #define  HAL_SPDIFRX_ERROR_INVALID_CALLBACK   ((uint32_t)0x00000020U)    /*!< Invalid Callback error  */
00220 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
00221 /**
00222   * @}
00223   */
00224 
00225 /** @defgroup SPDIFRX_Input_Selection SPDIFRX Input Selection
00226   * @{
00227   */
00228 #define SPDIFRX_INPUT_IN0   ((uint32_t)0x00000000U)
00229 #define SPDIFRX_INPUT_IN1   ((uint32_t)0x00010000U)
00230 #define SPDIFRX_INPUT_IN2   ((uint32_t)0x00020000U)
00231 #define SPDIFRX_INPUT_IN3   ((uint32_t)0x00030000U)
00232 /**
00233   * @}
00234   */
00235 
00236 /** @defgroup SPDIFRX_Max_Retries SPDIFRX Maximum Retries
00237   * @{
00238   */
00239 #define SPDIFRX_MAXRETRIES_NONE   ((uint32_t)0x00000000U)
00240 #define SPDIFRX_MAXRETRIES_3      ((uint32_t)0x00001000U)
00241 #define SPDIFRX_MAXRETRIES_15     ((uint32_t)0x00002000U)
00242 #define SPDIFRX_MAXRETRIES_63     ((uint32_t)0x00003000U)
00243 /**
00244   * @}
00245   */
00246 
00247 /** @defgroup SPDIFRX_Wait_For_Activity SPDIFRX Wait For Activity
00248   * @{
00249   */
00250 #define SPDIFRX_WAITFORACTIVITY_OFF   ((uint32_t)0x00000000U)
00251 #define SPDIFRX_WAITFORACTIVITY_ON    ((uint32_t)SPDIFRX_CR_WFA)
00252 /**
00253   * @}
00254   */
00255 
00256 /** @defgroup SPDIFRX_PT_Mask SPDIFRX Preamble Type Mask
00257   * @{
00258   */
00259 #define SPDIFRX_PREAMBLETYPEMASK_OFF    ((uint32_t)0x00000000U)
00260 #define SPDIFRX_PREAMBLETYPEMASK_ON     ((uint32_t)SPDIFRX_CR_PTMSK)
00261 /**
00262   * @}
00263   */
00264 
00265 /** @defgroup SPDIFRX_ChannelStatus_Mask  SPDIFRX Channel Status Mask
00266   * @{
00267   */
00268 #define SPDIFRX_CHANNELSTATUS_OFF   ((uint32_t)0x00000000U)        /* The channel status and user bits are copied into the SPDIF_DR */
00269 #define SPDIFRX_CHANNELSTATUS_ON    ((uint32_t)SPDIFRX_CR_CUMSK)  /* The channel status and user bits are not copied into the SPDIF_DR, zeros are written instead*/
00270 /**
00271   * @}
00272   */
00273 
00274 /** @defgroup SPDIFRX_V_Mask SPDIFRX Validity Mask
00275 * @{
00276 */
00277 #define SPDIFRX_VALIDITYMASK_OFF    ((uint32_t)0x00000000U)
00278 #define SPDIFRX_VALIDITYMASK_ON     ((uint32_t)SPDIFRX_CR_VMSK)
00279 /**
00280   * @}
00281   */
00282 
00283 /** @defgroup SPDIFRX_PE_Mask  SPDIFRX Parity Error Mask
00284   * @{
00285   */
00286 #define SPDIFRX_PARITYERRORMASK_OFF   ((uint32_t)0x00000000U)
00287 #define SPDIFRX_PARITYERRORMASK_ON    ((uint32_t)SPDIFRX_CR_PMSK)
00288 /**
00289   * @}
00290   */
00291 
00292 /** @defgroup SPDIFRX_Channel_Selection  SPDIFRX Channel Selection
00293   * @{
00294   */
00295 #define SPDIFRX_CHANNEL_A   ((uint32_t)0x00000000U)
00296 #define SPDIFRX_CHANNEL_B   ((uint32_t)SPDIFRX_CR_CHSEL)
00297 /**
00298   * @}
00299   */
00300 
00301 /** @defgroup SPDIFRX_Data_Format SPDIFRX Data Format
00302   * @{
00303   */
00304 #define SPDIFRX_DATAFORMAT_LSB      ((uint32_t)0x00000000U)
00305 #define SPDIFRX_DATAFORMAT_MSB      ((uint32_t)0x00000010U)
00306 #define SPDIFRX_DATAFORMAT_32BITS   ((uint32_t)0x00000020U)
00307 /**
00308   * @}
00309   */
00310 
00311 /** @defgroup SPDIFRX_Stereo_Mode SPDIFRX Stereo Mode
00312   * @{
00313   */
00314 #define SPDIFRX_STEREOMODE_DISABLE    ((uint32_t)0x00000000U)
00315 #define SPDIFRX_STEREOMODE_ENABLE     ((uint32_t)SPDIFRX_CR_RXSTEO)
00316 /**
00317   * @}
00318   */
00319 
00320 /** @defgroup SPDIFRX_State SPDIFRX State
00321   * @{
00322   */
00323 
00324 #define SPDIFRX_STATE_IDLE    ((uint32_t)0xFFFFFFFCU)
00325 #define SPDIFRX_STATE_SYNC    ((uint32_t)0x00000001U)
00326 #define SPDIFRX_STATE_RCV     ((uint32_t)SPDIFRX_CR_SPDIFEN)
00327 /**
00328   * @}
00329   */
00330 
00331 /** @defgroup SPDIFRX_Interrupts_Definition SPDIFRX Interrupts Definition
00332   * @{
00333   */
00334 #define SPDIFRX_IT_RXNE       ((uint32_t)SPDIFRX_IMR_RXNEIE)
00335 #define SPDIFRX_IT_CSRNE      ((uint32_t)SPDIFRX_IMR_CSRNEIE)
00336 #define SPDIFRX_IT_PERRIE     ((uint32_t)SPDIFRX_IMR_PERRIE)
00337 #define SPDIFRX_IT_OVRIE      ((uint32_t)SPDIFRX_IMR_OVRIE)
00338 #define SPDIFRX_IT_SBLKIE     ((uint32_t)SPDIFRX_IMR_SBLKIE)
00339 #define SPDIFRX_IT_SYNCDIE    ((uint32_t)SPDIFRX_IMR_SYNCDIE)
00340 #define SPDIFRX_IT_IFEIE      ((uint32_t)SPDIFRX_IMR_IFEIE )
00341 /**
00342   * @}
00343   */
00344 
00345 /** @defgroup SPDIFRX_Flags_Definition SPDIFRX Flags Definition
00346   * @{
00347   */
00348 #define SPDIFRX_FLAG_RXNE     ((uint32_t)SPDIFRX_SR_RXNE)
00349 #define SPDIFRX_FLAG_CSRNE    ((uint32_t)SPDIFRX_SR_CSRNE)
00350 #define SPDIFRX_FLAG_PERR     ((uint32_t)SPDIFRX_SR_PERR)
00351 #define SPDIFRX_FLAG_OVR      ((uint32_t)SPDIFRX_SR_OVR)
00352 #define SPDIFRX_FLAG_SBD      ((uint32_t)SPDIFRX_SR_SBD)
00353 #define SPDIFRX_FLAG_SYNCD    ((uint32_t)SPDIFRX_SR_SYNCD)
00354 #define SPDIFRX_FLAG_FERR     ((uint32_t)SPDIFRX_SR_FERR)
00355 #define SPDIFRX_FLAG_SERR     ((uint32_t)SPDIFRX_SR_SERR)
00356 #define SPDIFRX_FLAG_TERR     ((uint32_t)SPDIFRX_SR_TERR)
00357 /**
00358   * @}
00359   */
00360 
00361 /**
00362   * @}
00363   */
00364 
00365 /* Exported macros -----------------------------------------------------------*/
00366 /** @defgroup SPDIFRX_Exported_macros SPDIFRX Exported Macros
00367   * @{
00368   */
00369 
00370 /** @brief  Reset SPDIFRX handle state
00371   * @param  __HANDLE__ SPDIFRX handle.
00372   * @retval None
00373   */
00374 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
00375 #define __HAL_SPDIFRX_RESET_HANDLE_STATE(__HANDLE__) do{\
00376                                                       (__HANDLE__)->State = HAL_SPDIFRX_STATE_RESET;\
00377                                                       (__HANDLE__)->MspInitCallback = NULL;\
00378                                                       (__HANDLE__)->MspDeInitCallback = NULL;\
00379                                                      }while(0)
00380 #else
00381 #define __HAL_SPDIFRX_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPDIFRX_STATE_RESET)
00382 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
00383 
00384 /** @brief  Disable the specified SPDIFRX peripheral (IDLE State).
00385   * @param  __HANDLE__ specifies the SPDIFRX Handle.
00386   * @retval None
00387   */
00388 #define __HAL_SPDIFRX_IDLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= SPDIFRX_STATE_IDLE)
00389 
00390 /** @brief  Enable the specified SPDIFRX peripheral (SYNC State).
00391   * @param  __HANDLE__ specifies the SPDIFRX Handle.
00392   * @retval None
00393   */
00394 #define __HAL_SPDIFRX_SYNC(__HANDLE__) ((__HANDLE__)->Instance->CR |= SPDIFRX_STATE_SYNC)
00395 
00396 
00397 /** @brief  Enable the specified SPDIFRX peripheral (RCV State).
00398   * @param  __HANDLE__ specifies the SPDIFRX Handle.
00399   * @retval None
00400   */
00401 #define __HAL_SPDIFRX_RCV(__HANDLE__) ((__HANDLE__)->Instance->CR |= SPDIFRX_STATE_RCV)
00402 
00403 
00404 /** @brief  Enable or disable the specified SPDIFRX interrupts.
00405   * @param  __HANDLE__    specifies the SPDIFRX Handle.
00406   * @param  __INTERRUPT__ specifies the interrupt source to enable or disable.
00407   *        This parameter can be one of the following values:
00408   *            @arg SPDIFRX_IT_RXNE
00409   *            @arg SPDIFRX_IT_CSRNE
00410   *            @arg SPDIFRX_IT_PERRIE
00411   *            @arg SPDIFRX_IT_OVRIE
00412   *            @arg SPDIFRX_IT_SBLKIE
00413   *            @arg SPDIFRX_IT_SYNCDIE
00414   *            @arg SPDIFRX_IT_IFEIE
00415   * @retval None
00416   */
00417 #define __HAL_SPDIFRX_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR |= (__INTERRUPT__))
00418 #define __HAL_SPDIFRX_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR &= (uint16_t)(~(__INTERRUPT__)))
00419 
00420 /** @brief  Checks if the specified SPDIFRX interrupt source is enabled or disabled.
00421   * @param  __HANDLE__    specifies the SPDIFRX Handle.
00422   * @param  __INTERRUPT__ specifies the SPDIFRX interrupt source to check.
00423   *          This parameter can be one of the following values:
00424   *            @arg SPDIFRX_IT_RXNE
00425   *            @arg SPDIFRX_IT_CSRNE
00426   *            @arg SPDIFRX_IT_PERRIE
00427   *            @arg SPDIFRX_IT_OVRIE
00428   *            @arg SPDIFRX_IT_SBLKIE
00429   *            @arg SPDIFRX_IT_SYNCDIE
00430   *            @arg SPDIFRX_IT_IFEIE
00431   * @retval The new state of __IT__ (TRUE or FALSE).
00432   */
00433 #define __HAL_SPDIFRX_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IMR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
00434 
00435 /** @brief  Checks whether the specified SPDIFRX flag is set or not.
00436   * @param  __HANDLE__  specifies the SPDIFRX Handle.
00437   * @param  __FLAG__    specifies the flag to check.
00438   *        This parameter can be one of the following values:
00439   *            @arg SPDIFRX_FLAG_RXNE
00440   *            @arg SPDIFRX_FLAG_CSRNE
00441   *            @arg SPDIFRX_FLAG_PERR
00442   *            @arg SPDIFRX_FLAG_OVR
00443   *            @arg SPDIFRX_FLAG_SBD
00444   *            @arg SPDIFRX_FLAG_SYNCD
00445   *            @arg SPDIFRX_FLAG_FERR
00446   *            @arg SPDIFRX_FLAG_SERR
00447   *            @arg SPDIFRX_FLAG_TERR
00448   * @retval The new state of __FLAG__ (TRUE or FALSE).
00449   */
00450 #define __HAL_SPDIFRX_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) ? SET : RESET)
00451 
00452 /** @brief  Clears the specified SPDIFRX SR flag, in setting the proper IFCR register bit.
00453   * @param  __HANDLE__    specifies the USART Handle.
00454   * @param  __IT_CLEAR__  specifies the interrupt clear register flag that needs to be set
00455   *                       to clear the corresponding interrupt
00456   *          This parameter can be one of the following values:
00457   *            @arg SPDIFRX_FLAG_PERR
00458   *            @arg SPDIFRX_FLAG_OVR
00459   *            @arg SPDIFRX_SR_SBD
00460   *            @arg SPDIFRX_SR_SYNCD
00461   * @retval None
00462   */
00463 #define __HAL_SPDIFRX_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->IFCR = (uint32_t)(__IT_CLEAR__))
00464 
00465 /**
00466   * @}
00467   */
00468 
00469 /* Exported functions --------------------------------------------------------*/
00470 /** @addtogroup SPDIFRX_Exported_Functions
00471   * @{
00472   */
00473 
00474 /** @addtogroup SPDIFRX_Exported_Functions_Group1
00475   * @{
00476   */
00477 /* Initialization/de-initialization functions  **********************************/
00478 HAL_StatusTypeDef HAL_SPDIFRX_Init(SPDIFRX_HandleTypeDef *hspdif);
00479 HAL_StatusTypeDef HAL_SPDIFRX_DeInit (SPDIFRX_HandleTypeDef *hspdif);
00480 void HAL_SPDIFRX_MspInit(SPDIFRX_HandleTypeDef *hspdif);
00481 void HAL_SPDIFRX_MspDeInit(SPDIFRX_HandleTypeDef *hspdif);
00482 HAL_StatusTypeDef HAL_SPDIFRX_SetDataFormat(SPDIFRX_HandleTypeDef *hspdif, SPDIFRX_SetDataFormatTypeDef  sDataFormat);
00483 
00484 /* Callbacks Register/UnRegister functions  ***********************************/
00485 #if (USE_HAL_SPDIFRX_REGISTER_CALLBACKS == 1)
00486 HAL_StatusTypeDef HAL_SPDIFRX_RegisterCallback(SPDIFRX_HandleTypeDef *hspdif, HAL_SPDIFRX_CallbackIDTypeDef CallbackID, pSPDIFRX_CallbackTypeDef pCallback);
00487 HAL_StatusTypeDef HAL_SPDIFRX_UnRegisterCallback(SPDIFRX_HandleTypeDef *hspdif, HAL_SPDIFRX_CallbackIDTypeDef CallbackID);
00488 #endif /* USE_HAL_SPDIFRX_REGISTER_CALLBACKS */
00489 /**
00490   * @}
00491   */
00492 
00493 /** @addtogroup SPDIFRX_Exported_Functions_Group2
00494   * @{
00495   */
00496 /* I/O operation functions  ***************************************************/
00497  /* Blocking mode: Polling */
00498 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size, uint32_t Timeout);
00499 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveCtrlFlow(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size, uint32_t Timeout);
00500 
00501 /* Non-Blocking mode: Interrupt */
00502 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveCtrlFlow_IT(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size);
00503 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow_IT(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size);
00504 void HAL_SPDIFRX_IRQHandler(SPDIFRX_HandleTypeDef *hspdif);
00505 
00506 /* Non-Blocking mode: DMA */
00507 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveCtrlFlow_DMA(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size);
00508 HAL_StatusTypeDef HAL_SPDIFRX_ReceiveDataFlow_DMA(SPDIFRX_HandleTypeDef *hspdif, uint32_t *pData, uint16_t Size);
00509 HAL_StatusTypeDef HAL_SPDIFRX_DMAStop(SPDIFRX_HandleTypeDef *hspdif);
00510 
00511 /* Callbacks used in non blocking modes (Interrupt and DMA) *******************/
00512 void HAL_SPDIFRX_RxHalfCpltCallback(SPDIFRX_HandleTypeDef *hspdif);
00513 void HAL_SPDIFRX_RxCpltCallback(SPDIFRX_HandleTypeDef *hspdif);
00514 void HAL_SPDIFRX_ErrorCallback(SPDIFRX_HandleTypeDef *hspdif);
00515 void HAL_SPDIFRX_CxHalfCpltCallback(SPDIFRX_HandleTypeDef *hspdif);
00516 void HAL_SPDIFRX_CxCpltCallback(SPDIFRX_HandleTypeDef *hspdif);
00517 /**
00518   * @}
00519   */
00520 
00521 /** @addtogroup SPDIFRX_Exported_Functions_Group3
00522   * @{
00523   */
00524 /* Peripheral Control and State functions  ************************************/
00525 HAL_SPDIFRX_StateTypeDef HAL_SPDIFRX_GetState(SPDIFRX_HandleTypeDef const * const hspdif);
00526 uint32_t HAL_SPDIFRX_GetError(SPDIFRX_HandleTypeDef const * const hspdif);
00527 /**
00528   * @}
00529   */
00530 
00531 /**
00532   * @}
00533   */
00534 /* Private types -------------------------------------------------------------*/
00535 /* Private variables ---------------------------------------------------------*/
00536 /* Private constants ---------------------------------------------------------*/
00537 /* Private macros ------------------------------------------------------------*/
00538 /** @defgroup SPDIFRX_Private_Macros SPDIFRX Private Macros
00539   * @{
00540   */
00541 #define IS_SPDIFRX_INPUT_SELECT(INPUT)      (((INPUT) == SPDIFRX_INPUT_IN1) || \
00542                                             ((INPUT) == SPDIFRX_INPUT_IN2)  || \
00543                                             ((INPUT) == SPDIFRX_INPUT_IN3)  || \
00544                                             ((INPUT) == SPDIFRX_INPUT_IN0))
00545 
00546 #define IS_SPDIFRX_MAX_RETRIES(RET)         (((RET) == SPDIFRX_MAXRETRIES_NONE) || \
00547                                             ((RET) == SPDIFRX_MAXRETRIES_3)     || \
00548                                             ((RET) == SPDIFRX_MAXRETRIES_15)    || \
00549                                             ((RET) == SPDIFRX_MAXRETRIES_63))
00550 
00551 #define IS_SPDIFRX_WAIT_FOR_ACTIVITY(VAL)   (((VAL) == SPDIFRX_WAITFORACTIVITY_ON) || \
00552                                             ((VAL) == SPDIFRX_WAITFORACTIVITY_OFF))
00553 
00554 #define IS_PREAMBLE_TYPE_MASK(VAL)          (((VAL) == SPDIFRX_PREAMBLETYPEMASK_ON) || \
00555                                             ((VAL) == SPDIFRX_PREAMBLETYPEMASK_OFF))
00556 
00557 #define IS_VALIDITY_MASK(VAL)               (((VAL) == SPDIFRX_VALIDITYMASK_OFF) || \
00558                                             ((VAL) == SPDIFRX_VALIDITYMASK_ON))
00559 
00560 #define IS_PARITY_ERROR_MASK(VAL)           (((VAL) == SPDIFRX_PARITYERRORMASK_OFF) || \
00561                                             ((VAL) == SPDIFRX_PARITYERRORMASK_ON))
00562 
00563 #define IS_SPDIFRX_CHANNEL(CHANNEL)         (((CHANNEL) == SPDIFRX_CHANNEL_A) || \
00564                                             ((CHANNEL) == SPDIFRX_CHANNEL_B))
00565 
00566 #define IS_SPDIFRX_DATA_FORMAT(FORMAT)      (((FORMAT) == SPDIFRX_DATAFORMAT_LSB) || \
00567                                             ((FORMAT) == SPDIFRX_DATAFORMAT_MSB)  || \
00568                                             ((FORMAT) == SPDIFRX_DATAFORMAT_32BITS))
00569 
00570 #define IS_STEREO_MODE(MODE)                (((MODE) == SPDIFRX_STEREOMODE_DISABLE) || \
00571                                             ((MODE) == SPDIFRX_STEREOMODE_ENABLE))
00572 
00573 #define IS_CHANNEL_STATUS_MASK(VAL)         (((VAL) == SPDIFRX_CHANNELSTATUS_ON) || \
00574                                             ((VAL) == SPDIFRX_CHANNELSTATUS_OFF))
00575 
00576 #define IS_SYMBOL_CLOCK_GEN(VAL)            (((VAL) == ENABLE) || ((VAL) == DISABLE))
00577 /**
00578   * @}
00579   */
00580 
00581 /* Private functions ---------------------------------------------------------*/
00582 /** @defgroup SPDIFRX_Private_Functions SPDIFRX Private Functions
00583   * @{
00584   */
00585 /**
00586   * @}
00587   */
00588 
00589 /**
00590   * @}
00591   */
00592 #endif /* SPDIFRX */
00593 /**
00594   * @}
00595   */
00596 
00597 
00598 #ifdef __cplusplus
00599 }
00600 #endif
00601 
00602 
00603 #endif /* __STM32H7xx_HAL_SPDIFRX_H */