STM32H735xx HAL User Manual
stm32h7xx_hal_fmac.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32h7xx_hal_fmac.h
00004   * @author  MCD Application Team
00005   * @brief   Header for stm32h7xx_hal_fmac.c 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_FMAC_H
00021 #define STM32H7xx_HAL_FMAC_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 /* Includes ------------------------------------------------------------------*/
00028 #include "stm32h7xx_hal_def.h"
00029 
00030 #if defined(FMAC)
00031 /** @addtogroup STM32H7xx_HAL_Driver
00032   * @{
00033   */
00034 
00035 /** @addtogroup FMAC
00036   * @{
00037   */
00038 
00039 /* Exported types ------------------------------------------------------------*/
00040 /** @defgroup FMAC_Exported_Types FMAC Exported Types
00041   * @{
00042   */
00043 
00044 /**
00045   * @brief  FMAC HAL State Structure definition
00046   */
00047 typedef enum
00048 {
00049   HAL_FMAC_STATE_RESET       = 0x00U,            /*!< FMAC not yet initialized or disabled                           */
00050   HAL_FMAC_STATE_READY       = 0x20U,            /*!< FMAC initialized and ready for use                             */
00051   HAL_FMAC_STATE_BUSY        = 0x24U,            /*!< FMAC internal process is ongoing                               */
00052   HAL_FMAC_STATE_BUSY_RD     = 0x25U,            /*!< FMAC reading configuration is ongoing                          */
00053   HAL_FMAC_STATE_BUSY_WR     = 0x26U,            /*!< FMAC writing configuration is ongoing                          */
00054   HAL_FMAC_STATE_TIMEOUT     = 0xA0U,            /*!< FMAC in Timeout state                                          */
00055   HAL_FMAC_STATE_ERROR       = 0xE0U             /*!< FMAC in Error state                                            */
00056 } HAL_FMAC_StateTypeDef;
00057 
00058 /**
00059   * @brief  FMAC Handle Structure definition
00060   */
00061 #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
00062 typedef struct __FMAC_HandleTypeDef
00063 #else
00064 typedef struct
00065 #endif  /* USE_HAL_FMAC_REGISTER_CALLBACKS */
00066 {
00067   FMAC_TypeDef               *Instance;          /*!< Register base address */
00068 
00069   uint32_t                   FilterParam;        /*!< Filter configuration (operation and parameters).
00070                                                       Set to 0 if no valid configuration was applied. */
00071 
00072   uint8_t                    InputAccess;       /*!< Access to the input buffer (internal memory area): DMA, IT, Polling, None.
00073                                                      This parameter can be a value of @ref FMAC_Buffer_Access. */
00074 
00075   uint8_t                    OutputAccess;      /*!< Access to the output buffer (internal memory area): DMA, IT, Polling, None.
00076                                                      This parameter can be a value of @ref FMAC_Buffer_Access. */
00077 
00078   int16_t                    *pInput;            /*!< Pointer to FMAC input data buffer */
00079 
00080   uint16_t                   InputCurrentSize;   /*!< Number of the input elements already written into FMAC */
00081 
00082   uint16_t                   *pInputSize;        /*!< Number of input elements to write (memory allocated to pInput).
00083                                                       In case of early interruption of the filter operation,
00084                                                       its value will be updated. */
00085 
00086   int16_t                    *pOutput;           /*!< Pointer to FMAC output data buffer */
00087 
00088   uint16_t                   OutputCurrentSize;  /*!< Number of the output elements already read from FMAC */
00089 
00090   uint16_t                   *pOutputSize;       /*!< Number of output elements to read (memory allocated to pOutput).
00091                                                       In case of early interruption of the filter operation,
00092                                                       its value will be updated. */
00093 
00094   DMA_HandleTypeDef          *hdmaIn;            /*!< FMAC peripheral input data DMA handle parameters */
00095 
00096   DMA_HandleTypeDef          *hdmaOut;           /*!< FMAC peripheral output data DMA handle parameters */
00097 
00098   DMA_HandleTypeDef          *hdmaPreload;       /*!< FMAC peripheral preloaded data (X1, X2 and Y) DMA handle parameters */
00099 
00100 #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
00101   void (* ErrorCallback)(struct __FMAC_HandleTypeDef *hfmac);               /*!< FMAC error callback                  */
00102 
00103   void (* HalfGetDataCallback)(struct __FMAC_HandleTypeDef *hfmac);         /*!< FMAC get half data callback          */
00104 
00105   void (* GetDataCallback)(struct __FMAC_HandleTypeDef *hfmac);             /*!< FMAC get data callback               */
00106 
00107   void (* HalfOutputDataReadyCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC half output data ready callback */
00108 
00109   void (* OutputDataReadyCallback)(struct __FMAC_HandleTypeDef *hfmac);     /*!< FMAC output data ready callback      */
00110 
00111   void (* FilterConfigCallback)(struct __FMAC_HandleTypeDef *hfmac);        /*!< FMAC filter configuration callback   */
00112 
00113   void (* FilterPreloadCallback)(struct __FMAC_HandleTypeDef *hfmac);       /*!< FMAC filter preload callback         */
00114 
00115   void (* MspInitCallback)(struct __FMAC_HandleTypeDef *hfmac);             /*!< FMAC Msp Init callback               */
00116 
00117   void (* MspDeInitCallback)(struct __FMAC_HandleTypeDef *hfmac);           /*!< FMAC Msp DeInit callback             */
00118 
00119 #endif /* (USE_HAL_FMAC_REGISTER_CALLBACKS) */
00120 
00121   HAL_LockTypeDef            Lock;               /*!< FMAC locking object */
00122 
00123   __IO HAL_FMAC_StateTypeDef State;              /*!< FMAC state related to global handle management
00124                                                       This parameter can be a value of @ref HAL_FMAC_StateTypeDef */
00125 
00126   __IO HAL_FMAC_StateTypeDef RdState;            /*!< FMAC state related to read operations (access to Y buffer)
00127                                                       This parameter can be a value of @ref HAL_FMAC_StateTypeDef */
00128 
00129   __IO HAL_FMAC_StateTypeDef WrState;            /*!< FMAC state related to write operations (access to X1 buffer)
00130                                                       This parameter can be a value of @ref HAL_FMAC_StateTypeDef */
00131 
00132   __IO uint32_t              ErrorCode;          /*!< FMAC peripheral error code
00133                                                       This parameter can be a value of @ref FMAC_Error_Code */
00134 
00135 } FMAC_HandleTypeDef;
00136 
00137 #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
00138 /**
00139   * @brief  FMAC Callback ID enumeration definition
00140   */
00141 typedef enum
00142 {
00143   HAL_FMAC_ERROR_CB_ID                  = 0x00U, /*!< FMAC error callback ID                  */
00144   HAL_FMAC_HALF_GET_DATA_CB_ID          = 0x01U, /*!< FMAC get half data callback ID          */
00145   HAL_FMAC_GET_DATA_CB_ID               = 0x02U, /*!< FMAC get data callback ID               */
00146   HAL_FMAC_HALF_OUTPUT_DATA_READY_CB_ID = 0x03U, /*!< FMAC half output data ready callback ID */
00147   HAL_FMAC_OUTPUT_DATA_READY_CB_ID      = 0x04U, /*!< FMAC output data ready callback ID      */
00148   HAL_FMAC_FILTER_CONFIG_CB_ID          = 0x05U, /*!< FMAC filter configuration callback ID   */
00149   HAL_FMAC_FILTER_PRELOAD_CB_ID         = 0x06U, /*!< FMAC filter preload callback ID         */
00150 
00151   HAL_FMAC_MSPINIT_CB_ID                = 0x07U, /*!< FMAC MspInit callback ID                */
00152   HAL_FMAC_MSPDEINIT_CB_ID              = 0x08U, /*!< FMAC MspDeInit callback ID              */
00153 } HAL_FMAC_CallbackIDTypeDef;
00154 
00155 /**
00156   * @brief  HAL FMAC Callback pointer definition
00157   */
00158 typedef  void (*pFMAC_CallbackTypeDef)(FMAC_HandleTypeDef *hfmac);  /*!< pointer to an FMAC callback function */
00159 
00160 #endif /* USE_HAL_FMAC_REGISTER_CALLBACKS */
00161 
00162 /**
00163   * @brief  FMAC Filter Configuration Structure definition
00164   */
00165 typedef struct
00166 {
00167   uint8_t                    InputBaseAddress;  /*!< Base address of the input buffer (X1) within the internal memory (0x00 to 0xFF).
00168                                                      Ignored if InputBufferSize is set to 0
00169                                                      (previous configuration kept).
00170                                                      Note: the buffers can overlap or even coincide exactly. */
00171 
00172   uint8_t                    InputBufferSize;   /*!< Number of 16-bit words allocated to the input buffer (including the optional "headroom").
00173                                                      0 if a previous configuration should be kept. */
00174 
00175   uint32_t                   InputThreshold;    /*!< Input threshold: the buffer full flag will be set if the number of free spaces
00176                                                      in the buffer is lower than this threshold.
00177                                                      This parameter can be a value
00178                                                      of @ref FMAC_Data_Buffer_Threshold. */
00179 
00180   uint8_t                    CoeffBaseAddress;  /*!< Base address of the coefficient buffer (X2) within the internal memory (0x00 to 0xFF).
00181                                                      Ignored if CoeffBufferSize is set to 0
00182                                                      (previous configuration kept).
00183                                                      Note: the buffers can overlap or even coincide exactly. */
00184 
00185   uint8_t                    CoeffBufferSize;   /*!< Number of 16-bit words allocated to the coefficient buffer.
00186                                                      0 if a previous configuration should be kept. */
00187 
00188   uint8_t                    OutputBaseAddress; /*!< Base address of the output buffer (Y) within the internal memory (0x00 to 0xFF).
00189                                                      Ignored if OuputBufferSize is set to 0
00190                                                      (previous configuration kept).
00191                                                      Note: the buffers can overlap or even coincide exactly. */
00192 
00193   uint8_t                    OutputBufferSize;  /*!< Number of 16-bit words allocated to the output buffer (including the optional "headroom").
00194                                                      0 if a previous configuration should be kept. */
00195 
00196   uint32_t                   OutputThreshold;   /*!< Output threshold: the buffer empty flag will be set if the number of unread values
00197                                                      in the buffer is lower than this threshold.
00198                                                      This parameter can be a value
00199                                                      of @ref FMAC_Data_Buffer_Threshold. */
00200 
00201   int16_t                    *pCoeffA;          /*!< [IIR only] Initialization of the coefficient vector A.
00202                                                      If not needed, it should be set to NULL. */
00203 
00204   uint8_t                    CoeffASize;        /*!< Size of the coefficient vector A. */
00205 
00206   int16_t                    *pCoeffB;          /*!< Initialization of the coefficient vector B.
00207                                                      If not needed (re-use of a previously loaded buffer),
00208                                                      it should be set to NULL. */
00209 
00210   uint8_t                    CoeffBSize;        /*!< Size of the coefficient vector B. */
00211 
00212   uint8_t                    InputAccess;       /*!< Access to the input buffer (internal memory area): DMA, IT, Polling, None.
00213                                                      This parameter can be a value of @ref FMAC_Buffer_Access. */
00214 
00215   uint8_t                    OutputAccess;      /*!< Access to the output buffer (internal memory area): DMA, IT, Polling, None.
00216                                                      This parameter can be a value of @ref FMAC_Buffer_Access. */
00217 
00218   uint32_t                   Clip;              /*!< Enable or disable the clipping feature. If the q1.15 range is exceeded, wrapping
00219                                                      is done when the clipping feature is disabled
00220                                                      and saturation is done when the clipping feature is enabled.
00221                                                      This parameter can be a value of @ref FMAC_Clip_State. */
00222 
00223   uint32_t                   Filter;            /*!< Filter type.
00224                                                      This parameter can be a value
00225                                                      of @ref FMAC_Functions (filter related values). */
00226 
00227   uint8_t                    P;                 /*!< Parameter P (vector length, number of filter taps, etc.). */
00228 
00229   uint8_t                    Q;                 /*!< Parameter Q (vector length, etc.). Ignored if not needed. */
00230 
00231   uint8_t                    R;                 /*!< Parameter R (gain, etc.). Ignored if not needed. */
00232 
00233 } FMAC_FilterConfigTypeDef;
00234 
00235 /**
00236   * @}
00237   */
00238 
00239 
00240 /* Exported constants --------------------------------------------------------*/
00241 
00242 
00243 /** @defgroup FMAC_Exported_Constants FMAC Exported Constants
00244   * @{
00245   */
00246 
00247 /** @defgroup FMAC_Error_Code FMAC Error code
00248   * @{
00249   */
00250 #define HAL_FMAC_ERROR_NONE                0x00000000U /*!< No error               */
00251 #define HAL_FMAC_ERROR_SAT                 0x00000001U /*!< Saturation error       */
00252 #define HAL_FMAC_ERROR_UNFL                0x00000002U /*!< Underflow error        */
00253 #define HAL_FMAC_ERROR_OVFL                0x00000004U /*!< Overflow error         */
00254 #define HAL_FMAC_ERROR_DMA                 0x00000008U /*!< DMA error              */
00255 #define HAL_FMAC_ERROR_RESET               0x00000010U /*!< Reset error            */
00256 #define HAL_FMAC_ERROR_PARAM               0x00000020U /*!< Parameter error        */
00257 #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
00258 #define HAL_FMAC_ERROR_INVALID_CALLBACK    0x00000040U /*!< Invalid Callback error */
00259 #endif /* USE_HAL_FMAC_REGISTER_CALLBACKS */
00260 #define HAL_FMAC_ERROR_TIMEOUT             0x00000080U /*!< Timeout error          */
00261 
00262 /**
00263   * @}
00264   */
00265 
00266 /** @defgroup FMAC_Functions FMAC Functions
00267   * @{
00268   */
00269 #define FMAC_FUNC_LOAD_X1                  (FMAC_PARAM_FUNC_0)                                        /*!< Load X1 buffer                            */
00270 #define FMAC_FUNC_LOAD_X2                  (FMAC_PARAM_FUNC_1)                                        /*!< Load X2 buffer                            */
00271 #define FMAC_FUNC_LOAD_Y                   (FMAC_PARAM_FUNC_1 | FMAC_PARAM_FUNC_0)                    /*!< Load Y buffer                             */
00272 #define FMAC_FUNC_CONVO_FIR                (FMAC_PARAM_FUNC_3)                                        /*!< Convolution (FIR filter)                  */
00273 #define FMAC_FUNC_IIR_DIRECT_FORM_1        (FMAC_PARAM_FUNC_3 | FMAC_PARAM_FUNC_0)                    /*!< IIR filter (direct form 1)                */
00274 /**
00275   * @}
00276   */
00277 
00278 /** @defgroup FMAC_Data_Buffer_Threshold FMAC Data Buffer Threshold
00279   * @{
00280   * @note     This parameter sets a watermark for buffer full (input) or buffer empty (output).
00281   */
00282 #define FMAC_THRESHOLD_1                   0x00000000U    /*!< Input: Buffer full flag set if the number of free spaces in the buffer is less than 1.
00283                                                                 Output: Buffer empty flag set if the number
00284                                                                 of unread values in the buffer is less than 1. */
00285 #define FMAC_THRESHOLD_2                   0x01000000U    /*!< Input: Buffer full flag set if the number of free spaces in the buffer is less than 2.
00286                                                                 Output: Buffer empty flag set if the number
00287                                                                 of unread values in the buffer is less than 2. */
00288 #define FMAC_THRESHOLD_4                   0x02000000U    /*!< Input: Buffer full flag set if the number of free spaces in the buffer is less than 4.
00289                                                                 Output: Buffer empty flag set if the number
00290                                                                 of unread values in the buffer is less than 4. */
00291 #define FMAC_THRESHOLD_8                   0x03000000U    /*!< Input: Buffer full flag set if the number of free spaces in the buffer is less than 8.
00292                                                                 Output: Buffer empty flag set if the number
00293                                                                 of unread values in the buffer is less than 8. */
00294 #define FMAC_THRESHOLD_NO_VALUE            0xFFFFFFFFU    /*!< The configured threshold value shouldn't be changed */
00295 /**
00296   * @}
00297   */
00298 
00299 /** @defgroup FMAC_Buffer_Access FMAC Buffer Access
00300   * @{
00301   */
00302 #define FMAC_BUFFER_ACCESS_NONE            0x00U           /*!< Buffer handled by an external IP (ADC for instance) */
00303 #define FMAC_BUFFER_ACCESS_DMA             0x01U           /*!< Buffer accessed through DMA */
00304 #define FMAC_BUFFER_ACCESS_POLLING         0x02U           /*!< Buffer accessed through polling */
00305 #define FMAC_BUFFER_ACCESS_IT              0x03U           /*!< Buffer accessed through interruptions */
00306 /**
00307   * @}
00308   */
00309 
00310 /** @defgroup FMAC_Clip_State FMAC Clip State
00311   * @{
00312   */
00313 #define FMAC_CLIP_DISABLED                 0x00000000U     /*!< Clipping disabled */
00314 #define FMAC_CLIP_ENABLED                  FMAC_CR_CLIPEN  /*!< Clipping enabled */
00315 /**
00316   * @}
00317   */
00318 
00319 /** @defgroup FMAC_Flags  FMAC status flags
00320   * @{
00321   */
00322 #define FMAC_FLAG_YEMPTY                   FMAC_SR_YEMPTY  /*!< Y Buffer Empty Flag */
00323 #define FMAC_FLAG_X1FULL                   FMAC_SR_X1FULL  /*!< X1 Buffer Full Flag */
00324 #define FMAC_FLAG_OVFL                     FMAC_SR_OVFL    /*!< Overflow Error Flag */
00325 #define FMAC_FLAG_UNFL                     FMAC_SR_UNFL    /*!< Underflow Error Flag */
00326 #define FMAC_FLAG_SAT                      FMAC_SR_SAT     /*!< Saturation Error Flag (this helps in debugging a filter) */
00327 /**
00328   * @}
00329   */
00330 
00331 /** @defgroup FMAC_Interrupts_Enable FMAC Interrupts Enable bit
00332   * @{
00333   */
00334 #define FMAC_IT_RIEN                       FMAC_CR_RIEN    /*!< Read Interrupt Enable */
00335 #define FMAC_IT_WIEN                       FMAC_CR_WIEN    /*!< Write Interrupt Enable */
00336 #define FMAC_IT_OVFLIEN                    FMAC_CR_OVFLIEN /*!< Overflow Error Interrupt Enable */
00337 #define FMAC_IT_UNFLIEN                    FMAC_CR_UNFLIEN /*!< Underflow Error Interrupt Enable */
00338 #define FMAC_IT_SATIEN                     FMAC_CR_SATIEN  /*!< Saturation Error Interrupt Enable (this helps in debugging a filter) */
00339 /**
00340   * @}
00341   */
00342 
00343 /**
00344   * @}
00345   */
00346 
00347 
00348 /* External variables --------------------------------------------------------*/
00349 /** @defgroup FMAC_External_variables FMAC External variables
00350   * @{
00351   */
00352 /**
00353   * @}
00354   */
00355 
00356 /* Exported macros -----------------------------------------------------------*/
00357 /** @defgroup FMAC_Exported_Macros FMAC Exported Macros
00358   * @{
00359   */
00360 
00361 /** @brief  Reset FMAC handle state.
00362   * @param  __HANDLE__ FMAC handle.
00363   * @retval None
00364   */
00365 #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
00366 #define __HAL_FMAC_RESET_HANDLE_STATE(__HANDLE__) do{                                           \
00367                                                       (__HANDLE__)->State = HAL_FMAC_STATE_RESET; \
00368                                                       (__HANDLE__)->MspInitCallback = NULL;       \
00369                                                       (__HANDLE__)->MspDeInitCallback = NULL;     \
00370                                                     } while(0U)
00371 #else
00372 #define __HAL_FMAC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_FMAC_STATE_RESET)
00373 #endif /* USE_HAL_FMAC_REGISTER_CALLBACKS */
00374 
00375 /**
00376   * @brief  Enable the specified FMAC interrupt
00377   * @param  __HANDLE__ FMAC handle.
00378   * @param  __INTERRUPT__ FMAC Interrupt.
00379   *         This parameter can be any combination of the following values:
00380   *            @arg @ref FMAC_IT_RIEN    Read interrupt enable
00381   *            @arg @ref FMAC_IT_WIEN    Write interrupt enable
00382   *            @arg @ref FMAC_IT_OVFLIEN Overflow error interrupt enable
00383   *            @arg @ref FMAC_IT_UNFLIEN Underflow error interrupt enable
00384   *            @arg @ref FMAC_IT_SATIEN  Saturation error interrupt enable (this helps in debugging a filter)
00385   * @retval None
00386   */
00387 #define __HAL_FMAC_ENABLE_IT(__HANDLE__, __INTERRUPT__) \
00388   (((__HANDLE__)->Instance->CR) |= (__INTERRUPT__))
00389 
00390 /**
00391   * @brief  Disable the FMAC interrupt
00392   * @param  __HANDLE__ FMAC handle.
00393   * @param  __INTERRUPT__ FMAC Interrupt.
00394   *         This parameter can be any combination of the following values:
00395   *            @arg @ref FMAC_IT_RIEN    Read interrupt enable
00396   *            @arg @ref FMAC_IT_WIEN    Write interrupt enable
00397   *            @arg @ref FMAC_IT_OVFLIEN Overflow error interrupt enable
00398   *            @arg @ref FMAC_IT_UNFLIEN Underflow error interrupt enable
00399   *            @arg @ref FMAC_IT_SATIEN  Saturation error interrupt enable (this helps in debugging a filter)
00400   * @retval None
00401   */
00402 #define __HAL_FMAC_DISABLE_IT(__HANDLE__, __INTERRUPT__) \
00403   (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__))
00404 
00405 /** @brief  Check whether the specified FMAC interrupt occurred or not.
00406   * @param  __HANDLE__ FMAC handle.
00407   * @param  __INTERRUPT__ FMAC interrupt to check.
00408   *         This parameter can be any combination of the following values:
00409   *            @arg @ref FMAC_FLAG_YEMPTY Y Buffer Empty Flag
00410   *            @arg @ref FMAC_FLAG_X1FULL X1 Buffer Full Flag
00411   *            @arg @ref FMAC_FLAG_OVFL   Overflow Error Flag
00412   *            @arg @ref FMAC_FLAG_UNFL   Underflow Error Flag
00413   *            @arg @ref FMAC_FLAG_SAT    Saturation Error Flag
00414   * @retval SET (interrupt occurred) or RESET (interrupt did not occurred)
00415   */
00416 #define __HAL_FMAC_GET_IT(__HANDLE__, __INTERRUPT__) \
00417   (((__HANDLE__)->Instance->SR) &= ~(__INTERRUPT__))
00418 
00419 /** @brief  Clear specified FMAC interrupt status. Dummy macro as the
00420             interrupt status flags are read-only.
00421   * @param  __HANDLE__ FMAC handle.
00422   * @param  __INTERRUPT__ FMAC interrupt to clear.
00423   * @retval None
00424   */
00425 #define __HAL_FMAC_CLEAR_IT(__HANDLE__, __INTERRUPT__)   /* Dummy macro */
00426 
00427 /** @brief  Check whether the specified FMAC status flag is set or not.
00428   * @param  __HANDLE__ FMAC handle.
00429   * @param  __FLAG__ FMAC flag to check.
00430   *         This parameter can be any combination of the following values:
00431   *            @arg @ref FMAC_FLAG_YEMPTY Y Buffer Empty Flag
00432   *            @arg @ref FMAC_FLAG_X1FULL X1 Buffer Full Flag
00433   *            @arg @ref FMAC_FLAG_OVFL   Overflow Error Flag
00434   *            @arg @ref FMAC_FLAG_UNFL   Underflow Error Flag
00435   *            @arg @ref FMAC_FLAG_SAT    Saturation error Flag
00436   * @retval SET (flag is set) or RESET (flag is reset)
00437   */
00438 #define __HAL_FMAC_GET_FLAG(__HANDLE__, __FLAG__) \
00439   ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
00440 
00441 /** @brief  Clear specified FMAC status flag. Dummy macro as no
00442             flag can be cleared.
00443   * @param  __HANDLE__ FMAC handle.
00444   * @param  __FLAG__ FMAC flag to clear.
00445   * @retval None
00446   */
00447 #define __HAL_FMAC_CLEAR_FLAG(__HANDLE__, __FLAG__)     /* Dummy macro */
00448 
00449 /** @brief  Check whether the specified FMAC interrupt is enabled or not.
00450   * @param  __HANDLE__ FMAC handle.
00451   * @param  __INTERRUPT__ FMAC interrupt to check.
00452   *         This parameter can be one of the following values:
00453   *            @arg @ref FMAC_IT_RIEN    Read interrupt enable
00454   *            @arg @ref FMAC_IT_WIEN    Write interrupt enable
00455   *            @arg @ref FMAC_IT_OVFLIEN Overflow error interrupt enable
00456   *            @arg @ref FMAC_IT_UNFLIEN Underflow error interrupt enable
00457   *            @arg @ref FMAC_IT_SATIEN  Saturation error interrupt enable (this helps in debugging a filter)
00458   * @retval FlagStatus
00459   */
00460 #define __HAL_FMAC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \
00461   (((__HANDLE__)->Instance->CR) & (__INTERRUPT__))
00462 
00463 /**
00464   * @}
00465   */
00466 
00467 /* Private Macros-----------------------------------------------------------*/
00468 /** @addtogroup  FMAC_Private_Macros FMAC Private Macros
00469   * @{
00470   */
00471 
00472 /**
00473   * @brief  Verify the FMAC function.
00474   * @param  __FUNCTION__ ID of the function.
00475   * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
00476   */
00477 #define IS_FMAC_FUNCTION(__FUNCTION__) (((__FUNCTION__) == FMAC_FUNC_LOAD_X1)                         || \
00478                                         ((__FUNCTION__) == FMAC_FUNC_LOAD_X2)                         || \
00479                                         ((__FUNCTION__) == FMAC_FUNC_LOAD_Y)                          || \
00480                                         ((__FUNCTION__) == FMAC_FUNC_CONVO_FIR)                       || \
00481                                         ((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1))
00482 
00483 /**
00484   * @brief  Verify the FMAC load function used for input data, output data or coefficients.
00485   * @param  __FUNCTION__ ID of the load function.
00486   * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
00487   */
00488 #define IS_FMAC_LOAD_FUNCTION(__FUNCTION__) (((__FUNCTION__) == FMAC_FUNC_LOAD_X1)                    || \
00489                                              ((__FUNCTION__) == FMAC_FUNC_LOAD_X2)                    || \
00490                                              ((__FUNCTION__) == FMAC_FUNC_LOAD_Y))
00491 
00492 /**
00493   * @brief  Verify the FMAC load function used with N values as input or output data.
00494   * @param  __FUNCTION__ ID of the load function.
00495   * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
00496   */
00497 #define IS_FMAC_N_LOAD_FUNCTION(__FUNCTION__) (((__FUNCTION__) == FMAC_FUNC_LOAD_X1)                  || \
00498                                                ((__FUNCTION__) == FMAC_FUNC_LOAD_Y))
00499 
00500 /**
00501   * @brief  Verify the FMAC load function used with N + M values as coefficients.
00502   * @param  __FUNCTION__ ID of the load function.
00503   * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
00504   */
00505 #define IS_FMAC_N_M_LOAD_FUNCTION(__FUNCTION__) ((__FUNCTION__) == FMAC_FUNC_LOAD_X2)
00506 
00507 /**
00508   * @brief  Verify the FMAC filter function.
00509   * @param  __FUNCTION__ ID of the filter function.
00510   * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
00511   */
00512 #define IS_FMAC_FILTER_FUNCTION(__FUNCTION__) (((__FUNCTION__) == FMAC_FUNC_CONVO_FIR)                || \
00513                                                ((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1))
00514 
00515 
00516 /**
00517   * @brief  Verify the FMAC threshold.
00518   * @param  __THRESHOLD__ Value of the threshold.
00519   * @retval SET (__THRESHOLD__ is a valid value) or RESET (__THRESHOLD__ is invalid)
00520   */
00521 #define IS_FMAC_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == FMAC_THRESHOLD_1)                       || \
00522                                           ((__THRESHOLD__) == FMAC_THRESHOLD_2)                       || \
00523                                           ((__THRESHOLD__) == FMAC_THRESHOLD_4)                       || \
00524                                           ((__THRESHOLD__) == FMAC_THRESHOLD_NO_VALUE)                || \
00525                                           ((__THRESHOLD__) == FMAC_THRESHOLD_8))
00526 
00527 /**
00528   * @brief  Verify the FMAC filter parameter P.
00529   * @param  __P__ Value of the filter parameter P.
00530   * @param  __FUNCTION__ ID of the filter function.
00531   * @retval SET (__P__ is a valid value) or RESET (__P__ is invalid)
00532   */
00533 #define IS_FMAC_PARAM_P(__FUNCTION__, __P__) ( (((__FUNCTION__) == FMAC_FUNC_CONVO_FIR)               && \
00534                                                 (((__P__) >= 2U) && ((__P__) <= 127U)))               || \
00535                                                (((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1)       && \
00536                                                 (((__P__) >= 2U) && ((__P__) <= 64U))) )
00537 
00538 /**
00539   * @brief  Verify the FMAC filter parameter Q.
00540   * @param  __Q__ Value of the filter parameter Q.
00541   * @param  __FUNCTION__ ID of the filter function.
00542   * @retval SET (__Q__ is a valid value) or RESET (__Q__ is invalid)
00543   */
00544 #define IS_FMAC_PARAM_Q(__FUNCTION__, __Q__) ( ((__FUNCTION__) == FMAC_FUNC_CONVO_FIR)                || \
00545                                                (((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1)       && \
00546                                                 (((__Q__) >= 1U) && ((__Q__) <= 63U))) )
00547 
00548 /**
00549   * @brief  Verify the FMAC filter parameter R.
00550   * @param  __R__ Value of the filter parameter.
00551   * @param  __FUNCTION__ ID of the filter function.
00552   * @retval SET (__R__ is a valid value) or RESET (__R__ is invalid)
00553   */
00554 #define IS_FMAC_PARAM_R(__FUNCTION__, __R__) ( (((__FUNCTION__) == FMAC_FUNC_CONVO_FIR)               || \
00555                                                 ((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1))      && \
00556                                                ((__R__) <= 7U))
00557 
00558 /**
00559   * @brief  Verify the FMAC buffer access.
00560   * @param  __BUFFER_ACCESS__ Type of access.
00561   * @retval SET (__BUFFER_ACCESS__ is a valid value) or RESET (__BUFFER_ACCESS__ is invalid)
00562   */
00563 #define IS_FMAC_BUFFER_ACCESS(__BUFFER_ACCESS__) (((__BUFFER_ACCESS__) == FMAC_BUFFER_ACCESS_NONE)    || \
00564                                                   ((__BUFFER_ACCESS__) == FMAC_BUFFER_ACCESS_DMA)     || \
00565                                                   ((__BUFFER_ACCESS__) == FMAC_BUFFER_ACCESS_POLLING) || \
00566                                                   ((__BUFFER_ACCESS__) == FMAC_BUFFER_ACCESS_IT))
00567 
00568 /**
00569   * @brief  Verify the FMAC clip feature.
00570   * @param  __CLIP_STATE__ Clip state.
00571   * @retval SET (__CLIP_STATE__ is a valid value) or RESET (__CLIP_STATE__ is invalid)
00572   */
00573 #define IS_FMAC_CLIP_STATE(__CLIP_STATE__) (((__CLIP_STATE__) == FMAC_CLIP_DISABLED)                  || \
00574                                             ((__CLIP_STATE__) == FMAC_CLIP_ENABLED))
00575 
00576 /**
00577   * @brief  Check whether the threshold is applicable.
00578   * @param  __SIZE__ Size of the matching buffer.
00579   * @param  __WM__ Watermark value.
00580   * @param  __ACCESS__ Access to the buffer (polling, it, dma, none).
00581   * @retval THRESHOLD
00582   */
00583 #define IS_FMAC_THRESHOLD_APPLICABLE(__SIZE__, __WM__, __ACCESS__) \
00584   (( (__SIZE__) >= (((__WM__) == FMAC_THRESHOLD_1)? 1U: \
00585                     ((__WM__) == FMAC_THRESHOLD_2)? 2U: \
00586                     ((__WM__) == FMAC_THRESHOLD_4)? 4U:8U))&& \
00587    ((((__ACCESS__) == FMAC_BUFFER_ACCESS_DMA)&& \
00588      ((__WM__) == FMAC_THRESHOLD_1))|| \
00589     ((__ACCESS__ )!= FMAC_BUFFER_ACCESS_DMA)))
00590 
00591 /**
00592   * @}
00593   */
00594 
00595 /* Exported functions ------------------------------------------------------- */
00596 /** @addtogroup FMAC_Exported_Functions
00597   * @{
00598   */
00599 
00600 /** @addtogroup FMAC_Exported_Functions_Group1
00601   * @{
00602   */
00603 /* Initialization and de-initialization functions  ****************************/
00604 HAL_StatusTypeDef HAL_FMAC_Init(FMAC_HandleTypeDef *hfmac);
00605 HAL_StatusTypeDef HAL_FMAC_DeInit(FMAC_HandleTypeDef *hfmac);
00606 void HAL_FMAC_MspInit(FMAC_HandleTypeDef *hfmac);
00607 void HAL_FMAC_MspDeInit(FMAC_HandleTypeDef *hfmac);
00608 
00609 #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
00610 /* Callbacks Register/UnRegister functions  ***********************************/
00611 HAL_StatusTypeDef HAL_FMAC_RegisterCallback(FMAC_HandleTypeDef *hfmac, HAL_FMAC_CallbackIDTypeDef CallbackID,
00612                                             pFMAC_CallbackTypeDef pCallback);
00613 HAL_StatusTypeDef HAL_FMAC_UnRegisterCallback(FMAC_HandleTypeDef *hfmac, HAL_FMAC_CallbackIDTypeDef CallbackID);
00614 #endif /* USE_HAL_FMAC_REGISTER_CALLBACKS */
00615 /**
00616   * @}
00617   */
00618 
00619 /** @addtogroup FMAC_Exported_Functions_Group2
00620   * @{
00621   */
00622 /* Peripheral Control functions ***********************************************/
00623 HAL_StatusTypeDef HAL_FMAC_FilterConfig(FMAC_HandleTypeDef *hfmac, FMAC_FilterConfigTypeDef *pConfig);
00624 HAL_StatusTypeDef HAL_FMAC_FilterConfig_DMA(FMAC_HandleTypeDef *hfmac, FMAC_FilterConfigTypeDef *pConfig);
00625 HAL_StatusTypeDef HAL_FMAC_FilterPreload(FMAC_HandleTypeDef *hfmac, int16_t *pInput, uint8_t InputSize,
00626                                          int16_t *pOutput, uint8_t OutputSize);
00627 HAL_StatusTypeDef HAL_FMAC_FilterPreload_DMA(FMAC_HandleTypeDef *hfmac, int16_t *pInput, uint8_t InputSize,
00628                                              int16_t *pOutput, uint8_t OutputSize);
00629 HAL_StatusTypeDef HAL_FMAC_FilterStart(FMAC_HandleTypeDef *hfmac, int16_t *pOutput, uint16_t *pOutputSize);
00630 HAL_StatusTypeDef HAL_FMAC_AppendFilterData(FMAC_HandleTypeDef *hfmac, int16_t *pInput, uint16_t *pInputSize);
00631 HAL_StatusTypeDef HAL_FMAC_ConfigFilterOutputBuffer(FMAC_HandleTypeDef *hfmac, int16_t *pOutput, uint16_t *pOutputSize);
00632 HAL_StatusTypeDef HAL_FMAC_PollFilterData(FMAC_HandleTypeDef *hfmac, uint32_t Timeout);
00633 HAL_StatusTypeDef HAL_FMAC_FilterStop(FMAC_HandleTypeDef  *hfmac);
00634 /**
00635   * @}
00636   */
00637 
00638 /** @addtogroup FMAC_Exported_Functions_Group3
00639   * @{
00640   */
00641 /* Callback functions *********************************************************/
00642 void HAL_FMAC_ErrorCallback(FMAC_HandleTypeDef *hfmac);
00643 void HAL_FMAC_HalfGetDataCallback(FMAC_HandleTypeDef *hfmac);
00644 void HAL_FMAC_GetDataCallback(FMAC_HandleTypeDef *hfmac);
00645 void HAL_FMAC_HalfOutputDataReadyCallback(FMAC_HandleTypeDef *hfmac);
00646 void HAL_FMAC_OutputDataReadyCallback(FMAC_HandleTypeDef *hfmac);
00647 void HAL_FMAC_FilterConfigCallback(FMAC_HandleTypeDef *hfmac);
00648 void HAL_FMAC_FilterPreloadCallback(FMAC_HandleTypeDef *hfmac);
00649 /**
00650   * @}
00651   */
00652 
00653 /** @addtogroup FMAC_Exported_Functions_Group4
00654   * @{
00655   */
00656 /* IRQ handler management *****************************************************/
00657 void HAL_FMAC_IRQHandler(FMAC_HandleTypeDef *hfmac);
00658 /**
00659   * @}
00660   */
00661 
00662 /** @addtogroup FMAC_Exported_Functions_Group5
00663   * @{
00664   */
00665 /* Peripheral State functions *************************************************/
00666 HAL_FMAC_StateTypeDef HAL_FMAC_GetState(FMAC_HandleTypeDef *hfmac);
00667 uint32_t HAL_FMAC_GetError(FMAC_HandleTypeDef *hfmac);
00668 /**
00669   * @}
00670   */
00671 
00672 /**
00673   * @}
00674   */
00675 
00676 /**
00677   * @}
00678   */
00679 
00680 /**
00681   * @}
00682   */
00683 
00684 #endif /* FMAC */
00685 
00686 #ifdef __cplusplus
00687 }
00688 #endif
00689 
00690 #endif /* STM32H7xx_HAL_FMAC_H */