16 #ifdef __MSP430_HAS_MPY32__
21 void MPY32_setWriteDelay (uint16_t writeDelaySelect)
23 HWREG16(MPY32_BASE + OFS_MPY32CTL0) &= ~(MPYDLY32 + MPYDLYWRTEN);
24 HWREG16(MPY32_BASE + OFS_MPY32CTL0) |= writeDelaySelect;
27 void MPY32_enableSaturationMode (
void)
29 HWREG8(MPY32_BASE + OFS_MPY32CTL0_L) |= MPYSAT;
32 void MPY32_disableSaturationMode (
void)
34 HWREG8(MPY32_BASE + OFS_MPY32CTL0_L) &= ~(MPYSAT);
37 uint8_t MPY32_getSaturationMode (
void)
39 return (
HWREG8(MPY32_BASE + OFS_MPY32CTL0_L) &(MPYSAT));
42 void MPY32_enableFractionalMode (
void)
44 HWREG8(MPY32_BASE + OFS_MPY32CTL0_L) |= MPYFRAC;
47 void MPY32_disableFractionalMode (
void)
49 HWREG8(MPY32_BASE + OFS_MPY32CTL0_L) &= ~(MPYFRAC);
52 uint8_t MPY32_getFractionalMode (
void)
54 return (
HWREG8(MPY32_BASE + OFS_MPY32CTL0_L) &(MPYFRAC));
57 void MPY32_setOperandOne8Bit (uint8_t multiplicationType,
60 HWREG8(MPY32_BASE + OFS_MPY + multiplicationType) = operand;
63 void MPY32_setOperandOne16Bit (uint8_t multiplicationType,
66 HWREG16(MPY32_BASE + OFS_MPY + multiplicationType) = operand;
69 void MPY32_setOperandOne24Bit (uint8_t multiplicationType,
72 multiplicationType <<= 1;
73 HWREG16(MPY32_BASE + OFS_MPY32L + multiplicationType) = operand;
74 HWREG8(MPY32_BASE + OFS_MPY32H + multiplicationType) = (operand >> 16);
77 void MPY32_setOperandOne32Bit (uint8_t multiplicationType,
80 multiplicationType <<= 1;
81 HWREG16(MPY32_BASE + OFS_MPY32L + multiplicationType) = operand;
82 HWREG16(MPY32_BASE + OFS_MPY32H + multiplicationType) = (operand >> 16);
85 void MPY32_setOperandTwo8Bit (uint8_t operand)
87 HWREG8(MPY32_BASE + OFS_OP2) = operand;
90 void MPY32_setOperandTwo16Bit (uint16_t operand)
92 HWREG16(MPY32_BASE + OFS_OP2) = operand;
95 void MPY32_setOperandTwo24Bit (uint32_t operand)
97 HWREG16(MPY32_BASE + OFS_OP2L) = operand;
98 HWREG8(MPY32_BASE + OFS_OP2H) = (operand >> 16);
101 void MPY32_setOperandTwo32Bit (uint32_t operand)
103 HWREG16(MPY32_BASE + OFS_OP2L) = operand;
104 HWREG16(MPY32_BASE + OFS_OP2H) = (operand >> 16);
107 uint64_t MPY32_getResult (
void)
111 result =
HWREG16(MPY32_BASE + OFS_RES0);
112 result += ((uint64_t)
HWREG16(MPY32_BASE + OFS_RES1) << 16);
113 result += ((uint64_t)
HWREG16(MPY32_BASE + OFS_RES2) << 32);
114 result += ((uint64_t)
HWREG16(MPY32_BASE + OFS_RES3) << 48);
118 uint16_t MPY32_getSumExtension (
void)
120 return (
HWREG16(MPY32_BASE + OFS_SUMEXT) );
123 uint16_t MPY32_getCarryBitValue (
void)
125 return (
HWREG16(MPY32_BASE + OFS_MPY32CTL0) | MPYC);
127 void MPY32_clearCarryBitValue (
void)
129 HWREG16(MPY32_BASE + OFS_MPY32CTL0) &= ~MPYC;
131 void MPY32_preloadResult (uint64_t result)
133 HWREG16(MPY32_BASE + OFS_RES0) = (result & 0xFFFF);
134 HWREG16(MPY32_BASE + OFS_RES1) = ((result >> 16) & 0xFFFF);
135 HWREG16(MPY32_BASE + OFS_RES2) = ((result >> 32) & 0xFFFF);
136 HWREG16(MPY32_BASE + OFS_RES3) = ((result >> 48) & 0xFFFF);