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+芯片没有自带内核复位功能的不足。

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

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


审核编辑 黄宇

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

    关注

    462

    文章

    53550

    浏览量

    459275
  • 寄存器
    +关注

    关注

    31

    文章

    5590

    浏览量

    129090
  • 内核
    +关注

    关注

    4

    文章

    1436

    浏览量

    42496
  • 软件模拟
    +关注

    关注

    0

    文章

    8

    浏览量

    7325
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    GCC -O0 编译内核:调试党的 “救命神器”,这些优势 90% 开发者没吃透!

    在 Linux 内核开发、驱动调试或内核问题定位的场景,“编译优化等级” 是个容易被忽略却影响巨大的选择。GCC 的优化等级从 O0 到 O3、Os、Ofast 各有侧重,而 O
    的头像 发表于 12-03 07:05 41次阅读
    GCC -O<b class='flag-5'>0</b> 编译<b class='flag-5'>内核</b>:调试党的 “救命神器”,这些优势 90% 开发者没吃透!

    Cortex-M内核的精确延时的方法

    寄存器之前,先清0。让我们看看DWT_CYCCNT的基地址,从ARM-Cortex-M手册可以看到其基地址是0xE000 1004,复位
    发表于 11-21 07:51

    为什么cortex-M0+功耗低?

    存储器访问次数减少,降低 Flash 读取功耗(Flash 访问是系统功耗的重要来源)。 更小代码量还可选用容量更小的 Flash,进一步降低芯片整体功耗。 6. 物理设计优化 芯片面积更小:M0+
    发表于 11-19 08:15

    高性能32位M0+内核芯片集成多种通讯外设的PY32F002B

    微控制器的工作温度范围为-40°C ~ 85°C,工作电压范围 1.7 V ~ 5.5 V。芯片提供sleep/stop 低功耗工作模式,可以满足不同的低功耗应用。 Arm® Cortex®-M0+ 内核 Arm® Cortex
    的头像 发表于 10-31 10:38 210次阅读

    STM32C031x4/x6:面向主流应用的Arm® Cortex®-M0+ 微控制器

    STMicroelectronics的STM32C0x Arm^® ^Cortex ^®^ -M0+ 32位MCU安装了高性能Arm Cortex-M0+ 32位RISC内核,工作频率
    的头像 发表于 10-27 15:05 362次阅读
    STM32C031x4/x6:面向主流应用的Arm® Cortex®-<b class='flag-5'>M0+</b> 微控制器

    主频72Mhz采用高性能的32 位ARM®Cortex®-M0+ 内核的PY32C673芯片

    PY32C673 系列微控制器采用高性能的 32 位 ARM® Cortex®-M0+ 内核,宽电压工作范围的 MCU。嵌入高达 64 Kbytes flash 和 8 Kbytes SRAM
    的头像 发表于 08-26 10:57 566次阅读
    主频72Mhz采用高性能的32 位ARM®Cortex®-<b class='flag-5'>M0+</b> <b class='flag-5'>内核</b>的PY32C673<b class='flag-5'>芯片</b>

    武汉芯源 CW32F030K8U7 eFlash 64MHz主频 M0+内核单片机

    CW32F030x6/x8 是基于 eFlash 的单芯片微控制器,集成了主频高达 64MHz 的 ARM® Cortex®-M0+ 内核、高速嵌入式存储器(多至 64K 字节 FLASH 和多至
    发表于 06-21 15:54

    灵动微电子发布基于Arm Cortex M0+内核的低功耗MM32L0180系列MCU,扩展物联网应用版图

    灵动微电子近日宣布推出基于Arm Cortex M0+内核的MM32L0180系列微控制器MCU,以超低功耗设计与丰富外设资源赋能智能终端设备。该系列产品进一步完善了灵动低功耗产品矩阵,形成从
    的头像 发表于 06-03 19:31 1523次阅读
    灵动微电子发布基于Arm Cortex <b class='flag-5'>M0+</b><b class='flag-5'>内核</b>的低功耗MM32L0180系列MCU,扩展物联网应用版图

    微BAT32A6700系列采用高性能的ARM-Cortex M0+内核

    卓越的高温稳定性和高集成度特性,全面满足汽车和工业行业最严苛的应用需求,可应用于车载的高温执行器场景,如面板开关、天窗、座椅、尾灯、传感器及微型电机等应用。 产品特性 ARM Cortex M0+内核
    发表于 04-17 10:24

    如何禁用i.MX RT1170 MCUM4内核

    如何禁用 i.MX RT1170 MCU M4 内核? 您能否提供具体的可行方法? 或者是否可以将内核的工作时钟频率降低到
    发表于 04-09 07:28

    芯源CW32L011- ARM® Cortex®-M0+ 32 位低功耗微控制器

    产品特性 ● 内核:ARM® Cortex®-M0+ ‒ 最高主频 96MHz ● 工作温度:-40℃ 至 85℃;工作电压:1.62V 至 5.5V ● 存储容量 ‒ 最大 64K 字节
    发表于 04-01 09:26

    微BAT32A6700系列采用高性能的ARM-Cortex M0+内核

    卓越的高温稳定性和高集成度特性,全面满足汽车和工业行业最严苛的应用需求,可应用于车载的高温执行器场景,如面板开关、天窗、座椅、尾灯、传感器及微型电机等应用。 产品特性 ARM Cortex M0+内核
    发表于 03-26 09:53

    BAT32A337系列采用高性能的ARM-Cortex M0+的32位RISC内核

    特性,全面满足汽车和工业行业最严苛的应用需求,可应用于车载的高温执行器场景,如车载水泵、油泵控制、阀门调节、传感器、热管理等应用。 产品特性 ARM Cortex M0+内核 工作电压
    发表于 03-24 09:17

    微CMS32F0332是M0+内核的MCU,最快支持64MHz运行。

    CMS32F0332是M0+内核,最快支持64MHz运行,工作电压2.1V~5.5V,多达30个GPIO,2个UART,1个SPI,1个I2C,2组CCP模块,内置2路模拟比较器、2路运算放大器、2
    发表于 03-18 09:04

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

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