Beispiel #1
0
Datei: pm.c Projekt: A-Paul/RIOT
void IRAM_ATTR pm_off(void)
{
    DEBUG ("%s\n", __func__);

    /* suspend UARTs */
    for (int i = 0; i < 3; ++i) {
        REG_SET_BIT(UART_FLOW_CONF_REG(i), UART_FORCE_XOFF);
        uart_tx_wait_idle(i);
    }

    /* set all power down flags */
    uint32_t pd_flags = RTC_SLEEP_PD_DIG |
                        RTC_SLEEP_PD_RTC_PERIPH |
                        RTC_SLEEP_PD_RTC_SLOW_MEM |
                        RTC_SLEEP_PD_RTC_FAST_MEM |
                        RTC_SLEEP_PD_RTC_MEM_FOLLOW_CPU |
                        RTC_SLEEP_PD_VDDSDIO;

    rtc_sleep_config_t config = RTC_SLEEP_CONFIG_DEFAULT(pd_flags);
    config.wifi_pd_en = 1;
    config.rom_mem_pd_en = 1;
    config.lslp_meminf_pd = 1;

    /* Save current frequency and switch to XTAL */
    rtc_cpu_freq_t cpu_freq = rtc_clk_cpu_freq_get();
    rtc_clk_cpu_freq_set(RTC_CPU_FREQ_XTAL);

    /* set deep sleep duration to forever */
    rtc_sleep_set_wakeup_time(rtc_time_get() + ~0x0UL);

    /* configure deep sleep */
    rtc_sleep_init(config);
    rtc_sleep_start(RTC_TIMER_TRIG_EN, 0);

    /* Restore CPU frequency */
    rtc_clk_cpu_freq_set(cpu_freq);

    /* resume UARTs */
    for (int i = 0; i < 3; ++i) {
        REG_CLR_BIT(UART_FLOW_CONF_REG(i), UART_FORCE_XOFF);
        REG_SET_BIT(UART_FLOW_CONF_REG(i), UART_FORCE_XON);
        REG_CLR_BIT(UART_FLOW_CONF_REG(i), UART_FORCE_XON);
    }
}
Beispiel #2
0
//----初始化rtc实时时钟模块------------------------------------------------------
//功能:初始化RTC模块,主要进行外部中断1的初始化
//参数:模块初始化函数没有参数
//返回:true = 成功初始化,false = 初始化失败
//-----------------------------------------------------------------------------
u32 rtc_init(void)
{
    if(!rtc_spi_Config)
    {
        rtc_spi_Config = &pg_spi_Config;
        rtc_spi_Config->freq=CFG_RTC_SPI_SPEED;
        Spi_Init(CFG_RTC_SPI_BUS,rtc_spi_Config);
    }
/*---------------------test use only----------------------*/
    struct rtc_tm time,gtime;
    time.tm_sec    = 00;
    time.tm_min    = 12;
    time.tm_hour   = 16;
    time.tm_mday   = 15;
    time.tm_wday   = 2;
    time.tm_mon    = 4;
    time.tm_year   = 2014;
    //rtc_update_time(&time);
    rtc_time_get(&gtime);
/*---------------------test use only----------------------*/
    return 1;
}
Beispiel #3
0
time_t wmtime_time_get_posix(void)
{
	return rtc_time_get();
}
Beispiel #4
0
static void cal_rtc_time_get(t_rtc *rtc_time)
{
	rtc_time_get(rtc_time);
}