打印
[技术问答]

华大MCU如何实现软件复位

[复制链接]
806|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2021-1-25 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
华大MCU如何实现软件复位


产品在设计中某些状态下需要MCU进行复位,华大MCU包含了7个复位信号来源,每个复位信号都可以让 CPU 重新运行,绝大多数寄存器会被复位到复位值,程序计数器 PC 会被复位指向 00000000


● POR/BOR 复位(VCC 域及 Vcore域)
●外部 Reset PAD 复位
●WDT 复位
●PCA 复位
●LVD 复位
●Cortex-M0+ SYSRESETREQ 软件复位
●Cortex-M0+ LOCKUP 硬件复位
               




每个复位源由相应的复位标志进行指示。复位标志均由硬件置位,需要用户软件清零。芯片复位时,如果查询到 Reset_flag. POR15V 或 Reset_flag. POR5V 为 1 则为上电复位。上电复位时用户程序应当将寄存器 Reset_flag 清零,则下一次复位时可通过 Reset_flag的相关比特判断复位来源。


这些复位源中Cortex-M0+ SYSRESETREQ 软件复位为主动复位,工程师可以在程序中根据自己的需要进行操作,其它的复位为被动复位,当运行的条件满足时会自动复位。下面介绍下如何实现软件复位。




软件复位的函数包涵在core_cm0plus.h头文件中,形式为:


#define NVIC_SystemReset    __NVIC_SystemReset函数的原型为:
__STAtiC_INLINE void __NVIC_SystemReset(void){


__DSB();   /* Ensure all outstanding memory accesses included


              buffered write are completed before reset */


SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |


             SCB_AIRCR_SYSRESETREQ_Msk);


__DSB();                 /* Ensure completion of memory access */




for(;;)                   /* wait until reset */
{
__NOP();   }
}


工程建立好后,工程师在使用的时候直接调用就可以。

使用特权

评论回复
沙发
xinxianshi| | 2021-2-23 23:03 | 只看该作者
这是内核的功能了,跟厂家无关了。

使用特权

评论回复
板凳
xinxianshi| | 2021-2-23 23:04 | 只看该作者
多谢分享经验啊。

使用特权

评论回复
地板
勇敢的大白菜| | 2021-2-24 09:36 | 只看该作者
这种方式确实不错的,很棒的。

使用特权

评论回复
5
玛尼玛尼哄| | 2021-2-24 22:57 | 只看该作者
运行复位的指令。

使用特权

评论回复
6
rentonissac| | 2021-4-8 14:20 | 只看该作者
绝大部分寄存器?还有什么不会复位?

使用特权

评论回复
7
七毛钱| | 2021-5-11 16:13 | 只看该作者
这种方式确实不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

970

主题

2980

帖子

7

粉丝