[原创] MSP430学习笔记之八:硬件乘法器

ddllxxrr   2011-3-13 14:39 楼主

 

 

硬件乘除法器是一个通过内总线与CPU相连的16位外围模块。MSP430单片机可以在内部改变CPU结构和指令的情况下增加功能,这种结构特别适用于对运算速度要求很严格的情况,硬件乘法器大大提高了MSP430单片机的数据处理能力,其支持的运算如下:

无符号乘法(MPY

有符号乘法 MPYS

无符号乘法 MAC

有符号乘法 MACS

16X16位、8X1616X88X8位。

 

操作数寄存器:

OP1 (第1操作数)

OP2  (第2操作数)

第一个操作数可源于MPYMPYSMACMACS四个寄存器,它们能确定乘法的类型。当第二个操作数写入后,相应的乘法操作立即执行,一般需4个周期。

结果寄存器:

RESHI(结果高字节寄存器)

RESLO(结果低字节寄存器)

SUMEXT(结果扩展寄存器)

寄存器RESHIRESLO的内容为两个16位相乘的32位乘积结果。而寄存器SUMEXT的内容由执行的乘法模式及乘积结果决定。

 

MPY   操作数1  指示操作数为无符号数相乘

MPYS  操作数1  指示操作数为有符号数相乘

MAC   操作数1  指示操作数为有符号数累加

OP_2   操作数2

RESLO  结果低字节寄存器

RESHI   结果高字节寄存器

SUMEXT 结果扩展寄存器

以上寄存器均是16位的字寄存器,在使用时,用户可以以字节操作或字操作,这样就开成了不同位数乘法的4种运算。

 

步骤:

 

写第一操作数OP1,来源于MPYMPYSMACMACS四个寄存器。

写第二操作数OP2,写入完毕,乘法运算开始进行。

保存结果,存放在RESHIRESLOSUMEXT中。

 

第二个操作数写入完毕乘法就开始。一般在取出结果前插入1-2条指令,以保证足够的运算时间。在一个单片机中只有一个硬件乘法器,若遇到多处使用,须在每一次用完之后再进行下次运算。

结果进行何种运算,只要操作数类型为8X8型,操作过程就要使用寄存器的绝对地址,而不能使用符号形式。寄存器MPYMPYSMACMACSOP2的地址分别为:0130H0132H0134H0136H, 0138H


  msp4309.JPG

 

还是简单的例程:

 

两组无符号数相乘结果放在另一个数组中

 

#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();
}

http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复评论 (7)

一直在关心版主连载的笔记
点赞  2011-3-13 19:06
这个模块我始终都没用过
点赞  2011-3-17 21:07
这种琢磨此模块,多谢分享。
点赞  2011-7-28 15:01

收集中。。。。。。,很好的学习资料,谢谢LZ

点赞  2011-8-16 11:53

求教

求教乘累加如何使用啊?
点赞  2012-5-12 10:03
刚好在研究硬件乘法器,很好的文章,哈哈
点赞  2012-6-20 10:59
很好的资料,多谢楼主~
点赞  2012-7-28 16:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复