| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /*
- * @File name : driver_lowpwr.h
- * @Author : Bluetrum IOT Team
- * @Date : 2023-02-15
- * @Version : v1.0
- *
- * Copyright (c) by Bluetrum, All Rights Reserved.
- */
- #ifndef _DRIVER_LOWPWR_H
- #define _DRIVER_LOWPWR_H
- #include "driver_com.h"
- typedef enum {
- WK_EDGE_RISING = 0x00,
- WK_EDGE_FALLING = 0x01,
- } WK_EDGE_SEL;
- typedef enum {
- LP_TYPE_POWOFF = 0x00,
- LP_TYPE_SLEEP = 0x01,
- } LP_TYPE_SEL;
- typedef enum {
- WK_LP_ALARM = BIT(0),
- WK_LP_RTC_1S = BIT(1),
- WK_LP_WK0 = BIT(2),
- WK_LP_VUSB = BIT(3),
- WK_LP_INBOX = BIT(4),
- WK_LP_BT = BIT(5),
- WK_LP_TOUCH = BIT(6),
- WK_LP_GPIO = BIT(7),
- WK_LP_KEYSCAN = BIT(12),
- WK_LP_SRC_ALL = 0xFFFF,
- } WK_LP_SRC_SEL;
- typedef struct {
- u32 piccon;
- u32 picen;
- u32 picpr;
- u32 nmicon;
- u32 clkgat0;
- u32 clkgat1;
- u32 clkgat2;
- u32 pwrcon0;
- u32 pwrcon1;
- u32 pwrcon2;
- u32 xosccon;
- u32 pll0con;
- u32 pll0con1;
- u32 clkcon0;
- u32 clkcon1;
- u32 clkdivcon0;
- u16 gpioa_fen;
- u16 gpiob_fen;
- u16 gpioa_fdiren;
- u16 gpiob_fdiren;
- u16 gpioa_drv;
- u16 gpiob_drv;
- u16 rstcon0;
- u32 rtccon;
- u32 rtccon0;
- u32 rtccon12;
- u32 rtccon5;
- } lowpwr_sfr_backup_t;
- typedef struct {
- LP_TYPE_SEL lp_type;
- WK_LP_SRC_SEL source;
- WK_EDGE_SEL edge;
- gpio_typedef *gpiox;
- uint16_t gpio_pin;
- uint16_t gpio_pupd;
- } lowpwr_wakeup_typedef;
- u32 lowpwr_get_wakeup_source(void);
- void lowpwr_wakeup_disable(void);
- bool lowpwr_is_wakeup_pending(u32 ignore_src);
- void lowpwr_clr_wakeup_pending(void);
- void lowpwr_wakeup_config(lowpwr_wakeup_typedef *config);
- void lowpwr_wakeup_config_2(lowpwr_wakeup_typedef *config);
- void lowpwr_wakeup_source_enable(WK_LP_SRC_SEL wk_src);
- void lowpwr_wakeup_source_disable(WK_LP_SRC_SEL wk_src);
- void lowpwr_wk0_wakeup_config(lowpwr_wakeup_typedef *config);
- void lowpwr_gpio_wakeup_config(lowpwr_wakeup_typedef *config);
- void lowpwr_sleep_proc(u8 lpclk_type);
- uint32_t lowpwr_sleep_get_io_wksrc(void);
- void lowpwr_sleep_clr_io_wksrc(void);
- /**
- * @brief only rtc digital, vddio is disable, only wk0 can wakeup system
- */
- void lowpwr_pwroff_mode1_do(void);
- /**
- * @brief rtc digital,low power and vddio is enable, wk0, keyscan, touch and gpio can wakeup system
- */
- void lowpwr_pwroff_mode2_do(void);
- #endif
|