MSP430F5438 硬件乘法器

发布者:心满意足最新更新时间:2021-06-17 来源: eefocus关键字:MSP430F5438  硬件乘法器  寄存器 手机看文章 扫描二维码
随时随地手机看文章

简介:
1 , 32 位硬件乘法器介绍
2 , 32 位硬件乘法器操作
3 , 32 位硬件乘法器寄存器


32 位硬件乘法器是一个并行器件,而不是 CPU 内核的一部分。这也就意味着:它在工作时不会涉及 CPU 的活动。硬件乘法寄存器是可以通过 CPU 汇编指令的读或着写进行操作。


硬件乘法器特点:


○无符号乘法;


○ 有符号乘法;


○ 无符号乘加操作;


○ 由符号乘加操作;


○ 8 位,16 位,24 位,和 32 位操作数;


○ 整数乘法


○ 小数乘法


○ 8位和 16 位操作数与 16 位硬件乘法器兼容;


○ 8位和 24 位在没有符号位扩展的情况下,依然可以进行乘法操作;


硬件乘法器结构图:





硬件乘法器支持 8 位,16 位,24 位,32 位无符号操作数,有符号操作数,无符号乘、加操作和有符号乘、加操作。操作数的大小,可以通过对"字"或者"字节"的定义来确定。操作数的类型可以通过第一个操作数的写入进行选择。


硬件乘法器有两个 32 位操作数寄存器,操作数 OP1 和操作数 OP2,以及一个 64 位结果寄存器,而这个寄存器需要使用 RES0 和 RES3 寄存器。为了兼容 16 X 16 硬件乘法器,8 位或者 16 位操作数的结果需要使用 RESL0,RESL1 和 SUMNEXT这三个寄存器。RESL0 用于存储 16 X 16 结果的低“字”,RESL1 用于存储 16 X 16 结果的高“字”。以及 SUMEXT 用于存储结果的信息。


硬件乘法器操作:



表1总结了针对各种操作数可能的结果的每一个"字"。此表展示了两点,一个是 OP2L 的写入操作,另一个时 OP2H 的写入操作。而最糟糕的情况就是实际结果的可能性。


8 位或者 16 位操作数通常在 3 个 MCLK 周期内准备好,并且在写入 OP2 操作数后的下一个指令就可以读出结果。 如果使用了间接寻址方式进行操作,在结果计算出之前,一个 NOP指令是必需的。


在 OP2 操作数,或者 OP2H 进入 RES0 时 24 位或者 32 位的结果可以通过连续指令的方式进行读取。当时用间接寻址方式进行读结果操作时,一条 NOP 指令时必须的。


由于有一个 32 位第二个操作数的存在,OP2L,OP2H 寄存器都要被使用。又由于两个 16 位部分的被使用,从而使得结果变得复杂。


操作数寄存器OP1 :





OP1 操作数寄存器内置 12 个寄存器,如表所示,这些寄存器通常用来装载数据到乘法器,并且也用来选择乘法器模式。写入第一个操作数的“低字”到由乘法操作数类型所确定的地址的乘法操作,才能够开始操作。当写入一个双个“字”到后缀为:32H 的高字寄存器(此时假定 OP1 为 32 位宽)。对于写入 OP2 操作来说,最新的地址写入的优先级通常定义了第一个操作数的宽度。例如:如果 MPY32L 被 MPY32H 写入,则所有的 32 位都将被使用并且 OP1将被设置为:32 位。如果 MPY32H 被 MPY32L 写入,则乘法操作将不会使用 MPY32H,并且假设 MPY32L 将数据写入到 16 位宽的 OP1。


在 OP1 操作数用于连续的操作时,重复性乘法操作就可以被执行,而此时无需载入 OP1 操作数。


操作数寄存器OP2:



写入第二个操作数到 OP2 寄存器通常会初始化乘法操作。写入 OP2 将会使得一个 16 位宽的第二个操作数和 OP1 中的值开始进行选择操作。写入 OP2L 通常会使得一个 32 位宽的第二个操作数,和被要求写入高字的 OP2H 的乘法器开始进行操作选择。


对于 8 位,24 位操作数寄存器来说,可以通过字节指令进行操作。用一个字节指令进行的乘法器操作,在单独操作期间,乘法器模块将会自动的有一个符号字节的扩展。对于 24 位操作数来说,只有一个高字将会作为字节写入。如果 24 位操作数通过寄存器被定义了符号位扩展,那么作为符号位将会有一个低字的写入,因为寄存器定义了操作数是否有无符号。


一个 32 位操作数的高字在保持不变的条件下,当改变操作数的大小至 16 位,可以通过修改操作数的大小,或者写入操作数寄存器来实现。在 16 位操作执行器件,高字的内容忽略。


注意:


在乘法操作期间改变第一个或者第二个操作数,在默认的条件下,在选择乘法操作时,改变 OP1 或者 OP2,而所得的结果均不正确,因为那时操作数在正在改变。对 OP2 或者 OP2L 的写入,将会对任何正在进行的计算操作进行放弃;同时,也将开始进行一个新的操作。而此时没有计算出的结果对接下来的 MAC 和MACS 操作 不再可靠。


