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

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

3天内不再提示

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

RA生态工作室 2026-05-26 17:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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引脚。


70c3d4f4-58e3-11f1-ab55-92fbcf53809c.jpg


序号

操作

1

点击界面下方标签栏中的Stacks标签,进入堆栈配置页面。

2

HAL/Common Stacks区域,点击New Stack按钮。

3

在弹出菜单中,选择Input选项下的External IRQ (r_icu)


70d270cc-58e3-11f1-ab55-92fbcf53809c.jpg


序号

操作

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

70df1a84-58e3-11f1-ab55-92fbcf53809c.jpg


2.2

配置低功耗模式


序号

操作

1

点击界面下方标签栏中的Stacks标签,进入堆栈配置页面。

2

HAL/Common Stacks区域,点击New Stack按钮。

3

Power子菜单中,选择Low Power Modes (r_lpm)


70eadb30-58e3-11f1-ab55-92fbcf53809c.jpg


序号

操作

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

70f79d20-58e3-11f1-ab55-92fbcf53809c.jpg

2.3

编写代码


2.3.1 按键中断

新建irq.h

左右滑动查看完整内容

#ifndefIRQ_H_#defineIRQ_H_#include"hal_data.h"voidIRQ_Init();externvolatilebool key_pressed;#endif

新建irq.c

左右滑动查看完整内容

#include"irq.h"#include"hal_data.h"
volatilebool key_pressed =false;voidkey_irq_callback(external_irq_callback_args_t*p_args){ key_pressed =true;}voidIRQ_Init(){ g_external_irq7.p_api->open(&g_external_irq7_ctrl, &g_external_irq7_cfg); g_external_irq7.p_api->enable(&g_external_irq7_ctrl);}


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


2.3.2 低功耗模式


新建lpm.h

左右滑动查看完整内容

#ifndefLPM_H_#defineLMP_H_#include"hal_data.h"externvolatilebool in_LPM;voidLPM_Init();voidEnterLowPowerMode();#endif

新建lpm.c

左右滑动查看完整内容

#include"lpm.h"#include"hal_data.h"
volatilebool in_LPM =true; // 在低功耗模式的标志位 防止用按键唤醒了又立即进待机voidLPM_Init(){ g_lpm0.p_api->open(&g_lpm0_ctrl, &g_lpm0_cfg);}
voidEnterLowPowerMode(){ if(!in_LPM){ printf("进入低功耗模式\n"); in_LPM =true; g_lpm0.p_api->lowPowerModeEnter(&g_lpm0_ctrl); }}


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


2.3.3 修改hal_entry.c


hal_entry函数之前添加

左右滑动查看完整内容

#include"hal_data.h"#include"debug_bsp_uart.h"#include"rtc.h"#include"irq.h"#include"lpm.h"rtc_time_tget_time;

在hal_entry函数内添加

Debug_UART9_Init();//SCI9 UART 调试串口初始化 RTC_Init(); IRQ_Init(); LPM_Init(); while(1) { if(key_pressed) { key_pressed = false; if(!in_LPM){ EnterLowPowerMode(); printf("退出待机模式\n"); } else{ in_LPM = false; } } if(rtc_flag) { g_rtc0.p_api->calendarTimeGet(&g_rtc0_ctrl, &get_time);//获取 RTC 计数时间 rtc_flag =0; printf("%d年%d月%d日%d:%d:%d\n", get_time.tm_year +1900, get_time.tm_mon +1, get_time.tm_mday, get_time.tm_hour, get_time.tm_min, get_time.tm_sec); } if(uart_rx_complete_flag) { char *time; uart_rx_complete_flag =0; //解析设置时间的命令 e.g:time:20250126080910 // warning: 未添加错误纠正算法,请输入正确的时间,否则工作异常! if(strncmp(rx_data,"time:",5) ==0) { time= rx_data +5; set_time.tm_year = ((time[0] -'0') *1000) + ((time[1] -'0') *100) + ((time[2] -'0') *10) + (time[3] -'0') -1900; set_time.tm_mon = ((time[4] -'0') *10) + (time[5] -'0') -1; set_time.tm_mday = ((time[6] -'0') *10) + (time[7] -'0'); set_time.tm_hour = ((time[8] -'0') *10) + (time[9] -'0'); set_time.tm_min = ((time[10] -'0') *10) + (time[11] -'0'); set_time.tm_sec = ((time[12] -'0') *10) + (time[13] -'0'); g_rtc0.p_api->calendarTimeSet(&g_rtc0_ctrl, &set_time); } } }


Tip

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


03 下载测试


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


7106136e-58e3-11f1-ab55-92fbcf53809c.jpg

点击可查看大图


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


712397ae-58e3-11f1-ab55-92fbcf53809c.jpg7131e91c-58e3-11f1-ab55-92fbcf53809c.jpg

点击可查看大图


04 工程附件


(可以扫描下方二维码或复制下方链接到浏览器下载附件查看完整代码)


工程附件—低功耗

https://bbs.elecfans.com/jishu_2474907_1_1.html

