S32K3xx低功耗获取唤醒源

S32K3xx低功耗获取唤醒源

上一篇学习总结中知道S32K3xx只有两种运行模式:RUN和Standby模式,从Standby模式唤醒后从启动程序开始运行,直接复位了。因此MCU需要知道复位原因,若是唤醒复位需要再判断唤醒源。

我参考某大佬的S32K3xx电源管理例程后,回过头去芯片手册找寻例程为何这样写的原因?学习提升看芯片手册的能力!
《S32K3xx Reference Manual》

一、获取复位原因

获取复位原因很简单,只需要调用一个接口即可:

在这里插入图片描述

根据返回值判断复位原因:

在这里插入图片描述

二、获取唤醒源

1.思路分析

RUN模式和Standby模式的切换参考上一篇学习总结

查阅S32K3xx芯片手册:

在这里插入图片描述

可以看到在Standby模式种虽然Flash关闭了,但是还有一个32KB的SRAM可以使用

在这里插入图片描述

从Standby boot流程图可以看到,退出Standby模式也分为”Fast standby mode“和”Normal boot on exit from standby“。”Normal boot on exit from standby“在退出Standby模式时就直接正常复位启动了,”Fast standby mode“模式则可以读”APPlication Core“的复位寄存器”DCMRWF5“。

在这里插入图片描述

可以看到”DCMRWF5“的第0位用来选择”Fast standby mode“和”Normal boot on exit from standby“,1-31位用于存放在退出待机模式后使用的向量表的Cortex-M7_0基址(仅在Fast Standby模式下有效)。

在这里插入图片描述

可以看到唤醒源的标志位存放在”WISR“和”WISR_64“中。

因此可以得出程序设计思路:

1)Standby模式中可运行32KB的SRAM,因此开辟出32KB的standby ram,将存放唤醒源的数组arr1放到standby ram;

2)写一个获取唤醒源的函数func1,将”WISR“和”WISR_64“中唤醒源标志存放到arr1,后续直接读取arr1可获得唤醒源;

3)写一个向量表VectorTable,VectorTable中包含func1,则可以在执行向量表时执行func1以获取唤醒源;

4)在进入Standby模式之前配置DCMRWF5寄存器,将DCMRWF5[31-1]放入VectorTable地址,将DCMRWF5[0]配置为”Fast standby mode“。

运行流程:进入Standby模式之前已经配置DCMRWF5,当进行”Fast standby mode“唤醒时,先执行VectorTable中的func1获取唤醒源,并将唤醒源放入arr1,然后复位,复位之后可查看arr1以确定唤醒源。

2.程序分析

1)开辟32KB standby ram

.ld文件学习参考:S32DS中.ld(链接)文件学习S32DS中链接文件及启动代码学习

在flash的.ld文件中将int_sram分出16KB为int_standbysram,再分出16KB为int_standbysram_stack

在这里插入图片描述

在对应int_flash和int_sram之间添加int_standbysram内容

在这里插入图片描述

在设置栈stack处添加int_standbysram_stack

在这里插入图片描述

在设置RAM/ROM大小处添加STANDBY_SRAM_SIZE

在这里插入图片描述

2)创建存放唤醒源数组、获取唤醒源函数、向量表

创建存放唤醒源数组

在这里插入图片描述

在这里插入图片描述

获取唤醒源函数(获取完唤醒源之后跳到Reset_Handler进行复位)

在这里插入图片描述

在这里插入图片描述

创建向量表(向量表中依次是Standby的栈入口,获取唤醒源函数入口和undefined_handler入口。为什么要加undefined_handler我也不理解;为什么要将向量表放到.rodata只读数据段(const),我的理解是因为向量表以及向量表中的入口本质都是地址,32bit地址就是常量数据)

在这里插入图片描述

3)进入Standby模式之前配置DCMRWF5

在这里插入图片描述

4)复位后查询/清除唤醒源

最后再写一个查询唤醒源和清除唤醒源的接口

在这里插入图片描述

到此就完成了S32K3xx从Standby模式唤醒后查询唤醒源的工作,参考例程

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

studyingdda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值