MSPM0GX51X Driver Library  2.05.00.05
dl_mathacl.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /*!****************************************************************************
33  * @file dl_mathacl.h
34  * @brief Math Accelerator Driver Library
35  * @defgroup MATHACL Math Accelerator (MATHACL)
36  *
37  * @anchor ti_dl_dl_m0p_mathacl_Overview
38  * # Overview
39  *
40  * The Math Accelerator Driver Library provides software to control the
41  * onboard Math Accelerator hardware.
42  *
43  ******************************************************************************
44  */
48 #ifndef ti_dl_dl_mathacl__include
49 #define ti_dl_dl_mathacl__include
50 
51 #include <stdbool.h>
52 #include <stdint.h>
53 
54 #include <ti/devices/msp/msp.h>
55 #include <ti/driverlib/dl_common.h>
56 
57 #ifdef __MSPM0_HAS_MATHACL__
58 
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62 
63 /* clang-format off */
64 
72 #define DL_MATHACL_STATUS_UNDERFLOW (MATHACL_STATUS_UF_UNDERFLOW)
73 
77 #define DL_MATHACL_STATUS_UF_MASK (MATHACL_STATUS_UF_MASK)
78 
82 #define DL_MATHACL_STATUS_OVERFLOW (MATHACL_STATUS_OVF_OVERFLOW)
83 
87 #define DL_MATHACL_STATUS_OVF_MASK (MATHACL_STATUS_OVF_MASK)
88 
92 #define DL_MATHACL_STATUS_ERR_DIVBY0 (MATHACL_STATUS_ERR_DIVBY0)
93 
97 #define DL_MATHACL_STATUS_ERR_MASK (MATHACL_STATUS_ERR_MASK)
98 
102 #define DL_MathACL_startSinCosOperation(MATHACL, config, op) DL_MathACL_configOperation(MATHACL, config, op, 0)
103 
107 #define DL_MathACL_startArcTan2Operation(MATHACL, config, x, y) DL_MathACL_configOperation(MATHACL, config, x, y)
108 
112 #define DL_MathACL_startArcTanOperation(MATHACL, config, x) DL_MathACL_configOperation(MATHACL, config, x, 0)
113 
117 #define DL_MathACL_startDivOperation(MATHACL, config, num, den) DL_MathACL_configOperation(MATHACL, config, num, den)
118 
122 #define DL_MathACL_startSqrtOperation(MATHACL, config, sqrt) DL_MathACL_configOperation(MATHACL, config, sqrt, 0)
123 
127 #define DL_MathACL_startMpyOperation(MATHACL, config, multicand, multiplier) DL_MathACL_configOperation(MATHACL, config, multicand, multiplier)
128 
131 /* clang-format on */
132 
134 typedef enum {
136  DL_MATHACL_OP_TYPE_SINCOS = MATHACL_CTL_FUNC_SINCOS,
138  DL_MATHACL_OP_TYPE_ARCTAN2 = MATHACL_CTL_FUNC_ATAN2,
140  DL_MATHACL_OP_TYPE_DIV = MATHACL_CTL_FUNC_DIV,
142  DL_MATHACL_OP_TYPE_SQRT = MATHACL_CTL_FUNC_SQRT,
144  DL_MATHACL_OP_TYPE_MPY_32 = MATHACL_CTL_FUNC_MPY32,
149  DL_MATHACL_OP_TYPE_SQUARE_32 = MATHACL_CTL_FUNC_SQUARE32,
151  DL_MATHACL_OP_TYPE_MPY_64 = MATHACL_CTL_FUNC_MPY64,
153  DL_MATHACL_OP_TYPE_SQUARE_64 = MATHACL_CTL_FUNC_SQUARE64,
158  DL_MATHACL_OP_TYPE_MAC = MATHACL_CTL_FUNC_MAC,
163  DL_MATHACL_OP_TYPE_SAC = MATHACL_CTL_FUNC_SAC,
164 } DL_MATHACL_OP_TYPE;
165 
167 typedef enum {
169  DL_MATHACL_Q_TYPE_Q0 = MATHACL_CTL_QVAL_Q0,
171  DL_MATHACL_Q_TYPE_Q1 = MATHACL_CTL_QVAL_Q1,
173  DL_MATHACL_Q_TYPE_Q2 = MATHACL_CTL_QVAL_Q2,
175  DL_MATHACL_Q_TYPE_Q3 = MATHACL_CTL_QVAL_Q3,
177  DL_MATHACL_Q_TYPE_Q4 = MATHACL_CTL_QVAL_Q4,
179  DL_MATHACL_Q_TYPE_Q5 = MATHACL_CTL_QVAL_Q5,
181  DL_MATHACL_Q_TYPE_Q6 = MATHACL_CTL_QVAL_Q6,
183  DL_MATHACL_Q_TYPE_Q7 = MATHACL_CTL_QVAL_Q7,
185  DL_MATHACL_Q_TYPE_Q8 = MATHACL_CTL_QVAL_Q8,
187  DL_MATHACL_Q_TYPE_Q9 = MATHACL_CTL_QVAL_Q9,
189  DL_MATHACL_Q_TYPE_Q10 = MATHACL_CTL_QVAL_Q10,
191  DL_MATHACL_Q_TYPE_Q11 = MATHACL_CTL_QVAL_Q11,
193  DL_MATHACL_Q_TYPE_Q12 = MATHACL_CTL_QVAL_Q12,
195  DL_MATHACL_Q_TYPE_Q13 = MATHACL_CTL_QVAL_Q13,
197  DL_MATHACL_Q_TYPE_Q14 = MATHACL_CTL_QVAL_Q14,
199  DL_MATHACL_Q_TYPE_Q15 = MATHACL_CTL_QVAL_Q15,
201  DL_MATHACL_Q_TYPE_Q16 = MATHACL_CTL_QVAL_Q16,
203  DL_MATHACL_Q_TYPE_Q17 = MATHACL_CTL_QVAL_Q17,
205  DL_MATHACL_Q_TYPE_Q18 = MATHACL_CTL_QVAL_Q18,
207  DL_MATHACL_Q_TYPE_Q19 = MATHACL_CTL_QVAL_Q19,
209  DL_MATHACL_Q_TYPE_Q20 = MATHACL_CTL_QVAL_Q20,
211  DL_MATHACL_Q_TYPE_Q21 = MATHACL_CTL_QVAL_Q21,
213  DL_MATHACL_Q_TYPE_Q22 = MATHACL_CTL_QVAL_Q22,
215  DL_MATHACL_Q_TYPE_Q23 = MATHACL_CTL_QVAL_Q23,
217  DL_MATHACL_Q_TYPE_Q24 = MATHACL_CTL_QVAL_Q24,
219  DL_MATHACL_Q_TYPE_Q25 = MATHACL_CTL_QVAL_Q25,
221  DL_MATHACL_Q_TYPE_Q26 = MATHACL_CTL_QVAL_Q26,
223  DL_MATHACL_Q_TYPE_Q27 = MATHACL_CTL_QVAL_Q27,
225  DL_MATHACL_Q_TYPE_Q28 = MATHACL_CTL_QVAL_Q28,
227  DL_MATHACL_Q_TYPE_Q29 = MATHACL_CTL_QVAL_Q29,
229  DL_MATHACL_Q_TYPE_Q30 = MATHACL_CTL_QVAL_Q30,
231  DL_MATHACL_Q_TYPE_Q31 = MATHACL_CTL_QVAL_Q31,
232 } DL_MATHACL_Q_TYPE;
233 
235 typedef enum {
237  DL_MATHACL_OPSIGN_UNSIGNED = MATHACL_CTL_OPTYPE_UNSIGNED,
239  DL_MATHACL_OPSIGN_SIGNED = MATHACL_CTL_OPTYPE_SIGNED,
240 } DL_MATHACL_OPSIGN;
241 
245 typedef struct {
247  DL_MATHACL_OP_TYPE opType;
249  DL_MATHACL_OPSIGN opSign;
252  uint32_t iterations;
255  uint32_t scaleFactor;
257  DL_MATHACL_Q_TYPE qType;
258 } DL_MathACL_operationConfig;
259 
269 __STATIC_INLINE void DL_MathACL_enablePower(MATHACL_Regs *mathacl)
270 {
271  mathacl->GPRCM.PWREN =
272  MATHACL_PWREN_KEY_UNLOCK_W | MATHACL_PWREN_ENABLE_ENABLE;
273 }
274 
285 __STATIC_INLINE void DL_MathACL_disablePower(MATHACL_Regs *mathacl)
286 {
287  mathacl->GPRCM.PWREN =
288  MATHACL_PWREN_KEY_UNLOCK_W | MATHACL_PWREN_ENABLE_DISABLE;
289 }
290 
307 __STATIC_INLINE bool DL_MathACL_isPowerEnabled(MATHACL_Regs *mathacl)
308 {
309  return ((mathacl->GPRCM.PWREN & MATHACL_PWREN_ENABLE_MASK) ==
310  MATHACL_PWREN_ENABLE_ENABLE);
311 }
312 
318 __STATIC_INLINE void DL_MathACL_reset(MATHACL_Regs *mathacl)
319 {
320  mathacl->GPRCM.RSTCTL =
321  MATHACL_RSTCTL_RESETASSERT_ASSERT | MATHACL_RSTCTL_KEY_UNLOCK_W;
322 }
323 
333 __STATIC_INLINE bool DL_MathACL_isReset(const MATHACL_Regs *mathacl)
334 {
335  return (mathacl->GPRCM.STAT & MATHACL_STAT_RESETSTKY_MASK) ==
336  MATHACL_STAT_RESETSTKY_RESET;
337 }
338 
352 __STATIC_INLINE void DL_MathACL_enableSaturation(MATHACL_Regs *mathacl)
353 {
354  mathacl->CTL |= MATHACL_CTL_SATEN_ENABLE;
355 }
356 
365 __STATIC_INLINE void DL_MathACL_disableSaturation(MATHACL_Regs *mathacl)
366 {
367  mathacl->CTL &= ~(MATHACL_CTL_SATEN_MASK);
368 }
369 
379 __STATIC_INLINE bool DL_MathACL_isSaturationEnabled(
380  const MATHACL_Regs *mathacl)
381 {
382  return (
383  (mathacl->CTL & MATHACL_CTL_SATEN_MASK) == MATHACL_CTL_SATEN_ENABLE);
384 }
385 
394 __STATIC_INLINE void DL_MathACL_setOperandOne(
395  MATHACL_Regs *mathacl, uint32_t op)
396 {
397  mathacl->OP1 = op;
398 }
399 
408 __STATIC_INLINE void DL_MathACL_setOperandTwo(
409  MATHACL_Regs *mathacl, uint32_t op)
410 {
411  mathacl->OP2 = op;
412 }
413 
421 __STATIC_INLINE uint32_t DL_MathACL_getResultOne(const MATHACL_Regs *mathacl)
422 {
423  return mathacl->RES1;
424 }
425 
434 __STATIC_INLINE uint32_t DL_MathACL_getResultTwo(const MATHACL_Regs *mathacl)
435 {
436  return mathacl->RES2;
437 }
438 
447 __STATIC_INLINE uint32_t DL_MathACL_getStatus(const MATHACL_Regs *mathacl)
448 {
449  return mathacl->STATUS;
450 }
451 
461 __STATIC_INLINE void DL_MathACL_clearOverflowStatus(MATHACL_Regs *mathacl)
462 {
463  mathacl->STATUSCLR |= MATHACL_STATUSCLR_CLR_OVF_CLR;
464 }
465 
475 __STATIC_INLINE void DL_MathACL_clearUnderflowStatus(MATHACL_Regs *mathacl)
476 {
477  mathacl->STATUSCLR |= MATHACL_STATUSCLR_CLR_UF_CLR;
478 }
479 
489 __STATIC_INLINE void DL_MathACL_clearErrorStatus(MATHACL_Regs *mathacl)
490 {
491  mathacl->STATUSCLR |= MATHACL_STATUSCLR_CLR_ERR_CLR;
492 }
493 
500 __STATIC_INLINE void DL_MathACL_waitForOperation(const MATHACL_Regs *mathacl)
501 {
502  while ((mathacl->STATUS & MATHACL_STATUS_BUSY_MASK) ==
503  MATHACL_STATUS_BUSY_NOTDONE) {
504  ;
505  }
506 }
507 
526 void DL_MathACL_configOperation(MATHACL_Regs *mathacl,
527  const DL_MathACL_operationConfig *opConfig, uint32_t op1, uint32_t op2);
528 
537 __STATIC_INLINE void DL_MathACL_clearResultOne(MATHACL_Regs *mathacl)
538 {
539  mathacl->RES1 = 0;
540 }
541 
550 __STATIC_INLINE void DL_MathACL_clearResultTwo(MATHACL_Regs *mathacl)
551 {
552  mathacl->RES2 = 0;
553 }
554 
563 __STATIC_INLINE void DL_MathACL_clearResults(MATHACL_Regs *mathacl)
564 {
565  mathacl->RES1 = 0;
566  mathacl->RES2 = 0;
567 }
568 
569 #ifdef __cplusplus
570 }
571 #endif
572 
573 #endif /* __MSPM0_HAS_MATHACL__ */
574 
575 #endif /* ti_dl_mathacl__include */
576 
DriverLib Common APIs.
© Copyright 1995-2025, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale