NXP实战笔记(十三):32K3xx基于RTD-SDK在S32DS上休眠唤醒wakeup低功耗功能。

目录

1、概述

2、配置目标

2.1、配置资源

2.2、模块依赖关系

3、RTD配置

3.1、时钟配置

3.2、Power配置

3.3、IO配置

3.3、Wkpu配置

3.5、中断配置

4、代码处理

4.1、链接文件处理

4.2、启动文件startup_cm7.s设置

4.3、休眠唤醒代码处理

5、实验结果

6、代码链接


1、概述

        S32K3xx仅有两种电源模式,RUN模式和STANDBY模式。S32K1xx之所以有Run、Sleep、Deep Sleep三种电源状态,是因为S32k1xx使用的ARM Cortex M4的内核,其内核就规定了这三种电源模式:

        Run:正常工作模式,允许PLL 倍频,内核、系统、总线频率运行在芯片的最高频率,功耗可达数十mA–上百mA

        Sleep:普通睡眠模式,大部分外设停止工作,内核、系统和总线部分关闭或降频工作,功耗可降至几个mA

        Deep Sleep:深度睡眠,几乎所有外设停止工作、NVIC停止工作,内核、系统和总线关闭,CPU内核停止工作,仅AWIC(异步唤醒中断控制器)这个用于唤醒的外设保持功能,功耗仅几十个uA。

        ARM cortex M系列内核进入低功耗模式是通过CPU执行汇编指令WFI(Wait for Interrupt)或者WFE(Wait for Event)完成。

唤醒源

四个内部源与60个外部源可以产生中断与唤醒事件。

        WKPU0:SWT0唤醒

        WKPU1:RTC唤醒

        WKPU2:CMP唤醒

        WKPU3:RTI唤醒

        WKPU4 - WKPU63:外部引脚

外部中断唤醒源的示例图如下

2、配置目标

2.1、配置资源

芯片型号

唤醒源

IO

S32K312

17

PTB16

2.2、模块依赖关系

模块

作用

FIRC快速时钟

进入Standby之前需要切换到快速时钟

Power

提供run与standby模式

Wkpu

休眠唤醒配置

链接文件

分配standby RAM使用

启动文件

上电启动更改

IntCtrl_Ip

中断

IO

设置为唤醒管脚

3、RTD配置

        本工程实践通过S32DS自带的illd配置工具实现。

3.1、时钟配置

找到时钟选项,添加一路standby 时钟

注意添加完成之后会报错与警告如下图,因为这些时钟是不使用的,需要关闭。

消除错误方法如下,详细信息里面选择不使用即可

        根据自身需要,在进入休眠时候哪些使能,哪些不使能呢?这里是可以自己选择的。但是WKPU是必须使能的。

其它的按照默认就行了,配置出来如下图

        为什么要添加一路呢,此处添加之后生成部分就会生成一份standby的时钟,如下图所示。

3.2、Power配置

电源管理这块配置如下所示

增加standby模式

3.3、IO配置

3.3、Wkpu配置

设置唤醒方式为上升沿唤醒

        设置唤醒源:注意一下为什么是17呢?刚才前面提到了,前面4个源为内部源,IO这块需要在原本13的基础上加4,这点需要非常注意。

添加中断

3.5、中断配置

注意后面的句柄函数出处如下,不是随便写的。

这些准备工作准备好了,下面就是执行代码层面的操作了。

4、代码处理

        单独的根据配置生成的代码,休眠是没什么大的问题的,但是唤醒方面就比较不行了,唤醒只能唤醒部分,其实唤醒之后操作等同于复位,直接跳转到复位位置。

4.1、链接文件处理

        S32K3中的RAM前32K属于standby ram在休眠模式下也是可以起作用的。所以链接文件上需要在这块做文章,这块根据心情分多少不大于32K就行。

    int_standbysram			: ORIGIN = 0x20400000, LENGTH = 0x00000800    /* 2K */
    int_standbysram_stack	: ORIGIN = 0x20400800, LENGTH = 0x00000800    /* 2K */

为启动文件增加一个table,之后.s文件会使用

增加section段,便于存放standby ram里面数据

增加地址信息

4.2、启动文件startup_cm7.s设置

对应链接文件的段

去除ECC错误

4.3、休眠唤醒代码处理

寄存器方面需要重点关注如下

下图为设置下次启动的位置与唤醒等设置信息

下图寄存器为阅读唤醒源信息

ECC初始化信息,下面的代码是不调用的,在上电的时候会执行,所以调试器打不了断点信息的。

下次进入的向量表如下

程序的运行,在初始化的时候无需初始化唤醒操作,在进入唤醒之前进行初始化就行了。

5、实验结果

休眠时刻信息

唤醒源为17

Log信息如下

6、代码链接

休眠唤醒源码icon-default.png?t=N7T8https://download.csdn.net/download/weixin_43580890/89427906?spm=1001.2014.3001.5503

  • 25
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

剑从东方起

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

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

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

打赏作者

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

抵扣说明:

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

余额充值