色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RT-Thread低功耗的適配和應用

RTThread物聯網操作系統 ? 來源:RTThread物聯網操作系統 ? 作者:RTThread物聯網操作 ? 2022-08-03 10:29 ? 次閱讀

近期 RT-Thread 工程師完成了基于瑞薩CPK-RA2L1 開發板的BSP適配,支持了GPIO、UARTI2C、SPI、ADCDAC、PWM、CAN、on-chip Flash、Watchdog、RTC等外設驅動,并在瑞薩工程師支持下完成電源組件(低功耗LPM)適配,經實際測量,芯片在Software Standby階段可達到的最低平均電流約為0.696uA,本篇筆記記錄低功耗的適配和應用。

af36e894-1250-11ed-ba43-dac502259ad0.png

可通過以下鏈接查看RA MCU BSP:

https://github.com/RT-Thread/rt-thread/tree/master/bsp/renesas

瑞薩 RA 系列 MCU 開發板的 BSP 制作教程

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/make-bsp/renesas-ra/RA%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B

在開始介紹低功耗前,先了解一下 RA2L1 MCU 產品群關鍵特性

  • 48MHz Arm Cortex-M23 CPU內核

  • 支持1.6V-5.5V寬范圍工作電壓

  • 超低功耗,提供64μA/MHz工作電流和250nA軟件待機電流,快速喚醒時間小于5μs

  • 采用瑞薩110nm低功耗工藝,用于運行和睡眠/待機模式,并且專門為電池驅動應用設計了特殊掉電模式

  • 靈活的供電模式可實現更低的平均功耗,以滿足多種應用需求

  • 集成了新一代創新型電容式觸摸感應單元,無需外部元器件,降低BOM成本

  • 通過高精度(1.0%)高速振蕩器溫度傳感器和多種供電接口端口等片上外圍功能降低系統成本

  • 后臺運行的數據閃存,支持一百萬次擦除/編程循環

  • 采用LQFP封裝,產品涵蓋48引腳至100引腳封裝

低功耗基礎

低功耗的本質是系統空閑時 CPU 停止工作,中斷或事件喚醒后繼續工作。在 RTOS 中,通常包含一個 IDLE 任務,該任務的優先級最低且一直保持就緒狀態,當高優先級任務未就緒時,OS 執行 IDLE 任務。一般地,未進行低功耗處理時,CPU 在 IDLE 任務中循環執行空指令。RT-Thread 的電源管理組件在 IDLE 任務中,通過對 CPU 、時鐘和設備等進行管理,從而有效降低系統的功耗。

af5780a4-1250-11ed-ba43-dac502259ad0.png

在上圖所示,當高優先級任務運行結束或被掛起時,系統將進入 IDLE 任務中。在 IDLE 任務執行后,它將判斷系統是否可以進入到休眠狀態(以節省功耗)。如果可以進入休眠, 將根據芯片情況關閉部分硬件模塊,OS Tick 也非常有可能進入暫停狀態。此時電源管理框架會根據系統定時器情況,計算出下一個超時時間點,并設置低功耗定時器,讓設備能夠在這個時刻點喚醒,并進行后續的工作。當系統被(低功耗定時器中斷或其他喚醒中斷源)喚醒后,系統也需要知道睡眠時間長度是多少,并對OS Tick 進行補償,讓系統的OS tick值調整為一個正確的值。

PM組件

PM組件是RT-Thread系統中針對電源管理而設計的基礎功能組件, 組件采用分層設計思想,分離架構和芯片相關的部分,提取公共部分作為核心。支持多種運行模式和休眠模式的管理切換,以及低功耗定時器的管理。

