"); //-->
硬件乘法器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位情况类似。
定点小数部分还有待研究~~
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
血脉通多功能治疗仪电路
电子科技大学--嵌入式系统应用开发技术30
精于微 智于芯:盛思锐微型化传感器亮相SENSOR CHINA 2025
电子科技大学--嵌入式系统应用开发技术32
这就是为什么安森美半导体公司 (ON) 跌幅超过大盘的原因
基于DSP的廉价多路网络视频服务器技术转让
USB规格混乱,留意“USB 2.0”
锂离子电池热失控的过程解析
利德牌LD-1型磁脉冲治疗仪电路
电子科技大学--嵌入式系统应用开发技术29
AI赋能的客户体验,助力加速全球化布局
在FireBeetle2ESP32P4开发板上使用ESP-IDF组件方式读取SHT30温湿度传感器
电路分析基础
所有的所有
如何移植EtherCAT Igh 基于米尔RK3576开发板
利用集电极-基极结电容的调频发生器电路
电子科技大学--嵌入式系统应用开发技术31
数字电压表设计教程之模数转换原理分析
IC设计入门
“浅薄”绝不该是中国程序员的性格
英国提供1000万英镑基金以推动下一代半导体开发
妙手AD-2100型治疗仪电路
“RISC-V商用落地加速营伙伴计划”在北京亦庄发布 聚力推动RISC-V产品方案从原型走向商用落地
电子科技大学--嵌入式系统应用开发技术33
儿童弱视双数显治疗仪电路
关于Tornado2.2支持的CPU种类的问题
常见硬盘电路原理分析
北邮电子电路课件(方维老师)
WB-74型微波电疗机电路
自制简易遥控开关电路