RTEMS 6.1-rc7
Loading...
Searching...
No Matches
stm32h7xx_hal_cordic.h
Go to the documentation of this file.
1
20/* Define to prevent recursive inclusion -------------------------------------*/
21#ifndef STM32H7xx_HAL_CORDIC_H
22#define STM32H7xx_HAL_CORDIC_H
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28/* Includes ------------------------------------------------------------------*/
29#include "stm32h7xx_hal_def.h"
30
31#if defined(CORDIC)
40/* Exported types ------------------------------------------------------------*/
49typedef enum
50{
51 HAL_CORDIC_STATE_RESET = 0x00U,
52 HAL_CORDIC_STATE_READY = 0x01U,
53 HAL_CORDIC_STATE_BUSY = 0x02U,
54 HAL_CORDIC_STATE_ERROR = 0x03U
55} HAL_CORDIC_StateTypeDef;
56
60#if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
61typedef struct __CORDIC_HandleTypeDef
62#else
63typedef struct
64#endif /* USE_HAL_CORDIC_REGISTER_CALLBACKS */
65{
66 CORDIC_TypeDef *Instance;
68 const int32_t *pInBuff;
70 int32_t *pOutBuff;
72 uint32_t NbCalcToOrder;
74 uint32_t NbCalcToGet;
76 uint32_t DMADirection;
78 DMA_HandleTypeDef *hdmaIn;
80 DMA_HandleTypeDef *hdmaOut;
82 HAL_LockTypeDef Lock;
84 __IO HAL_CORDIC_StateTypeDef State;
86 __IO uint32_t ErrorCode;
89#if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
90 void (* ErrorCallback)(struct __CORDIC_HandleTypeDef *hcordic);
91 void (* CalculateCpltCallback)(struct __CORDIC_HandleTypeDef *hcordic);
93 void (* MspInitCallback)(struct __CORDIC_HandleTypeDef *hcordic);
94 void (* MspDeInitCallback)(struct __CORDIC_HandleTypeDef *hcordic);
96#endif /* (USE_HAL_CORDIC_REGISTER_CALLBACKS) */
97
98} CORDIC_HandleTypeDef;
99
103typedef struct
104{
105 uint32_t Function;
108 uint32_t Scale;
111 uint32_t InSize;
114 uint32_t OutSize;
117 uint32_t NbWrite;
120 uint32_t NbRead;
123 uint32_t Precision;
126} CORDIC_ConfigTypeDef;
127
128#if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
132typedef enum
133{
134 HAL_CORDIC_ERROR_CB_ID = 0x00U,
135 HAL_CORDIC_CALCULATE_CPLT_CB_ID = 0x01U,
137 HAL_CORDIC_MSPINIT_CB_ID = 0x02U,
138 HAL_CORDIC_MSPDEINIT_CB_ID = 0x03U,
140} HAL_CORDIC_CallbackIDTypeDef;
141
145typedef void (*pCORDIC_CallbackTypeDef)(CORDIC_HandleTypeDef *hcordic);
147#endif /* USE_HAL_CORDIC_REGISTER_CALLBACKS */
148
154/* Exported constants --------------------------------------------------------*/
164#define HAL_CORDIC_ERROR_NONE ((uint32_t)0x00000000U)
165#define HAL_CORDIC_ERROR_PARAM ((uint32_t)0x00000001U)
166#define HAL_CORDIC_ERROR_NOT_READY ((uint32_t)0x00000002U)
167#define HAL_CORDIC_ERROR_TIMEOUT ((uint32_t)0x00000004U)
168#define HAL_CORDIC_ERROR_DMA ((uint32_t)0x00000008U)
169#if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
170#define HAL_CORDIC_ERROR_INVALID_CALLBACK ((uint32_t)0x00000010U)
171#endif /* USE_HAL_CORDIC_REGISTER_CALLBACKS */
180#define CORDIC_FUNCTION_COSINE (0x00000000U)
181#define CORDIC_FUNCTION_SINE ((uint32_t)(CORDIC_CSR_FUNC_0))
182#define CORDIC_FUNCTION_PHASE ((uint32_t)(CORDIC_CSR_FUNC_1))
183#define CORDIC_FUNCTION_MODULUS ((uint32_t)(CORDIC_CSR_FUNC_1 | CORDIC_CSR_FUNC_0))
184#define CORDIC_FUNCTION_ARCTANGENT ((uint32_t)(CORDIC_CSR_FUNC_2))
185#define CORDIC_FUNCTION_HCOSINE ((uint32_t)(CORDIC_CSR_FUNC_2 | CORDIC_CSR_FUNC_0))
186#define CORDIC_FUNCTION_HSINE ((uint32_t)(CORDIC_CSR_FUNC_2 | CORDIC_CSR_FUNC_1))
187#define CORDIC_FUNCTION_HARCTANGENT ((uint32_t)(CORDIC_CSR_FUNC_2 | CORDIC_CSR_FUNC_1 | CORDIC_CSR_FUNC_0))
188#define CORDIC_FUNCTION_NATURALLOG ((uint32_t)(CORDIC_CSR_FUNC_3))
189#define CORDIC_FUNCTION_SQUAREROOT ((uint32_t)(CORDIC_CSR_FUNC_3 | CORDIC_CSR_FUNC_0))
198/* Note: 1 cycle corresponds to 4 algorithm iterations */
199#define CORDIC_PRECISION_1CYCLE ((uint32_t)(CORDIC_CSR_PRECISION_0))
200#define CORDIC_PRECISION_2CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_1))
201#define CORDIC_PRECISION_3CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_1 | CORDIC_CSR_PRECISION_0))
202#define CORDIC_PRECISION_4CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_2))
203#define CORDIC_PRECISION_5CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_0))
204#define CORDIC_PRECISION_6CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_1))
205#define CORDIC_PRECISION_7CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_2\
206 | CORDIC_CSR_PRECISION_1 | CORDIC_CSR_PRECISION_0))
207#define CORDIC_PRECISION_8CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3))
208#define CORDIC_PRECISION_9CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3 | CORDIC_CSR_PRECISION_0))
209#define CORDIC_PRECISION_10CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3 | CORDIC_CSR_PRECISION_1))
210#define CORDIC_PRECISION_11CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3\
211 | CORDIC_CSR_PRECISION_1 | CORDIC_CSR_PRECISION_0))
212#define CORDIC_PRECISION_12CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3 | CORDIC_CSR_PRECISION_2))
213#define CORDIC_PRECISION_13CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3\
214 | CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_0))
215#define CORDIC_PRECISION_14CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3\
216 | CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_1))
217#define CORDIC_PRECISION_15CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3\
218 | CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_1\
219 |CORDIC_CSR_PRECISION_0))
228/* Scale factor value 'n' implies that the input data have been multiplied
229 by a factor 2exp(-n), and/or the output data need to be multiplied by 2exp(n). */
230#define CORDIC_SCALE_0 (0x00000000U)
231#define CORDIC_SCALE_1 ((uint32_t)(CORDIC_CSR_SCALE_0))
232#define CORDIC_SCALE_2 ((uint32_t)(CORDIC_CSR_SCALE_1))
233#define CORDIC_SCALE_3 ((uint32_t)(CORDIC_CSR_SCALE_1 | CORDIC_CSR_SCALE_0))
234#define CORDIC_SCALE_4 ((uint32_t)(CORDIC_CSR_SCALE_2))
235#define CORDIC_SCALE_5 ((uint32_t)(CORDIC_CSR_SCALE_2 | CORDIC_CSR_SCALE_0))
236#define CORDIC_SCALE_6 ((uint32_t)(CORDIC_CSR_SCALE_2 | CORDIC_CSR_SCALE_1))
237#define CORDIC_SCALE_7 ((uint32_t)(CORDIC_CSR_SCALE_2 | CORDIC_CSR_SCALE_1 | CORDIC_CSR_SCALE_0))
246#define CORDIC_IT_IEN CORDIC_CSR_IEN
255#define CORDIC_DMA_REN CORDIC_CSR_DMAREN
264#define CORDIC_DMA_WEN CORDIC_CSR_DMAWEN
273#define CORDIC_NBWRITE_1 (0x00000000U)
277#define CORDIC_NBWRITE_2 CORDIC_CSR_NARGS
287#define CORDIC_NBREAD_1 (0x00000000U)
291#define CORDIC_NBREAD_2 CORDIC_CSR_NRES
301#define CORDIC_INSIZE_32BITS (0x00000000U)
302#define CORDIC_INSIZE_16BITS CORDIC_CSR_ARGSIZE
311#define CORDIC_OUTSIZE_32BITS (0x00000000U)
312#define CORDIC_OUTSIZE_16BITS CORDIC_CSR_RESSIZE
321#define CORDIC_FLAG_RRDY CORDIC_CSR_RRDY
330#define CORDIC_DMA_DIR_NONE ((uint32_t)0x00000000U)
331#define CORDIC_DMA_DIR_IN ((uint32_t)0x00000001U)
332#define CORDIC_DMA_DIR_OUT ((uint32_t)0x00000002U)
333#define CORDIC_DMA_DIR_IN_OUT ((uint32_t)0x00000003U)
343/* Exported macro ------------------------------------------------------------*/
353#if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
354#define __HAL_CORDIC_RESET_HANDLE_STATE(__HANDLE__) do{ \
355 (__HANDLE__)->State = HAL_CORDIC_STATE_RESET; \
356 (__HANDLE__)->MspInitCallback = NULL; \
357 (__HANDLE__)->MspDeInitCallback = NULL; \
358 } while(0)
359#else
360#define __HAL_CORDIC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CORDIC_STATE_RESET)
361#endif /*USE_HAL_CORDIC_REGISTER_CALLBACKS */
362
371#define __HAL_CORDIC_ENABLE_IT(__HANDLE__, __INTERRUPT__) \
372 (((__HANDLE__)->Instance->CSR) |= (__INTERRUPT__))
373
382#define __HAL_CORDIC_DISABLE_IT(__HANDLE__, __INTERRUPT__) \
383 (((__HANDLE__)->Instance->CSR) &= ~(__INTERRUPT__))
384
391#define __HAL_CORDIC_GET_IT(__HANDLE__, __INTERRUPT__) /* Dummy macro */
392
399#define __HAL_CORDIC_CLEAR_IT(__HANDLE__, __INTERRUPT__) /* Dummy macro */
400
408#define __HAL_CORDIC_GET_FLAG(__HANDLE__, __FLAG__) \
409 ((((__HANDLE__)->Instance->CSR) & (__FLAG__)) == (__FLAG__))
410
419#define __HAL_CORDIC_CLEAR_FLAG(__HANDLE__, __FLAG__) /* Dummy macro */
420
428#define __HAL_CORDIC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \
429 (((__HANDLE__)->Instance->CSR) & (__INTERRUPT__))
430
435/* Private macros --------------------------------------------------------*/
446#define IS_CORDIC_FUNCTION(__FUNCTION__) (((__FUNCTION__) == CORDIC_FUNCTION_COSINE) || \
447 ((__FUNCTION__) == CORDIC_FUNCTION_SINE) || \
448 ((__FUNCTION__) == CORDIC_FUNCTION_PHASE) || \
449 ((__FUNCTION__) == CORDIC_FUNCTION_MODULUS) || \
450 ((__FUNCTION__) == CORDIC_FUNCTION_ARCTANGENT) || \
451 ((__FUNCTION__) == CORDIC_FUNCTION_HCOSINE) || \
452 ((__FUNCTION__) == CORDIC_FUNCTION_HSINE) || \
453 ((__FUNCTION__) == CORDIC_FUNCTION_HARCTANGENT) || \
454 ((__FUNCTION__) == CORDIC_FUNCTION_NATURALLOG) || \
455 ((__FUNCTION__) == CORDIC_FUNCTION_SQUAREROOT))
456
457
463#define IS_CORDIC_PRECISION(__PRECISION__) (((__PRECISION__) == CORDIC_PRECISION_1CYCLE) || \
464 ((__PRECISION__) == CORDIC_PRECISION_2CYCLES) || \
465 ((__PRECISION__) == CORDIC_PRECISION_3CYCLES) || \
466 ((__PRECISION__) == CORDIC_PRECISION_4CYCLES) || \
467 ((__PRECISION__) == CORDIC_PRECISION_5CYCLES) || \
468 ((__PRECISION__) == CORDIC_PRECISION_6CYCLES) || \
469 ((__PRECISION__) == CORDIC_PRECISION_7CYCLES) || \
470 ((__PRECISION__) == CORDIC_PRECISION_8CYCLES) || \
471 ((__PRECISION__) == CORDIC_PRECISION_9CYCLES) || \
472 ((__PRECISION__) == CORDIC_PRECISION_10CYCLES) || \
473 ((__PRECISION__) == CORDIC_PRECISION_11CYCLES) || \
474 ((__PRECISION__) == CORDIC_PRECISION_12CYCLES) || \
475 ((__PRECISION__) == CORDIC_PRECISION_13CYCLES) || \
476 ((__PRECISION__) == CORDIC_PRECISION_14CYCLES) || \
477 ((__PRECISION__) == CORDIC_PRECISION_15CYCLES))
478
484#define IS_CORDIC_SCALE(__SCALE__) (((__SCALE__) == CORDIC_SCALE_0) || \
485 ((__SCALE__) == CORDIC_SCALE_1) || \
486 ((__SCALE__) == CORDIC_SCALE_2) || \
487 ((__SCALE__) == CORDIC_SCALE_3) || \
488 ((__SCALE__) == CORDIC_SCALE_4) || \
489 ((__SCALE__) == CORDIC_SCALE_5) || \
490 ((__SCALE__) == CORDIC_SCALE_6) || \
491 ((__SCALE__) == CORDIC_SCALE_7))
492
498#define IS_CORDIC_NBWRITE(__NBWRITE__) (((__NBWRITE__) == CORDIC_NBWRITE_1) || \
499 ((__NBWRITE__) == CORDIC_NBWRITE_2))
500
506#define IS_CORDIC_NBREAD(__NBREAD__) (((__NBREAD__) == CORDIC_NBREAD_1) || \
507 ((__NBREAD__) == CORDIC_NBREAD_2))
508
514#define IS_CORDIC_INSIZE(__INSIZE__) (((__INSIZE__) == CORDIC_INSIZE_32BITS) || \
515 ((__INSIZE__) == CORDIC_INSIZE_16BITS))
516
522#define IS_CORDIC_OUTSIZE(__OUTSIZE__) (((__OUTSIZE__) == CORDIC_OUTSIZE_32BITS) || \
523 ((__OUTSIZE__) == CORDIC_OUTSIZE_16BITS))
524
530#define IS_CORDIC_DMA_DIRECTION(__DMADIR__) (((__DMADIR__) == CORDIC_DMA_DIR_IN) || \
531 ((__DMADIR__) == CORDIC_DMA_DIR_OUT) || \
532 ((__DMADIR__) == CORDIC_DMA_DIR_IN_OUT))
533
541/* Exported functions ------------------------------------------------------- */
542
546/* Initialization and de-initialization functions ******************************/
547HAL_StatusTypeDef HAL_CORDIC_Init(CORDIC_HandleTypeDef *hcordic);
548HAL_StatusTypeDef HAL_CORDIC_DeInit(CORDIC_HandleTypeDef *hcordic);
549void HAL_CORDIC_MspInit(CORDIC_HandleTypeDef *hcordic);
550void HAL_CORDIC_MspDeInit(CORDIC_HandleTypeDef *hcordic);
551
552#if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
553/* Callbacks Register/UnRegister functions ***********************************/
554HAL_StatusTypeDef HAL_CORDIC_RegisterCallback(CORDIC_HandleTypeDef *hcordic, HAL_CORDIC_CallbackIDTypeDef CallbackID,
555 pCORDIC_CallbackTypeDef pCallback);
556HAL_StatusTypeDef HAL_CORDIC_UnRegisterCallback(CORDIC_HandleTypeDef *hcordic, HAL_CORDIC_CallbackIDTypeDef CallbackID);
564#endif /* USE_HAL_CORDIC_REGISTER_CALLBACKS */
565/* Peripheral Control functions ***********************************************/
566HAL_StatusTypeDef HAL_CORDIC_Configure(CORDIC_HandleTypeDef *hcordic, const CORDIC_ConfigTypeDef *sConfig);
567HAL_StatusTypeDef HAL_CORDIC_Calculate(CORDIC_HandleTypeDef *hcordic, const int32_t *pInBuff, int32_t *pOutBuff,
568 uint32_t NbCalc, uint32_t Timeout);
569HAL_StatusTypeDef HAL_CORDIC_CalculateZO(CORDIC_HandleTypeDef *hcordic, const int32_t *pInBuff, int32_t *pOutBuff,
570 uint32_t NbCalc, uint32_t Timeout);
571HAL_StatusTypeDef HAL_CORDIC_Calculate_IT(CORDIC_HandleTypeDef *hcordic, const int32_t *pInBuff, int32_t *pOutBuff,
572 uint32_t NbCalc);
573HAL_StatusTypeDef HAL_CORDIC_Calculate_DMA(CORDIC_HandleTypeDef *hcordic, const int32_t *pInBuff, int32_t *pOutBuff,
574 uint32_t NbCalc, uint32_t DMADirection);
582/* Callback functions *********************************************************/
583void HAL_CORDIC_ErrorCallback(CORDIC_HandleTypeDef *hcordic);
584void HAL_CORDIC_CalculateCpltCallback(CORDIC_HandleTypeDef *hcordic);
592/* IRQ handler management *****************************************************/
593void HAL_CORDIC_IRQHandler(CORDIC_HandleTypeDef *hcordic);
601/* Peripheral State functions *************************************************/
602HAL_CORDIC_StateTypeDef HAL_CORDIC_GetState(const CORDIC_HandleTypeDef *hcordic);
603uint32_t HAL_CORDIC_GetError(const CORDIC_HandleTypeDef *hcordic);
620#endif /* CORDIC */
621
622#ifdef __cplusplus
623}
624#endif
625
626#endif /* STM32H7xx_HAL_CORDIC_H */
#define __IO
Definition: core_cm4.h:239
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_StatusTypeDef
HAL Status structures definition.
Definition: stm32h7xx_hal_def.h:47
HAL_LockTypeDef
HAL Lock structures definition.
Definition: stm32h7xx_hal_def.h:58
COordincate Rotation DIgital Computer.
Definition: stm32h723xx.h:431
DMA handle Structure definition.
Definition: stm32h7xx_hal_dma.h:138