同事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) 寄存器来判断。
无电源收音机的制作方法
影响SMT回流焊质量的因素有哪些呢?
相约DTCC 2023!星瑞格邀您共飨数据库技术盛宴
永磁电机退磁的原因以及预防措施
机器人产业正面临转型的关键年
MCU软复位原理详解
亿境全力出击 打造全系列VR硬件设备
比特币闪电钱包开发商Zap发布了一款名为Strike的应用程序
人工智能爱酱在哪下载
目前三大运营商哪家的高端资费更实惠
小米路由器AX6000正式上架京东开售
首次航母下水后的引发问题!我国的第一艘航母辽宁舰加满一次油得多少钱呢?
铠侠首款PCIe 4.0 SSD上市 最高容量达30.72TB
强强合作国通与大唐储存战略合作促进国产化SSD加快前进
德国海曼heimann MEMS皮拉尼真空传感器介绍
在工业4.0中大显身手的智能工业计算机
一加5最新消息:一加5发布会海报曝光确定6月15日上市发布,处理器、配置、摄像、续航、价格抢先看
Apple TV 4K拆解,与上一代 Apple TV大相径庭
任正非表示5G只是一个工具它本身就没有安全问题
如何在全新的AI时代取得胜利