新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430x54x學習筆記--硬件乘法器MPY

        MSP430x54x學習筆記--硬件乘法器MPY

        作者: 時間:2016-11-28 來源:網絡 收藏
        硬件乘法器MPY:(平臺:MSP430F5418)

        ·16位乘法器使用方法:

        本文引用地址:http://www.104case.com/article/201611/322783.htm

        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位情況類似。


        定點小數部分還有待研究~~



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 沙雅县| 遂平县| 德钦县| 邢台县| 临高县| 武强县| 屏山县| 花莲市| 清流县| 敦煌市| 辽中县| 颍上县| 三穗县| 庆城县| 灵武市| 张家川| 广河县| 耿马| 错那县| 特克斯县| 南郑县| 兴文县| 桐城市| 丰宁| 东源县| 大石桥市| 平谷区| 丹江口市| 广德县| 酒泉市| 济宁市| 永寿县| 建昌县| 灌阳县| 彩票| 新巴尔虎右旗| 青龙| 黄骅市| 永丰县| 天门市| 上思县|