目的
為了達到節能狀態,采用RTCalarm喚醒睡眠。
- 開啟RTC以及RTC alarm
- 修改drv_rtc.c中rtc_init,增加連擇時鐘源,代碼如下:
static rt_err_t _rtc_init(void)
{
#ifdef BSP_RTC_USING_LSE
Cy_RTC_SelectClockSource(CY_RTC_CLK_SELECT_WCO);
#else
Cy_RTC_SelectClockSource(CY_RTC_CLK_SELECT_ILO);
#endif
if (cyhal_rtc_init(&rtc_obj) != RT_EOK)
{
LOG_E("rtc init failed.");
return -RT_ERROR;
}
return RT_EOK;
}
- 增加alarm方面的函數如下:
static struct rt_alarm * p_alarm_hour = RT_NULL;
/* 鬧鐘的回調函數,多個鬧鐘,可以有多個回調函數,用于創建鬧鐘時注冊。鬧鐘時間到了,會執行此函數 */
static void alarm_hour_cb(rt_alarm_t alarm, time_t timestamp)
{
LOG_D("alarm_hour_cb ok!
");
}
static void rtc_alarm_hour_create(void)
{
static time_t now;
struct tm *p_tm;
struct rt_alarm_setup alarm_setup_test;
if (p_alarm_hour != RT_NULL)
return;
now = time(NULL);
p_tm = localtime(&now);
alarm_setup_test.flag = RT_ALARM_SECOND;
alarm_setup_test.wktime.tm_year = p_tm->tm_year;
alarm_setup_test.wktime.tm_mon = p_tm->tm_mon;
alarm_setup_test.wktime.tm_mday = p_tm->tm_mday;
alarm_setup_test.wktime.tm_wday = p_tm->tm_wday;
alarm_setup_test.wktime.tm_hour = p_tm->tm_hour + 1;
alarm_setup_test.wktime.tm_min = p_tm->tm_min;
alarm_setup_test.wktime.tm_sec = p_tm->tm_sec;
p_alarm_hour = rt_alarm_create(alarm_hour_cb, &alarm_setup_test);
}
static void rtc_alarm_hour_start(void)
{
if (p_alarm_hour != RT_NULL)
rt_alarm_start(p_alarm_hour);
}
static void rtc_alarm_hour_stop(void)
{
if (p_alarm_hour != RT_NULL)
rt_alarm_stop(p_alarm_hour);
}
static void rtc_alarm_hour_delete(void)
{
if (p_alarm_hour != RT_NULL)
{
if (rt_alarm_delete(p_alarm_hour) == RT_EOK)
p_alarm_hour = RT_NULL;
}
}
- 修改rt_hw_rtc_init函數,增加alarm創建與啟動。
static int rt_hw_rtc_init(void)
{
rt_err_t result = RT_EOK;
ifx32_rtc_dev.ops = &_rtc_ops;
if (rt_hw_rtc_register(&ifx32_rtc_dev, "rtc", RT_DEVICE_FLAG_RDWR, RT_NULL) != RT_EOK)
{
LOG_E("rtc init failed");
result = -RT_ERROR;
}
else
{
LOG_D("rtc init success");
}
/* 設置ALARM*/
rtc_alarm_hour_create();
rtc_alarm_hour_start();
return result;
}
- 修改主函數代碼如下:
#include
#include
#include "drv_gpio.h"
#define LED_PIN GET_PIN(0, 0)
#define USE_SECONDS_FOR_ALARM 10
#define LONG_GLITCH_DELAY_MS 100u /* in ms */
#define RTC_INTERRUPT_PRIORITY 3u
void set_rtc_alarm_date_time(void);
cyhal_rtc_t rtc_obj;
int main(void)
{
cy_rslt_t result;
__enable_irq();
rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
rt_thread_mdelay(500);
/* Initialize RTC */
cyhal_rtc_enable_event(&rtc_obj, CYHAL_RTC_ALARM, RTC_INTERRUPT_PRIORITY, true);
for (;;)
{
rt_kprintf("Go to DeepSleep mode
");
/* Set the RTC generate alarm after 10 seconds */
set_rtc_alarm_date_time();
cyhal_system_delay_ms(LONG_GLITCH_DELAY_MS);
/* Go to deep sleep */
cyhal_syspm_deepsleep();
rt_kprintf("Wakeup from DeepSleep mode
");
}
}
/*******************************************************************************/
void set_rtc_alarm_date_time(void)
{
cy_rslt_t result;
/* Print the RTC alarm time by UART */
//LOG_D("RTC alarm will be generated after 10 seconds
");
/* Set the RTC alarm for the specified number of seconds in the future by editing the macro(USE_SECONDS_FOR_ALARM) */
result = cyhal_rtc_set_alarm_by_seconds(&rtc_obj, USE_SECONDS_FOR_ALARM);
if (result != CY_RSLT_SUCCESS)
{
rt_kprintf("RTC alarm err
");
}
}
下載到開發板后,打開串口終端,顯示系統進入睡眠,然后在10秒鐘后喚醒
:
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
RTC
+關注
關注
2文章
528瀏覽量
66309
發布評論請先 登錄
相關推薦
英飛凌推出62mm CoolSiC?模塊,為碳化硅開辟新應用領域
該62mm模塊配備了英飛凌的CoolSiC MOSFET芯片,可實現極高的電流密度。其極低的開關損耗和傳導損耗可以最大限度地減少冷卻器件的尺寸。
發表于 07-14 17:40
?1576次閱讀
DSP的PSC如何配置
這個程序大概什么意思,逐句求解一下!/*Enable Function for PSC0*/void PSC0_lPSC_enable(unsigned int PD, unsigned int
發表于 04-16 09:46
PSC開啟模塊出現以下錯誤
(SOC_PSC_0_REGS, HW_PSC_EMIFA, PSC_POWERDOMAIN_ALWAYS_ON,PSC_MDCTL_NEXT_ENABLE);}但出現以下錯誤:unr
發表于 11-04 09:06
浙江常年大量回收英飛凌二手模塊系列IGBT模塊
模塊長期高價回收英飛凌IGBT模塊FF300R12KT3_E 300A,1200V,共發射極,用于矩陣開關,雙向變換器等 62mm ? 無錫不限量收購回收英飛凌IGBT模塊電話151-5220-9946QQ2360670759
發表于 02-24 17:06
回收英飛凌ic 收購英飛凌ic
▄▅ TEL:135-3012-2202 ▄▅ QQ:8798-21252 ‖‖回收英飛凌ic ,回收英飛凌汽車ic,專業回收英飛凌ic,庫存英飛凌汽車ic高價回收,汽車庫存芯片專業回
發表于 05-15 15:24
重慶市長期高價回收各種英飛凌IGBT型號模塊
長期高價回收英飛凌IGBT模塊FF300R12KT3_E 300A,1200V,共發射極,用于矩陣開關,雙向變換器等 62mm ?無錫不限量收購回收英飛凌IGBT模塊FF400R12KT3_E
發表于 09-17 19:23
英飛凌PSoC62 實現超低功耗溫濕度計
英飛凌PSoC62是一款Cortex-M0+與Cortex-M4的雙內核MCU,其有著非常優秀的超低功耗性能。
溫度計的器材
英飛凌PSoC62開發板 這是一款
發表于 06-03 10:14
Touch-activated Alarm circuits
Touch-activated Alarm,Attach trigger wire to the latch nut/bolt Isolate this Latch from any other metal parts
發表于 03-12 22:41
?731次閱讀
英飛凌聯合 RT-Thread 發布 PSoC? 62 with CAPSENSE ? evaluation kit開發板
近日,RT-Thread 社區團隊打造了新品開發板:英飛凌聯合 RT-Thread 發布 ?PSoC 62 with CAPSENSE evaluation kit開發板?(以下簡稱PSoC 6
【PSoC?62 for RT-Thread】RT-Thread攜手英飛凌舉辦嵌入式網絡應用開發沙龍,圓滿落幕!
題的線下沙龍!此次沙龍聚焦使用英飛凌科技PSoC62在RT-Thread Studio平臺上進行開發,并結合智能數據網關動手培訓為開發者們提供了深入了解英飛凌與學習使用RT-Thread的良好機會,吸引了近150余名工程師報名參
STM32定時器,當PSC為1時,定時器時鐘CK_CNT和CK_PSC的頻率為什么是一樣的
時鐘周期和狀態變化的概念 首先,時鐘信號是一種周期性的信號,比如CK_PSC信號。一個完整的時鐘周期包括從一個上升沿(信號從低電平變為高電平)開始,經過高電平階段、下降沿(信號從高電平變為低電平
評論