#include "mcu_power_sleep.h" #include "bsp/ml5238.h" #include "bsp/cs1180.h" #include "bsp/gpio.h" #include "bsp/spi.h" extern void system_clock_24m_irc8m(void); extern void system_clock_config(void); static void enable_wakeup_irq(void){ charger_detect_irq_enable(1); hall_1_detect_irq_enable(1); hall_2_detect_irq_enable(1); } static void pre_deepsleep(void){ #if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP700) UART0_IR_EN(0); UART1_IR_EN(0); #elif (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600) RS485_PWR_ENABLE(0); #endif CS1180_PWR_ENABLE(0); //uart0_deinit(); //uart1_deinit(); //gd32_i2c_deinit(); ml5238_power_save(1); //call, before spi0_deinit spi0_deinit(); spi1_deinit(); system_clock_24m_irc8m();//before dcdc off, should set clock to 24M, avoid ml5238's supply is not enough DCDC_VOL_OPEN(0); wdog_start(10); } static void post_deepsleep(void){ DCDC_VOL_OPEN(1); SystemInit(); system_clock_config(); spi0_init(); ml5238_power_save(0); CS1180_PWR_ENABLE(1); cs1180_adc_init(); #if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP700) UART0_IR_EN(1); UART1_IR_EN(1); #elif (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600) RS485_PWR_ENABLE(1); #endif //uart0_init(); //uart1_init(); //gd32_i2c_init(); wdog_start(4); } void mcu_enter_deepsleep(void){ pre_deepsleep(); enable_wakeup_irq(); pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD); post_deepsleep(); }