您的位置 首页 观点

MCU软复位原理详解

MCU软复位原理详解-想要实现软复位,先给VRCTKEY赋个0x05FA,再想SYSRESETEQ写1即可实现软复位。

搭档Jicheng在其博客介绍了软复位的原理。我再自己收拾一遍以加深形象。

软复位的函数如下(用在IAR或许Keil里都能够),中心是对AIRCR寄存器进行操作。

void software_reset(void) { __DSB(); /* Ensure all outstanding memory accesses includedbuffered write are completed before reset */ SCB_AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_SHIFT) | SCB_AIRCR_SYSRESETREQ_MASK); __DSB(); /* Ensure compleTIon of memory access */ while(1); /* wait unTIl reset */ }

1void software_reset(void)

2{

3          __DSB();                                                           /* Ensure all outstanding memory accesses includedbuffered write are completed before reset */ 

4         SCB_AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_SHIFT) |

5                                         SCB_AIRCR_SYSRESETREQ_MASK);

6         __DSB(); /* Ensure compleTIon of memory access */

7         while(1); /* wait unTIl reset */

8}

AIRCR:Application Interrupt and Reset Control Register 

想要完结软复位,先给VRCTKEY赋个0x05FA,再想SYSRESETEQ写1即可完结软复位。

DSB指令即Data Synchronization Barrier(数据同步屏障),它是一种特别类型的内存屏障。 只要当此指令履行结束后,才会履行程序中位于此指令后的指令。 当满意以下条件时,此指令才会完结:  1)位于此指令前的一切显式内存拜访均完结。  2)位于此指令前的一切缓存、跳转猜测和 TLB 保护操作悉数完结。  别的和内存屏障相关的还有两个指令,为DMB和ISB。  DMB:Data Memory Barrier  ISB:Instruction Synchronization Barrier  详细细节能够参阅ARM®v7-M Architecture Reference Manual

当软复位发生后,能够经过寄存器RCM_SRS1(Reset Control Moudle_System Reset Status Register) 寄存器来判别。 

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部