您的位置 首页 培训

MSP430x54x学习笔记–硬件乘法器MPY

硬件乘法器MPY:(平台:MSP430F5418)·16位乘法器使用方法:1无符号数相乘result=n1*n2。第一操作数n1(16位无符号)赋给MPY寄存器,第

硬件乘法器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位状况相似。

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/256132.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部