48 #ifndef ti_dl_dl_mathacl__include 49 #define ti_dl_dl_mathacl__include 54 #include <ti/devices/msp/msp.h> 57 #ifdef __MSPM0_HAS_MATHACL__ 72 #define DL_MATHACL_STATUS_UNDERFLOW (MATHACL_STATUS_UF_UNDERFLOW) 77 #define DL_MATHACL_STATUS_UF_MASK (MATHACL_STATUS_UF_MASK) 82 #define DL_MATHACL_STATUS_OVERFLOW (MATHACL_STATUS_OVF_OVERFLOW) 87 #define DL_MATHACL_STATUS_OVF_MASK (MATHACL_STATUS_OVF_MASK) 92 #define DL_MATHACL_STATUS_ERR_DIVBY0 (MATHACL_STATUS_ERR_DIVBY0) 97 #define DL_MATHACL_STATUS_ERR_MASK (MATHACL_STATUS_ERR_MASK) 102 #define DL_MathACL_startSinCosOperation(MATHACL, config, op) DL_MathACL_configOperation(MATHACL, config, op, 0) 107 #define DL_MathACL_startArcTan2Operation(MATHACL, config, x, y) DL_MathACL_configOperation(MATHACL, config, x, y) 112 #define DL_MathACL_startArcTanOperation(MATHACL, config, x) DL_MathACL_configOperation(MATHACL, config, x, 0) 117 #define DL_MathACL_startDivOperation(MATHACL, config, num, den) DL_MathACL_configOperation(MATHACL, config, num, den) 122 #define DL_MathACL_startSqrtOperation(MATHACL, config, sqrt) DL_MathACL_configOperation(MATHACL, config, sqrt, 0) 127 #define DL_MathACL_startMpyOperation(MATHACL, config, multicand, multiplier) DL_MathACL_configOperation(MATHACL, config, multicand, multiplier) 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;
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,
237 DL_MATHACL_OPSIGN_UNSIGNED = MATHACL_CTL_OPTYPE_UNSIGNED,
239 DL_MATHACL_OPSIGN_SIGNED = MATHACL_CTL_OPTYPE_SIGNED,
247 DL_MATHACL_OP_TYPE opType;
249 DL_MATHACL_OPSIGN opSign;
255 uint32_t scaleFactor;
257 DL_MATHACL_Q_TYPE qType;
258 } DL_MathACL_operationConfig;
269 __STATIC_INLINE
void DL_MathACL_enablePower(MATHACL_Regs *mathacl)
271 mathacl->GPRCM.PWREN =
272 MATHACL_PWREN_KEY_UNLOCK_W | MATHACL_PWREN_ENABLE_ENABLE;
285 __STATIC_INLINE
void DL_MathACL_disablePower(MATHACL_Regs *mathacl)
287 mathacl->GPRCM.PWREN =
288 MATHACL_PWREN_KEY_UNLOCK_W | MATHACL_PWREN_ENABLE_DISABLE;
307 __STATIC_INLINE
bool DL_MathACL_isPowerEnabled(MATHACL_Regs *mathacl)
309 return ((mathacl->GPRCM.PWREN & MATHACL_PWREN_ENABLE_MASK) ==
310 MATHACL_PWREN_ENABLE_ENABLE);
318 __STATIC_INLINE
void DL_MathACL_reset(MATHACL_Regs *mathacl)
320 mathacl->GPRCM.RSTCTL =
321 MATHACL_RSTCTL_RESETASSERT_ASSERT | MATHACL_RSTCTL_KEY_UNLOCK_W;
333 __STATIC_INLINE
bool DL_MathACL_isReset(
const MATHACL_Regs *mathacl)
335 return (mathacl->GPRCM.STAT & MATHACL_STAT_RESETSTKY_MASK) ==
336 MATHACL_STAT_RESETSTKY_RESET;
352 __STATIC_INLINE
void DL_MathACL_enableSaturation(MATHACL_Regs *mathacl)
354 mathacl->CTL |= MATHACL_CTL_SATEN_ENABLE;
365 __STATIC_INLINE
void DL_MathACL_disableSaturation(MATHACL_Regs *mathacl)
367 mathacl->CTL &= ~(MATHACL_CTL_SATEN_MASK);
379 __STATIC_INLINE
bool DL_MathACL_isSaturationEnabled(
380 const MATHACL_Regs *mathacl)
383 (mathacl->CTL & MATHACL_CTL_SATEN_MASK) == MATHACL_CTL_SATEN_ENABLE);
394 __STATIC_INLINE
void DL_MathACL_setOperandOne(
395 MATHACL_Regs *mathacl, uint32_t op)
408 __STATIC_INLINE
void DL_MathACL_setOperandTwo(
409 MATHACL_Regs *mathacl, uint32_t op)
421 __STATIC_INLINE uint32_t DL_MathACL_getResultOne(
const MATHACL_Regs *mathacl)
423 return mathacl->RES1;
434 __STATIC_INLINE uint32_t DL_MathACL_getResultTwo(
const MATHACL_Regs *mathacl)
436 return mathacl->RES2;
447 __STATIC_INLINE uint32_t DL_MathACL_getStatus(
const MATHACL_Regs *mathacl)
449 return mathacl->STATUS;
461 __STATIC_INLINE
void DL_MathACL_clearOverflowStatus(MATHACL_Regs *mathacl)
463 mathacl->STATUSCLR |= MATHACL_STATUSCLR_CLR_OVF_CLR;
475 __STATIC_INLINE
void DL_MathACL_clearUnderflowStatus(MATHACL_Regs *mathacl)
477 mathacl->STATUSCLR |= MATHACL_STATUSCLR_CLR_UF_CLR;
489 __STATIC_INLINE
void DL_MathACL_clearErrorStatus(MATHACL_Regs *mathacl)
491 mathacl->STATUSCLR |= MATHACL_STATUSCLR_CLR_ERR_CLR;
500 __STATIC_INLINE
void DL_MathACL_waitForOperation(
const MATHACL_Regs *mathacl)
502 while ((mathacl->STATUS & MATHACL_STATUS_BUSY_MASK) ==
503 MATHACL_STATUS_BUSY_NOTDONE) {
526 void DL_MathACL_configOperation(MATHACL_Regs *mathacl,
527 const DL_MathACL_operationConfig *opConfig, uint32_t op1, uint32_t op2);
537 __STATIC_INLINE
void DL_MathACL_clearResultOne(MATHACL_Regs *mathacl)
550 __STATIC_INLINE
void DL_MathACL_clearResultTwo(MATHACL_Regs *mathacl)
563 __STATIC_INLINE
void DL_MathACL_clearResults(MATHACL_Regs *mathacl)