硬件乘除法器是一个通过内总线与CPU相连的16位外围模块。MSP430单片机可以在内部改变CPU结构和指令的情况下增加功能,这种结构特别适用于对运算速度要求很严格的情况,硬件乘法器大大提高了MSP430单片机的数据处理能力,其支持的运算如下:
无符号乘法(MPY)
有符号乘法 (MPYS)
无符号乘法 (MAC)
有符号乘法 (MACS)
16X16位、8X16、16X8、8X8位。
操作数寄存器:
OP1 (第1操作数)
OP2 (第2操作数)
第一个操作数可源于MPY、MPYS、MAC和MACS四个寄存器,它们能确定乘法的类型。当第二个操作数写入后,相应的乘法操作立即执行,一般需4个周期。
结果寄存器:
RESHI(结果高字节寄存器)
RESLO(结果低字节寄存器)
SUMEXT(结果扩展寄存器)
寄存器RESHI和RESLO的内容为两个16位相乘的32位乘积结果。而寄存器SUMEXT的内容由执行的乘法模式及乘积结果决定。
MPY 操作数1 指示操作数为无符号数相乘
MPYS 操作数1 指示操作数为有符号数相乘
MAC 操作数1 指示操作数为有符号数累加
OP_2 操作数2
RESLO 结果低字节寄存器
RESHI 结果高字节寄存器
SUMEXT 结果扩展寄存器
以上寄存器均是16位的字寄存器,在使用时,用户可以以字节操作或字操作,这样就开成了不同位数乘法的4种运算。
步骤:
写第一操作数OP1,来源于MPY、MPYS、MAC和MACS四个寄存器。
写第二操作数OP2,写入完毕,乘法运算开始进行。
保存结果,存放在RESHI、RESLO及SUMEXT中。
第二个操作数写入完毕乘法就开始。一般在取出结果前插入1-2条指令,以保证足够的运算时间。在一个单片机中只有一个硬件乘法器,若遇到多处使用,须在每一次用完之后再进行下次运算。
结果进行何种运算,只要操作数类型为8X8型,操作过程就要使用寄存器的绝对地址,而不能使用符号形式。寄存器MPY,MPYS、MAC、MACS和OP2的地址分别为:0130H,0132H,0134H,0136H, 0138H。
还是简单的例程:
两组无符号数相乘结果放在另一个数组中
#include "msp430x16x.h"
unsigned long int Result[7];
unsigned int Data1[7];
unsigned int Data2[7];
unsigned char i;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
for(i=0;i<7;i++)
{
Data1 = 250 * i;
Data2 = 130 * i;
}
for(i=0;i<7; i++)
{
MPY = Data1;
OP2 = Data2;
_NOP();
_NOP();
_NOP();
_NOP();
Result = RESHI;
Result <<=16;
Result += RESLO;
}
_NOP();
}