注意要避免 MPYDLYWRTEN 位被置 1。所有写入 MPY32 寄存器的操作通常会由于MPYDLY32=0 而延迟,直到 64 位结果准备好或者 MPYDLY32=1,且 32 位结果算出。


结果寄存器:





乘法操作结果通常都是 64 位宽。而这要使用 RES0,RES3 寄存器。使用一个单操作指令MPYS 或者 MACS,结果将会有符号位的扩展。在 MACS 操作之前如果结果寄存器载入初始值,用户的软件必须仔细关注所写入带符号位的 64 位值。


备注:


在乘法操作期间改变结果寄存器的值 在写入OP2 或者 OP2L 之后,直到初始化操作完成之前,结果寄存器不可以被用户软件修改。


除了 RES0 和 RES3。为了兼容 16 X 16 硬件乘法器,一个 8 位或者 16 位操作的 32 位结果通常使用 RESL0 和 RESL1 以及 SUMEXT。在这种情况下,结果的低位寄存器 RESL0 保存了计算结果的低16位,并且结果保存在寄存器RESH1高16为中。RES0和RES1等同于RESL0和 RESH1。


结果扩展寄存器 SUMEXT 的内容依靠乘法操作并且这些操作在表中以列出。如果所有的操作是 16 位宽或者小于 32 位的结果通常决定符号和 carry。如果操作数中的一个比 16 位数大,则结果将会是 64 位。


MPYC 位通常反映了乘法器的 Carry,而这也列在表中。因而,将会反映在第 33 位或者第 65 位的结果中。当然,前提是小数模式,和连续模式没有被选择.


MACS 下溢出和溢出:


乘法器在 MACS 模式中通常不会自动监测下溢出和溢出。例如: 工作于 16 位输入数据和 32 位结果中,使用 RESL0 和 RESH1,正数的范围的可能数字将在 0 到 07FFF FFFFh,并且负数的结果范围将在:0FFFF FFFFh 到 08000 0000h。


下溢出出现时两个负操作数的相加的计算结果范围在正数范围内。


当两个正操作数相加的结果为负数时,溢出的结果出现!


SUMEXT 寄存器包含了结果符号位(在上面的两种情况下),offffh 通常针对一个 32 的溢出,0000h 通常针对一个 32 位的下溢出。在 MPY32CTL0 中 MPYC 位能够被用来监测溢出状态。如果 Carry 寄存器不同于 SUMEXT 寄存器内容则溢出出现。用户软件必须能够处理这些状态。


乘法控制寄存器:



Reserved 位 15-10 保留


MPYDL32 位 9 延时写模式


0 写延时在 64 位结果(RES0-RES3)之前是有效的。


1 写延时在 32 位结果(RES0-RES3)之前是有效的。


MPYDLYWRTEN 位 8 延时写使能


64 位(MPYDLY32=0)或 32 位(MPYDLY32=1)结果准备好之前,所有写入到任何 MPY32 寄存器的操作会被延迟。


0 写是不延时


1 写是延时的


MPYOP2_32 位7 乘法器操作数2的位宽度


0 16位


1 32位


MPYOP1_32 位6 乘法器操作数1的位宽度


0 16位


1 32位


MPYMx 位5-4 乘法器模式


00 MPY 乘法


01 MPYS 有符号乘法


10 MAC 乘法积累


11 MACS 有符号乘法积累


MPYSA 位3 饱和模式


MPYFRAC 位2 小数模式


Reserved 位1 保留


MPYC 位0 乘法器的进位标志如果未选择小数模式或饱和模式时可以被看作是第


33或65位结果,因为当切换到小数模式或饱和模式时MPYC位不改变。


举例:


例如 配置 8 * 8 无符号累加硬件乘法

MPY = 0x12; //第一操作数

OP2 = 0x56; // 第二操作数

MAC = 0x12; // 16 位累加乘法器

OP2 = 0x56;


关键字:MSP430F5438  硬件乘法器  寄存器 引用地址:MSP430F5438 硬件乘法器

上一篇:MSP430集成开发环境之IAR
下一篇:基于MSP430和CC2500的USB无线数据采集系统

推荐阅读最新更新时间:2024-11-02 11:05

