本实例通过通用定时器TIM3的定时中断来控制LED1的亮灭,LED1是直接连接到PE8上的。TIM3属于STM32F4处理器的内部资源,只需要软件设置即可正常工作。对于通用定时器而言,只有4个成员变量有效。设置定时器允许更新中断。只要使用TIM3的更新中断,寄存器的相应位便可使能更新中断。因为定时器也是一种中断,所以要通过操作NVIC为其设置中断优先级。在配置完后要开启定时器,通过TIM3_CR1的CEN位来设置。......
2023-11-21
Cortex-M4处理器中也有许多乘法和乘加指令。本节中,我们将讨论一些可供使用的乘和乘加指令。
1.MUL、MLA和MLS指令
MUL、MLA和MLS指令适用有符号或无符号32位操作数的乘法、乘加和乘减,结果取低32位。其语法如下:
其中:cond——一个可选的条件代码;
S——一个可选的后缀,如果指定S,则会更新运算结果的条件代码标记;
Rd——目标寄存器;
Rn、Rm——存放乘数的寄存器;
Ra——存放被加数和被减数的寄存器。
这3个指令的用法如下:
(1)MUL指令可将Rn和Rm中的值相乘,并将所得结果的低32位存入Rd。
(2)MLA指令可先将Rn和Rm中的值相乘,再将乘积与Ra中的值相加,最后将所得和的低32位存入Rd。
(3)MLS指令可将Rn和Rm中的值相乘,再从Ra中的值中减去乘积,最后将所得差的低32位存入Rd。
注意:不要将R15用作Rd、Rn、Rm或Ra。
2.UMULL、UMLAL、SMULL和SMLAL指令
UMULL、UMLAL、SMULL和SMLAL指令采用32位操作数及64位结果,表示累加器的有符号长乘法与无符号长乘法(可选择进行累加)。其语法如下:
其中:Op——UMULL、UMLAL、SMULL或SMLAL之一;
S——一个可选后缀,仅可用于ARM状态,如果指定S,则会更新运算结果的条件代码标记;
cond——一个可选的条件代码;
RdLo、RdHi——目标寄存器,对于UMLAL和SMLAL,它们还用于存放累加值。
注意:RdLo和RdHi必须为不同的寄存器,Rn、Rm是存放操作数的ARM寄存器。不要将R15用作RdHi、RdLo、Rn或Rm。
指令的用法如下:
(1)UMULL指令会将Rn和Rm中的值解释为无符号整数。它会先求这两个整数的乘积,然后将结果的低32位存入RdLo,高32位存入RdHi。
(2)UMLAL指令会将Rn和Rm中的值解释为无符号整数。它会先求这两个整数的乘积,然后将64位结果与RdHi和RdLo中所包含的64位无符号整数相加。
(3)SMULL指令会将Rn和Rm中的值解释为有符号整数的二进制补码。它会先求这两个整数的乘积,然后将结果的低32位存入RdLo,高32位存入RdHi。
(4)SMLAL指令会将Rn和Rm中的值解释为有符号整数的二进制补码。它先求这两个整数的乘积,然后将64位结果与RdHi和RdLo中的64位有符号整数相加。
3.SMULWy和SMLAWy指令
SMULWy和SMLAWy指令表示有符号扩大乘法和有符号扩大乘加,采用一个32位操作数和一个16位操作数,结果取高32位。其语法如下:
其中:<y>——B或T,B表示使用Rm的低16位(位[15:0]),T表示使用Rm的高16位(位[31:16]);
cond——一个可选的条件代码;
Rd——目标寄存器,Rn、Rm存放要相乘的值的寄存器;
Ra——存放要相加的值的寄存器。
指令的用法如下:
(1)SMULW<y>可将选自Rm的16位有符号整数与Rn中的有符号整数相乘,并将48位结果的高32位存入Rd。
(2)SMLAW<y>可将选自Rm的16位有符号整数与Rn中的有符号整数相乘,并将32位结果与Ra中的32位值相加,结果存入Rd。
4.SMLALxy指令
SMLALxy指令表示有符号乘加,采用16位操作数和64位累加器。其语法如下:
其中:<x>——B或T,B表示使用Rn的低16位(位[15:0]),T表示使用Rn的高16位(位[31:16]);
<y>——B或T,B表示使用Rm的低16位(位[15:0]),T表示使用Rm的高16位(位[31:16]);
cond——一个可选的条件代码;
RdHi、RdLo——目标寄存器,它们也存放累加值,RdHi和RdLo必须为不同的寄存器;
Rn、Rm——存放要相乘的值的寄存器。
指令的用法如下:SMLALxy可将选自Rm的16位有符号整数与选自Rn的16位有符号整数相乘,然后将32位乘积结果与RdHi和RdLo中的64位值相加。
5.SMUAD{X}和SMUSD{X}指令
SMUAD{X}和SMUSD{X}指令表示先做两次16位有符号乘法,然后将两个乘积相加或相减,可选择交换操作数的高半字和低半字。其语法如下:
其中:op——SMUAD或SMUSD之一;(www.chuimin.cn)
X——一个可选的参数,如果有X,则在相乘之前,会先交换第2个操作数的高半字和低半字;
cond——一个可选的条件代码;
Rd——目标寄存器;
Rn、Rm——存放操作数的寄存器。
指令的用法如下:
(1)SMUAD可先将Rn的低半字与Rm的低半字相乘,Rn的高半字与Rm的高半字相乘,然后将两个乘积相加,并将结果存入Rd。
(2)SMUSD可先将Rn的低半字与Rm的低半字相乘,Rn的高半字与Rm的高半字相乘,然后从第1个乘积中减去第2个乘积,并将差值存入Rd。
6.SMMUL、SMMLA和SMMLS指令
SMMUL、SMMLA和SMMLS指令表示有符号高字乘法、有符号高字乘加和有符号高字乘减。这些指令的操作数为32位,结果仅取高32位。其语法如下:
其中:R——一个可选的参数,如果存在R,则对结果进行舍入,否则将其截断;
cond——一个可选的条件代码;
Rd——目标寄存器;
Rn、Rm——存放操作数的寄存器;
Ra——存放被加数和被减数的寄存器。
指令的用法如下:
(1)SMMUL可先将Rn和Rm中的值相乘,然后将64位结果的高32位存入Rd。
(2)SMMLA可先将Rn和Rm中的值相乘,然后将Ra中的值与乘积的高32位相加,将结果存入Rd。
(3)SMMLS可先将Rn和Rm中的值相乘,然后将Ra中的值左移32位,从移位后的值中减去乘积,最后将差的高32位存入Rd。
如果指定了可选参数R,则在截取结果的高32位前,会先加上0x80000000,对结果的舍入有影响。
7.SMLAD和SMLSD指令
SMLAD和SMLSD指令表示两次16位有符号乘法,对乘积相加或相减并进行32位累加。其语法如下:
其中:op——SMLAD或SMLSD之一;
cond——一个可选的条件代码;
X——一个可选的参数,如果有X,则在相乘之前,会先交换第2个操作数的高半字和低半字;
Rd——目标寄存器;
Rn、Rm——存放操作数的寄存器;
Ra——存放累加操作数的寄存器。
指令的用法如下:
(1)SMLAD可先将Rn的低半字与Rm的低半字相乘,将Rn的高半字与Rm的高半字相乘,然后将两个乘积与Ra中的值相加,并将和存入Rd。
(2)SMLSD可先将Rn的低半字与Rm的低半字相乘,将Rn的高半字与Rm的高半字相乘,然后从第1个乘积中减去第2个乘积,接着将所得的差与Ra中的值相加,最后将结果存入Rd。
8.MIA、MIAPH和MIAxy指令
(1)MIA指令表示带内部累加的乘法(32位乘32位,40位累加)。
(2)MIAPH指令表示带内部累加的乘法,组合半字(16位乘16位两次,40位累加)。
(3)MIAxy指令表示带内部累加的乘法(16位乘16位,40位累加)。
其语法如下:
其中:cond——一个可选的条件代码;
Acc——内部累加器,标准名称为accx,其中x为0~n范围内的整数,n的值取决于处理器,在目前的处理器中它是0;
Rn、Rm——存放要相乘的值的ARM寄存器;
<x><y>——BB、BT、TB、TT中的一个。
指令的用法如下:
(1)MIA指令可先将Rn和Rm中的两个有符号整数值相乘,然后将乘积与Acc中的40位值相加。
(2)MIAPH指令可先将Rn和Rm的低半部有符号整数相乘,将Rn和Rm的高半部有符号整数相乘,然后将两个32位乘积与Acc中的40位值相加。
(3)MIAxy指令可先将选自Rs的16位有符号整数与选自Rm的16位有符号整数相乘,然后将32位乘积与Acc中的40位值相加。<x>==B表示使用Rn的低16位(位[15:0]),<x>==T表示使用Rn的高16位(位[31:16])。<y>==B表示使用Rm的低16位(位[15:0]),<y>==T表示使用Rm的高16位(位[31:16])。
有关嵌入式系统原理及应用:基于ARM Cortex-M4体系结构的文章
本实例通过通用定时器TIM3的定时中断来控制LED1的亮灭,LED1是直接连接到PE8上的。TIM3属于STM32F4处理器的内部资源,只需要软件设置即可正常工作。对于通用定时器而言,只有4个成员变量有效。设置定时器允许更新中断。只要使用TIM3的更新中断,寄存器的相应位便可使能更新中断。因为定时器也是一种中断,所以要通过操作NVIC为其设置中断优先级。在配置完后要开启定时器,通过TIM3_CR1的CEN位来设置。......
2023-11-21
在控制系统中经常遇到对某项任务需重复执行若干次的情况,这时可使用循环指令。S循环指令由循环开始指令FOR和循环结束指令NEXT组成。假设INIT是1,FINAL是5,每次执行FOR与NEXT之间的指令后,INDX的值加1,并进行INDX与FINAL的比较,如果INDX大于5,则循环终止,FOR和NEXT之间的指令被执行5次。在语句表中,循环指令的指令格式为FOR INDX,INIT,FINAL NEXT。......
2023-06-26
到目前为止,ARM微处理器及技术的应用已经深入各个领域。工业控制领域:作为32位的RISC架构,基于ARM核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,而且逐渐向低端微控制器应用领域扩展。此外,ARM在语音及视频处理上进行了优化,并获得了广泛支持,也对DSP的应用领域提出了挑战。下列产品均被授权采用ARM技术。除此以外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。......
2023-11-21
我们把编码表示的计算机可识别和处理的命令称为机器指令,或简称指令。为了说明方便,这里我们设计一组简单的机器指令。图3-2 机器指令格式4位操作码共可表示24=16个不同的机器指令。其余机器指令不再一一详细表示。因每个十六进制码表示4位二进制码,所以用十六进制码表示机器指令更为简洁。表3-1 机器指令举例计算机进行数据处理时,既要有程序,也要有数据。......
2023-11-18
传送指令将累加器1中的内容写入目的存储区中,累加器1的内容不变。表3-2为寄存器间接寻址的区域标识位如果要用寄存器指针访问一个字节、字或双字,必须保证指针中的位地址编号为0。......
2023-06-18
GBLS伪指令用于定义一个全局的字符串变量,并初始化为空。例如:4.寄存器列表定义伪指令RLIST格式:名称RLIST{寄存器列表}功能:RLIST伪指令可用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在ARM指令LDM/STM中使用。......
2023-11-21
以上介绍了直接确定事件概率的方法。计算复杂事件的概率常用概率的加法定理和乘法定理。设某河流某断面年最高洪水位为Zm,每年P=0.01。假设每年发生Zm>20.0m与否相互独立,试求今后两年内两岸至少被淹没一次的概率。于是利用式和式易知,A的对立事件的概率式可推广到任意多个互斥事件。于是利用式和式解法二由事件A,A1,A2的含义可知,表示“今后两年内两岸不被淹”,则。......
2023-06-21
接近开关的状态又由装在刨台下部的四个接近块接近的情况所决定,如图10-9a所示。各接近开关在不同时序中的状态如图10-9b所示。图中,接近开关被撞后的状态为“1”;复位后的状态为“0”。......
2023-06-24
相关推荐