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

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

3天内不再提示

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

jf_pJlTbmA9 来源:中颖电子(作者:余为国 作者:中颖电子(作者: 2023-09-27 15:27 次阅读

1、关于复位

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

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

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

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

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

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

wKgZomUDzuqANWvTAABV6fXjpz4116.png

wKgaomUDzu2ANPFHAACfwo1-wY8396.png

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

wKgaomUDzu6AK1MNAABQIeUX0b8085.png

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

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

wKgaomUDzvCATXbHAAB4W0yJjhI204.png

wKgZomUDzvGAZR7cAABvr6bWZmk645.png

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

wKgZomUDzvKAa-SiAAA44nGzmGY589.png

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

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

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

wKgaomUDzvSAesnDAADAhyWxZMA414.png

图3向量表

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

wKgaomUDzvaAOL8QAABFXUR_YRE503.png

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

4、总结

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

来源:中颖电子(作者:余为国)

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理


审核编辑 黄宇

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

    关注

    457

    文章

    51345

    浏览量

    428250
  • 寄存器
    +关注

    关注

    31

    文章

    5377

    浏览量

    121396
  • 内核
    +关注

    关注

    3

    文章

    1384

    浏览量

    40458
  • 软件模拟
    +关注

    关注

    0

    文章

    8

    浏览量

    7248
收藏 人收藏

    评论

    相关推荐

    笙泉科技超低功耗、高性价比MCU(M0+ : MG32L00)

    ® Cortex®-M0+内核,最高主频达24MHz,内置64KB Flash、4KB SRAM,集成12 位高精度ADC、RTC、PWM、比较器等模拟外设,具有UART、LPUART、SPI、I2C
    发表于 01-20 10:51

    飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介

    及时,在遇到一些内核问题时就可以到linux官网的源码查一下是不是有相关的提交记录。获取芯片原厂的linux源码每个芯片原厂都有自己的git仓库,他们会把已经开发完成的
    发表于 12-13 09:03

    实际项目开发为何选择ARM® Cortex®-M4 内核的HK32MCU?

    ®Cortex®-M4内核的HK32F407芯片的深度知识,并围绕各类实际案例详细解读了如何选型,为何选择ARM®Cortex®-M4内核
    的头像 发表于 10-22 17:19 513次阅读
    实际项目开发<b class='flag-5'>中</b>为何选择ARM® Cortex®-<b class='flag-5'>M</b>4 <b class='flag-5'>内核</b>的HK32MCU?

    CW32L010安全低功耗MCU,树立M0+产品行业新标杆!

    是基于eFlash的单芯片低功耗微控制器,集成了主频高达48MHz的ARM®Cortex®-M0+内核、高速嵌入式存储器(多至64K字节FLASH和多至4K字节SRAM)以及
    的头像 发表于 10-09 10:12 686次阅读
    CW32L010安全低功耗MCU,树立<b class='flag-5'>M0+</b>产品行业新标杆!

    Linux内核测试技术

    内核测试技术是实现这一目标的关键手段。本文将详细介绍 Linux 内核测试的各种技术,包括单元测试、集成测试、功能测试和性能测试等,并讨论不同测试方法的优缺点及其适用场景。
    的头像 发表于 08-13 13:42 625次阅读
    Linux<b class='flag-5'>内核</b>测试技术

    基于 ARM Cortex M0+内核BAT32A237芯片

    简介:车组合开关方案基于 ARM Cortex M0+内核BAT32A237芯片,支持灯光、转向、雨刮、洗涤等开关输入检测,通过LIN接口传送开关输入状态。 ** BAT32A237** 汽车
    发表于 07-31 16:07

    电机专用32位MCU PY32MD310,Arm® Cortex-M0+内核

    PY32MD310是一颗专为电机控制设计的MCU,非常适合用做三相/单相 BLDC/PMSM 的主控芯片芯片采用了高性能的 32 位 ARM® Cortex®-M0+ 内核,QFN3
    的头像 发表于 06-07 15:01 605次阅读
    电机专用32位MCU PY32MD310,Arm® Cortex-<b class='flag-5'>M0</b>+<b class='flag-5'>内核</b>

    XL32F003单片机 M0+内核 主频48M,64 K flash加8K SRAM存储器

    芯片主要特性: 内核: 32 位 ARM Cortex - M0+内核,最高48 MHz工作频率 存储器: 最大64Kbytes flash 存储器,最大8Kbytes SRAM 低功
    发表于 05-17 18:04

    XL32F003单片机 M0+内核 主频48M,64 K flash加8K SRAM存储器

    XL32F003是芯岭技术推出的一颗高性能单片机,搭配32位ARM Cortex-M0+内核,最高工作频率48 MHz。 芯片嵌入高达64 Kbytes flash和8 Kbytes SRAM存储器
    的头像 发表于 05-16 15:31 796次阅读
    XL32F003单片机 <b class='flag-5'>M0+</b><b class='flag-5'>内核</b> 主频48<b class='flag-5'>M</b>,64 K flash加8K SRAM存储器

    STM32 Cortex M3内核的3种低功耗模式,睡眠、停机和待机,在M0内核也适用吗?

    M3内核的3种低功耗模式,睡眠、停机和待机,在M0内核也适用吗
    发表于 05-16 06:56

    普冉半导体推出一款基于32位ARM Cortex-M0+内核的微控制器

    PY32F071单片机是一款基于32 位 ARM® Cortex® - M0+内核的微控制器,由普冉半导体推出。
    的头像 发表于 04-30 11:24 883次阅读
    普冉半导体推出一款基于32位ARM Cortex-<b class='flag-5'>M0</b>+<b class='flag-5'>内核</b>的微控制器

    赛元微新推出了大资源高工规的32位M0+内核MCU—SC32F12系列

    赛元微新推出了大资源高工规的32位M0+内核MCU——SC32F12系列,是赛元现有Arm Cortex®-M0+产品组合的向上拓展,能够为您的设计提供三大优势,大资源,高性能和快速开发。
    的头像 发表于 04-26 10:15 1334次阅读
    赛元微新推出了大资源高工规的32位<b class='flag-5'>M0+</b><b class='flag-5'>内核</b>MCU—SC32F12系列

    HC32L136 M0+内核在写FLASH时程序会跑飞的原因?

    使用一款华大的HC32L136单片机M0+内核64k的flash,在0x0-0x8000放入bootloader 在0x8000-0xFFFF放入用户代码,在全速 执行用户代码
    发表于 04-18 06:04

    STM32如何用HAL库进行内核复位

    STM32如何用HAL库进行内核复位 普通的系统复位函数如下: / ** 简短的系统重置 详细信息发起系统重置请求以重置MCU。 * / __STATIC_INLINE void
    发表于 04-11 06:49

    Cortex-M85内核单片机如何快速上手

    2022年4月,Arm推出了全新的MCU级内核Cortex-M85。截止目前(2024年2月),Cortex-M85是最新、最强的Cortex-M
    发表于 02-29 09:35 840次阅读
    Cortex-<b class='flag-5'>M</b>85<b class='flag-5'>内核</b>单片机如何快速上手