Переглянути джерело

disable xl irq when too much

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 5 роки тому
батько
коміт
eb85bfc1e7

+ 1 - 1
Project/version.txt

@@ -1 +1 @@
-PS100XX_V10_11111342
+PS100XX_V10_11111559

+ 3 - 2
Source/app.c

@@ -10,6 +10,7 @@
 #include "low_power.h"
 #include "app_end_ctr.h"
 #include "drv_io.h"
+#include "shark_xl.h"
 
 // CB_VAL cb_val_last;
 uint8_t cb_operate_state = CB_BAT_NO;
@@ -296,7 +297,7 @@ static u8 shark_battery_switch_single(void)
 static shark_bool shark_battery_series_enabled(void)
 {
 	if (QD_Dect()) {
-		if (shark_bms_xl_times > SHARK_XL_FUZZ) {
+		if (shark_xl_check()) {
 			return shark_false;
 		}
 
@@ -1225,7 +1226,7 @@ uint8_t Check_CB_BAT1_BAT2_SERIES(void)
 
 	if (shark_battery_get_series_error() != 0)
 	{
-		if (shark_bms_xl_times > SHARK_XL_FUZZ && QD_Dect()) {
+		if (shark_xl_check() && QD_Dect()) {
 			shark_battery_series_locked = shark_true;
 			println("series locked");
 		} else {

+ 6 - 5
Source/app_end_ctr.c

@@ -10,6 +10,7 @@
 #include "hardware_test.h"
 #include "drv_io.h"
 #include "measure_vol.h"
+#include "shark_xl.h"
 
 END_CTR_SELF_SEND_STATUS end_ctr_self_ss;
 END_CTR_SELF_SEND_STATUS end_ctr_self_ss_new;
@@ -593,11 +594,11 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 					buf[len++] = 0;
 					break;
 				case 4:
-					memcpy(buf + len, &shark_bms_xl_times, sizeof(shark_bms_xl_times));
-					len += sizeof(shark_bms_xl_times);
-					memcpy(buf + len, &shark_bms_xl_max, sizeof(shark_bms_xl_max));
-					len += sizeof(shark_bms_xl_max);
-					shark_bms_xl_max = 0;
+					memcpy(buf + len, &shark_xl_speed, sizeof(shark_xl_speed));
+					len += sizeof(shark_xl_speed);
+					memcpy(buf + len, &shark_xl_speed_max, sizeof(shark_xl_speed_max));
+					len += sizeof(shark_xl_speed_max);
+					shark_xl_speed_max = 0;
 					break;
 				case 5:
 					buf[len++] = sub_bms_info_1.packet_common.bms_status;

+ 2 - 1
Source/app_rs485_1.c

@@ -6,6 +6,7 @@
 #include "app_end_ctr.h"
 #include "drv_io.h"
 #include "measure_vol.h"
+#include "shark_xl.h"
 
 //uart1
 static uint8_t app_rs485_buf[TX_BUFFER_SIZE];
@@ -498,7 +499,7 @@ static shark_battery_exit_t shark_battery_is_normal_raw(SUB_BMS_INFO *info)
 			return SHARK_BATT_EXIT_485;
 		}
 
-		if (shark_bms_xl_times < SHARK_XL_FUZZ) {
+		if (shark_xl_check() == shark_false) {
 			return SHARK_BATT_EXIT_485;
 		}
 

+ 2 - 1
Source/delay.c

@@ -15,6 +15,7 @@
 #include "app_adas.h"
 #include "low_power.h"
 #include "hardware_test.h"
+#include "shark_xl.h"
 
 u64 shark_mseconds;
 
@@ -108,7 +109,7 @@ void SysTick_Handler(void)
 
 	}
 
-	shark_bms_xl_tick();
+	shark_xl_tick();
 	ACC2_PWM();
 	
 	Uart1_Time_Out();

+ 5 - 43
Source/drv_io.c

@@ -4,6 +4,7 @@
 #include "app_rs485_1.h"
 #include "app.h"
 #include "app_end_ctr.h"
+#include "shark_xl.h"
 
 CHECK_CHARGER check_charger;
 DELAY_COMMON side_stay_dec_delay;
@@ -31,10 +32,6 @@ static u16 shark_bms_acc2_error_times;
 static u16 shark_bms_acc2_work_times;
 
 u32 shark_bms_acc2_oc_times;
-u16 shark_bms_xl_times;
-u16 shark_bms_xl_max;
-u16 shark_bms_xl_count;
-u8 shark_bms_xl_skip;
 
 void QD_Enable_From(uint8_t on,uint8_t from)
 {
@@ -46,7 +43,7 @@ void QD_Enable_From(uint8_t on,uint8_t from)
 	println("qd: %d %d", on, from);
 
 	if (QD_Dect() == 0) {
-		shark_bms_xl_skip = 5;
+		shark_xl_skip = 3;
 	}
 
 	// Check_S11(on,FROM_QD);
@@ -59,36 +56,6 @@ uint8_t ACC2_Is_On(void)
 	return shark_bms_acc2_enabled;
 }
 
-void shark_bms_xl_tick(void)
-{
-	static u8 ticks;
-
-	if (ticks < XL_DEC_TIMEOUT) {
-		ticks++;
-
-		if (XL_Dect() == RESET) {
-			shark_bms_xl_count++;
-		}
-	} else {
-		ticks = 0;
-
-		if (shark_bms_xl_skip > 0) {
-			shark_bms_xl_skip--;
-			end_ctr_self_ss_new.xl_sta = 0;
-			shark_bms_xl_times = shark_bms_xl_max = 0;
-		} else {
-			if (shark_bms_xl_max < shark_bms_xl_times) {
-				shark_bms_xl_max = shark_bms_xl_times;
-			}
-
-			shark_bms_xl_times = shark_bms_xl_count;
-			end_ctr_self_ss_new.xl_sta = (shark_bms_xl_count > 0);
-		}
-
-		shark_bms_xl_count = 0;
-	}
-}
-
 void ACC2_PWM(void)
 {
 #if 0
@@ -186,11 +153,6 @@ void E_CTR_Dec_IRQ_Initial(void)
 	exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
     exti_interrupt_flag_clear(EXTI_0);
 
-	//XL
-	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_7);
-	exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
-    exti_interrupt_flag_clear(EXTI_7);
-
 #if CONFIG_BATT_DET_USE_IRQ
 	// BAT1 DET
 	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC, GPIO_PIN_SOURCE_2);
@@ -473,10 +435,10 @@ void EXTI5_9_IRQHandler(void)
 		qd_dec_delay.count = 0;
     }
 
-	if (RESET != exti_interrupt_flag_get(EXTI_7))
+	if (RESET != exti_flag_get(EXTI_7))
 	{  
-        exti_interrupt_flag_clear(EXTI_7);
-		shark_bms_xl_count++;
+		exti_flag_clear(EXTI_7);
+		shark_xl_isr();
     }
 	
 	if (RESET != exti_interrupt_flag_get(EXTI_8))

+ 0 - 4
Source/drv_io.h

@@ -88,10 +88,6 @@ extern uint8_t battery_charged_full;
 extern uint8_t QD_switch_from;
 
 extern u32 shark_bms_acc2_oc_times;
-extern u16 shark_bms_xl_times;
-extern u16 shark_bms_xl_max;
-extern u16 shark_bms_xl_count;
-extern u8 shark_bms_xl_skip;
 
 enum
 {

+ 7 - 6
Source/hardware_test.c

@@ -12,6 +12,7 @@
 #include "hardware_test.h"
 #include "measure_temprature.h"
 #include "app_end_ctr.h"
+#include "shark_xl.h"
 
 static uint8_t app_rs485_buf[TX_BUFFER_SIZE];
 uint8_t ht_mode = 0;
@@ -474,18 +475,18 @@ int8_t HT_Rsp_CMD(uint8_t *buf)
 			len = sizeof(HT_FRAME);
 			if(buf[len] == 1)
 			{
-				shark_bms_xl_count = 0;
-				delay_1ms(100);
-				if(shark_bms_xl_count)
+				shark_xl_speed_max = 0;
+				delay_1ms(CONFIG_XL_TICKS + 10);
+				if (shark_xl_speed_max)
 					buf[len++] = 1;
 				else
 					buf[len++] = 0;
 			}
 			else if(buf[len] == 2)
 			{
-				shark_bms_xl_count = 0;
-				delay_1ms(100);
-				if(shark_bms_xl_count)
+				shark_xl_speed_max = 0;
+				delay_1ms(CONFIG_XL_TICKS + 10);
+				if (shark_xl_speed_max)
 					buf[len++] = 1;
 				else
 					buf[len++] = 0;

+ 2 - 0
Source/main.c

@@ -15,6 +15,7 @@
 #include "hardware_test.h"
 #include "low_power.h"
 #include "sw_build_info.h"
+#include "shark_xl.h"
 
 
 #ifdef CONFIG_CAN_IAP
@@ -148,6 +149,7 @@ int main(void)
 
 	systick_config();
 
+	shark_xl_init();
 	Misc_Initial();
 
 	Sub_BMS_1_Initial();

+ 3 - 0
Source/shark_types.h

@@ -1,5 +1,8 @@
 #pragma once
 
+#include "stdio.h"
+#include "stdint.h"
+
 #define SHARK_BOOL(value)	((shark_bool) (value))
 #define SHARK_U64(value)	((shark_u64) (value))
 #define SHARK_U32(value)	((shark_u32) (value))

+ 41 - 0
Source/shark_xl.c

@@ -1,15 +1,56 @@
 #include "shark_xl.h"
 #include "common.h"
+#include "app_end_ctr.h"
+
+shark_u16 shark_xl_ticks;
+shark_u8 shark_xl_skip;
+
+shark_u16 shark_xl_speed_max;
+shark_u16 shark_xl_speed_tmp;
+shark_u16 shark_xl_speed;
 
 void shark_xl_init(void)
 {
+	rcu_periph_clock_enable(GPIO_RCU_XL);
 	gpio_init(GPIO_PORT_XL, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_XL);
+
+	gpio_exti_source_select(EXTI_PORT_XL, EXTI_PIN_XL);
+	exti_init(EXTI_XL, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
+	exti_interrupt_flag_clear(EXTI_XL);
 }
 
 void shark_xl_tick(void)
 {
+	if (shark_xl_ticks < CONFIG_XL_TICKS) {
+		shark_xl_ticks++;
+
+		if (gpio_input_bit_get(GPIO_PORT_XL, GPIO_PIN_XL) == RESET) {
+			shark_xl_speed_tmp++;
+		}
+	} else {
+		shark_xl_ticks = 0;
+
+		if (shark_xl_skip > 0) {
+			shark_xl_skip--;
+			shark_xl_speed = 0;
+		} else {
+			shark_xl_speed = shark_xl_speed_tmp;
+		}
+
+		end_ctr_self_ss_new.xl_sta = (shark_xl_speed > CONFIG_XL_MIN);
+
+		if (shark_xl_speed_max < shark_xl_speed) {
+			shark_xl_speed_max = shark_xl_speed;
+		}
+
+		shark_xl_speed_tmp = 0;
+		exti_interrupt_enable(EXTI_XL);
+	}
 }
 
 void shark_xl_isr(void)
 {
+	if (++shark_xl_speed_tmp > CONFIG_XL_MAX) {
+		exti_interrupt_disable(EXTI_XL);
+	}
 }

+ 24 - 0
Source/shark_xl.h

@@ -1,7 +1,31 @@
 #pragma once
 
+#include "shark_types.h"
+
 #define CONFIG_XL_MIN		50
 #define CONFIG_XL_MAX		100
+#define CONFIG_XL_TICKS		200
 
+#define GPIO_RCU_XL			RCU_GPIOB
 #define GPIO_PORT_XL		GPIOB
 #define GPIO_PIN_XL			GPIO_PIN_7
+
+#define EXTI_PORT_XL		GPIO_PORT_SOURCE_GPIOB
+#define EXTI_PIN_XL			GPIO_PIN_SOURCE_7
+#define EXTI_XL				EXTI_7
+
+extern shark_u16 shark_xl_ticks;
+extern shark_u8 shark_xl_skip;
+
+extern shark_u16 shark_xl_speed_max;
+extern shark_u16 shark_xl_speed_tmp;
+extern shark_u16 shark_xl_speed;
+
+void shark_xl_init(void);
+void shark_xl_tick(void);
+void shark_xl_isr(void);
+
+static shark_bool shark_xl_check(void)
+{
+	return shark_xl_speed > CONFIG_XL_MIN;
+}

+ 1 - 1
Source/sw_build_info.h

@@ -1,3 +1,3 @@
 #pragma once
 
-#define CONFIG_VERSION "PS100XX_V10_11111342"
+#define CONFIG_VERSION "PS100XX_V10_11111559"