713f4ada-58e3-11f1-ab55-92fbcf53809c.png


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


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


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

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

    关注

    147

    文章

    19245

    浏览量

    405209
  • 瑞萨电子
    +关注

    关注

    39

    文章

    2990

    浏览量

    74608
  • 低功耗测试
    +关注

    关注

    0

    文章

    6

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RA2L1 MCU e² studio和FSP的使用指南

    本期“RA MCU宝典” 继续聚焦 “环境搭建” 专题,带大家走进【RA-Eco-RA2L1-48PIN-V1.0】的世界,查看e² s
    的头像 发表于 08-04 13:45 3362次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA2L1</b> <b class='flag-5'>MCU</b> e² studio和FSP的使用指南

    RA MCU宝典 | 环境搭建RA-Eco-RA6E2-64PIN-V1.0 开发板】介绍、环境搭建、工程测试

    “RAMCU宝典”环境搭建专题再添实用干货!这次咱们聚焦高性能入门级开发板——【RA-Eco-RA6E2-64PIN-V1.0】。本文介绍了RA-Eco-RA6E2-64PIN-V
    的头像 发表于 03-20 16:23 8084次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | 环境搭建<b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA6E2</b>-64PIN-V1.0 开发板】介绍、环境搭建、工程<b class='flag-5'>测试</b>

    RA MCU宝典 | 环境搭建RA-Eco-RA4M2】搭建Keil开发环境

    “RAMCU宝典”环境搭建专题再添硬核实操!开启宝典概览
    的头像 发表于 04-03 17:59 7301次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | 环境搭建<b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA4M2</b>】搭建Keil开发环境

    RA MCU宝典 | 环境搭建RA-Eco-RA4M2】QE工具使用

    “RAMCU宝典”环境搭建专题再添硬核实操!开启宝典01简介RA-Eco-RA4M2-1
    的头像 发表于 04-10 18:26 6194次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | 环境搭建<b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA4M2</b>】QE工具使用

    RA MCU宝典 | 串口RA-Eco-RA2L1】RTC日历及串口设置时间

    “RAMCU宝典”串口专题添硬核实操!开启宝典前言RAMCU
    的头像 发表于 04-21 18:07 7242次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | 串口<b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA2L1</b>】RTC日历及串口设置时间

    RA2L1入门学习】05、待机模式按键外部中断唤醒 低功耗测试

    1 前言 本次实验的目标是设置低功耗模式,并配置按键中断唤醒。为之后整个项目核心——
    发表于 01-29 23:08

    RA2L1入门学习】初识RA-Eco-RA2L1-48PIN-V1.0

    RA-Eco-RA2L1-48PIN-V1.0 是电子推出的一款基于 Arm Cortex-M23 内核的超低功耗开发板,专为嵌入式系统和物联网应用设计。以下从多个维度对其展开详细
    发表于 03-07 11:14

    RA2L1入门学习】+开箱评测

    R7FA2L1AB2DFL。RA2L1 产品组采用优化的制程和电子的低功耗工艺技术,是业界一流水平的超
    发表于 03-09 07:40

    RA-Eco-RA2E1-V1.0开发板试用】开箱

    控制、智能外设等场景的高性价比嵌入式开发方案,也是 RA 生态中入门级低功耗开发的核心载体。 该套件核心基于 RA2L1/
    发表于 02-04 19:54

    RA2L1入门学习】+ EN-CUBE3烧录RA2L1使led闪烁

    RA2L1 产品组能够支持 1.6V 至 5.5V 宽电压工作,CPU 时钟频率最高 48MHz,且运行模式电流和待机模式电流更低。 RA2L1
    发表于 05-08 11:09

    RA2L1/RA2E1 原理图 PCB

    资料介绍 RA-Eco-RA2L1/RA2E1-48PIN-V1.0 原理图 PCB
    发表于 10-16 00:30 94次下载

    RA家族精品RA2L1产品介绍

    RA2L1MCURA家族RA2系列广受欢迎的一款产品。RA2L1MCU专为超
    的头像 发表于 12-27 18:07 1583次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b>家族精品<b class='flag-5'>RA2L1</b>产品介绍

    RA家族RA4L1低功耗MCU量产上市

      RA家族RA4L1低功耗MCU产品系列于2025年2
    的头像 发表于 02-20 13:39 1857次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b>家族<b class='flag-5'>RA4L1</b><b class='flag-5'>低功耗</b><b class='flag-5'>MCU</b>量产上市

    RA家族RA4C1低功耗MCU发布

    RA家族在2025年8月推出RA4C1低功耗MCU,基于Arm Cortex-M33(CM3
    的头像 发表于 08-22 15:00 2777次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b>家族<b class='flag-5'>RA4C1</b><b class='flag-5'>低功耗</b><b class='flag-5'>MCU</b>发布

    RA MCU宝典 | OLEDRA-Eco-RA2L1】I²C驱动OLED屏幕 BME280传感器

    “RAMCU宝典”全新专题——OLED显示驱动正式开篇!开启宝典前言RAMCU
    的头像 发表于 05-08 16:08 1069次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | OLED<b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA2L1</b>】I²C驱动OLED屏幕 BME280传感器