driver_lowpwr.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * @File name : driver_lowpwr.h
  3. * @Author : Bluetrum IOT Team
  4. * @Date : 2023-02-15
  5. * @Version : v1.0
  6. *
  7. * Copyright (c) by Bluetrum, All Rights Reserved.
  8. */
  9. #ifndef _DRIVER_LOWPWR_H
  10. #define _DRIVER_LOWPWR_H
  11. #include "driver_com.h"
  12. typedef enum {
  13. WK_EDGE_RISING = 0x00,
  14. WK_EDGE_FALLING = 0x01,
  15. } WK_EDGE_SEL;
  16. typedef enum {
  17. LP_TYPE_POWOFF = 0x00,
  18. LP_TYPE_SLEEP = 0x01,
  19. } LP_TYPE_SEL;
  20. typedef enum {
  21. WK_LP_ALARM = BIT(0),
  22. WK_LP_RTC_1S = BIT(1),
  23. WK_LP_WK0 = BIT(2),
  24. WK_LP_VUSB = BIT(3),
  25. WK_LP_INBOX = BIT(4),
  26. WK_LP_BT = BIT(5),
  27. WK_LP_TOUCH = BIT(6),
  28. WK_LP_GPIO = BIT(7),
  29. WK_LP_KEYSCAN = BIT(12),
  30. WK_LP_SRC_ALL = 0xFFFF,
  31. } WK_LP_SRC_SEL;
  32. typedef struct {
  33. u32 piccon;
  34. u32 picen;
  35. u32 picpr;
  36. u32 nmicon;
  37. u32 clkgat0;
  38. u32 clkgat1;
  39. u32 clkgat2;
  40. u32 pwrcon0;
  41. u32 pwrcon1;
  42. u32 pwrcon2;
  43. u32 xosccon;
  44. u32 pll0con;
  45. u32 pll0con1;
  46. u32 clkcon0;
  47. u32 clkcon1;
  48. u32 clkdivcon0;
  49. u16 gpioa_fen;
  50. u16 gpiob_fen;
  51. u16 gpioa_fdiren;
  52. u16 gpiob_fdiren;
  53. u16 gpioa_drv;
  54. u16 gpiob_drv;
  55. u16 rstcon0;
  56. u32 rtccon;
  57. u32 rtccon0;
  58. u32 rtccon12;
  59. u32 rtccon5;
  60. } lowpwr_sfr_backup_t;
  61. typedef struct {
  62. LP_TYPE_SEL lp_type;
  63. WK_LP_SRC_SEL source;
  64. WK_EDGE_SEL edge;
  65. gpio_typedef *gpiox;
  66. uint16_t gpio_pin;
  67. uint16_t gpio_pupd;
  68. } lowpwr_wakeup_typedef;
  69. u32 lowpwr_get_wakeup_source(void);
  70. void lowpwr_wakeup_disable(void);
  71. bool lowpwr_is_wakeup_pending(u32 ignore_src);
  72. void lowpwr_clr_wakeup_pending(void);
  73. void lowpwr_wakeup_config(lowpwr_wakeup_typedef *config);
  74. void lowpwr_wakeup_config_2(lowpwr_wakeup_typedef *config);
  75. void lowpwr_wakeup_source_enable(WK_LP_SRC_SEL wk_src);
  76. void lowpwr_wakeup_source_disable(WK_LP_SRC_SEL wk_src);
  77. void lowpwr_wk0_wakeup_config(lowpwr_wakeup_typedef *config);
  78. void lowpwr_gpio_wakeup_config(lowpwr_wakeup_typedef *config);
  79. void lowpwr_sleep_proc(u8 lpclk_type);
  80. uint32_t lowpwr_sleep_get_io_wksrc(void);
  81. void lowpwr_sleep_clr_io_wksrc(void);
  82. /**
  83. * @brief only rtc digital, vddio is disable, only wk0 can wakeup system
  84. */
  85. void lowpwr_pwroff_mode1_do(void);
  86. /**
  87. * @brief rtc digital,low power and vddio is enable, wk0, keyscan, touch and gpio can wakeup system
  88. */
  89. void lowpwr_pwroff_mode2_do(void);
  90. #endif