mirror of
https://github.com/espressif/esp-idf.git
synced 2024-09-20 20:56:01 -04:00
131 lines
4.2 KiB
C
131 lines
4.2 KiB
C
|
// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
#pragma once
|
||
|
#include <stdint.h>
|
||
|
#include <stddef.h>
|
||
|
#include "soc/soc.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
|
||
|
typedef enum{
|
||
|
XTAL_40M = 40,
|
||
|
XTAL_26M = 26,
|
||
|
XTAL_24M = 24,
|
||
|
XTAL_AUTO = 0
|
||
|
} xtal_freq_t;
|
||
|
|
||
|
typedef enum{
|
||
|
CPU_XTAL = 0,
|
||
|
CPU_80M = 1,
|
||
|
CPU_160M = 2,
|
||
|
CPU_240M = 3,
|
||
|
CPU_2M = 4
|
||
|
} cpu_freq_t;
|
||
|
|
||
|
typedef enum {
|
||
|
CALI_RTC_MUX = 0,
|
||
|
CALI_8MD256 = 1,
|
||
|
CALI_32K_XTAL = 2
|
||
|
} cali_clk_t;
|
||
|
|
||
|
/**
|
||
|
* This function must be called to initialize RTC library
|
||
|
* @param xtal_freq Frequency of main crystal
|
||
|
*/
|
||
|
void rtc_init_lite(xtal_freq_t xtal_freq);
|
||
|
|
||
|
/**
|
||
|
* Switch CPU frequency
|
||
|
* @param cpu_freq new CPU frequency
|
||
|
*/
|
||
|
void rtc_set_cpu_freq(cpu_freq_t cpu_freq);
|
||
|
|
||
|
/**
|
||
|
* @brief Return RTC slow clock's period
|
||
|
* @param cali_clk clock to calibrate
|
||
|
* @param slow_clk_cycles number of slow clock cycles to average
|
||
|
* @param xtal_freq chip's main XTAL freq
|
||
|
* @return average slow clock period in microseconds, Q13.19 fixed point format
|
||
|
*/
|
||
|
uint32_t rtc_slowck_cali(cali_clk_t cali_clk, uint32_t slow_clk_cycles);
|
||
|
|
||
|
/**
|
||
|
* @brief Convert from microseconds to slow clock cycles
|
||
|
* @param time_in_us_h Time in microseconds, higher 32 bit part
|
||
|
* @param time_in_us_l Time in microseconds, lower 32 bit part
|
||
|
* @param slow_clk_period Period of slow clock in microseconds, Q13.19 fixed point format (as returned by rtc_slowck_cali).
|
||
|
* @param[out] cylces_h output, higher 32 bit part of number of slow clock cycles
|
||
|
* @param[out] cycles_l output, lower 32 bit part of number of slow clock cycles
|
||
|
*/
|
||
|
void rtc_usec2rtc(uint32_t time_in_us_h, uint32_t time_in_us_l, uint32_t slow_clk_period, uint32_t *cylces_h, uint32_t *cycles_l);
|
||
|
|
||
|
|
||
|
#define DEEP_SLEEP_PD_NORMAL BIT(0) /*!< Base deep sleep mode */
|
||
|
#define DEEP_SLEEP_PD_RTC_PERIPH BIT(1) /*!< Power down RTC peripherals */
|
||
|
#define DEEP_SLEEP_PD_RTC_SLOW_MEM BIT(2) /*!< Power down RTC SLOW memory */
|
||
|
#define DEEP_SLEEP_PD_RTC_FAST_MEM BIT(3) /*!< Power down RTC FAST memory */
|
||
|
|
||
|
/**
|
||
|
* @brief Prepare for entering sleep mode
|
||
|
* @param deep_slp DEEP_SLEEP_PD_ flags combined with OR (DEEP_SLEEP_PD_NORMAL must be included)
|
||
|
* @param cpu_lp_mode for deep sleep, should be 0
|
||
|
*/
|
||
|
void rtc_slp_prep_lite(uint32_t deep_slp, uint32_t cpu_lp_mode);
|
||
|
|
||
|
|
||
|
#define RTC_EXT_EVENT0_TRIG BIT(0)
|
||
|
#define RTC_EXT_EVENT1_TRIG BIT(1)
|
||
|
#define RTC_GPIO_TRIG BIT(2)
|
||
|
#define RTC_TIMER_EXPIRE BIT(3)
|
||
|
#define RTC_SDIO_TRIG BIT(4)
|
||
|
#define RTC_MAC_TRIG BIT(5)
|
||
|
#define RTC_UART0_TRIG BIT(6)
|
||
|
#define RTC_UART1_TRIG BIT(7)
|
||
|
#define RTC_TOUCH_TRIG BIT(8)
|
||
|
#define RTC_SAR_TRIG BIT(9)
|
||
|
#define RTC_BT_TRIG BIT(10)
|
||
|
|
||
|
|
||
|
#define RTC_EXT_EVENT0_TRIG_EN RTC_EXT_EVENT0_TRIG
|
||
|
#define RTC_EXT_EVENT1_TRIG_EN RTC_EXT_EVENT1_TRIG
|
||
|
#define RTC_GPIO_TRIG_EN RTC_GPIO_TRIG
|
||
|
#define RTC_TIMER_EXPIRE_EN RTC_TIMER_EXPIRE
|
||
|
#define RTC_SDIO_TRIG_EN RTC_SDIO_TRIG
|
||
|
#define RTC_MAC_TRIG_EN RTC_MAC_TRIG
|
||
|
#define RTC_UART0_TRIG_EN RTC_UART0_TRIG
|
||
|
#define RTC_UART1_TRIG_EN RTC_UART1_TRIG
|
||
|
#define RTC_TOUCH_TRIG_EN RTC_TOUCH_TRIG
|
||
|
#define RTC_SAR_TRIG_EN RTC_SAR_TRIG
|
||
|
#define RTC_BT_TRIG_EN RTC_BT_TRIG
|
||
|
|
||
|
/**
|
||
|
* @brief Enter sleep mode for given number of cycles
|
||
|
* @param cycles_h higher 32 bit part of number of slow clock cycles
|
||
|
* @param cycles_l lower 32 bit part of number of slow clock cycles
|
||
|
* @param wakeup_opt wake up reason to enable (RTC_xxx_EN flags combined with OR)
|
||
|
* @param reject_opt reserved, should be 0
|
||
|
* @return TBD
|
||
|
*/
|
||
|
uint32_t rtc_sleep(uint32_t cycles_h, uint32_t cycles_l, uint32_t wakeup_opt, uint32_t reject_opt);
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|