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

fix deepsleep power comsumer to 300uA

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

+ 11 - 0
Application/bsp/bsp.c

@@ -65,6 +65,17 @@ void bsp_init(void){
 	AT24CXX_Init();
 }
 
+void systick_close(void)
+{
+	SysTick->CTRL  &= ~SysTick_CTRL_ENABLE_Msk;
+}
+
+void systick_open(void)
+{
+	SysTick_Config(SystemCoreClock / 1000);
+}
+
+
 char* bsp_get_fversion(void){
 	return (char *)iap_fw_version;
 }

+ 4 - 3
Application/bsp/i2c.c

@@ -87,15 +87,16 @@ void gd32_i2c_deinit(uint32_t i2c_index){
 	uint32_t device = iic_device(i2c_index);
 	i2c_disable(device);
 	_i2c_deinit(device);
-	rcu_periph_clock_disable(RCU_I2C0);
 	if (device == I2C0) {
+		rcu_periph_clock_disable(RCU_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_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8|GPIO_PIN_9);
 		gpio_bit_set(GPIOB, GPIO_PIN_8);
 		gpio_bit_set(GPIOB, GPIO_PIN_9);
 	} else {
+		rcu_periph_clock_disable(RCU_I2C1);
 		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_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10|GPIO_PIN_11);
 		gpio_bit_set(GPIOB, GPIO_PIN_10);
 		gpio_bit_set(GPIOB, GPIO_PIN_11);
 	}

+ 3 - 0
Application/bsp/mcu_power_sleep.c

@@ -56,6 +56,8 @@ static void wait_for_enter_dsleep(void){
 }
 
 static void pre_deepsleep(void){
+	systick_close();
+	cs1180_cs(0);
 	CS1180_PWR_ENABLE(0);
 	shark_uart_deinit(SHARK_UART0);
 	shark_uart_deinit(SHARK_UART1);
@@ -100,6 +102,7 @@ static void post_deepsleep(void){
 	wdog_set_timeout(4);
 	current_calibrate();
 	wdog_reload();
+	systick_open();
 }
 
 void mcu_enter_deepsleep(void){

+ 2 - 0
Application/bsp/shark_bsp.h

@@ -38,5 +38,7 @@ void bsp_init(void);
 void wdog_start(int timeout);
 void wdog_reload(void);
 void  wdog_set_timeout(int timeout);
+void systick_close(void);
+void systick_open(void);
 
 

+ 4 - 1
Application/bsp/spi.c

@@ -35,6 +35,7 @@ void spi0_init(void){
 void spi0_deinit(void){
 	spi_disable(SPI0);
 	rcu_periph_clock_disable(RCU_SPI0);
+	gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
 }
 
 void spi1_init(void){
@@ -42,7 +43,8 @@ void spi1_init(void){
 	rcu_periph_clock_enable(RCU_GPIOB);
 	rcu_periph_clock_enable(RCU_SPI1);
 
-	gpio_mode_af(GPIOB, GPIO_PUPD_PULLUP, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
+	gpio_mode_af(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_13|GPIO_PIN_15);
+	gpio_mode_af(GPIOB, GPIO_PUPD_PULLUP, GPIO_PIN_14);
 	gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
 	gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
 
@@ -69,6 +71,7 @@ void spi1_init(void){
 void spi1_deinit(void){
 	spi_disable(SPI1);
 	rcu_periph_clock_disable(RCU_SPI1);
+	gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
 }
 
 

+ 13 - 0
Application/bsp/uart.c

@@ -253,9 +253,21 @@ static void shark_uart_pin_init(shark_uart_t *uart){
 		gpio_mode_set(SHARK_UART1_rx_port, GPIO_MODE_AF, GPIO_PUPD_PULLUP, SHARK_UART1_rx_pin);
 		gpio_output_options_set(SHARK_UART1_rx_port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,SHARK_UART1_rx_pin);
 	}
+}
 
+static void shark_uart_pin_deinit(shark_uart_t *uart){
+	if (_uart_index(uart->uart_com) == SHARK_UART0) {
+		gpio_mode_set(SHARK_UART0_tx_port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SHARK_UART0_tx_pin);
+		gpio_bit_set(SHARK_UART0_tx_port, SHARK_UART0_tx_pin);
+		gpio_mode_set(SHARK_UART0_rx_port, GPIO_MODE_INPUT, GPIO_PUPD_NONE, SHARK_UART0_rx_pin);
+	}else {
+		gpio_mode_set(SHARK_UART1_tx_port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SHARK_UART1_tx_pin);
+		gpio_bit_set(SHARK_UART1_tx_port, SHARK_UART1_tx_pin);
+		gpio_mode_set(SHARK_UART1_rx_port, GPIO_MODE_INPUT, GPIO_PUPD_NONE, SHARK_UART1_rx_pin);
+	}
 }
 
+
 static void shark_uart_device_init(shark_uart_t *uart){
 	usart_deinit(uart->uart_com);
 	usart_baudrate_set(uart->uart_com, SHARK_UART_BAUDRATE);
@@ -329,6 +341,7 @@ void shark_uart_deinit(uart_enum_t uart_no){
 		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);
 		rcu_periph_clock_disable(uart_no == SHARK_UART0?SHARK_UART0_rx_dma_clk:SHARK_UART1_rx_dma_clk);
+		shark_uart_pin_deinit(uart);
 	}
 	if (uart_no == SHARK_UART0) {
 		UART0_IR_EN(0);