0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种软件模拟内核复位的方法

中颖电子 来源:中颖电子 作者:中颖电子 2022-03-14 12:04 次阅读

1、关于复位

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

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

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

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

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

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

2523762e-a25f-11ec-952b-dac502259ad0.png

25358102-a25f-11ec-952b-dac502259ad0.png

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

2547efcc-a25f-11ec-952b-dac502259ad0.png

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

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

255b98a6-a25f-11ec-952b-dac502259ad0.png

25759544-a25f-11ec-952b-dac502259ad0.png

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

25973794-a25f-11ec-952b-dac502259ad0.png

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

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

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

25a92a30-a25f-11ec-952b-dac502259ad0.png

图3 向量表

25c18242-a25f-11ec-952b-dac502259ad0.png

图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地址存储的复位向量处运行。

25d51bfe-a25f-11ec-952b-dac502259ad0.png

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

4、总结

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

原文标题:中颖M0+内核芯片软件模拟内核复位的方法

文章出处:【微信公众号:中颖电子】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    47788

    浏览量

    409123
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39846
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309
  • 中颖电子
    +关注

    关注

    4

    文章

    169

    浏览量

    7221

原文标题:中颖M0+内核芯片软件模拟内核复位的方法

文章出处:【微信号:SINO_25181447,微信公众号:中颖电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Cortex-M内核软件复位方式

    这里只讨论内核软件复位方式。像STM32的备份域复位里面也有软件复位,则不在本文讨论范围。额外
    的头像 发表于 12-06 16:18 903次阅读
    Cortex-M<b class='flag-5'>内核</b>的<b class='flag-5'>软件</b><b class='flag-5'>复位</b>方式

    复位】Freescale ARM Cortex-M系列软复位的使用方法

    的时候,觉着这个东西真的很奇妙,MCU自己对自己进行复位,想想就觉着很有意思,或许直就是这种好奇的乐趣让我等屌丝对嵌入式的感情越陷越深吧,哈哈),即使对搞嵌入式的老鸟来说,软复位也是一种
    发表于 01-15 15:28

    一种基于MPC5634的多路模拟信号采集方法

    一种基于MPC5634的多路模拟信号采集方法,通过增强型直接内存访问(DMA)方式,自动在RAM和增强型队列式模数转换器eQADC模块之间转移数据,能高效和准确地完成对模拟信号的采集。
    发表于 04-13 06:04

    一种OLED显示屏显示汉字的硬件配置和软件设计方法

    OLED简介及特点一种OLED显示屏显示汉字的硬件配置和软件设计方法
    发表于 04-22 06:19

    给大家介绍一种软件修正方法

    本文介绍一种三轴正交型传感器正交性的软件修正方法
    发表于 05-07 06:53

    介绍一种Cortex-M内核中的精确延时方法

    本文介绍一种Cortex-M内核中的精确延时方法前言为什么要学习这种延时的方法?很多时候我们跑操作系统,就般会占用
    发表于 08-12 06:11

    如何去实现一种ThreadX内核框架的设计呢

    ThreadX内核模板框架是怎样去设计的?如何去实现一种ThreadX内核框架的设计呢?
    发表于 11-29 07:08

    一种systick不进中断的延时方法

    时会导致系统不稳定,并且systick中断的优先级还比般中断的优先级要高,这可能会导致其他中断程序被打断。这里给出一种systick不进中断的延时方法,精度比
    发表于 01-25 06:07

    一种快速移植OpenHarmony Linux内核方法

    移植概述本文面向希望将OpenHarmony移植到三方芯片平台硬件的开发者,介绍一种借助三方芯片平台自带Linux内核的现有能力,快速移植OpenHarmony到三方芯片平台的方法。移植到三方芯片
    发表于 06-28 14:33

    使用单片机实现软件复位方法详细说明

    单片机软复位有什么好的方法?如从机收到复位命令(软件命令),程序怎么使机器复位?虽然要使软件始终
    发表于 09-25 17:17 3次下载
    使用单片机实现<b class='flag-5'>软件</b><b class='flag-5'>复位</b>的<b class='flag-5'>方法</b>详细说明

    STM32复位来源 以及系统和内核复位区别

    STM32复位来源、以及系统和内核复位区别
    的头像 发表于 02-28 17:13 7163次阅读

    CM3(STM32) 内核复位与系统复位区别及应用

    CM3(STM32)内核复位与系统复位区别及应用
    的头像 发表于 03-20 09:43 4334次阅读
    CM3(STM32) <b class='flag-5'>内核</b><b class='flag-5'>复位</b>与系统<b class='flag-5'>复位</b>区别及应用

    复位操作《Cortex®-M0+等内核通用》

    《《《《《正文》》》》》软件复位就是用一系列指令来模仿硬件复位功能。现在arm越来越强大,就连苹果macbook都用上了arm架构,下面分享基于arm内核
    发表于 01-12 19:04 4次下载
    软<b class='flag-5'>复位</b>操作《Cortex®-M0+等<b class='flag-5'>内核</b>通用》

    stm32软复位 内核复位和系统复位

    内核复位:它会使STM32内核(Cortex-M)进行复位,而不会影响其外设,如GPIO、TIM、USART、SPI等这些寄存器的复位
    的头像 发表于 08-01 17:21 3322次阅读

    中颖M0+内核芯片软件模拟内核复位方法

    中颖M0+内核芯片软件模拟内核复位方法
    的头像 发表于 09-27 15:27 719次阅读
    中颖M0+<b class='flag-5'>内核</b>芯片<b class='flag-5'>软件</b><b class='flag-5'>模拟</b><b class='flag-5'>内核</b><b class='flag-5'>复位</b>的<b class='flag-5'>方法</b>