STM32H735xx HAL User Manual
|
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 */