瑞萨RA MCU众测宝典 | 低功耗测试之【RA-Eco-RA2L1】待机模式按键外部中断唤醒

来源:中电港 MCU/MPU 3 次阅读
摘要:瑞萨“RA MCU众测宝典”低功耗专题开篇! 开启宝典 前言 本次实验的目标是设置低功耗模式,并配置按键中断唤醒。为之后整个项目核心——低功耗做前期准备工作。 01 硬件部分 1.1 外部中断ICU ICU是中断控制单元(Interrupt Controller Unit)。 中断控制器单元(ICU)控制着一些事件发出的信号,从而链接到嵌套矢量中断控制器(NVIC)、DMA控制器(DMAC)和数据

瑞萨“RA MCU众测宝典低功耗专题开篇!

开启宝典

前言

本次实验的目标是设置低功耗模式,并配置按键中断唤醒。为之后整个项目核心——低功耗做前期准备工作。

01 硬件部分

1.1

外部中断ICU

ICU是中断控制单元(Interrupt Controller Unit)。

中断控制器单元(ICU)控制着一些事件发出的信号,从而链接到嵌套矢量中断控制器(NVIC)、DMA控制器(DMAC)和数据传输控制器(DTC)模块。ICU还控制着不可屏蔽的中断。所以可以说围绕着ICU的有四个部分:NVIC、DMAC、DTC和NMI。

当中断来临的时候会最先经过IRQ寄存器,IRQ寄存器检测到中断的时候,会向中央处理嵌套向量中断控制器NVIC发送中断信号,当NVIC检测到中断请求的时候,会将相应的中断服务函数进行挂起。之后将运行的八个寄存器进行压栈,压栈完成之后将中断服务程序进行激活。之后将原先压栈的寄存器取出,继续运行之前的程序。

1.2

电源管理——低功耗模式

在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续行时间。因此,RA芯片有专门管理设备的运行模式,确保系统正常运行,并尽量降低器件的功耗。

RA2L1支持3种低功耗模式:睡眠模式(Sleep Mode)、软件待机模式(Software Standby Mode)、贪睡模式(Snooze Mode)

1.2.1 睡眠模式 

上电时,默认的低功耗模式即睡眠模式。睡眠模式是最方便的低功耗模式,它不需要任何额外的配置,只需要配置好用于唤醒的中断源。在睡眠模式下,SRAM、处理寄存器和外设状态都会被保留,片上外设可以继续工作,进入睡眠模式以及从睡眠模式唤醒所消耗的时间都是极少的。任何中断或者复位都会将MCU从睡眠模式下唤醒,并开始处理中断,这也包括Systick系统计时器,因此读者如果用到了RTOS,进入睡眠模式前需要暂停Systick。

1.2.2 软件待机模式 

在软件待机模式下,CPU以及大部分片上外设功能和所有内部晶振都停止工作。但是会保留CPU内部寄存器和SRAM数据的内容,片上外设以及IO口的状态。软件待机模式可以显著降低功耗,因为大多数振荡器在这种模式下停止。与睡眠模式一样,待机模式需要配置一个中断,并使用它来唤醒MCU。退出软件待机模式时,所有内部晶振都会被启动,待所有晶振稳定后,MCU返回正常模式。

1.2.3 贪睡模式 

贪睡模式与软件待机模式相似,但是在贪睡模式下,可以运行很多核心外设和所有时钟,可以执行一些比较简单的任务,与软件待机模式相比,贪睡模式可以实现更加灵活的低功耗配置。

02 软件部分

将先前03_RTC工程复制一份,重命名为05_Low-Power-Mode-Btn-Wakeup。

2.1

配置按键外部中断

从开发板的原理图可以得知,用户按键接在P015引脚上,而其对应的中断请求(IRQ)通道为IRQ7。

| 序号 | 操作 | | 1 | 点击界面下方标签栏中的Pins标签,进入引脚配置界面。 | | 2 | 在Pin Selection区域,展开Input:ICU选项,选择ICU0。 | | 3 | 在Pin Configuration区域,将Operation Mode设置为Enabled,勾选IRQ07对应的P015引脚。 |

