"); //-->
重点:当时遇到一个安全芯片M4 核的,厂家资料比较少,其中就缺少软件复位功能。
解决的问题就是进入hardfault 后可以软件复位。直接用core_cm4.h 中的NVIC_SystemReset 就可以。
在嵌入式开发项目过程中,经常需要执行软件复位,基于ARM cortex-M4核的芯片,通过控制系统控制模块(System Control Block)的中断和复位寄存器可以实现设备的软件复位, 这种复位实现软件从开始运行,复位CPU的主要组件,除过调试模块。
寄存器介绍
基于ARM cortex-M4内核的芯片软件复位功能的实现是通过应用中断和复位控制寄存器(AIRCR)实现的,复位只与寄存器中的第2位,16~31位有关。下图是寄存器位的详细描述。


如果想写这个寄存器,必须先给VECTKEY域写0x5FA,负责寄存器将忽略写操作。SYSRESETREQ位,为系统复位请求位,写0,无复位请求,写1请求复位。这一位是只写位,读为0。
实现方案
知道了寄存器的定义后,如何通过软件来实现复位这一功能呢,有两种方案。
一种是直接调用ARM公司提供的core_cm4.h文件中的复位函数。对照寄存器,这个函数应该很好理解,ARM公司提供的是内联函数。
/** \brief System Reset
The function initiates a system reset request to reset the MCU.
*/
__STATIC_INLINE void NVIC_SystemReset(void)
{
__DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */
SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)|
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */
__DSB(); /* Ensure completion of memory access */
while(1); /* wait until reset */
}
这里主要说下__DSB(), DSB(Data Synchronization Barrier.)这里插入DSB的指令函数是为了确保内存操作访问的完成。
另一种方案是自己按照数据手册对寄存器的描述实现复位功能的函数。如果是自己写函数实现,建议也插入DSB指令函数确保内存访问安全。
#define SCB_AIRCR_VECTKEY_SHIFT 16
#define SCB_AIRCR_PRIGROUP_MASK 0x700u
#define SCB_AIRCR_SYSRESETREQ_MASK 0x4u
void System_vReset(void)
{
__DSB();/* Ensure all outstanding memory accesses included
buffered write are completed before reset */
SCB_AIRCR = ( (0x5FA << SCB_AIRCR_VECTKEY_SHIFT) |
SCB_AIRCR_PRIGROUP_MASK |
SCB_AIRCR_SYSRESETREQ_MASK);
__DSB(); /* Ensure completion of memory access */
while(1); /* wait until reset */
}
总结
由于芯片厂商的数据手册都是基于自己芯片的描述,涉及ARM内核的知识需要参考ARM官方文档,基于ARM cortex-M4内核的芯片,可以参考ARM官方文档DUI0553A_cortex_m4_dgug,飞思卡尔kv4xMCU的复位同样涉及到ARM cortex-M4内核的操作,在飞思卡尔参考手册上是没有详细信息的,需要参考ARM的官方文档,建议大家在学习ARM时候,需要熟悉下内核知识。 https://cloud.tencent.com/developer/article/1089441
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
由MAX4102/4103构成的视频/射频分配放大电路图
高手请指点:光刻机中的高速光纤数字传输技术的研究
理解发展哲理 领悟发展走向——关于硅技术的思考
dsp网络下载开发学习板
Protel99SE快速入门
汽车应用的同轴电缆供电基础知识
学习ARM的问题8
实用超声波遥控电路图
研究论文欺诈:一个日益严重的问题——工程学呢?
应对团体设计项目的挑战
为什么 Matter 1.4.2 更新很重要?
汽车PoC系统的浪涌保护需求
ProtelDXP指导教程
第一次深入真正的3D-IC设计
Protel 99 SE 新特性及用法
PROTEL技术大全---初学者必看
什么是注意力机制,它们在语音和音频处理中如何工作?
协作创新平台——IBM微电子和Power架构
人工智能在 EDA 工具中的作用的局限性
用于高端电机控制的新型瑞萨电子MCU系列
asss
MAX4104/4105/4304/4305低噪声低失真运算放大器电路
宽带运算放大器电路图
protel99se快捷键
恒忆 Krypto 密码访问
声控信号采集电路图
dsp下载原理图
PoC系统的诊断和监控技术
连接世界的SOC设计
闪存安全功能保护您的知识产权