| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include "mcu_power_sleep.h"
- #include "bsp/ml5238.h"
- #include "bsp/cs1180.h"
- #include "bsp/gpio.h"
- #include "bsp/spi.h"
- #include "bsp/uart.h"
- #include "bsp/i2c.h"
- extern void system_clock_24m_irc8m(void);
- extern void system_clock_config(void);
- extern void current_calibrate(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 disable_wakeup_irq(void){
- charger_detect_irq_enable(0);
- hall_1_detect_irq_enable(0);
- hall_2_detect_irq_enable(0);
- }
- 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);
- shark_uart_deinit(SHARK_UART0);
- shark_uart_deinit(SHARK_UART1);
- //gd32_i2c_deinit();
- UART0_IR_EN(0);
- UART0_IR_EN(0);
- ml5238_power_save(1); //call, before spi0_deinit
- spi0_deinit();
- spi1_deinit();
- gd32_i2c_deinit(0);
- 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
- shark_uart_init(SHARK_UART0);
- shark_uart_init(SHARK_UART1);
- gd32_i2c_init(0, 100* 1000);
- wdog_start(4);
- current_calibrate();
- }
- void mcu_enter_deepsleep(void){
- pre_deepsleep();
- enable_wakeup_irq();
- pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD);
- disable_wakeup_irq();
- post_deepsleep();
- }
|