ARM汇编中lr(r14)寄存器的作用
lr(r14)的作用问题,这个lr一般来说有两个作用: 1.当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。 2.异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要返回的地址。 另外注意pc,在调试的时候显示的是当前指令地址,而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址,大家可以试一下用mov pc,pc,结果得到的是跳转两条指令,这个原因是由于arm的流水线造成的,预取两条指令的结果.
[单片机]
AD9833型高精度可编程波形发生器及其应用
1 引言 AD9833是ADI公司生产的一款低功耗,可编程波形发生器,能够产生正弦波、三角波、方波输出。波形发生器广泛应用于各种测量、激励和时域响应领域,AD9833无需外接元件,输出频率和相位都可通过软件编程,易于调节,频率寄存器是28位的,主频时钟为25MHz时,精度为0.1Hz,主频时钟为1MHz时,精度可以达到0.004Hz。 可以通过3个串行接口将数据写入AD9833,这3个串口的最高工作频率可以达到40MHz,易于与DSP和各种主流微控制器兼容。AD9833的工作电压范围为2.3V-5.5V。 AD9833还具有休眠功能,可使没被使用的部分休眠,减少该部分的电流损耗,例如,若利用AD9833输出作为时钟源,就可
[应用]
基于ARM单片机中的部分寄存器地址为什么会相差4
图中是LPC1114用户手册系统控制模块(SYSCON)中的部分寄存器,请看红色框内,地址相差0x4。为什么会相差4?很多初学者问我这个问题,高手就请绕过吧。 计算机、单片机都是以字节为单位进行存储的。这里的4就是4个字节的意思。上面列举的LPC1114是ARM Cortex-M0内核,STM32是ARM Cortex-M3内核,这两ARM单片机都是32位的。1个字节是8位,4个字节就是32位。32位单片机的寄存器基本上是32位的,8位单片机的寄存器基本上也是8位的。 打开你曾经用过的reg51.h文件,看看普通51单片机的寄存器地址映射,一共不到100个寄存器,几下就写完了。但是ARM单片机内部的模块非常多,寄存器也非常
[单片机]
基于ARM单片机中的部分<font color='red'>寄存器</font>地址为什么会相差4
LPC系列arm处理器UART控制寄存器
U0RBR:接收器缓存寄存器 访问时,先要设定 U0LCR 的除数锁存访问位(DLAB)为 0。因为,U0DLL 与U0RBR/U0THR 在同一地址上。 DLAB = 1 时,选择 U0DLL 和 U0DLM (U0DLM 和 U0IER 在同一个地址上); DLAB = 0 时,选择 U0RBR/U0THR 和 U0IER。 U0DLL 和 U0DLM: 构成一个 16 位的除数。 VPB时钟(pclk) 是产生波特率的时钟源,波特率时钟源必须是波特率的16倍,于是有: baud_rate = pclk/(16*设定的除数) UART0 的中断: 有 4 个中断,分别是:
[单片机]
TMS320VC5402和PC机的UART研究与设计
   1 引言   TMS320VC5402以其低成本、低功耗、资源多的特点在通信、控制领域得到了广泛的应用。片上集成了最大192kB存储空间(64kB RAM、64kB ROM、64kB I/O),具有时分多路串口TMD,2个缓冲串口BSP、8位并行主机接口HPI、可编程等待状态发生器等,完全可以满足数据处理及控制要求。基于 5402构建的应用系统中必不可少的是各种数据通信接口的设计。与并口相比,串行接口的特点是减少器件引脚数目,节省了硬件系统的体积,降低了接口设计的复杂性。实际应用中,各系统之间需要实现异步串行数据传输和通信,而DSP5402具有同步串口,与标准的异步串行接口不同,本文针对这种应用,设计实现了DSP5402和
[应用]
ATmega64 MCU控制寄存器MCUCR
ATmega64 MCU 控制寄存器包含了电源管理的控制位。 • Bit 5 – SE: 睡眠使能 为了使MCU 在执行SLEEP 指令后进入睡眠模式, SE 必须置位。为了确保进入睡眠模 式是程序员的有意行为,建议仅在SLEEP 指令的前一条指令置位SE。一旦唤醒立即清 除SE。 • Bits 4..2 – SM2..0: 睡眠模式选择位 如Table 17 所示,这些位用于选择具体的睡眠模式。 Note: 1. 仅在使用外部晶体或谐振器时Standby 模式和扩展的Standby 模式才可用。
[单片机]
ATmega64 MCU控制<font color='red'>寄存器</font>MCUCR
七种寻址方式(寄存器相对寻址方式)
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、D I)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,有下列规定: 若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS; 若有效地址用BP来指定,则其缺省的段寄存器为SS。 指令中给出的8位/16位偏移量用补码表示。在计算有效地址时,如果偏移量是8位,则进行符号扩展成16位。当所得的有效地址超过0FFFFH,则取其64K的模。 例:假设指令:MOV BX, ,在执行它时,(DS)=1000H,(SI)=2345H,内存单元12445H的内容为2715H,问该指令执行后
[单片机]
七种寻址方式(<font color='red'>寄存器</font>相对寻址方式)
【stm32f103】DMA应用memory to memory(寄存器版)
注释:此文档是利用DMA实现memory to memory的搬运 可能有的人会说直接用memcpy会更方便,确实是这样,但是此文章仅仅是DMA应用的例子,所以不采用memcpy的方法,并且此历程中不配置DMA中断 后续在系统讲解USART章节中再讲解DMA中断 一.DMA1所在总线 所以要先ENABLE DMA所在总线时钟 RCC- AHBENR = RCC_AHBENR_DMA2EN; 二.DMA寄存器 寄存器可以参考 参考手册,在这里不做详细讨论 三.编程步骤: 1.使能DMA时钟‘ 2.配置DMA外设地址(如果是memroy to meory也需要把memory的地址设置成外设地址,但是需要额外配置DMA
[单片机]
【stm32f103】DMA应用memory to memory(<font color='red'>寄存器</font>版)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved