原创 MSP430x54x学习笔记--硬件乘法器MPY

2009-8-29 16:38 3807 9 11 分类: MCU/ 嵌入式

硬件乘法器MPY:(平台:MSP430F5418)


 


·16位乘法器使用方法:



     1.无符号数相乘 result="n1"*n2。第一操作数n1(16位无符号)赋给MPY寄存器,第二操作数n2(16位无符号)赋给OP2寄存器,赋值完成后,结果result(32位无符号)就可以在RESLO(低16位)和RESHI(高165位)中读取。
代码如下:
  MPY = n1;                            // Load first operand -unsigned mult
  OP2 = n2;                                // Load second operand


  result = RESHI;                           // Load RESHI word result
  result = (result<<16)|RESLO;              // Shift RESHI left and concat with


 


 2.无符号数乘加操作 result="n1"*n2+n3*n4。第一操作数n1(16位无符号)赋给MPY寄存器,第二操作数n2(16位无符号)赋给OP2寄存器,第三操作数n3(16位无符号)赋给MAC寄存器,第四操作数n4(16位无符号)赋给OP2寄存器,结果result(32位无符号)就可以在RESLO(低16位)和RESHI(高165位)中读取。SUMEXT寄存器中保存进位标志。
代码如下:
  MPY = n1;                             // Load first operand -unsigned mult
  OP2 = n2;                             // Load second operand
  MAC = n3;    // Load 3rd operand -unsigned mult
  OP2 = n4;    // Load 4rd operand
  result = RESHI;                           // Load RESHI word result
  result = (result<<16)|RESLO;              // Shift RESHI left and concat with


 


 3.有符号数相乘 result="n1"*n2。第一操作数n1(16位有符号)赋给MPYS寄存器,第二操作数n2(16位有符号)赋给OP2寄存器,赋值完成后,结果result(32位有符号)就可以在RESLO(低16位)、RESHI(高165位)和SUMEXT(符号)中读取。SUMEXT=0xffff则结果为负,SUMEXT=0则结果为正。
代码如下:
  MPYS = n1;                            // Load first operand -signed mult
  OP2 = n2;                                // Load second operand


  result = RESHI;                           // Load RESHI word result
  result = (result<<16)|RESLO;              // Shift RESHI left and concat with


 


 4.有符号乘加操作 result="n1"*n2+n3*n4。第一操作数n1(16位无符号)赋给MPY寄存器,第二操作数n2(16位无符号)赋给OP2寄存器,第三操作数n3(16位有符号)赋给MAC寄存器,第四操作数n4(16位有符号)赋给OP2寄存器,结果result(32位有符号)就可以在RESLO(低16位)和RESHI(高165位)中读取。SUMEXT寄存器中保存进位和正负标志。
代码如下:
  MPY = n1;                             // Load first operand -unsigned mult
  OP2 = n2;                             // Load second operand
  MACS = n3;
  OP2 = n4;
  result = RESHI;                           // Load RESHI word result
  result = (result<<16)|RESLO;              // Shift RESHI left and concat with


 


·32位乘法器使用方法:



 1.无符号相乘 result="n1"*n2。n1(32位无符号)低16位赋给MPY32L寄存器,n1高16位赋给MPY32H寄存器,n2(32位无符号)低16位赋给OP2L寄存器,n2高16位赋给OP2H寄存器,赋值完成后,结果result(64位无符号)就可以在RES0(低位), RES1, RES2 和 RES3(高位)中读取。
代码如下:
  MPY32L = 0x1234;                          // Load lower 16 bits of operand 1
  MPY32H = 0x1234;                          // Load upper 16 bits of operand 1


  OP2L = 0x5678;                            // Load lower 16 bits of operand 2
  OP2H = 0x5678;                            // Load upper 16 bits of operand 2
  result_L = RES1;
  result_L = (result_L<<16)|RES0;
  result_H = RES3;
  result_H = (result_H<<16)|RES2;


其他情况依次类推,与16位情况类似。


定点小数部分还有待研究~~

文章评论2条评论)

登录后参与讨论

用户377235 2014-9-25 10:11

不知浮点数的有没有呢

用户1677376 2011-3-16 10:32

文章很工整,看得和舒服。
相关推荐阅读
用户1453845 2011-09-08 19:40
stm8s参考手册上未说明的细节
1,字编程(Word programming)时,地址必须4字节对齐,从首地址开始,4字节连续装载后自动开始编程过程。说明:例如要写入u16(16位无符号整形)类型的数据0x1234到0x4005地址...
用户1453845 2011-01-26 09:23
ST-LINK 仿真器修复
    ST-LINK损坏,可能是无意将+12V电源线接到了仿真器TVCC引出线上了。表现的症状是能正常连接电脑,能出现可移动磁盘,但接到目标板时会造成目标板一直处于复位状态,仿真时弹出错误30001...
用户1453845 2009-08-25 14:28
MSP430F5418学习笔记----UCS时钟模块配置
引言:一年前开始用TI公司的x14x系列超低功耗单片机MSP430F149,感觉与普通的51系列相比,各个外设的功能强大了一些,使用起来没有很大的区别,但有一个重要的区别就是外部晶振需要正确配置才能使...
用户1453845 2009-07-11 01:04
"TI"杯电赛芯片ADS7886读取成功!
         一直为这个芯片的程序烦心,6个脚的芯片,无须设置基准电压,没有寄存器的设置,没有指令的输入,没有任何外围电路.        串行传输,两根控制线(CS和SCLK),一根数据线(SD...
用户1453845 2008-08-21 00:16
基于MSP430的红外遥控器解码
          遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的...
我要评论
2
9
关闭 站长推荐上一条 /2 下一条