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

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

3天内不再提示

英飞凌PSC62 ALARM试验

华仔的编程随笔 来源:华仔的编程随笔 作者:华仔的编程随笔 2023-05-28 12:50 次阅读

目的

为了达到节能状态,采用RTCalarm唤醒睡眠。

  1. 开启RTC以及RTC alarm

image.png

  1. 修改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;

}
  1. 增加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;
    }
}
  1. 修改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;
}
  1. 修改主函数代码如下:
#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秒钟后唤醒

image.png

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

    关注

    2

    文章

    482

    浏览量

    65431
收藏 人收藏

    评论

    相关推荐

    英飞凌PSC62低功耗温湿度数据采集

    驱动hs3003温湿度传感器,采集完数据后进入深度睡眠模式,以达到节能的目的。
    的头像 发表于 05-30 09:05 41.5w次阅读
    <b class='flag-5'>英飞凌</b><b class='flag-5'>PSC62</b>低功耗温湿度数据采集

    英飞凌推出62mm CoolSiC™模块,为碳化硅开辟新应用领域

    62mm模块配备了英飞凌的CoolSiC MOSFET芯片,可实现极高的电流密度。其极低的开关损耗和传导损耗可以最大限度地减少冷却器件的尺寸。
    发表于 07-14 17:40 1344次阅读

    英飞凌PSoC™ 62开发板 -LCD ILI9341 8080 DEMO

    英飞凌开发板
    rx_ted
    发布于 :2024年03月07日 21:08:39

    DSP的PSC如何配置

    这个程序大概什么意思,逐句求解一下!/*Enable Function for PSC0*/void PSC0_lPSC_enable(unsigned int PD, unsigned int
    发表于 04-16 09:46

    tci6638 PowerSleepControl (PSC)问题

    在6638上开发使用了一些外设模块,如加速器等,  打开对应外设的时钟并初始化外设设置,使用一段时间后 需要通过psc控制来关闭对应外设模块的时钟输入以降低功耗 请问如果需要再次使用该外设模块,除了
    发表于 06-21 17:56

    请问这里的fCK_PSC指的是什么?

    计数器的时钟频率CK_CNT等于fCK_PSC/(PSC[15:0]+1)。这里的fCK_PSC指的是什么呢?
    发表于 10-16 03:17

    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

    回收英飞凌ic 收购英飞凌ic价格高

    ▄▅ TEL:135-3012-2202 ▄▅ QQ:8798-21252 ‖‖回收英飞凌ic ,回收英飞凌汽车ic,专业回收英飞凌ic,库存英飞凌汽车ic高价回收,汽车库存芯片专业回
    发表于 10-19 15:05

    浅谈基于Apollo3平台Alarm组件的移植

    ;rtdbg.h> static struct rt_rtc_device rtc_device; #ifdef RT_USING_ALARM静态 rt_err_t
    发表于 03-21 10:52

    英飞凌PSoC62 实现超低功耗温湿度计

    英飞凌PSoC62是一款Cortex-M0+与Cortex-M4的双内核MCU,其有着非常优秀的超低功耗性能。 温度计的器材 英飞凌PSoC62开发板 这是一款
    发表于 06-03 10:14

    英飞凌联合 RT-Thread 发布 PSoC™ 62 with CAPSENSE ™ evaluation kit开发板

    近日,RT-Thread 社区团队打造了新品开发板:英飞凌联合 RT-Thread 发布  PSoC 62 with CAPSENSE evaluation kit开发板 (以下简称PSoC
    的头像 发表于 04-13 01:35 1371次阅读

    MSC-2-11+和PSC-2-1-75A功分器介绍

    PSC-2-1-75A (+)是Mini-Circuits品牌下的一种功分器,PSC-2-1-75A (+)的工作温度-55°C至100°C,存储温度-55°C至100°C,功率输入(作为分流器)最大1W内部耗散最大0.125W。
    的头像 发表于 06-16 12:45 568次阅读