MCU中的软复位

同事Jicheng在其博客 http://blog.chinaaet.com/detail/35920 介绍了软复位的原理。我再自己整理一遍以加深印象。

软复位的函数如下(用在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 */ 
}

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) 寄存器来判断。
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值