ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

瑞萨单片机开发教程[三十五] LPM 低功耗深度软件待机模式

瑞萨单片机开发教程[三十五] LPM 低功耗深度软件待机模式 开发板官网https://www.edevkit.com本系列教程目录- 瑞萨单片机开发教程[一] e2-studio DAP LINK开发环境搭建- 瑞萨单片机开发教程[二] Keil/RASC开发环境搭建- 瑞萨单片机开发教程[三] 新建RASC工程- 瑞萨单片机开发教程[四] GPIO输出——led实验- 瑞萨单片机开发教程[五] GPIO输入——按键key实验- 瑞萨单片机开发教程[六] ICU外部中断实验- 瑞萨单片机开发教程[七] SCI UART串口通信实验- 瑞萨单片机开发教程[八] DMAC 串口数据传输实验- 瑞萨单片机开发教程[九] ADC 电压采集实验LPM 低功耗深度软件待机模式实验本章目标了解 RA6M5 处理器的低功耗及其工作原理学会使用 RASC 配置低功耗深度软件待机模式、使用 API 函数硬件设计略参见配套硬件原理图软件设计新建工程复制一份24 LPM_Snooze_Mode并修改文件夹名为25 LPM_Deep_Standby_Mode双击打开EBF_RA6M5.uvprojx工程通过 Keil 的新建文件新建lpm_deep.c和lpm_deep.h保存到工程目录下的\\src文件夹下。FSP 配置Keil 界面选择“Tools”→“RA Smart Configurator”打开 RASC 界面。添加 LPM Stack 模块。设置 IWDT 属性设置名称和深度待机模式。下一步在“Deep Standby Options”设置“Cancel Source”和“Cancel Edges”。选择配置的按键中断 irq9 和 irq10edges 选择 irq9 的下降沿。配置完成之后可以按下快捷键“Ctrl S”保存最后点击“Generate Project Content”按钮让软件自动生成配置代码即可。程序设计设计程序配置 irq9 和 irq10 两个中断在程序初始化后检测深度唤醒的中断源打印到串口LED 亮 3s 后进入循环执行测试函数LED 闪烁两次后进入深度待机模式等待中断唤醒按下按键中断唤醒程序观察现象。打开低功耗模块R_LPM_Open(sleep.p_ctrl, sleep.p_cfg);进入低功耗模式R_LPM_LowPowerModeEnter(sleep.p_ctrl);程序编写在lpm_deep.h头文件里定义初始化函数、测试函数。#ifndef __BSP_LPM_DEEP_STANDBY_H #define __BSP_LPM_DEEP_STANDBY_H #include hal_data.h //检测唤醒中断源 void lpm_deep_standby_restart_detection(void); //深度待机模式测试 void lpm_deep_standby_led_test(void); #endif在lpm_deep.c里实现初始化函数、测试函数。#include lpm_deep.h #include led.h #include stdio.h //唤醒重启检测中断源 void lpm_deep_standby_restart_detection(void) { R_BSP_PinAccessEnable(); if (1U R_SYSTEM-RSTSR0_b.DPSRSTF) { //从深度软件待机模式唤醒后清除IOkeep位 R_LPM_IoKeepClear (NULL); //清除唤醒标志位 R_SYSTEM-RSTSR0_b.DPSRSTF 0; //判断唤醒源是IRQ-9还是IRQ-10 if (R_SYSTEM-DPSIFR1 1 0x01U) { printf(mcu waken from IRQ-9\r\n); } else if (R_SYSTEM-DPSIFR1 2 0x01U) { printf(mcu waken from IRQ-10\r\n); } } } //深度软件待机模式测试 void lpm_deep_standby_led_test(void) { //闪烁两次 LED1_ON(); R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS); LED1_OFF(); R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS); LED1_ON(); R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS); LED1_OFF(); printf(mcu enter deep standby mode\r\n); R_LPM_Open(g_deep.p_ctrl, g_deep.p_cfg); //这一句开始进入深度待机模式后面的代码将不会执行中断唤醒也会重启运行 R_LPM_LowPowerModeEnter(g_deep.p_ctrl); //这一句将不会运行到 printf(mcu exit deep standby mode\r\n); }在hal_entry.c文件中添加头文件lpm_deep.h。void hal_entry(void) { /* TODO: add your own code here */ led_Init(); uart0_Init(); key_IRQ_Init(); //检测唤醒重启的中断源 lpm_deep_standby_restart_detection(); LED1_ON(); R_BSP_SoftwareDelay(3, BSP_DELAY_UNITS_SECONDS); while(1) { //进入深度软件待机 lpm_deep_standby_led_test(); } #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif }下载验证连接下载器将程序编译并下载到开发板之后重新上电复位开发板程序启动初始化完。初始化后执行中断源检测函数LED 灯亮 3s 后进入循环LED 闪烁两次后串口打印“mcu enter deep standby mode”进入深度待机模式等待中断唤醒后面的代码将不会执行。按下按键中断唤醒后程序重启重头开始运行打印检测到的中断源。
返回列表