File indexing completed on 2025-05-11 08:23:35
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #ifndef STM32H7xx_HAL_CORDIC_H
0022 #define STM32H7xx_HAL_CORDIC_H
0023
0024 #ifdef __cplusplus
0025 extern "C" {
0026 #endif
0027
0028
0029 #include "stm32h7xx_hal_def.h"
0030
0031 #if defined(CORDIC)
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049 typedef enum
0050 {
0051 HAL_CORDIC_STATE_RESET = 0x00U,
0052 HAL_CORDIC_STATE_READY = 0x01U,
0053 HAL_CORDIC_STATE_BUSY = 0x02U,
0054 HAL_CORDIC_STATE_ERROR = 0x03U
0055 } HAL_CORDIC_StateTypeDef;
0056
0057
0058
0059
0060 #if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
0061 typedef struct __CORDIC_HandleTypeDef
0062 #else
0063 typedef struct
0064 #endif
0065 {
0066 CORDIC_TypeDef *Instance;
0067
0068 const int32_t *pInBuff;
0069
0070 int32_t *pOutBuff;
0071
0072 uint32_t NbCalcToOrder;
0073
0074 uint32_t NbCalcToGet;
0075
0076 uint32_t DMADirection;
0077
0078 DMA_HandleTypeDef *hdmaIn;
0079
0080 DMA_HandleTypeDef *hdmaOut;
0081
0082 HAL_LockTypeDef Lock;
0083
0084 __IO HAL_CORDIC_StateTypeDef State;
0085
0086 __IO uint32_t ErrorCode;
0087
0088
0089 #if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
0090 void (* ErrorCallback)(struct __CORDIC_HandleTypeDef *hcordic);
0091 void (* CalculateCpltCallback)(struct __CORDIC_HandleTypeDef *hcordic);
0092
0093 void (* MspInitCallback)(struct __CORDIC_HandleTypeDef *hcordic);
0094 void (* MspDeInitCallback)(struct __CORDIC_HandleTypeDef *hcordic);
0095
0096 #endif
0097
0098 } CORDIC_HandleTypeDef;
0099
0100
0101
0102
0103 typedef struct
0104 {
0105 uint32_t Function;
0106
0107
0108 uint32_t Scale;
0109
0110
0111 uint32_t InSize;
0112
0113
0114 uint32_t OutSize;
0115
0116
0117 uint32_t NbWrite;
0118
0119
0120 uint32_t NbRead;
0121
0122
0123 uint32_t Precision;
0124
0125
0126 } CORDIC_ConfigTypeDef;
0127
0128 #if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
0129
0130
0131
0132 typedef enum
0133 {
0134 HAL_CORDIC_ERROR_CB_ID = 0x00U,
0135 HAL_CORDIC_CALCULATE_CPLT_CB_ID = 0x01U,
0136
0137 HAL_CORDIC_MSPINIT_CB_ID = 0x02U,
0138 HAL_CORDIC_MSPDEINIT_CB_ID = 0x03U,
0139
0140 } HAL_CORDIC_CallbackIDTypeDef;
0141
0142
0143
0144
0145 typedef void (*pCORDIC_CallbackTypeDef)(CORDIC_HandleTypeDef *hcordic);
0146
0147 #endif
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164 #define HAL_CORDIC_ERROR_NONE ((uint32_t)0x00000000U)
0165 #define HAL_CORDIC_ERROR_PARAM ((uint32_t)0x00000001U)
0166 #define HAL_CORDIC_ERROR_NOT_READY ((uint32_t)0x00000002U)
0167 #define HAL_CORDIC_ERROR_TIMEOUT ((uint32_t)0x00000004U)
0168 #define HAL_CORDIC_ERROR_DMA ((uint32_t)0x00000008U)
0169 #if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
0170 #define HAL_CORDIC_ERROR_INVALID_CALLBACK ((uint32_t)0x00000010U)
0171 #endif
0172
0173
0174
0175
0176
0177
0178
0179
0180 #define CORDIC_FUNCTION_COSINE (0x00000000U)
0181 #define CORDIC_FUNCTION_SINE ((uint32_t)(CORDIC_CSR_FUNC_0))
0182 #define CORDIC_FUNCTION_PHASE ((uint32_t)(CORDIC_CSR_FUNC_1))
0183 #define CORDIC_FUNCTION_MODULUS ((uint32_t)(CORDIC_CSR_FUNC_1 | CORDIC_CSR_FUNC_0))
0184 #define CORDIC_FUNCTION_ARCTANGENT ((uint32_t)(CORDIC_CSR_FUNC_2))
0185 #define CORDIC_FUNCTION_HCOSINE ((uint32_t)(CORDIC_CSR_FUNC_2 | CORDIC_CSR_FUNC_0))
0186 #define CORDIC_FUNCTION_HSINE ((uint32_t)(CORDIC_CSR_FUNC_2 | CORDIC_CSR_FUNC_1))
0187 #define CORDIC_FUNCTION_HARCTANGENT ((uint32_t)(CORDIC_CSR_FUNC_2 | CORDIC_CSR_FUNC_1 | CORDIC_CSR_FUNC_0))
0188 #define CORDIC_FUNCTION_NATURALLOG ((uint32_t)(CORDIC_CSR_FUNC_3))
0189 #define CORDIC_FUNCTION_SQUAREROOT ((uint32_t)(CORDIC_CSR_FUNC_3 | CORDIC_CSR_FUNC_0))
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199 #define CORDIC_PRECISION_1CYCLE ((uint32_t)(CORDIC_CSR_PRECISION_0))
0200 #define CORDIC_PRECISION_2CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_1))
0201 #define CORDIC_PRECISION_3CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_1 | CORDIC_CSR_PRECISION_0))
0202 #define CORDIC_PRECISION_4CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_2))
0203 #define CORDIC_PRECISION_5CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_0))
0204 #define CORDIC_PRECISION_6CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_1))
0205 #define CORDIC_PRECISION_7CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_2\
0206 | CORDIC_CSR_PRECISION_1 | CORDIC_CSR_PRECISION_0))
0207 #define CORDIC_PRECISION_8CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3))
0208 #define CORDIC_PRECISION_9CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3 | CORDIC_CSR_PRECISION_0))
0209 #define CORDIC_PRECISION_10CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3 | CORDIC_CSR_PRECISION_1))
0210 #define CORDIC_PRECISION_11CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3\
0211 | CORDIC_CSR_PRECISION_1 | CORDIC_CSR_PRECISION_0))
0212 #define CORDIC_PRECISION_12CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3 | CORDIC_CSR_PRECISION_2))
0213 #define CORDIC_PRECISION_13CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3\
0214 | CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_0))
0215 #define CORDIC_PRECISION_14CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3\
0216 | CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_1))
0217 #define CORDIC_PRECISION_15CYCLES ((uint32_t)(CORDIC_CSR_PRECISION_3\
0218 | CORDIC_CSR_PRECISION_2 | CORDIC_CSR_PRECISION_1\
0219 |CORDIC_CSR_PRECISION_0))
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230 #define CORDIC_SCALE_0 (0x00000000U)
0231 #define CORDIC_SCALE_1 ((uint32_t)(CORDIC_CSR_SCALE_0))
0232 #define CORDIC_SCALE_2 ((uint32_t)(CORDIC_CSR_SCALE_1))
0233 #define CORDIC_SCALE_3 ((uint32_t)(CORDIC_CSR_SCALE_1 | CORDIC_CSR_SCALE_0))
0234 #define CORDIC_SCALE_4 ((uint32_t)(CORDIC_CSR_SCALE_2))
0235 #define CORDIC_SCALE_5 ((uint32_t)(CORDIC_CSR_SCALE_2 | CORDIC_CSR_SCALE_0))
0236 #define CORDIC_SCALE_6 ((uint32_t)(CORDIC_CSR_SCALE_2 | CORDIC_CSR_SCALE_1))
0237 #define CORDIC_SCALE_7 ((uint32_t)(CORDIC_CSR_SCALE_2 | CORDIC_CSR_SCALE_1 | CORDIC_CSR_SCALE_0))
0238
0239
0240
0241
0242
0243
0244
0245
0246 #define CORDIC_IT_IEN CORDIC_CSR_IEN
0247
0248
0249
0250
0251
0252
0253
0254
0255 #define CORDIC_DMA_REN CORDIC_CSR_DMAREN
0256
0257
0258
0259
0260
0261
0262
0263
0264 #define CORDIC_DMA_WEN CORDIC_CSR_DMAWEN
0265
0266
0267
0268
0269
0270
0271
0272
0273 #define CORDIC_NBWRITE_1 (0x00000000U)
0274
0275
0276
0277 #define CORDIC_NBWRITE_2 CORDIC_CSR_NARGS
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287 #define CORDIC_NBREAD_1 (0x00000000U)
0288
0289
0290
0291 #define CORDIC_NBREAD_2 CORDIC_CSR_NRES
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301 #define CORDIC_INSIZE_32BITS (0x00000000U)
0302 #define CORDIC_INSIZE_16BITS CORDIC_CSR_ARGSIZE
0303
0304
0305
0306
0307
0308
0309
0310
0311 #define CORDIC_OUTSIZE_32BITS (0x00000000U)
0312 #define CORDIC_OUTSIZE_16BITS CORDIC_CSR_RESSIZE
0313
0314
0315
0316
0317
0318
0319
0320
0321 #define CORDIC_FLAG_RRDY CORDIC_CSR_RRDY
0322
0323
0324
0325
0326
0327
0328
0329
0330 #define CORDIC_DMA_DIR_NONE ((uint32_t)0x00000000U)
0331 #define CORDIC_DMA_DIR_IN ((uint32_t)0x00000001U)
0332 #define CORDIC_DMA_DIR_OUT ((uint32_t)0x00000002U)
0333 #define CORDIC_DMA_DIR_IN_OUT ((uint32_t)0x00000003U)
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353 #if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
0354 #define __HAL_CORDIC_RESET_HANDLE_STATE(__HANDLE__) do{ \
0355 (__HANDLE__)->State = HAL_CORDIC_STATE_RESET; \
0356 (__HANDLE__)->MspInitCallback = NULL; \
0357 (__HANDLE__)->MspDeInitCallback = NULL; \
0358 } while(0)
0359 #else
0360 #define __HAL_CORDIC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CORDIC_STATE_RESET)
0361 #endif
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371 #define __HAL_CORDIC_ENABLE_IT(__HANDLE__, __INTERRUPT__) \
0372 (((__HANDLE__)->Instance->CSR) |= (__INTERRUPT__))
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382 #define __HAL_CORDIC_DISABLE_IT(__HANDLE__, __INTERRUPT__) \
0383 (((__HANDLE__)->Instance->CSR) &= ~(__INTERRUPT__))
0384
0385
0386
0387
0388
0389
0390
0391 #define __HAL_CORDIC_GET_IT(__HANDLE__, __INTERRUPT__)
0392
0393
0394
0395
0396
0397
0398
0399 #define __HAL_CORDIC_CLEAR_IT(__HANDLE__, __INTERRUPT__)
0400
0401
0402
0403
0404
0405
0406
0407
0408 #define __HAL_CORDIC_GET_FLAG(__HANDLE__, __FLAG__) \
0409 ((((__HANDLE__)->Instance->CSR) & (__FLAG__)) == (__FLAG__))
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419 #define __HAL_CORDIC_CLEAR_FLAG(__HANDLE__, __FLAG__)
0420
0421
0422
0423
0424
0425
0426
0427
0428 #define __HAL_CORDIC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \
0429 (((__HANDLE__)->Instance->CSR) & (__INTERRUPT__))
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446 #define IS_CORDIC_FUNCTION(__FUNCTION__) (((__FUNCTION__) == CORDIC_FUNCTION_COSINE) || \
0447 ((__FUNCTION__) == CORDIC_FUNCTION_SINE) || \
0448 ((__FUNCTION__) == CORDIC_FUNCTION_PHASE) || \
0449 ((__FUNCTION__) == CORDIC_FUNCTION_MODULUS) || \
0450 ((__FUNCTION__) == CORDIC_FUNCTION_ARCTANGENT) || \
0451 ((__FUNCTION__) == CORDIC_FUNCTION_HCOSINE) || \
0452 ((__FUNCTION__) == CORDIC_FUNCTION_HSINE) || \
0453 ((__FUNCTION__) == CORDIC_FUNCTION_HARCTANGENT) || \
0454 ((__FUNCTION__) == CORDIC_FUNCTION_NATURALLOG) || \
0455 ((__FUNCTION__) == CORDIC_FUNCTION_SQUAREROOT))
0456
0457
0458
0459
0460
0461
0462
0463 #define IS_CORDIC_PRECISION(__PRECISION__) (((__PRECISION__) == CORDIC_PRECISION_1CYCLE) || \
0464 ((__PRECISION__) == CORDIC_PRECISION_2CYCLES) || \
0465 ((__PRECISION__) == CORDIC_PRECISION_3CYCLES) || \
0466 ((__PRECISION__) == CORDIC_PRECISION_4CYCLES) || \
0467 ((__PRECISION__) == CORDIC_PRECISION_5CYCLES) || \
0468 ((__PRECISION__) == CORDIC_PRECISION_6CYCLES) || \
0469 ((__PRECISION__) == CORDIC_PRECISION_7CYCLES) || \
0470 ((__PRECISION__) == CORDIC_PRECISION_8CYCLES) || \
0471 ((__PRECISION__) == CORDIC_PRECISION_9CYCLES) || \
0472 ((__PRECISION__) == CORDIC_PRECISION_10CYCLES) || \
0473 ((__PRECISION__) == CORDIC_PRECISION_11CYCLES) || \
0474 ((__PRECISION__) == CORDIC_PRECISION_12CYCLES) || \
0475 ((__PRECISION__) == CORDIC_PRECISION_13CYCLES) || \
0476 ((__PRECISION__) == CORDIC_PRECISION_14CYCLES) || \
0477 ((__PRECISION__) == CORDIC_PRECISION_15CYCLES))
0478
0479
0480
0481
0482
0483
0484 #define IS_CORDIC_SCALE(__SCALE__) (((__SCALE__) == CORDIC_SCALE_0) || \
0485 ((__SCALE__) == CORDIC_SCALE_1) || \
0486 ((__SCALE__) == CORDIC_SCALE_2) || \
0487 ((__SCALE__) == CORDIC_SCALE_3) || \
0488 ((__SCALE__) == CORDIC_SCALE_4) || \
0489 ((__SCALE__) == CORDIC_SCALE_5) || \
0490 ((__SCALE__) == CORDIC_SCALE_6) || \
0491 ((__SCALE__) == CORDIC_SCALE_7))
0492
0493
0494
0495
0496
0497
0498 #define IS_CORDIC_NBWRITE(__NBWRITE__) (((__NBWRITE__) == CORDIC_NBWRITE_1) || \
0499 ((__NBWRITE__) == CORDIC_NBWRITE_2))
0500
0501
0502
0503
0504
0505
0506 #define IS_CORDIC_NBREAD(__NBREAD__) (((__NBREAD__) == CORDIC_NBREAD_1) || \
0507 ((__NBREAD__) == CORDIC_NBREAD_2))
0508
0509
0510
0511
0512
0513
0514 #define IS_CORDIC_INSIZE(__INSIZE__) (((__INSIZE__) == CORDIC_INSIZE_32BITS) || \
0515 ((__INSIZE__) == CORDIC_INSIZE_16BITS))
0516
0517
0518
0519
0520
0521
0522 #define IS_CORDIC_OUTSIZE(__OUTSIZE__) (((__OUTSIZE__) == CORDIC_OUTSIZE_32BITS) || \
0523 ((__OUTSIZE__) == CORDIC_OUTSIZE_16BITS))
0524
0525
0526
0527
0528
0529
0530 #define IS_CORDIC_DMA_DIRECTION(__DMADIR__) (((__DMADIR__) == CORDIC_DMA_DIR_IN) || \
0531 ((__DMADIR__) == CORDIC_DMA_DIR_OUT) || \
0532 ((__DMADIR__) == CORDIC_DMA_DIR_IN_OUT))
0533
0534
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544
0545
0546
0547 HAL_StatusTypeDef HAL_CORDIC_Init(CORDIC_HandleTypeDef *hcordic);
0548 HAL_StatusTypeDef HAL_CORDIC_DeInit(CORDIC_HandleTypeDef *hcordic);
0549 void HAL_CORDIC_MspInit(CORDIC_HandleTypeDef *hcordic);
0550 void HAL_CORDIC_MspDeInit(CORDIC_HandleTypeDef *hcordic);
0551
0552 #if USE_HAL_CORDIC_REGISTER_CALLBACKS == 1
0553
0554 HAL_StatusTypeDef HAL_CORDIC_RegisterCallback(CORDIC_HandleTypeDef *hcordic, HAL_CORDIC_CallbackIDTypeDef CallbackID,
0555 pCORDIC_CallbackTypeDef pCallback);
0556 HAL_StatusTypeDef HAL_CORDIC_UnRegisterCallback(CORDIC_HandleTypeDef *hcordic, HAL_CORDIC_CallbackIDTypeDef CallbackID);
0557
0558
0559
0560
0561
0562
0563
0564 #endif
0565
0566 HAL_StatusTypeDef HAL_CORDIC_Configure(CORDIC_HandleTypeDef *hcordic, const CORDIC_ConfigTypeDef *sConfig);
0567 HAL_StatusTypeDef HAL_CORDIC_Calculate(CORDIC_HandleTypeDef *hcordic, const int32_t *pInBuff, int32_t *pOutBuff,
0568 uint32_t NbCalc, uint32_t Timeout);
0569 HAL_StatusTypeDef HAL_CORDIC_CalculateZO(CORDIC_HandleTypeDef *hcordic, const int32_t *pInBuff, int32_t *pOutBuff,
0570 uint32_t NbCalc, uint32_t Timeout);
0571 HAL_StatusTypeDef HAL_CORDIC_Calculate_IT(CORDIC_HandleTypeDef *hcordic, const int32_t *pInBuff, int32_t *pOutBuff,
0572 uint32_t NbCalc);
0573 HAL_StatusTypeDef HAL_CORDIC_Calculate_DMA(CORDIC_HandleTypeDef *hcordic, const int32_t *pInBuff, int32_t *pOutBuff,
0574 uint32_t NbCalc, uint32_t DMADirection);
0575
0576
0577
0578
0579
0580
0581
0582
0583 void HAL_CORDIC_ErrorCallback(CORDIC_HandleTypeDef *hcordic);
0584 void HAL_CORDIC_CalculateCpltCallback(CORDIC_HandleTypeDef *hcordic);
0585
0586
0587
0588
0589
0590
0591
0592
0593 void HAL_CORDIC_IRQHandler(CORDIC_HandleTypeDef *hcordic);
0594
0595
0596
0597
0598
0599
0600
0601
0602 HAL_CORDIC_StateTypeDef HAL_CORDIC_GetState(const CORDIC_HandleTypeDef *hcordic);
0603 uint32_t HAL_CORDIC_GetError(const CORDIC_HandleTypeDef *hcordic);
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620 #endif
0621
0622 #ifdef __cplusplus
0623 }
0624 #endif
0625
0626 #endif