فهرست منبع

add battery shake flags

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 5 سال پیش
والد
کامیت
7caf18ccc8
5فایلهای تغییر یافته به همراه80 افزوده شده و 9 حذف شده
  1. 46 3
      Source/app.c
  2. 5 0
      Source/app.h
  3. 3 0
      Source/app_end_ctr.c
  4. 25 5
      Source/drv_io.c
  5. 1 1
      Source/sw_build_info.h

+ 46 - 3
Source/app.c

@@ -42,6 +42,8 @@ const double nhb_default = 600;
 SHENG_YU_LI_CHENG sheng_yu_li_cheng;
 DELAY_COMMON save_param_delay;
 
+static uint8_t shark_battery_shake;
+
 void Misc_Initial(void)
 {
 	GPIO_Initial();
@@ -721,8 +723,13 @@ void test_io(void)
 uint8_t Select_One_BAT(void)
 {
 	uint8_t temp_op = CB_BAT_NO;
-	
-	if(Is_Sub_BMS_1_Normal())
+	uint8_t shake = shark_battery_shake_get();
+
+	if (shake == 1) {
+		return CB_BAT2;
+	} else if (shake == 2) {
+		return CB_BAT1;
+	} else if(Is_Sub_BMS_1_Normal())
 	{
 		if(Is_Sub_BMS_2_Normal())
 		{
@@ -989,6 +996,10 @@ uint8_t Check_CB_BAT1_BAT2_SERIES(void)
 {
 	uint8_t temp_op = CB_MAX;
 	int32_t m_1_total_vol,m_2_total_vol;
+
+	if (shark_battery_shake_get() != 0) {
+		return Select_One_BAT();
+	}
 	
 	if(is_intelligent && CB_OPERATE_PRECEDENCE_PARRALLEL != PRE_SERIES)
 	{
@@ -1131,6 +1142,8 @@ void Power_On_Normal(uint8_t enable,uint8_t from)
 
 		Set_Enter_Sleep_Delay();
 
+		shark_battery_shake_clear();
+
 		
 #endif
 	}
@@ -1379,6 +1392,11 @@ uint8_t Change_Mode_Sub_BMS_PARRALLEL(void)
 uint8_t Change_Mode_Sub_BMS_SERIES(void)
 {
 	int32_t m_1_total_vol,m_2_total_vol;
+
+	if (shark_battery_shake_get() != 0) {
+		return 0;
+	}
+
 	//
 	if(!(cb_operate_state == CB_BAT1 || cb_operate_state == CB_BAT2))
 		return 0;
@@ -1639,7 +1657,7 @@ void Save_Neng_Hao_Bi(uint8_t *data,uint16_t len)
 	
 }
 
-void Save_Param_Time_Out(void)

+void Save_Param_Time_Out(void)
 {
 	if(save_param_delay.set)
 	{
@@ -1783,3 +1801,28 @@ void Save_Param(void)
 	Save_Neng_Hao_Bi((uint8_t *)&sheng_yu_li_cheng.sy_ss_parm,sizeof(sheng_yu_li_cheng.sy_ss_parm));
 }
 
+uint8_t shark_battery_shake_get_raw(void)
+{
+	return shark_battery_shake;
+}
+
+uint8_t shark_battery_shake_get(void)
+{
+	if (QD_Dect() == 0) {
+		return 0;
+	}
+
+	return shark_battery_shake;
+}
+
+void shark_battery_shake_set(uint8_t mask)
+{
+	if (QD_Dect() != 0) {
+		shark_battery_shake |= mask;
+	}
+}
+
+void shark_battery_shake_clear(void)
+{
+	shark_battery_shake = 0;
+}

+ 5 - 0
Source/app.h

@@ -232,5 +232,10 @@ void Save_Param_Time_Out(void)
;
 
 void Save_Param(void);
 
+uint8_t shark_battery_shake_get_raw(void);
+uint8_t shark_battery_shake_get(void);
+void shark_battery_shake_set(uint8_t mask);
+void shark_battery_shake_clear(void);
+
 #endif
 

+ 3 - 0
Source/app_end_ctr.c

@@ -607,6 +607,9 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 					len += sizeof(voltage);
 					break;
 				}
+				case 6:
+					buf[len++] = shark_battery_shake_get_raw();
+					break;
 				default:
 					buf[len++] = 0;
 					break;

+ 25 - 5
Source/drv_io.c

@@ -2,6 +2,7 @@
 #include "drv_io.h"
 #include "hardware_test.h"
 #include "app_rs485_1.h"
+#include "app.h"
 
 CHECK_CHARGER check_charger;
 DELAY_COMMON side_stay_dec_delay;
@@ -155,7 +156,17 @@ void E_CTR_Dec_IRQ_Initial(void)
 	exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
     exti_interrupt_flag_clear(EXTI_7);
 
-	
+	// BAT1 DET
+	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC, GPIO_PIN_SOURCE_2);
+	exti_init(EXTI_2, EXTI_INTERRUPT, EXTI_TRIG_RISING);
+	exti_interrupt_flag_clear(EXTI_2);
+	nvic_irq_enable(EXTI2_IRQn, 1, 0);
+
+	// BAT2 DET
+	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC, GPIO_PIN_SOURCE_1);
+	exti_init(EXTI_1, EXTI_INTERRUPT, EXTI_TRIG_RISING);
+	exti_interrupt_flag_clear(EXTI_1);
+	nvic_irq_enable(EXTI1_IRQn, 1, 0);
 }
 void E_CTR_Initial(void)
 {
@@ -352,14 +363,23 @@ void EXTI0_IRQHandler(void)
 		acc2_dec_delay.count = 0;
     }
 }
+
 void EXTI1_IRQHandler(void)
 {
+	if (RESET != exti_flag_get(EXTI_1)) {
+		exti_flag_clear(EXTI_1);
+		shark_battery_shake_set(2);
+	}
+}
 
-	if (RESET != exti_interrupt_flag_get(EXTI_1))
-	{  
-        exti_interrupt_flag_clear(EXTI_1);
-    }
+void EXTI2_IRQHandler(void)
+{
+	if (RESET != exti_flag_get(EXTI_2)) {
+		exti_flag_clear(EXTI_2);
+		shark_battery_shake_set(1);
+	}
 }
+
 void EXTI3_IRQHandler(void)
 {
 	if (RESET != exti_interrupt_flag_get(EXTI_3))

+ 1 - 1
Source/sw_build_info.h

@@ -1,3 +1,3 @@
 #pragma once
 
-#define CONFIG_VERSION "PS100XX_V01_0C211439"
+#define CONFIG_VERSION "PS100XX_V01_0C241436"