123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723 |
- /**
- ******************************************************************************
- * @file stm32g4xx_hal_fmac.h
- * @author MCD Application Team
- * @brief Header for stm32g4xx_hal_fmac.c module
- ******************************************************************************
- * @attention
- *
- * Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software is licensed under terms that can be found in the LICENSE file
- * in the root directory of this software component.
- * If no LICENSE file comes with this software, it is provided AS-IS.
- *
- ******************************************************************************
- */
- /* Define to prevent recursive inclusion -------------------------------------*/
- #ifndef STM32G4xx_HAL_FMAC_H
- #define STM32G4xx_HAL_FMAC_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Includes ------------------------------------------------------------------*/
- #include "stm32g4xx_hal_def.h"
- #if defined(FMAC)
- /** @addtogroup STM32G4xx_HAL_Driver
- * @{
- */
- /** @addtogroup FMAC
- * @{
- */
- /* Exported types ------------------------------------------------------------*/
- /** @defgroup FMAC_Exported_Types FMAC Exported Types
- * @{
- */
- /**
- * @brief FMAC HAL State Structure definition
- */
- typedef enum
- {
- HAL_FMAC_STATE_RESET = 0x00U, /*!< FMAC not yet initialized or disabled */
- HAL_FMAC_STATE_READY = 0x20U, /*!< FMAC initialized and ready for use */
- HAL_FMAC_STATE_BUSY = 0x24U, /*!< FMAC internal process is ongoing */
- HAL_FMAC_STATE_BUSY_RD = 0x25U, /*!< FMAC reading configuration is ongoing */
- HAL_FMAC_STATE_BUSY_WR = 0x26U, /*!< FMAC writing configuration is ongoing */
- HAL_FMAC_STATE_TIMEOUT = 0xA0U, /*!< FMAC in Timeout state */
- HAL_FMAC_STATE_ERROR = 0xE0U /*!< FMAC in Error state */
- } HAL_FMAC_StateTypeDef;
- /**
- * @brief FMAC Handle Structure definition
- */
- #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
- typedef struct __FMAC_HandleTypeDef
- #else
- typedef struct
- #endif /* USE_HAL_FMAC_REGISTER_CALLBACKS */
- {
- FMAC_TypeDef *Instance; /*!< Register base address */
- uint32_t FilterParam; /*!< Filter configuration (operation and parameters).
- Set to 0 if no valid configuration was applied. */
- uint8_t InputAccess; /*!< Access to the input buffer (internal memory area):
- DMA, IT, Polling, None.
- This parameter can be a value of @ref FMAC_Buffer_Access. */
- uint8_t OutputAccess; /*!< Access to the output buffer (internal memory area):
- DMA, IT, Polling, None.
- This parameter can be a value of @ref FMAC_Buffer_Access. */
- int16_t *pInput; /*!< Pointer to FMAC input data buffer */
- uint16_t InputCurrentSize; /*!< Number of the input elements already written into FMAC */
- uint16_t *pInputSize; /*!< Number of input elements to write (memory allocated to pInput).
- In case of early interruption of the filter operation,
- its value will be updated. */
- int16_t *pOutput; /*!< Pointer to FMAC output data buffer */
- uint16_t OutputCurrentSize; /*!< Number of the output elements already read from FMAC */
- uint16_t *pOutputSize; /*!< Number of output elements to read (memory allocated to pOutput).
- In case of early interruption of the filter operation,
- its value will be updated. */
- DMA_HandleTypeDef *hdmaIn; /*!< FMAC peripheral input data DMA handle parameters */
- DMA_HandleTypeDef *hdmaOut; /*!< FMAC peripheral output data DMA handle parameters */
- DMA_HandleTypeDef *hdmaPreload; /*!< FMAC peripheral preloaded data (X1, X2 and Y) DMA handle
- parameters */
- #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
- void (* ErrorCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC error callback */
- void (* HalfGetDataCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC get half data callback */
- void (* GetDataCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC get data callback */
- void (* HalfOutputDataReadyCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC half output data ready callback */
- void (* OutputDataReadyCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC output data ready callback */
- void (* FilterConfigCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC filter configuration callback */
- void (* FilterPreloadCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC filter preload callback */
- void (* MspInitCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC Msp Init callback */
- void (* MspDeInitCallback)(struct __FMAC_HandleTypeDef *hfmac); /*!< FMAC Msp DeInit callback */
- #endif /* (USE_HAL_FMAC_REGISTER_CALLBACKS) */
- HAL_LockTypeDef Lock; /*!< FMAC locking object */
- __IO HAL_FMAC_StateTypeDef State; /*!< FMAC state related to global handle management
- This parameter can be a value of @ref HAL_FMAC_StateTypeDef */
- __IO HAL_FMAC_StateTypeDef RdState; /*!< FMAC state related to read operations (access to Y buffer)
- This parameter can be a value of @ref HAL_FMAC_StateTypeDef */
- __IO HAL_FMAC_StateTypeDef WrState; /*!< FMAC state related to write operations (access to X1 buffer)
- This parameter can be a value of @ref HAL_FMAC_StateTypeDef */
- __IO uint32_t ErrorCode; /*!< FMAC peripheral error code
- This parameter can be a value of @ref FMAC_Error_Code */
- } FMAC_HandleTypeDef;
- #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
- /**
- * @brief FMAC Callback ID enumeration definition
- */
- typedef enum
- {
- HAL_FMAC_ERROR_CB_ID = 0x00U, /*!< FMAC error callback ID */
- HAL_FMAC_HALF_GET_DATA_CB_ID = 0x01U, /*!< FMAC get half data callback ID */
- HAL_FMAC_GET_DATA_CB_ID = 0x02U, /*!< FMAC get data callback ID */
- HAL_FMAC_HALF_OUTPUT_DATA_READY_CB_ID = 0x03U, /*!< FMAC half output data ready callback ID */
- HAL_FMAC_OUTPUT_DATA_READY_CB_ID = 0x04U, /*!< FMAC output data ready callback ID */
- HAL_FMAC_FILTER_CONFIG_CB_ID = 0x05U, /*!< FMAC filter configuration callback ID */
- HAL_FMAC_FILTER_PRELOAD_CB_ID = 0x06U, /*!< FMAC filter preload callback ID */
- HAL_FMAC_MSPINIT_CB_ID = 0x07U, /*!< FMAC MspInit callback ID */
- HAL_FMAC_MSPDEINIT_CB_ID = 0x08U, /*!< FMAC MspDeInit callback ID */
- } HAL_FMAC_CallbackIDTypeDef;
- /**
- * @brief HAL FMAC Callback pointer definition
- */
- typedef void (*pFMAC_CallbackTypeDef)(FMAC_HandleTypeDef *hfmac); /*!< pointer to an FMAC callback function */
- #endif /* USE_HAL_FMAC_REGISTER_CALLBACKS */
- /**
- * @brief FMAC Filter Configuration Structure definition
- */
- typedef struct
- {
- uint8_t InputBaseAddress; /*!< Base address of the input buffer (X1) within the internal memory
- (0x00 to 0xFF). Ignored if InputBufferSize is set to 0
- (previous configuration kept).
- Note: the buffers can overlap or even coincide exactly. */
- uint8_t InputBufferSize; /*!< Number of 16-bit words allocated to the input buffer
- (including the optional "headroom").
- 0 if a previous configuration should be kept. */
- uint32_t InputThreshold; /*!< Input threshold: the buffer full flag will be set if the number
- of free spaces in the buffer is lower than this threshold.
- This parameter can be a value
- of @ref FMAC_Data_Buffer_Threshold. */
- uint8_t CoeffBaseAddress; /*!< Base address of the coefficient buffer (X2) within the internal
- memory (0x00 to 0xFF). Ignored if CoeffBufferSize is set to 0
- (previous configuration kept).
- Note: the buffers can overlap or even coincide exactly. */
- uint8_t CoeffBufferSize; /*!< Number of 16-bit words allocated to the coefficient buffer.
- 0 if a previous configuration should be kept. */
- uint8_t OutputBaseAddress; /*!< Base address of the output buffer (Y) within the internal
- memory (0x00 to 0xFF). Ignored if OuputBufferSize is set to 0
- (previous configuration kept).
- Note: the buffers can overlap or even coincide exactly. */
- uint8_t OutputBufferSize; /*!< Number of 16-bit words allocated to the output buffer
- (including the optional "headroom").
- 0 if a previous configuration should be kept. */
- uint32_t OutputThreshold; /*!< Output threshold: the buffer empty flag will be set if the number
- of unread values in the buffer is lower than this threshold.
- This parameter can be a value
- of @ref FMAC_Data_Buffer_Threshold. */
- int16_t *pCoeffA; /*!< [IIR only] Initialization of the coefficient vector A.
- If not needed, it should be set to NULL. */
- uint8_t CoeffASize; /*!< Size of the coefficient vector A. */
- int16_t *pCoeffB; /*!< Initialization of the coefficient vector B.
- If not needed (re-use of a previously loaded buffer),
- it should be set to NULL. */
- uint8_t CoeffBSize; /*!< Size of the coefficient vector B. */
- uint8_t InputAccess; /*!< Access to the input buffer (internal memory area):
- DMA, IT, Polling, None.
- This parameter can be a value of @ref FMAC_Buffer_Access. */
- uint8_t OutputAccess; /*!< Access to the output buffer (internal memory area):
- DMA, IT, Polling, None.
- This parameter can be a value of @ref FMAC_Buffer_Access. */
- uint32_t Clip; /*!< Enable or disable the clipping feature. If the q1.15 range
- is exceeded, wrapping is done when the clipping feature is disabled
- and saturation is done when the clipping feature is enabled.
- This parameter can be a value of @ref FMAC_Clip_State. */
- uint32_t Filter; /*!< Filter type.
- This parameter can be a value
- of @ref FMAC_Functions (filter related values). */
- uint8_t P; /*!< Parameter P (vector length, number of filter taps, etc.). */
- uint8_t Q; /*!< Parameter Q (vector length, etc.). Ignored if not needed. */
- uint8_t R; /*!< Parameter R (gain, etc.). Ignored if not needed. */
- } FMAC_FilterConfigTypeDef;
- /**
- * @}
- */
- /* Exported constants --------------------------------------------------------*/
- /** @defgroup FMAC_Exported_Constants FMAC Exported Constants
- * @{
- */
- /** @defgroup FMAC_Error_Code FMAC Error code
- * @{
- */
- #define HAL_FMAC_ERROR_NONE 0x00000000U /*!< No error */
- #define HAL_FMAC_ERROR_SAT 0x00000001U /*!< Saturation error */
- #define HAL_FMAC_ERROR_UNFL 0x00000002U /*!< Underflow error */
- #define HAL_FMAC_ERROR_OVFL 0x00000004U /*!< Overflow error */
- #define HAL_FMAC_ERROR_DMA 0x00000008U /*!< DMA error */
- #define HAL_FMAC_ERROR_RESET 0x00000010U /*!< Reset error */
- #define HAL_FMAC_ERROR_PARAM 0x00000020U /*!< Parameter error */
- #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
- #define HAL_FMAC_ERROR_INVALID_CALLBACK 0x00000040U /*!< Invalid Callback error */
- #endif /* USE_HAL_FMAC_REGISTER_CALLBACKS */
- #define HAL_FMAC_ERROR_TIMEOUT 0x00000080U /*!< Timeout error */
- /**
- * @}
- */
- /** @defgroup FMAC_Functions FMAC Functions
- * @{
- */
- #define FMAC_FUNC_LOAD_X1 (FMAC_PARAM_FUNC_0) /*!< Load X1 buffer */
- #define FMAC_FUNC_LOAD_X2 (FMAC_PARAM_FUNC_1) /*!< Load X2 buffer */
- #define FMAC_FUNC_LOAD_Y (FMAC_PARAM_FUNC_1 | FMAC_PARAM_FUNC_0) /*!< Load Y buffer */
- #define FMAC_FUNC_CONVO_FIR (FMAC_PARAM_FUNC_3) /*!< Convolution (FIR filter) */
- #define FMAC_FUNC_IIR_DIRECT_FORM_1 (FMAC_PARAM_FUNC_3 | FMAC_PARAM_FUNC_0) /*!< IIR filter (direct form 1) */
- /**
- * @}
- */
- /** @defgroup FMAC_Data_Buffer_Threshold FMAC Data Buffer Threshold
- * @{
- * @note This parameter sets a watermark for buffer full (input) or buffer empty (output).
- */
- #define FMAC_THRESHOLD_1 0x00000000U /*!< Input: Buffer full flag set if the number of free spaces
- in the buffer is less than 1.
- Output: Buffer empty flag set if the number
- of unread values in the buffer is less than 1. */
- #define FMAC_THRESHOLD_2 0x01000000U /*!< Input: Buffer full flag set if the number of free spaces
- in the buffer is less than 2.
- Output: Buffer empty flag set if the number
- of unread values in the buffer is less than 2. */
- #define FMAC_THRESHOLD_4 0x02000000U /*!< Input: Buffer full flag set if the number of free spaces
- in the buffer is less than 4.
- Output: Buffer empty flag set if the number
- of unread values in the buffer is less than 4. */
- #define FMAC_THRESHOLD_8 0x03000000U /*!< Input: Buffer full flag set if the number of free spaces
- in the buffer is less than 8.
- Output: Buffer empty flag set if the number
- of unread values in the buffer is less than 8. */
- #define FMAC_THRESHOLD_NO_VALUE 0xFFFFFFFFU /*!< The configured threshold value shouldn't be changed */
- /**
- * @}
- */
- /** @defgroup FMAC_Buffer_Access FMAC Buffer Access
- * @{
- */
- #define FMAC_BUFFER_ACCESS_NONE 0x00U /*!< Buffer handled by an external IP (ADC for instance) */
- #define FMAC_BUFFER_ACCESS_DMA 0x01U /*!< Buffer accessed through DMA */
- #define FMAC_BUFFER_ACCESS_POLLING 0x02U /*!< Buffer accessed through polling */
- #define FMAC_BUFFER_ACCESS_IT 0x03U /*!< Buffer accessed through interruptions */
- /**
- * @}
- */
- /** @defgroup FMAC_Clip_State FMAC Clip State
- * @{
- */
- #define FMAC_CLIP_DISABLED 0x00000000U /*!< Clipping disabled */
- #define FMAC_CLIP_ENABLED FMAC_CR_CLIPEN /*!< Clipping enabled */
- /**
- * @}
- */
- /** @defgroup FMAC_Flags FMAC status flags
- * @{
- */
- #define FMAC_FLAG_YEMPTY FMAC_SR_YEMPTY /*!< Y Buffer Empty Flag */
- #define FMAC_FLAG_X1FULL FMAC_SR_X1FULL /*!< X1 Buffer Full Flag */
- #define FMAC_FLAG_OVFL FMAC_SR_OVFL /*!< Overflow Error Flag */
- #define FMAC_FLAG_UNFL FMAC_SR_UNFL /*!< Underflow Error Flag */
- #define FMAC_FLAG_SAT FMAC_SR_SAT /*!< Saturation Error Flag
- (this helps in debugging a filter) */
- /**
- * @}
- */
- /** @defgroup FMAC_Interrupts_Enable FMAC Interrupts Enable bit
- * @{
- */
- #define FMAC_IT_RIEN FMAC_CR_RIEN /*!< Read Interrupt Enable */
- #define FMAC_IT_WIEN FMAC_CR_WIEN /*!< Write Interrupt Enable */
- #define FMAC_IT_OVFLIEN FMAC_CR_OVFLIEN /*!< Overflow Error Interrupt Enable */
- #define FMAC_IT_UNFLIEN FMAC_CR_UNFLIEN /*!< Underflow Error Interrupt Enable */
- #define FMAC_IT_SATIEN FMAC_CR_SATIEN /*!< Saturation Error Interrupt Enable
- (this helps in debugging a filter) */
- /**
- * @}
- */
- /**
- * @}
- */
- /* Exported variables --------------------------------------------------------*/
- /** @defgroup FMAC_Exported_variables FMAC Exported variables
- * @{
- */
- /**
- * @}
- */
- /* Exported macros -----------------------------------------------------------*/
- /** @defgroup FMAC_Exported_Macros FMAC Exported Macros
- * @{
- */
- /**
- * @brief Reset FMAC handle state.
- * @param __HANDLE__ FMAC handle.
- * @retval None
- */
- #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
- #define __HAL_FMAC_RESET_HANDLE_STATE(__HANDLE__) do{ \
- (__HANDLE__)->State = HAL_FMAC_STATE_RESET; \
- (__HANDLE__)->MspInitCallback = NULL; \
- (__HANDLE__)->MspDeInitCallback = NULL; \
- } while(0U)
- #else
- #define __HAL_FMAC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_FMAC_STATE_RESET)
- #endif /* USE_HAL_FMAC_REGISTER_CALLBACKS */
- /**
- * @brief Enable the specified FMAC interrupt
- * @param __HANDLE__ FMAC handle.
- * @param __INTERRUPT__ FMAC Interrupt.
- * This parameter can be any combination of the following values:
- * @arg @ref FMAC_IT_RIEN Read interrupt enable
- * @arg @ref FMAC_IT_WIEN Write interrupt enable
- * @arg @ref FMAC_IT_OVFLIEN Overflow error interrupt enable
- * @arg @ref FMAC_IT_UNFLIEN Underflow error interrupt enable
- * @arg @ref FMAC_IT_SATIEN Saturation error interrupt enable (this helps in debugging a filter)
- * @retval None
- */
- #define __HAL_FMAC_ENABLE_IT(__HANDLE__, __INTERRUPT__) \
- (((__HANDLE__)->Instance->CR) |= (__INTERRUPT__))
- /**
- * @brief Disable the FMAC interrupt
- * @param __HANDLE__ FMAC handle.
- * @param __INTERRUPT__ FMAC Interrupt.
- * This parameter can be any combination of the following values:
- * @arg @ref FMAC_IT_RIEN Read interrupt enable
- * @arg @ref FMAC_IT_WIEN Write interrupt enable
- * @arg @ref FMAC_IT_OVFLIEN Overflow error interrupt enable
- * @arg @ref FMAC_IT_UNFLIEN Underflow error interrupt enable
- * @arg @ref FMAC_IT_SATIEN Saturation error interrupt enable (this helps in debugging a filter)
- * @retval None
- */
- #define __HAL_FMAC_DISABLE_IT(__HANDLE__, __INTERRUPT__) \
- (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__))
- /**
- * @brief Check whether the specified FMAC interrupt occurred or not.
- * @param __HANDLE__ FMAC handle.
- * @param __INTERRUPT__ FMAC interrupt to check.
- * This parameter can be any combination of the following values:
- * @arg @ref FMAC_FLAG_YEMPTY Y Buffer Empty Flag
- * @arg @ref FMAC_FLAG_X1FULL X1 Buffer Full Flag
- * @arg @ref FMAC_FLAG_OVFL Overflow Error Flag
- * @arg @ref FMAC_FLAG_UNFL Underflow Error Flag
- * @arg @ref FMAC_FLAG_SAT Saturation Error Flag
- * @retval SET (interrupt occurred) or RESET (interrupt did not occurred)
- */
- #define __HAL_FMAC_GET_IT(__HANDLE__, __INTERRUPT__) \
- (((__HANDLE__)->Instance->SR) &= ~(__INTERRUPT__))
- /**
- * @brief Clear specified FMAC interrupt status. Dummy macro as the
- interrupt status flags are read-only.
- * @param __HANDLE__ FMAC handle.
- * @param __INTERRUPT__ FMAC interrupt to clear.
- * @retval None
- */
- #define __HAL_FMAC_CLEAR_IT(__HANDLE__, __INTERRUPT__) /* Dummy macro */
- /**
- * @brief Check whether the specified FMAC status flag is set or not.
- * @param __HANDLE__ FMAC handle.
- * @param __FLAG__ FMAC flag to check.
- * This parameter can be any combination of the following values:
- * @arg @ref FMAC_FLAG_YEMPTY Y Buffer Empty Flag
- * @arg @ref FMAC_FLAG_X1FULL X1 Buffer Full Flag
- * @arg @ref FMAC_FLAG_OVFL Overflow Error Flag
- * @arg @ref FMAC_FLAG_UNFL Underflow Error Flag
- * @arg @ref FMAC_FLAG_SAT Saturation error Flag
- * @retval SET (flag is set) or RESET (flag is reset)
- */
- #define __HAL_FMAC_GET_FLAG(__HANDLE__, __FLAG__) \
- ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
- /**
- * @brief Clear specified FMAC status flag. Dummy macro as no
- flag can be cleared.
- * @param __HANDLE__ FMAC handle.
- * @param __FLAG__ FMAC flag to clear.
- * @retval None
- */
- #define __HAL_FMAC_CLEAR_FLAG(__HANDLE__, __FLAG__) /* Dummy macro */
- /**
- * @brief Check whether the specified FMAC interrupt is enabled or not.
- * @param __HANDLE__ FMAC handle.
- * @param __INTERRUPT__ FMAC interrupt to check.
- * This parameter can be one of the following values:
- * @arg @ref FMAC_IT_RIEN Read interrupt enable
- * @arg @ref FMAC_IT_WIEN Write interrupt enable
- * @arg @ref FMAC_IT_OVFLIEN Overflow error interrupt enable
- * @arg @ref FMAC_IT_UNFLIEN Underflow error interrupt enable
- * @arg @ref FMAC_IT_SATIEN Saturation error interrupt enable (this helps in debugging a filter)
- * @retval FlagStatus
- */
- #define __HAL_FMAC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \
- (((__HANDLE__)->Instance->CR) & (__INTERRUPT__))
- /**
- * @}
- */
- /* Private defines -----------------------------------------------------------*/
- /** @addtogroup FMAC_Private_Constants
- * @{
- */
- #define FMAC_PARAM_P_MAX_IIR 64U /*!< Maximum value of P parameter with IIR */
- #define FMAC_PARAM_P_MAX_FIR 127U /*!< Maximum value of P parameter with FIR */
- #define FMAC_PARAM_P_MIN 2U /*!< Minimum value of P parameter */
- #define FMAC_PARAM_Q_MAX 63U /*!< Maximum value of Q parameter */
- #define FMAC_PARAM_Q_MIN 1U /*!< Minimum value of Q parameter */
- #define FMAC_PARAM_R_MAX 7U /*!< Maximum value of R parameter */
- /**
- * @}
- */
- /* Private Macros-------------------------------------------------------------*/
- /** @addtogroup FMAC_Private_Macros FMAC Private Macros
- * @{
- */
- /**
- * @brief Verify the FMAC function.
- * @param __FUNCTION__ ID of the function.
- * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
- */
- #define IS_FMAC_FUNCTION(__FUNCTION__) (((__FUNCTION__) == FMAC_FUNC_LOAD_X1) || \
- ((__FUNCTION__) == FMAC_FUNC_LOAD_X2) || \
- ((__FUNCTION__) == FMAC_FUNC_LOAD_Y) || \
- ((__FUNCTION__) == FMAC_FUNC_CONVO_FIR) || \
- ((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1))
- /**
- * @brief Verify the FMAC load function used for input data, output data or coefficients.
- * @param __FUNCTION__ ID of the load function.
- * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
- */
- #define IS_FMAC_LOAD_FUNCTION(__FUNCTION__) (((__FUNCTION__) == FMAC_FUNC_LOAD_X1) || \
- ((__FUNCTION__) == FMAC_FUNC_LOAD_X2) || \
- ((__FUNCTION__) == FMAC_FUNC_LOAD_Y))
- /**
- * @brief Verify the FMAC load function used with N values as input or output data.
- * @param __FUNCTION__ ID of the load function.
- * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
- */
- #define IS_FMAC_N_LOAD_FUNCTION(__FUNCTION__) (((__FUNCTION__) == FMAC_FUNC_LOAD_X1) || \
- ((__FUNCTION__) == FMAC_FUNC_LOAD_Y))
- /**
- * @brief Verify the FMAC load function used with N + M values as coefficients.
- * @param __FUNCTION__ ID of the load function.
- * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
- */
- #define IS_FMAC_N_M_LOAD_FUNCTION(__FUNCTION__) ((__FUNCTION__) == FMAC_FUNC_LOAD_X2)
- /**
- * @brief Verify the FMAC filter function.
- * @param __FUNCTION__ ID of the filter function.
- * @retval SET (__FUNCTION__ is a valid value) or RESET (__FUNCTION__ is invalid)
- */
- #define IS_FMAC_FILTER_FUNCTION(__FUNCTION__) (((__FUNCTION__) == FMAC_FUNC_CONVO_FIR) || \
- ((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1))
- /**
- * @brief Verify the FMAC threshold.
- * @param __THRESHOLD__ Value of the threshold.
- * @retval SET (__THRESHOLD__ is a valid value) or RESET (__THRESHOLD__ is invalid)
- */
- #define IS_FMAC_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == FMAC_THRESHOLD_1) || \
- ((__THRESHOLD__) == FMAC_THRESHOLD_2) || \
- ((__THRESHOLD__) == FMAC_THRESHOLD_4) || \
- ((__THRESHOLD__) == FMAC_THRESHOLD_NO_VALUE) || \
- ((__THRESHOLD__) == FMAC_THRESHOLD_8))
- /**
- * @brief Verify the FMAC filter parameter P.
- * @param __P__ Value of the filter parameter P.
- * @param __FUNCTION__ ID of the filter function.
- * @retval SET (__P__ is a valid value) or RESET (__P__ is invalid)
- */
- #define IS_FMAC_PARAM_P(__FUNCTION__, __P__) ((((__FUNCTION__) == FMAC_FUNC_CONVO_FIR) && \
- (((__P__) >= FMAC_PARAM_P_MIN) && \
- ((__P__) <= FMAC_PARAM_P_MAX_FIR))) || \
- (((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1) && \
- (((__P__) >= FMAC_PARAM_P_MIN) && \
- ((__P__) <= FMAC_PARAM_P_MAX_IIR))))
- /**
- * @brief Verify the FMAC filter parameter Q.
- * @param __Q__ Value of the filter parameter Q.
- * @param __FUNCTION__ ID of the filter function.
- * @retval SET (__Q__ is a valid value) or RESET (__Q__ is invalid)
- */
- #define IS_FMAC_PARAM_Q(__FUNCTION__, __Q__) (((__FUNCTION__) == FMAC_FUNC_CONVO_FIR) || \
- (((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1) && \
- (((__Q__) >= FMAC_PARAM_Q_MIN) && ((__Q__) <= FMAC_PARAM_Q_MAX))))
- /**
- * @brief Verify the FMAC filter parameter R.
- * @param __R__ Value of the filter parameter.
- * @param __FUNCTION__ ID of the filter function.
- * @retval SET (__R__ is a valid value) or RESET (__R__ is invalid)
- */
- #define IS_FMAC_PARAM_R(__FUNCTION__, __R__) ( (((__FUNCTION__) == FMAC_FUNC_CONVO_FIR) || \
- ((__FUNCTION__) == FMAC_FUNC_IIR_DIRECT_FORM_1)) && \
- ((__R__) <= FMAC_PARAM_R_MAX))
- /**
- * @brief Verify the FMAC buffer access.
- * @param __BUFFER_ACCESS__ Type of access.
- * @retval SET (__BUFFER_ACCESS__ is a valid value) or RESET (__BUFFER_ACCESS__ is invalid)
- */
- #define IS_FMAC_BUFFER_ACCESS(__BUFFER_ACCESS__) (((__BUFFER_ACCESS__) == FMAC_BUFFER_ACCESS_NONE) || \
- ((__BUFFER_ACCESS__) == FMAC_BUFFER_ACCESS_DMA) || \
- ((__BUFFER_ACCESS__) == FMAC_BUFFER_ACCESS_POLLING) || \
- ((__BUFFER_ACCESS__) == FMAC_BUFFER_ACCESS_IT))
- /**
- * @brief Verify the FMAC clip feature.
- * @param __CLIP_STATE__ Clip state.
- * @retval SET (__CLIP_STATE__ is a valid value) or RESET (__CLIP_STATE__ is invalid)
- */
- #define IS_FMAC_CLIP_STATE(__CLIP_STATE__) (((__CLIP_STATE__) == FMAC_CLIP_DISABLED) || \
- ((__CLIP_STATE__) == FMAC_CLIP_ENABLED))
- /**
- * @brief Check whether the threshold is applicable.
- * @param __SIZE__ Size of the matching buffer.
- * @param __WM__ Watermark value.
- * @param __ACCESS__ Access to the buffer (polling, it, dma, none).
- * @retval THRESHOLD
- */
- #define IS_FMAC_THRESHOLD_APPLICABLE(__SIZE__, __WM__, __ACCESS__) \
- (( (__SIZE__) >= (((__WM__) == FMAC_THRESHOLD_1)? 1U: \
- ((__WM__) == FMAC_THRESHOLD_2)? 2U: \
- ((__WM__) == FMAC_THRESHOLD_4)? 4U:8U))&& \
- ((((__ACCESS__) == FMAC_BUFFER_ACCESS_DMA)&& \
- ((__WM__) == FMAC_THRESHOLD_1))|| \
- ((__ACCESS__ )!= FMAC_BUFFER_ACCESS_DMA)))
- /**
- * @}
- */
- /* Exported functions ------------------------------------------------------- */
- /** @addtogroup FMAC_Exported_Functions
- * @{
- */
- /** @addtogroup FMAC_Exported_Functions_Group1
- * @{
- */
- /* Initialization and de-initialization functions ****************************/
- HAL_StatusTypeDef HAL_FMAC_Init(FMAC_HandleTypeDef *hfmac);
- HAL_StatusTypeDef HAL_FMAC_DeInit(FMAC_HandleTypeDef *hfmac);
- void HAL_FMAC_MspInit(FMAC_HandleTypeDef *hfmac);
- void HAL_FMAC_MspDeInit(FMAC_HandleTypeDef *hfmac);
- #if (USE_HAL_FMAC_REGISTER_CALLBACKS == 1)
- /* Callbacks Register/UnRegister functions ***********************************/
- HAL_StatusTypeDef HAL_FMAC_RegisterCallback(FMAC_HandleTypeDef *hfmac, HAL_FMAC_CallbackIDTypeDef CallbackID,
- pFMAC_CallbackTypeDef pCallback);
- HAL_StatusTypeDef HAL_FMAC_UnRegisterCallback(FMAC_HandleTypeDef *hfmac, HAL_FMAC_CallbackIDTypeDef CallbackID);
- #endif /* USE_HAL_FMAC_REGISTER_CALLBACKS */
- /**
- * @}
- */
- /** @addtogroup FMAC_Exported_Functions_Group2
- * @{
- */
- /* Peripheral Control functions ***********************************************/
- HAL_StatusTypeDef HAL_FMAC_FilterConfig(FMAC_HandleTypeDef *hfmac, FMAC_FilterConfigTypeDef *pConfig);
- HAL_StatusTypeDef HAL_FMAC_FilterConfig_DMA(FMAC_HandleTypeDef *hfmac, FMAC_FilterConfigTypeDef *pConfig);
- HAL_StatusTypeDef HAL_FMAC_FilterPreload(FMAC_HandleTypeDef *hfmac, int16_t *pInput, uint8_t InputSize,
- int16_t *pOutput, uint8_t OutputSize);
- HAL_StatusTypeDef HAL_FMAC_FilterPreload_DMA(FMAC_HandleTypeDef *hfmac, int16_t *pInput, uint8_t InputSize,
- int16_t *pOutput, uint8_t OutputSize);
- HAL_StatusTypeDef HAL_FMAC_FilterStart(FMAC_HandleTypeDef *hfmac, int16_t *pOutput, uint16_t *pOutputSize);
- HAL_StatusTypeDef HAL_FMAC_AppendFilterData(FMAC_HandleTypeDef *hfmac, int16_t *pInput, uint16_t *pInputSize);
- HAL_StatusTypeDef HAL_FMAC_ConfigFilterOutputBuffer(FMAC_HandleTypeDef *hfmac, int16_t *pOutput, uint16_t *pOutputSize);
- HAL_StatusTypeDef HAL_FMAC_PollFilterData(FMAC_HandleTypeDef *hfmac, uint32_t Timeout);
- HAL_StatusTypeDef HAL_FMAC_FilterStop(FMAC_HandleTypeDef *hfmac);
- /**
- * @}
- */
- /** @addtogroup FMAC_Exported_Functions_Group3
- * @{
- */
- /* Callback functions *********************************************************/
- void HAL_FMAC_ErrorCallback(FMAC_HandleTypeDef *hfmac);
- void HAL_FMAC_HalfGetDataCallback(FMAC_HandleTypeDef *hfmac);
- void HAL_FMAC_GetDataCallback(FMAC_HandleTypeDef *hfmac);
- void HAL_FMAC_HalfOutputDataReadyCallback(FMAC_HandleTypeDef *hfmac);
- void HAL_FMAC_OutputDataReadyCallback(FMAC_HandleTypeDef *hfmac);
- void HAL_FMAC_FilterConfigCallback(FMAC_HandleTypeDef *hfmac);
- void HAL_FMAC_FilterPreloadCallback(FMAC_HandleTypeDef *hfmac);
- /**
- * @}
- */
- /** @addtogroup FMAC_Exported_Functions_Group4
- * @{
- */
- /* IRQ handler management *****************************************************/
- void HAL_FMAC_IRQHandler(FMAC_HandleTypeDef *hfmac);
- /**
- * @}
- */
- /** @addtogroup FMAC_Exported_Functions_Group5
- * @{
- */
- /* Peripheral State functions *************************************************/
- HAL_FMAC_StateTypeDef HAL_FMAC_GetState(const FMAC_HandleTypeDef *hfmac);
- uint32_t HAL_FMAC_GetError(const FMAC_HandleTypeDef *hfmac);
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- #endif /* FMAC */
- #ifdef __cplusplus
- }
- #endif
- #endif /* STM32G4xx_HAL_FMAC_H */
|