Просмотр исходного кода

when sleep, set gpio mode to some function to reduce power consume

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 5 лет назад
Родитель
Сommit
92797bfd53

+ 1 - 1
Application/app/sox/measure.c

@@ -91,7 +91,7 @@ void current_calibrate(void){
 
 void measure_adc_init(void){
 	ml5238_init();
-	adc_init();
+	gd32_adc_init();
 	current_calibrate();
 	cs1180_adc_init();
 }

+ 1 - 1
Application/app/sox/state.c

@@ -12,7 +12,7 @@
 #include "state.h"
 #include "iostate.h"
 
-#define ALLOW_DEEP_SLEEP 0
+#define ALLOW_DEEP_SLEEP 1
 #define SLEEP_IGNORE_UNHEALTH 1
 #define ALLOW_POWER_DOWN 0 //disable power down for debug
 #define ALLOW_5238_BALANCE 1

+ 7 - 1
Application/bsp/gd32_adc.c

@@ -12,7 +12,7 @@ static int volatile adc_work = ADC_WORK_IDLE;
 #define dma_buf_len 66
 static uint16_t dma_buf[dma_buf_len]; 
 #endif
-void adc_init(void){
+void gd32_adc_init(void){
 	rcu_periph_clock_enable(RCU_GPIOA);
 	rcu_periph_clock_enable(RCU_GPIOB);	
 	gpio_mode_analog_input(GPIOA, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
@@ -42,6 +42,12 @@ void adc_init(void){
 #endif
 }
 
+
+void gd32_adc_deinit(void){
+	adc_deinit();
+	rcu_periph_clock_disable(RCU_ADC);
+}
+
 #ifdef DMA_ADC_CH
 void dma_config(void)
 {

+ 2 - 1
Application/bsp/gd32_adc.h

@@ -18,7 +18,8 @@
 
 int adc_sample(int chan, int calibration);
 int adc_sample_avg(int chan, int times);
+void gd32_adc_deinit(void);
 
-void adc_init(void);
+void gd32_adc_init(void);
 #endif /* _GD32_ADC_H__ */
 

+ 11 - 0
Application/bsp/i2c.c

@@ -88,6 +88,17 @@ void gd32_i2c_deinit(uint32_t i2c_index){
 	i2c_disable(device);
 	_i2c_deinit(device);
 	rcu_periph_clock_disable(RCU_I2C0);
+	if (device == I2C0) {
+		gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8|GPIO_PIN_9);
+		gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_8|GPIO_PIN_9);
+		gpio_bit_set(GPIOB, GPIO_PIN_8);
+		gpio_bit_set(GPIOB, GPIO_PIN_9);
+	} else {
+		gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10|GPIO_PIN_11);
+		gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_10|GPIO_PIN_11);
+		gpio_bit_set(GPIOB, GPIO_PIN_10);
+		gpio_bit_set(GPIOB, GPIO_PIN_11);
+	}
 }
 
 

+ 3 - 2
Application/bsp/mcu_power_sleep.c

@@ -8,6 +8,7 @@
 #include "bsp/shark_rtc.h"
 #include "bsp/AT24CXX.h"
 #include "app/sox/iostate.h"
+#include "bsp/gd32_adc.h"
 
 extern void system_clock_24m_irc8m(void);
 extern void system_clock_config(void);
@@ -49,7 +50,7 @@ static void pre_deepsleep(void){
 	spi0_deinit();
 	spi1_deinit();
 	AT24CXX_DeInit();
-	adc_deinit();
+	gd32_adc_deinit();
 	if (AUX_VOL_IS_OPEN()) {
 		AUX_VOL_OPEN(0);//we should close small power, before dcdc close
 		delay_us(1000);
@@ -75,7 +76,7 @@ static void post_deepsleep(void){
 	SystemCoreClockUpdate();
 	spi0_init();
 	ml5238_power_save(0);
-	adc_init();
+	gd32_adc_init();
 	CS1180_PWR_ENABLE(1);
 	cs1180_adc_init();
 	shark_uart_init(SHARK_UART0);

+ 1 - 1
Application/bsp/uart.c

@@ -312,7 +312,7 @@ void shark_uart_deinit(uart_enum_t uart_no){
 	if (uart->uart_com != 0) {
 		usart_disable(uart->uart_com);
 		usart_deinit(uart->uart_com);
-		rcu_periph_clock_enable(uart_no == SHARK_UART0?SHARK_UART0_clk:SHARK_UART1_clk);
+		rcu_periph_clock_disable(uart_no == SHARK_UART0?SHARK_UART0_clk:SHARK_UART1_clk);
 		dma_channel_disable(uart->rx_dma_ch);
 		dma_channel_disable(uart->tx_dma_ch);
 		rcu_periph_clock_disable(uart_no == SHARK_UART0?SHARK_UART0_tx_dma_clk:SHARK_UART1_tx_dma_clk);