2402|0

1668

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

中颖M0+内核芯片软件模拟内核复位的方法 [复制链接]

 

1、关于复位

 

说到复位,我们都不会陌生,对于一个MCU系统,复位电路是必不可少的一部分。复位的种类有很多:上电复位、低电压复位、引脚复位、看门狗复位、软件复位等等。本文说的内核复位是软件复位的一种。

 

Cortex-M3内核芯片提供了两种软件复位,分别是系统复位和内核复位,而Cortex-M0+内核芯片只提供了系统复位,内核复位不支持,只能软件模拟。

 

2、系统复位和内核复位的区别

 

内核复位:只复位内核处理器,而不复位外设如GPIO、Timer、UART、Flash等的寄存器。

 

系统复位:既复位内核处理器,又复位外设寄存器。

 

下面分别是Cortex-M3和Cortex-M0+的应用程序中断及复位控制寄存器(AIRCR)配置图,从图中可以看出,置位AIRCR寄存器中的SYSRESETREQ位(位偏移:2),即可实现系统复位;置位VECTRESET位(位偏移:0),即可实现内核复位。Cortex-M0+中没有VECTRESET的定义,故不支持内核复位。本文会介绍一种软件模拟内核复位的方法。

 

图1  Cortex-M3 应用程序中断及复位控制寄存器(AIRCR)

 

图2  Cortex-M0+应用程序中断及复位控制寄存器(AIRCR)

 

系统复位在ARM官方的库文件中都有提供相关的函数,用户直接调用即可。官方给出的系统复位函数定义如下所示:

 

 

内核复位在ARM官方的库文件中没有相关的函数,需要用户自行编写。Cortex-M3的内核复位函数编写如下:

 

3、软件模拟内核复位的方法

 

内核复位在某些特殊应用下,如OTA升级时,往往会被用到。此时,不希望复位外设,只需要程序从头开始跑即可。以中颖M0+内核芯片为例,在启动配置章节有介绍到,用软件模拟内核复位来使运行在引导区的程序改由从用户代码区启动。

 

中颖M0+内核芯片从复位中退出时,会首先读取向量表中(从地址0x00000000开始,见图3)的头两个字。第一个字为主栈指针(MSP)的初始值,而第二个字则为决定程序执行起始地址(复位处理)的复位向量。该复位流程可以用软件去模拟,图4是软件模拟内核复位的C语言源码。

 

图3 向量表

 

 

图4 软件模拟内核复位的C语言源码

 

图4源码中,第1行定义了函数指针类型,取名为“FUNC_CALL”;第2,3行申明了两个变量,分别是无符号整型变量main_pgm和函数指针类型变量func;第5~20行定义了一个函数,取名为__NVIC_CoreReset(),该函数可以实现对MSP装载复位初始值,并使程序跳转到复位向量处开始执行,进而模拟了内核复位。

函数__NVIC_CoreReset()中,第9行调用了ARM官方库文件中的函数(见下图),将存储器0x0地址处的值赋给了寄存器MSP,实现了MSP复位初始值的装载;第10行是将存储器0x4地址处的值赋给变量main_pgm;第11行是将变量main_pgm强制转换成函数指针类型并赋给func;第12行调用函数func(),最终使程序跳转到了存储器0x4地址存储的复位向量处运行。

 

 

用户需要内核复位时,在程序中直接调用图4中定义的函数__NVIC_CoreReset()即可。

 

4、总结

 

综上所述,本文提供了一种软件模拟内核复位的方法,通过调用自定义函数__NVIC_CoreReset()即可实现内核复位,给出了该函数的C语言源码,用户直接在自己程序中加载即可使用。该方法弥补了CortexM0+芯片没有自带内核复位功能的不足。

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表