| 序号 | 操作 | | 1 | 点击界面下方标签栏中的Stacks标签,进入堆栈配置页面。 | | 2 | 在HAL/Common Stacks区域,点击New Stack按钮。 | | 3 | 在弹出菜单中,选择Input选项下的External IRQ (r_icu)。 |

| 序号 | 操作 | | 1 | 在下方Settings设置区域的Module g_external_irq7 External IRQ (r_icu)部分,设置Name为g_external_irq7Channel7。 | | 2 | Module g_external_irq7 External IRQ (r_icu)部分,设置Callbackkey_irq_callbackPin Interrupt Priority为Priority 2。 |

2.2

配置低功耗模式

| 序号 | 操作 | | 1 | 点击界面下方标签栏中的Stacks标签,进入堆栈配置页面。 | | 2 | 在HAL/Common Stacks区域,点击New Stack按钮。 | | 3 | 在Power子菜单中,选择Low Power Modes (r_lpm)。 |

| 序号 | 操作 | | 1 | 在下方Settings设置区域的Module g_lpm0 Low Power Modes (r_lpm)部分,设置Name为g_lpm0。 | | 2 | 在Settings设置区域的Module g_lpm0 Low Power Modes (r_lpm)部分,将Low Power Mode设置为Software Standby mode。 | | 3 | Module g_lpm0 Low Power Modes (r_lpm) - Wake Sources部分,勾选IRQ7。 |

2.3

编写代码

2.3.1 按键中断 

新建irq.h

左右滑动查看完整内容

#ifndef IRQ_H_

新建irq.c

左右滑动查看完整内容

#include"irq.h"

在irq.c文件中定义了初始化函数IRQ_Init,并实现按键中断回调函数key_irq_callback

2.3.2 低功耗模式 

新建lpm.h

左右滑动查看完整内容

#ifndef LPM_H_

新建lpm.c

左右滑动查看完整内容

#include"lpm.h"

EnterLowPowerMode是进入低功耗模式的函数,LPM_Init是初始化低功耗模式的。

2.3.3 修改hal_entry.c 

hal_entry函数之前添加

左右滑动查看完整内容

#include"hal_data.h"

在hal_entry函数内添加

左右滑动查看完整内容

Debug_UART9_Init(); // SCI9 UART 调试串口初始化

Tip

主程序设计为按键按下即进入待机模式,这里只是为了快速实现效果,而采用的按键触发方式,可以是串口发消息触发、程序逻辑调用等等方法进入待机模式。

03 下载测试

把编译好的程序下载到开发板并复位,打开PC端的串口助手,能查看到串口打印的时间。点按一下开发板上的用户按键,进入待机模式,再按一下则恢复正常工作模式。待机模式下RTC实时时钟正常计数,可以通过这个方法来实现低功耗日历的设计。

最后关心一下功耗到底如何,因为RA2L1开发板最重要的特性就是低功耗。在不接任何外设,输入电压3.3V的情况下,测试得到正常运行的电流约6mA,待机模式下的电流约14uA。

04 工程附件

工程附件—低功耗

https://bbs.elecfans.com/jishu\_2474907\_1\_1.html

本期基于瑞萨RA2L1开发板,实现低功耗模式+按键外部中断唤醒,并完成真实功耗测试。

低功耗专题还会继续升级:贪睡模式、外设功耗管理、唤醒源扩展、低功耗算法优化等。如果你在唤醒配置、模式切换、电流测试上有疑问,欢迎在评论区交流。

下一篇继续深挖瑞萨RA2L1低功耗玩法!

  1. 记得要分享点赞在看喔!

  2. 中电港秉持“为客户服务,与伙伴共享”的经营理念,在履行社会责任的同时,努力成为全球首选的集成电路应用创新生态平台,助力中国电子信息产业发展。

相关推荐
评论区

登录后即可参与讨论

立即登录