您的位置 首页 方案

单片机软件复位的两种办法解析

单片机软件复位的两种方法解析-Bdeadloop ; 该死循环保证后面的指令不可能被执行到这种复位的作用范围覆盖了整个CM3 处理器中,除了调试逻辑之外的所有角落,但是它不会影响到CM3 处理器外部的任何电路,所以单片机上的各片上外设和其它电路都不受影响。

依据《CM3威望攻略》,软件复位有两种办法:

1、经过置位NVIC中应用程序中止与复位操控寄存器(AIRCR)的VECTRESET位:

LDR R0, =0xE000ED0C ; NVIC AIRCR address

LDR R1, =0x05FA0001 ; 置位 VECTRESET位,前面的0x05FA是拜访钥匙

STR R1, [R0] ; 触发复位序列

deadloop

Bdeadloop ; 该死循环确保后边的指令不可能被履行到这种复位的效果规模掩盖了整个CM3 处理器中,除了调试逻辑之外的一切旮旯,可是它不会影响到CM3 处理器外部的任何电路,所以单片机上的各片上外设和其它电路都不受影响。
 

2、置位同一个寄存器的SYSRESETREQ位。这种复位会掩盖整个芯片上的电路。代码如下:

LDR R0, =0xE000ED0C ; NVIC AIRCR address

LDR R1, =0x05FA0004 ; 置位 SYSRESETREQ,前面的0x05FA是拜访钥匙

STR R1, [R0] ; 触发复位序列

deadloop

B deadloop ; 该死循环确保后边的指令不可能被履行到

这里有一个要注意的问题:从SYSRESETREQ 被置为有用,到复位发生器履行复位指令,往往会有一个延时。在此延时期间,处理器依然能够呼应中止恳求。但咱们的原意往往是要让此次履行到此为止,不要再做任何其它工作了。所以,最好在宣布复位恳求前,先把FAULTMASK 置位。需求加上这句:__set_FAULTMASK(1);//封闭一切中止3.5的库时,需求在函数中增加NVIC_SystemReset(); 这个函数在cor_cm3.h中,如下:

staTIc __INLINE void NVIC_SystemReset(void)

{

SCB-》AIRCR = ((0x5FA 《《 SCB_AIRCR_VECTKEY_Pos) |

(SCB-》AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

SCB_AIRCR_SYSRESETREQ_Msk);

__DSB();

while(1);

}

别的一些NVIC函数在misc.h中。
来历;21ic

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部