PM 組件有以下特點:

  • PM 組件是基于模式來管理功耗

  • PM 組件可以根據模式自動更新設備的頻率配置,確保在不同的運行模式都可以正常工作

  • PM 組件可以根據模式自動管理設備的掛起和恢復,確保在不同的休眠模式下可以正確的掛起和恢復

  • PM 組件支持可選的休眠時間補償,讓依賴 OS Tick 的應用可以透明使用

  • PM 組件向上層提供設備接口,如果使用了設備文件系統組件,那么也可以用文件系統接口來訪問

PM組件支持的休眠模式有

af701812-1250-11ed-ba43-dac502259ad0.png

RA系列LPM功能

RA2 MCU支持的LPM類型有:

  • Sleep mode

  • Software Standby mode

  • Snooze mode

af9b87f4-1250-11ed-ba43-dac502259ad0.png

低功耗模式轉換和觸發源如圖所示:

afd444b8-1250-11ed-ba43-dac502259ad0.png

不同模式間的切換如圖所示,從圖中也可以看出三種模式的功耗關系是Sleep>Snooze>Standby。

RA2芯片的休眠模式對應PM組件的模式關系:

afeffaa0-1250-11ed-ba43-dac502259ad0.png

配置LPM功能

要使用RA2系列芯片的LPM功能,需要進入bsp enesas a2l1-cpk目錄。

  • 在menuconfig中使能LPM驅動,并勾選要開啟的休眠模式,然后保存配置,生成MDK5工程。

afff65a8-1250-11ed-ba43-dac502259ad0.png

  • 打開PM組件和驅動后,需要增加idle的線程棧大小,可改為1024。

    b015a8ea-1250-11ed-ba43-dac502259ad0.png

  • 打開生成的MDK5工程project.uvprojx,然后打開FSP配置工具添加LPM相關配置。下圖是需要添加的stack,包括三種LPM模式的配置以及低功耗定時器AGT1。

b0268ee4-1250-11ed-ba43-dac502259ad0.png

  • 創建LPM如下圖所示新建r_lpm,需要根據使用的模式進行配置且不同模式要創建不同的r_lpm。下面將分別介紹三種不同模式的配置,創建步驟就不再贅述。

b047ac0a-1250-11ed-ba43-dac502259ad0.png

Sleep mode休眠模式

創建出r_lpm后需要修改Name和Low Power Mode這兩個配置項。Name需要改為g_lpm_sleep,因為在驅動文件中已經定義了sleep模式對應的stack名稱。Low Power Mode選擇Sleep mode即可。

b0719010-1250-11ed-ba43-dac502259ad0.png

Standby mode軟件待機模式

Name需要改為g_lpm_sw_standby。Low Power Mode選擇Software Standby mode即可。

另外在此模式下還需要配置喚醒MCU的中斷源,因為會使用到AGT1做為低功耗定時器所以AGT1的中斷需要勾選。如果在應用中還需要其他中斷源在此模式下喚醒MCU,則勾選對應選項即可。

b0966a3e-1250-11ed-ba43-dac502259ad0.png

Snooze mode小睡模式

Name需要改為g_lpm_sw_standby_with_snooze。Low Power Mode選擇Snooze mode即可。

另外在此模式下同樣要配置喚醒MCU的中斷源,因為會使用到AGT1做為低功耗定時器所以AGT1的中斷需要勾選。如果在應用中還需要其他中斷源在此模式下喚醒MCU,則勾選對應選項即可。

b0b436a4-1250-11ed-ba43-dac502259ad0.png

AGT1低功耗定時器

在驅動中使用了MCU的AGT1做為PM組件的低功耗定時器,用于在休眠狀態下的系統時鐘補償。

b0d11742-1250-11ed-ba43-dac502259ad0.png

完成上述配置步驟就已經把LPM低功耗模式的相關配置做完了。然后再根據應用要實現的功能配置其他外設。

低功耗DEMO

上文介紹了在RT-Thread的RA2L1上怎么配置LPM的不同模式,接下來就用一個小DEMO來驗證下MCU在各種模式下的工作情況。

低功耗DEMO要實現的功能是,在CPK-RA2L1開發板上用S1按鈕切換不同的低功耗模式,并在msh中打印出模式切換的提示信息。要實現這個功能需要在剛才的基礎上添加一個低功耗的喚醒源。

添加配置

  • 創建IRQ中斷,IRQ中斷選擇通道3,詳細配置如下。

    b0ef415e-1250-11ed-ba43-dac502259ad0.png

    b1039686-1250-11ed-ba43-dac502259ad0.png

b12c1188-1250-11ed-ba43-dac502259ad0.png

  • 在剛才的Snooze和Standby模式的配置里添加IRQ3的喚醒源

    b147c8c4-1250-11ed-ba43-dac502259ad0.png

    b1683d16-1250-11ed-ba43-dac502259ad0.png

    b17a32aa-1250-11ed-ba43-dac502259ad0.png

  • 然后保存并生成配置代碼。

添加測試代碼

#include 
#ifdef BSP_USING_LPM#include #include #include 
#define WAKEUP_APP_THREAD_STACK_SIZE        512#define WAKEUP_APP__THREAD_PRIORITY         RT_THREAD_PRIORITY_MAX / 3#define WAKEUP_EVENT_BUTTON                 (1 << 0)
static rt_event_t wakeup_event;
#define USER_INPUT  "P004"#define LED2_PIN    "P501" /* Onboard LED pins */
void rt_lptimer_init(rt_lptimer_t  timer,                   const char *name,                   void (*timeout)(void *parameter),                   void       *parameter,                   rt_tick_t   time,                   rt_uint8_t  flag);
rt_err_t rt_lptimer_detach(rt_lptimer_t timer);rt_err_t rt_lptimer_start(rt_lptimer_t timer);rt_err_t rt_lptimer_stop(rt_lptimer_t timer);
rt_err_t rt_lptimer_control(rt_lptimer_t timer, int cmd, void *arg);
static struct rt_lptimer lptimer; 
static void timeout_cb(void *parameter){    rt_interrupt_enter();    rt_kprintf("
 lptimer callback 
");    rt_interrupt_leave();}
static void lptimer_init(void){    rt_lptimer_init(&lptimer,                    "lpm",                    timeout_cb,                    (void*)&wakeup_event,                    1000,                    RT_TIMER_FLAG_PERIODIC);}
static void lptimer_stop(void){    rt_lptimer_stop(&lptimer);}
static void lptimer_start(void){    rt_lptimer_start(&lptimer);}
static void led_app(void){    static uint8_t key_status = 0x00;    rt_uint32_t led2_pin = rt_pin_get(LED2_PIN);
    rt_pin_write(led2_pin, PIN_HIGH);    switch(key_status%4)    {    case 0:/* IDLE */    lptimer_stop();        rt_pm_release(PM_SLEEP_MODE_NONE);        rt_kprintf("	request:IDLE
");        rt_pm_request(PM_SLEEP_MODE_IDLE);        break;    case 1:/* DEEP */    lptimer_stop();    lptimer_start();        rt_pm_release(PM_SLEEP_MODE_IDLE);        rt_kprintf("	request:DEEP
");        rt_pm_request(PM_SLEEP_MODE_DEEP);        break;    case 2:/* STANDBY */    lptimer_stop();    lptimer_start();        rt_pm_release(PM_SLEEP_MODE_DEEP);        rt_kprintf("	request:STANDBY
");        rt_pm_request(PM_SLEEP_MODE_STANDBY);        break;    case 3:/* NONE */    lptimer_stop();        rt_pm_release(PM_SLEEP_MODE_STANDBY);        rt_kprintf("	request:NONE
");        rt_pm_request(PM_SLEEP_MODE_NONE);        break;    default:        break;    }
    key_status++;    rt_pin_write(led2_pin, PIN_LOW);}
static void wakeup_callback(void* p){    rt_event_send(wakeup_event, WAKEUP_EVENT_BUTTON);}
void wakeup_sample(void){    /* init */    rt_uint32_t pin = rt_pin_get(USER_INPUT);    rt_kprintf("
 pin number : 0x%04X 
", pin);    rt_err_t err = rt_pin_attach_irq(pin, PIN_IRQ_MODE_RISING, wakeup_callback, RT_NULL);    if (RT_EOK != err)    {        rt_kprintf("
 attach irq failed. 
");    }    err = rt_pin_irq_enable(pin, PIN_IRQ_ENABLE);    if (RT_EOK != err)    {        rt_kprintf("
 enable irq failed. 
");    }}
static void wakeup_init(void){    wakeup_event = rt_event_create("wakup", RT_IPC_FLAG_FIFO);    RT_ASSERT(wakeup_event != RT_NULL);    wakeup_sample();}
static void pm_mode_init(void){    rt_pm_release_all(RT_PM_DEFAULT_SLEEP_MODE);    rt_pm_request(PM_SLEEP_MODE_NONE);}
void pm_test_entry(void* para){    /* 喚醒回調函數初始化 */  wakeup_init();
    /* 電源管理初始化 */    pm_mode_init();
  lptimer_init();
    while (1)    {        /* 等待喚醒事件 */        if (rt_event_recv(wakeup_event,                            WAKEUP_EVENT_BUTTON,                            RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR,                            RT_WAITING_FOREVER, RT_NULL) == RT_EOK)        {            led_app();        }    }}
int pm_test(void){
    rt_thread_t tid = rt_thread_create(            "pmtest",pm_test_entry,RT_NULL,512,10,10);    if(tid)        rt_thread_startup(tid);
    return 0;}MSH_CMD_EXPORT(pm_test, pm_test);// INIT_APP_EXPORT(pm_test);#endif

將DEMO代碼加入到工程中,可以直接添加到hal_entry.c或新建一個源文件。

測試驗證

然后編譯下載。開發板連接串口工具,輸入pm_test命令啟動測試DEMO。

按下S1按鈕切換工作模式,在DEEP、STANDBY模式下會啟動低功耗定時器,當定時喚醒后會打印出回調接口的提示信息。

b19b43a0-1250-11ed-ba43-dac502259ad0.png

經測試:

1)串口通中輸入“pm_test”,觀測到電流在8.6mA5.8mA之間變化。

2)按下S1后,串口通中打印信息為“requestIDLE”,此時電流約為2.2mA

3)再次按下S1后,串口通中打印信息為“requestDEEP”,此時電流約為1593uA,并間隔產生lptimer中斷。

4)再次按下S1后,串口通中打印信息為“requestSTANDBY”,此時電流約為2.4uA,并間隔產生lptimer中斷。

5)再次按下S1后,串口通中打印信息為“requestNONE”,恢復為(1)的電流值,然后可循環執行此流程。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17123

    瀏覽量

    350992
  • 瑞薩
    +關注

    關注

    35

    文章

    22308

    瀏覽量

    86240
  • RT-Thread
    +關注

    關注

    31

    文章

    1285

    瀏覽量

    40085

原文標題:基于瑞薩 RA2L1 MCU 的RT-Thread 低功耗應用筆記

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RT-Thread記錄(二、RT-Thread內核啟動流程)

    在前面我們RT-Thread Studio工程基礎之上講一講RT-Thread內核啟動流程.
    的頭像 發表于 06-20 00:30 ?5029次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(二、<b class='flag-5'>RT-Thread</b>內核啟動流程)

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發組(2015-03-31)。RT-Thread做為國內有較大影響力的開源實時操作系統,本文是RT-Thread實時操作系統的編程指南
    發表于 11-26 16:06 ?0次下載

    RT-Thread用戶手冊

    RT-Thread用戶手冊——本書是RT-Thread的編程手冊,用于指導在RT-Thread實時操作系統環境下如何進行編 程。
    發表于 11-26 16:16 ?0次下載

    STM32超低功耗之移植 RT-Thread PM 組件原理分析

    一, 認識 PM 組件在上一篇的文章中,介紹了如何移植 RT-Thread PM 組件,PM 組件的作用是通過 RTOS 來統一的管理,超低功耗是一個細致的工作,所以在使用的時候必須要知道 PM
    發表于 12-31 18:59 ?2次下載
    STM32超<b class='flag-5'>低功耗</b>之移植 <b class='flag-5'>RT-Thread</b> PM 組件原理分析

    RT-Thread全球技術大會:螢石研發團隊使用RT-Thread的技術挑戰

    RT-Thread全球技術大會:研發團隊使用RT-Thread的技術挑戰 ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 11:36 ?1307次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:螢石研發團隊使用<b class='flag-5'>RT-Thread</b>的技術挑戰

    RT-Thread全球技術大會:Kconfig在RT-Thread中的工作機制

    RT-Thread全球技術大會:Kconfig在RT-Thread中的工作機制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 14:49 ?1535次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:Kconfig在<b class='flag-5'>RT-Thread</b>中的工作機制

    RT-Thread全球技術大會:關于瑞薩RA2L1-CPK低功耗CPU演示

    RT-Thread全球技術大會:關于瑞薩RA2L1-CPK低功耗CPU演示 ? ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發表于 05-27 15:23 ?1377次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:關于瑞薩RA2L1-CPK<b class='flag-5'>低功耗</b>CPU演示

    RT-Thread全球技術大會:在RT-Thread上編寫測試用例

    RT-Thread全球技術大會:在RT-Thread上編寫測試用例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:28 ?1472次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:在<b class='flag-5'>RT-Thread</b>上編寫測試用例

    RT-Thread全球技術大會:RT-Thread測試用例集合案例

    RT-Thread全球技術大會:RT-Thread測試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:34 ?2095次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>測試用例集合案例

    RT-Thread學習筆記 RT-Thread的架構概述

    RT-Thread 簡介 作為一名 RTOS 的初學者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發現 RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發表于 07-09 11:27 ?4546次閱讀
    <b class='flag-5'>RT-Thread</b>學習筆記 <b class='flag-5'>RT-Thread</b>的架構概述

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    基于RT-Thread Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?3932次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學習

    RT-Thread v5.0.2 發布

    RT-Thread 代碼倉庫地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發布日志詳情: ●? htt
    的頭像 發表于 10-10 18:45 ?1464次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發布
    主站蜘蛛池模板: 欧洲精品一区二区不卡观看| 久久影院一区| 国产在线高清视频无码| 国产亚洲精品a在线观看app| 狠狠躁日日躁人人爽| 精品久久久久久久久免费影院| 久久热这里面只有精品| 女人久久WWW免费人成看片| 日本孕妇大胆孕交| 小p孩玩成年女性啪啪资源| 亚洲日本在线不卡二区| 757一本到午夜宫| 动漫美女被到爽了流漫画| 国产乱国产乱老熟300部视频 | 暖暖 免费 高清 日本 在线| 欧美一级黄色影院| 无遮挡h肉3d动漫在线观看 | 24小时日本免费看| 成年人国产视频| 嗨嗨快播电影| 免费一级片网站| 天天插天天舔| 稚嫩挤奶h调教h| 电影内射视频免费观看| 精品国产品国语在线不卡丶| 内射少妇三洞齐开| 香蕉59tv视频| 97超级碰碰人妻中文字幕| 国产成人在线视频播放| 久久精品综合电影| 三级aa久久| 伊人久久天堂| 高h浪荡文辣文神奇宝贝| 久久99re2在线视频精品| 人妻少妇偷人精品无码洋洋AV| 大迪克黑人异族| 狠狠色丁香婷婷久久综合五月| 女人高潮特级毛片| 亚洲区视频| 俄罗斯15一16处交| 伦理79电影网在线观看|