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

work for cs1180

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

+ 2 - 3
Application/app/main.c

@@ -1,11 +1,10 @@
 #include "bsp/shark_bsp.h"
 #include "bsp/shark_bsp.h"
-#include "app/iv_measure.h"
 #include "libs/shark_task.h"
 #include "libs/shark_task.h"
-
+#include "app/sox/state.h"
 int main(void)
 int main(void)
 {
 {
 	bsp_init();
 	bsp_init();
-	measure_system_init();
+	bms_state_init();
 	shark_task_run();
 	shark_task_run();
 	return 0;
 	return 0;
 }
 }

+ 63 - 33
Application/app/iv_measure.c → Application/app/sox/sense_measure.c

@@ -1,10 +1,11 @@
-#include "iv_measure.h"
+#include "sense_measure.h"
 #include "bsp/ml5238.h"
 #include "bsp/ml5238.h"
 #include "bsp/cs1180.h"
 #include "bsp/cs1180.h"
 #include "bsp/gd32_adc.h"
 #include "bsp/gd32_adc.h"
 #include "bsp/clock.h"
 #include "bsp/clock.h"
 #include "bsp/gpio.h"
 #include "bsp/gpio.h"
 #include "bsp/temp_lookup_tab.h"
 #include "bsp/temp_lookup_tab.h"
+#include "bsp/shark_bsp.h"
 /* measure the temp & current & voltage for battery pack by using
 /* measure the temp & current & voltage for battery pack by using
  * ms5238 & cs1180(only used when bms is in small current loading)
  * ms5238 & cs1180(only used when bms is in small current loading)
 */
 */
@@ -18,18 +19,19 @@ static float imon_gain_now;
 static float vim0_10x = 0.0f;
 static float vim0_10x = 0.0f;
 static float vim0_50x = 0.0f;
 static float vim0_50x = 0.0f;
 static float vim0_now;
 static float vim0_now;
-#if defined CONFIG_BOARD_SP700
-#define r_resistor 1.0f // 1ºÁÅ·
-#elif defined CONFIG_BOARD_SP600
-#define r_resistor 2.0f
-#endif
+
+#define gain_default_50x 1
+
 #define r_pcb_resistor 0.0f // pcb resistor
 #define r_pcb_resistor 0.0f // pcb resistor
 static const float r_sense = r_resistor + r_pcb_resistor;
 static const float r_sense = r_resistor + r_pcb_resistor;
-static const float v_ref = 3300.0f; //adc ref = 3.3v
-static const float max_adc = 65535.0f;
+static const float v_gd_ref = 3300.0f; //adc ref = 3.3v
+static const float max_gd_adc = 65535.0f;
+static const float v_cs1180_ref = 1235.0f;//cs1180 vref = 1.235v
+static const float max_cs1180_adc = 0x7FFFF;//
 static const float small_cur_r_sense = 360.0f;//mo
 static const float small_cur_r_sense = 360.0f;//mo
+static uint8_t adc_used = GD32_ADC;////CS1180_ADC;
 
 
-static void __inline__ select_gain_10x(int select){
+static void __inline__ select_gain_10x(int select){	
 	if (select){
 	if (select){
 		ML5238_IMON_OUT_10X();
 		ML5238_IMON_OUT_10X();
 		imon_gain_now = imon_gain_10x;
 		imon_gain_now = imon_gain_10x;
@@ -45,68 +47,96 @@ static int __inline__ _is_x10_gain(void){
 	return imon_gain_now == imon_gain_10x;
 	return imon_gain_now == imon_gain_10x;
 }
 }
 
 
-/*calibrate when startup && temperature is changed more than 5? degree
-* calibrate the ms5238's IMON output voltage gain
-*/
-void current_calibrate(void){
+static void current_10x_calibrate(void){
 	/* calibrate the 10x gain */
 	/* calibrate the 10x gain */
 	ML5238_IMON_OUT_ZERO_10X();
 	ML5238_IMON_OUT_ZERO_10X();
-	vim0_10x = adc_sample(ADC_CHAN_IMON ,TRUE);
+	vim0_10x = adc_sample_avg(ADC_CHAN_IMON, 130);
 	ML5238_IMON_OUT_V2000_10X();
 	ML5238_IMON_OUT_V2000_10X();
-	float vim1 = adc_sample(ADC_CHAN_IMON, FALSE);
+	float vim1 = adc_sample_avg(ADC_CHAN_IMON, 130);
 	ML5238_IMON_OUT_V100_10X();
 	ML5238_IMON_OUT_V100_10X();
-	float vr = adc_sample(ADC_CHAN_IMON, FALSE);
+	float vr = adc_sample_avg(ADC_CHAN_IMON, 130);
 	imon_gain_10x = ML5238_GAIN(vim0_10x, vim1, vr);
 	imon_gain_10x = ML5238_GAIN(vim0_10x, vim1, vr);
+}
 
 
+static void current_50x_calibrate(void){
 	/* calibrate the 50x gain */
 	/* calibrate the 50x gain */
 	ML5238_IMON_OUT_ZERO_50X();
 	ML5238_IMON_OUT_ZERO_50X();
-	vim0_50x = adc_sample(ADC_CHAN_IMON ,TRUE);
+	vim0_50x = adc_sample_avg(ADC_CHAN_IMON, 130);
 	ML5238_IMON_OUT_V2000_50X();
 	ML5238_IMON_OUT_V2000_50X();
-	vim1 = adc_sample(ADC_CHAN_IMON, FALSE);
+	float vim1 = adc_sample_avg(ADC_CHAN_IMON, 130);
 	ML5238_IMON_OUT_V100_50X();
 	ML5238_IMON_OUT_V100_50X();
-	vr = adc_sample(ADC_CHAN_IMON, FALSE);
+	float vr = adc_sample_avg(ADC_CHAN_IMON, 130);
 	imon_gain_50x = ML5238_GAIN(vim0_50x, vim1, vr);
 	imon_gain_50x = ML5238_GAIN(vim0_50x, vim1, vr);
+}
 
 
-	select_gain_10x(0);//default gain is 50x, if 50x overflow, use 10x
-
+/*calibrate when startup && temperature is changed more than 5? degree
+* calibrate the ms5238's IMON output voltage gain
+*/
+void current_calibrate(void){
+#ifdef gain_default_50x
+	current_50x_calibrate();
+	select_gain_10x(0);
+#else
+	current_10x_calibrate();
+	select_gain_10x(1);
+#endif
 }
 }
 
 
+
 void measure_system_init(void){
 void measure_system_init(void){
-	adc_init();
 	ml5238_init();
 	ml5238_init();
-	//cs1180_init();
+	adc_init();
+	cs1180_adc_init();
 	current_calibrate();
 	current_calibrate();
 }
 }
 
 
 /* get battery pack's current (mA) */
 /* get battery pack's current (mA) */
-float get_imon_current(void){
-	float adc = adc_sample(ADC_CHAN_IMON, TRUE);
+static float get_pack_current_by_gd(void){
+	float adc = adc_sample_avg(ADC_CHAN_IMON, 130);
 	if (adc >= 0xFFF0 && (!_is_x10_gain())){//overflow, use 10x gain
 	if (adc >= 0xFFF0 && (!_is_x10_gain())){//overflow, use 10x gain
+		current_10x_calibrate();
 		select_gain_10x(1);
 		select_gain_10x(1);
-		adc = adc_sample(ADC_CHAN_IMON, TRUE);
+		adc = adc_sample_avg(ADC_CHAN_IMON, 130);
 	}else if (adc <= 0x1F && (_is_x10_gain())){// is too small, select 50x gain
 	}else if (adc <= 0x1F && (_is_x10_gain())){// is too small, select 50x gain
+		current_50x_calibrate();
 		select_gain_10x(0); 
 		select_gain_10x(0); 
-		adc = adc_sample(ADC_CHAN_IMON, TRUE);		
+		adc = adc_sample_avg(ADC_CHAN_IMON, 130);		
 	}
 	}
 	float cali_adc = ML5238_V_RSENSER(adc, vim0_now, imon_gain_now);
 	float cali_adc = ML5238_V_RSENSER(adc, vim0_now, imon_gain_now);
 
 
-	return (cali_adc / max_adc) * v_ref / r_sense * 1000;
+	return (cali_adc / max_gd_adc) * v_gd_ref / r_sense * 1000;
+}
+
+static float get_pack_current_by_cs1180(void){
+	float adc = cs1180_adc_sample();
+
+	return (adc / max_cs1180_adc) * v_cs1180_ref / r_sense * 1000;
 }
 }
 
 
+
+float get_pack_current(void){
+	if (adc_used == CS1180_ADC){
+		return get_pack_current_by_cs1180();
+	}
+	return get_pack_current_by_gd();
+}
+
+
+
 /* get cell's voltage (mV) */
 /* get cell's voltage (mV) */
-float get_vmon_voltage(int cell){
-	ml5238_select_cell_to_vmon(cell);
+float get_cell_voltage(int cell){
+	ML5238_SELECT_CELL(cell);
 	delay_us(100);
 	delay_us(100);
-	float adc = adc_sample(ADC_CHAN_VMON, TRUE);
+	float adc = adc_sample_avg(ADC_CHAN_VMON, 34);
 
 
-	return cell_real_vol((adc / max_adc) * v_ref);
+	return cell_real_vol((adc / max_gd_adc) * v_gd_ref);
 }
 }
 
 
 /* get battery pack's aux current (mA) */
 /* get battery pack's aux current (mA) */
 float get_small_current(void){
 float get_small_current(void){
 	float adc = adc_sample(ADC_CHAN_AUX_CURR, TRUE);
 	float adc = adc_sample(ADC_CHAN_AUX_CURR, TRUE);
 
 
-	return (adc / max_adc * v_ref) / small_cur_r_sense * 1000;
+	return (adc / max_gd_adc * v_gd_ref) / small_cur_r_sense * 1000;
 }
 }
 
 
 int get_pcb_temperature(void){
 int get_pcb_temperature(void){

+ 2 - 2
Application/app/iv_measure.h → Application/app/sox/sense_measure.h

@@ -1,8 +1,8 @@
 #ifndef _IV_Measure_H__
 #ifndef _IV_Measure_H__
 #define _IV_Measure_H__
 #define _IV_Measure_H__
 void measure_system_init(void);
 void measure_system_init(void);
-float get_imon_current(void);
-float get_vmon_voltage(int cell);
+float get_pack_current(void);
+float get_cell_voltage(int cell);
 float get_small_current(void);
 float get_small_current(void);
 int get_pcb_temperature(void);
 int get_pcb_temperature(void);
 int get_pack_temperature(int index);
 int get_pack_temperature(int index);

+ 91 - 0
Application/app/sox/state.c

@@ -0,0 +1,91 @@
+#include "bsp/gpio.h"
+#include "app/sox/sense_measure.h"
+#include "libs/shark_task.h"
+#include "state.h"
+static bms_state_t _bms_state;
+
+struct means_task {
+	shark_task_t _task;
+	u32 delay;
+	u8  index;
+};
+static void init_pack_current_task(void);
+static void init_cell_task(void);
+static void init_temp_task(void);
+
+void bms_state_init(void){
+	measure_system_init();
+	init_pack_current_task();
+	init_cell_task();
+	init_temp_task();
+}
+
+bms_state_t * bms_state_get(void){
+	return &_bms_state;
+}
+
+/***********************************************************************/
+static struct means_task _pack_current_task;
+static u32 pack_current_task_handler(void);
+static void init_pack_current_task(void){
+	_pack_current_task._task.handler = pack_current_task_handler;
+	_pack_current_task.delay = 60;
+	_pack_current_task.index = 0;
+	shark_task_add(&_pack_current_task._task);
+}
+
+static u32 pack_current_task_handler(void){
+	_bms_state.load_current = get_pack_current();
+	return _pack_current_task.delay;
+}
+/***********************************************************************/
+static struct means_task _cell_task;
+static u32 cell_task_handler(void);
+static void init_cell_task(void){
+	_cell_task._task.handler = cell_task_handler;
+	_cell_task.delay = 60;
+	_cell_task.index = 0;
+	shark_task_add(&_cell_task._task);
+}
+
+static u32 cell_task_handler(void){
+	_bms_state.cell_vol[_cell_task.index] = get_cell_voltage(_cell_task.index);
+	_cell_task.index = (_cell_task.index + 1) % CELLS_NUM;
+	
+	return _cell_task.delay;
+}
+
+/***********************************************************************/
+static struct means_task _temp_task;
+static u32 temp_task_handler(void);
+static void init_temp_task(void){
+	_temp_task._task.handler = temp_task_handler;
+	_temp_task.delay = 5 * 1000;
+	_temp_task.index = 0;
+	_bms_state.pcb_temp = 0xFF;
+	_bms_state.pack_temp[0] = 0xFF;
+	_bms_state.pack_temp[1] = 0xFF;
+	_bms_state.pack_temp[2] = 0xFF;
+	shark_task_add(&_temp_task._task);
+}
+static u32 temp_task_handler(void){
+	switch(_temp_task.index) {
+		case 0:
+			_bms_state.pcb_temp = get_pcb_temperature();
+			break;
+		case 1:
+		case 2:
+		case 3:
+			_bms_state.pack_temp[_temp_task.index - 1] = get_pack_temperature(_temp_task.index - 1);
+			break;
+		default:
+			break;
+	}
+
+	_temp_task.index = (_temp_task.index + 1) % (PACK_TEMPS_NUM + 1);
+	if (_bms_state.pack_temp[0] == 0xFF || _bms_state.pack_temp[0] == 0xFF || _bms_state.pack_temp[1] == 0xFF
+		|| _bms_state.pack_temp[2] == 0xFF){
+		return 0;//read all temps ASAP
+	}
+	return _temp_task.delay;
+}

+ 32 - 0
Application/app/sox/state.h

@@ -0,0 +1,32 @@
+#ifndef _BMS_STATE_H__
+#define _BMS_STATE_H__
+#include "bsp/shark_bsp.h"
+
+#define BATT_USED_BY_NONE       0
+#define BATT_USED_BY_MOTOR_BIKE 1
+#define BATT_USED_BY_CHARGER_DOCKER 2
+#define HATT_USED_BY_CHARGER_BOX 3
+
+typedef struct{
+	uint32_t hall_1_detect:1;
+	uint32_t hall_2_detect:1;
+	uint32_t discharging :1;
+	uint32_t charging: 1;
+	uint32_t charger_detect :1;
+	uint32_t pack_balancing:1;
+	uint32_t mosfet_charger:1; //charger MOS open/close, synced with 5238
+	uint32_t mosfet_discharger:1; //discharger MOS open/close, synced with 5238
+	uint32_t small_current_switch:1;
+	float small_current;
+	float load_current;//may be discharger or charger current
+	int      pcb_temp;
+	int      pack_temp[PACK_TEMPS_NUM];
+	uint16_t cell_vol[CELLS_NUM]; //mV
+	int      used_by;//where this battery is used for: on motor, on charger docker, on charger box, NONE
+}bms_state_t;
+
+void bms_state_init(void);
+bms_state_t * bms_state_get(void);
+
+#endif /* _BMS_STATE_H__ */
+

+ 116 - 121
Application/bsp/cs1180.c

@@ -1,6 +1,8 @@
 #include <string.h>
 #include <string.h>
 #include "spi.h"
 #include "spi.h"
 #include "cs1180.h"
 #include "cs1180.h"
+#include "clock.h"
+
 #define CS1180_RDATA    0X01
 #define CS1180_RDATA    0X01
 #define CS1180_RDATAC   0X03
 #define CS1180_RDATAC   0X03
 #define CS1180_STOPC    0x0f
 #define CS1180_STOPC    0x0f
@@ -16,178 +18,171 @@
 #define CS1180_SLEEP    0xfd
 #define CS1180_SLEEP    0xfd
 #define CS1180_RESET    0xfe
 #define CS1180_RESET    0xfe
 
 
-#define GAIN 0x07
-
-static void cs1180_write_one_data(uint8_t data);
-static uint8_t cs1180_read_one_data(uint8_t data);
-
-static void delay(void)
-{
-	uint32_t  count = 3;
-	while(count--); 
-}
-static void delay_50us(void)
-{
-	uint32_t  count = 3*50;
-	while(count--); 
-}
+static float _cs1180_gain = 1.0f;
+#define CS1180_INIT_GAIN CS1180_GAIN_128X
 
 
-static void delay_1ms(int ms){
-}
+static int cs1180_send_cmd(uint8_t data);
+static uint8_t cs1180_read_data(uint8_t data);
 
 
 static void spi_write_reg(uint8_t reg, uint8_t *data, uint8_t len){
 static void spi_write_reg(uint8_t reg, uint8_t *data, uint8_t len){
-	cs1180_cs(0);
-	cs1180_write_one_data(CS1180_WREG|reg);
-	cs1180_write_one_data(len - 1);
+	cs1180_send_cmd(CS1180_WREG|reg);
+	cs1180_send_cmd(len - 1);
 	while(len -- > 0){
 	while(len -- > 0){
-		cs1180_write_one_data(*data);
+		cs1180_send_cmd(*data);
 		data++;
 		data++;
 	}
 	}
 }
 }
 
 
-#if 0
+
 static void spi_read_reg(uint8_t reg, uint8_t *data, uint8_t len){
 static void spi_read_reg(uint8_t reg, uint8_t *data, uint8_t len){
-	cs1180_cs(0);
-	cs1180_write_one_data(CS1180_RREG|reg);
-	cs1180_write_one_data(len - 1);
+	cs1180_send_cmd(CS1180_RREG|reg);
+	cs1180_send_cmd(len - 1);
 	while(len -- > 0){
 	while(len -- > 0){
-		*data = cs1180_read_one_data(0xFF);
+		*data = cs1180_read_data(0xFF);
 		data++;
 		data++;
 	}
 	}
 }
 }
-#endif
-static void cs1180_osalsys(void)
+
+
+/* 对芯片的偏移误差和增益误差进行纠正 */
+static void cs1180_self_calibrate(void)
 {
 {
 	cs1180_cs(0);
 	cs1180_cs(0);
-	delay();
-	cs1180_write_one_data(CS1180_OCALSYS);
-	delay_50us();
+	delay_us(10);
+	cs1180_send_cmd(CS1180_CALSELF);
+	delay_us(1);
 	cs1180_cs(1);
 	cs1180_cs(1);
+	delay_us(50);
+	/* wait calibrate finished */
+	while (IS_CS1180_READY());
+	while (!IS_CS1180_READY());
 }
 }
 
 
-static void cs1180_calibSelf(void)
+/* 对芯片的偏移误差进行纠正 */
+__attribute__((unused)) static void cs1180_self_offset_calibrate(void)
 {
 {
 	cs1180_cs(0);
 	cs1180_cs(0);
-	delay();
-	cs1180_write_one_data(CS1180_CALSELF);
-	delay_50us();
+	cs1180_send_cmd(CS1180_OCALSELF);
 	cs1180_cs(1);
 	cs1180_cs(1);
+	delay_us(50);
+	/* wait calibrate finished */
+	while (IS_CS1180_READY());
+	while (!IS_CS1180_READY());
 }
 }
 
 
-
-void cs1180_init(void){
-	spi1_init();
-	delay();
+/* 对芯片的增益误差进行纠正 */
+__attribute__((unused)) static void cs1180_self_gain_calibrate(void)
+{
 	cs1180_cs(0);
 	cs1180_cs(0);
-	cs1180_write_one_data(CS1180_RESET);
-	delay();
+	cs1180_send_cmd(CS1180_SLFGCAL);
 	cs1180_cs(1);
 	cs1180_cs(1);
+	delay_us(50);
+	/* wait calibrate finished */
+	while (IS_CS1180_READY());
+	while (!IS_CS1180_READY());
+}
 
 
+/* 对系统的失调误差(偏移误差)进行纠正, 必须要求输入为差分电压为0,
+ * 可以设置ML5238上的ISP,ISM输出0
+*/
+void cs1180_sys_offset_calibrate(void)
+{
 	cs1180_cs(0);
 	cs1180_cs(0);
-	delay();
-	/* 0x07 pga =128   设置STEPUP寄存器 
-	 * 0x01 设置ad 通道
-	 * 0x02 输出频率 15hz,参考电压2.5V 输出数据高位在前,输入缓冲器除能,采样频率 OSC/128,数据格式双极性
-	*/
-	uint8_t data[] = {0xF&GAIN, 0x01, 0x00};
-	spi_write_reg(0x00, data, 3);
-	delay();
+	cs1180_send_cmd(CS1180_OCALSYS);
 	cs1180_cs(1);
 	cs1180_cs(1);
-	delay_50us();	
-	cs1180_calibSelf();
+	delay_us(50);
+	/* wait calibrate finished */
 	while (IS_CS1180_READY());
 	while (IS_CS1180_READY());
 	while (!IS_CS1180_READY());
 	while (!IS_CS1180_READY());
-	delay_1ms(10);
-	while (IS_CS1180_READY()); //扔调一次数据
-
-	cs1180_calibSelf();
+}
 
 
-//****************************************************
-	cs1180_osalsys();
+/* 对系统的增益误差进行纠正,必须输入正满幅度的电压, SP700,SP600未提供满辐电压,故这一项不做 */
+__attribute__((unused)) static void cs1180_sys_gain_calibrate(void)
+{
+	cs1180_cs(0);
+	cs1180_send_cmd(CS1180_GCALSYS);
+	cs1180_cs(1);
+	delay_us(50);
+	/* wait calibrate finished */
 	while (IS_CS1180_READY());
 	while (IS_CS1180_READY());
 	while (!IS_CS1180_READY());
 	while (!IS_CS1180_READY());
-	delay_1ms(10);
-	while (IS_CS1180_READY()); //扔调一次数据
-	cs1180_osalsys();
-//****************************************************
-	delay_1ms(500);
-	//**************************************************************************/
-	while (IS_CS1180_READY());
 }
 }
 
 
+void cs1180_adc_set_gain(int gain){
+	/* 输出频率 15hz,参考电压1.25V 输出数据高位在前,
+	 * 输入缓冲器关闭,采样频率 OSC/128,数据格式双极性
+	 */
+	uint8_t data[] = {0x00, 0x01, 0x00};
+	data[0] = 0xF & gain;
+	cs1180_cs(0);
+	delay_us(10);
+	spi_write_reg(0x00, data, 3);
+	delay_us(1);
+	cs1180_cs(1);
+	
+	cs1180_self_calibrate();
 
 
-//adc/2^19/128*1.25/0.001
-int32_t Cal_Current(uint32_t adc,uint8_t fh )
-{
-#if 0
-	const uint32_t jing_du = 0x0007FFFF;
-	uint8_t zeng_yi = 128;//(g_zeng_yi<<7);
-	double vrf_v = 123500000.0/RSENSE_VAL;// 1.25*1000,dianzu 1mo*100,*1000ma
-	int32_t cur = 0;
-
-	cur = (int32_t)((double)adc/jing_du/zeng_yi*vrf_v);
+	_cs1180_gain = 1 << gain;
+}
 
 
-	if(fh == 1)
-		cur = 0 - cur;
+static void cs1180_reset(void){
+	cs1180_cs(0);
+	delay_us(10);
+	cs1180_send_cmd(CS1180_RESET);
+	delay_us(1);
+	cs1180_cs(1);
+}
 
 
-	return cur;
-#else
-	return 0;
-#endif
+void cs1180_adc_init(void){
+	CS1180_PWR_ENABLE(1);
+	spi1_init();
+	delay_us(10);
+	int count = 0;
+	do {
+		cs1180_reset();
+		delay_us(100);
+		cs1180_adc_set_gain(CS1180_INIT_GAIN);
+		uint8_t data[3] = {0x5A, 0x5A, 0x5A};
+		cs1180_cs(0);
+		spi_read_reg(0x0, data, 3);
+		cs1180_cs(1);
+		if (data[0] == 0x7){
+			break;
+		}
+		count ++;
+	}while(count <= 20);
 }
 }
-/**************************************************************************************
-*函数原型: unsigned long ReadAdData(void)
-*功能: 从CS1160中读取ad转换结果,并将结果以长整型数据返回
-**************************************************************************************/
-int32_t ReadAdData(void)
+
+
+float cs1180_adc_sample(void)
 {
 {
-	uint8_t i,fh = 0;
-	uint8_t Buf_rev[3];
-	uint32_t a;
+	uint8_t data[3] = {0,0,0};
+	uint32_t a = 0;
 
 
 	while (IS_CS1180_READY()); //当drdy 为高时,不读取数据
 	while (IS_CS1180_READY()); //当drdy 为高时,不读取数据
-	a = 0;
 
 
 	cs1180_cs(0);
 	cs1180_cs(0);
-	cs1180_write_one_data(CS1180_RDATA); //0X01
-
-	//for (i=0;i<5;i++)
-	{
-		delay_50us();
-	}
-	
-	
-	for (i=0;i<3;i++)
-	{
-		Buf_rev[i] = cs1180_read_one_data(0xFF);
-	}
+	delay_us(5);
+	spi_read_reg(0, data, 3);
+	spi_read_reg(0xD, data, 3);
 	cs1180_cs(1);
 	cs1180_cs(1);
-		
-	a = Buf_rev[0];
-	a = a<<8;
-	a |= Buf_rev[1];
-	a = a<<8;
-	a |= Buf_rev[2];
-	a>>=4;
-
-	if(a >= 0x80000)
-	{
-		a = ~a;
-		a = a&0x7FFFF;
-		fh = 1;
+	a = (data[0] << 16) | (data[1] << 8) | data[2];
+	a >>= 4;
+
+	if (a & 0x80000) {
+		a = -(a & (~0xFFF80000));
+	}else {
+		a = (a & (~0xFFF80000));
 	}
 	}
-	
-	
-	return Cal_Current(a,fh) - 5;
-	
+	return ((float)a) / _cs1180_gain;	
 }
 }
 
 
 
 
-static void cs1180_write_one_data(uint8_t data){
-	spi1_send_byte(data, NULL);
+static int cs1180_send_cmd(uint8_t cmd){
+	return spi1_send_byte(cmd, NULL);
 }
 }
 
 
-static uint8_t cs1180_read_one_data(uint8_t data){
+static uint8_t cs1180_read_data(uint8_t data){
 	uint8_t r_data = 0xFF;
 	uint8_t r_data = 0xFF;
 	spi1_send_byte(data, &r_data);
 	spi1_send_byte(data, &r_data);
 	return r_data;
 	return r_data;

+ 13 - 1
Application/bsp/cs1180.h

@@ -1,7 +1,19 @@
 #ifndef _CS1180_H__
 #ifndef _CS1180_H__
 #define _CS1180_H__
 #define _CS1180_H__
 
 
-void cs1180_init(void);
+#define CS1180_GAIN_1X   0x0
+#define CS1180_GAIN_2X   0x1
+#define CS1180_GAIN_4X   0x2
+#define CS1180_GAIN_8X   0x3
+#define CS1180_GAIN_16X  0x4
+#define CS1180_GAIN_32X  0x5
+#define CS1180_GAIN_64X  0x6
+#define CS1180_GAIN_128X 0x7
+
+void cs1180_adc_init(void);
+void cs1180_adc_set_gain(int gain);
+void cs1180_sys_offset_calibrate(void);
+float cs1180_adc_sample(void);
 
 
 #endif /* _CS1180_H__ */
 #endif /* _CS1180_H__ */
 
 

+ 33 - 2
Application/bsp/gd32_adc.c

@@ -12,7 +12,7 @@ void adc_init(void){
 	gpio_mode_analog_input(GPIOB, GPIO_PIN_1|GPIO_PIN_0);
 	gpio_mode_analog_input(GPIOB, GPIO_PIN_1|GPIO_PIN_0);
 
 
     /* config ADC clock */
     /* config ADC clock */
-    rcu_adc_clock_config(RCU_ADCCK_AHB_DIV3); //adc clock:28M 
+    rcu_adc_clock_config(RCU_ADCCK_APB2_DIV6); //adc clock:28M 
 
 
 	rcu_periph_clock_enable(RCU_ADC);
 	rcu_periph_clock_enable(RCU_ADC);
 	adc_deinit();
 	adc_deinit();
@@ -41,7 +41,7 @@ int adc_sample(int chan, int calibration){
 	adc_oversample_mode_enable();
 	adc_oversample_mode_enable();
 
 
     /* use max convert time to make sure the adc work fine */
     /* use max convert time to make sure the adc work fine */
-    adc_regular_channel_config(0, chan, ADC_SAMPLETIME_239POINT5);//239.5 + 12.5 = 242 cycle, 242/(28*1000000)
+    adc_regular_channel_config(0, chan, ADC_SAMPLETIME_55POINT5);//239.5 + 12.5 = 242 cycle, 242/(28*1000000)
 	adc_enable();
 	adc_enable();
 	delay_us(1000); //MUST delay, for adc work fine
 	delay_us(1000); //MUST delay, for adc work fine
 	if (calibration) {
 	if (calibration) {
@@ -58,4 +58,35 @@ int adc_sample(int chan, int calibration){
 	return value & mask;
 	return value & mask;
 }
 }
 
 
+int adc_sample_avg(int chan, int times){
+	int value = 0;
+	int count = 0;
+	int min = 0xFFFFF;
+	int max = -0xFFFFF;
+	//hardware oversample to 16bit
+	adc_oversample_mode_config(ADC_OVERSAMPLING_ALL_CONVERT, ADC_OVERSAMPLING_SHIFT_4B, ADC_OVERSAMPLING_RATIO_MUL256);
+	adc_oversample_mode_enable();
+    /* use max convert time to make sure the adc work fine */
+    adc_regular_channel_config(0, chan, ADC_SAMPLETIME_55POINT5);//239.5 + 12.5 = 242 cycle, 242/(28*1000000)
+	adc_enable();
+	delay_us(1000); //MUST delay, for adc work fine
+	/* ADC calibration and reset calibration */
+	adc_calibration_enable();
 
 
+	while(count < times){
+		adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
+    	while(SET != adc_flag_get(ADC_FLAG_EOC));
+    	int one = adc_regular_data_read();
+		adc_flag_clear(ADC_FLAG_EOC);		
+		value += (one & 0xFFFF);
+		count ++;
+		if (one > max){
+			max = one;
+		}
+		if (one < min) {
+			min = one;
+		}
+	}
+	adc_disable();
+	return (value - min - max)/(times-2);
+}

+ 2 - 0
Application/bsp/gd32_adc.h

@@ -11,6 +11,8 @@
 #define ADC_CHAN_TEMPERATURE_4 ADC_CHANNEL_7
 #define ADC_CHAN_TEMPERATURE_4 ADC_CHANNEL_7
 
 
 int adc_sample(int chan, int calibration);
 int adc_sample(int chan, int calibration);
+int adc_sample_avg(int chan, int times);
+
 void adc_init(void);
 void adc_init(void);
 #endif /* _GD32_ADC_H__ */
 #endif /* _GD32_ADC_H__ */
 
 

+ 5 - 4
Application/bsp/gpio.c

@@ -6,7 +6,7 @@ void gpio_init(void){
 	rcu_periph_clock_enable(RCU_GPIOC);
 	rcu_periph_clock_enable(RCU_GPIOC);
 	rcu_periph_clock_enable(RCU_GPIOF);
 	rcu_periph_clock_enable(RCU_GPIOF);
 
 
-#if defined CONFIG_BOARD_SP700	
+#if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP700)	
 	//hall 2 detect
 	//hall 2 detect
 	gpio_mode_input(GPIOC, GPIO_PUPD_NONE, GPIO_PIN_13);
 	gpio_mode_input(GPIOC, GPIO_PUPD_NONE, GPIO_PIN_13);
 	//hall 1 detect
 	//hall 1 detect
@@ -21,8 +21,9 @@ void gpio_init(void){
 	//detect cs1180 ready
 	//detect cs1180 ready
 	gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_0);
 	gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_0);
 	//CS1180 cs
 	//CS1180 cs
-	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);	
-#elif defined CONFIG_BOARD_SP600
+	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
+	
+#elif (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600)
 	//rs485 INT ,this can be used detect rs485 in/out, then open rs485 power, and then detect GPIOF0
 	//rs485 INT ,this can be used detect rs485 in/out, then open rs485 power, and then detect GPIOF0
 	gpio_mode_input(GPIOC, GPIO_PUPD_NONE, GPIO_PIN_13);
 	gpio_mode_input(GPIOC, GPIO_PUPD_NONE, GPIO_PIN_13);
 	//rs485 pwr enable
 	//rs485 pwr enable
@@ -42,7 +43,7 @@ void gpio_init(void){
 	//LED3,4
 	//LED3,4
 	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10|GPIO_PIN_9);
 	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10|GPIO_PIN_9);
 #endif
 #endif
-
+	//CS1180_PWR_ENABLE(0);
 	//power good detect
 	//power good detect
 	gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_7);
 	gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_7);
 	//temp senser enable
 	//temp senser enable

+ 2 - 2
Application/bsp/gpio.h

@@ -19,7 +19,7 @@ void gpio_init(void);
 /*spi chip select for ml5238*/
 /*spi chip select for ml5238*/
 #define ml5238_cs(x) gpio_bit_write(GPIOA, GPIO_PIN_15, (bit_status)x)
 #define ml5238_cs(x) gpio_bit_write(GPIOA, GPIO_PIN_15, (bit_status)x)
 
 
-#if defined CONFIG_BOARD_SP700
+#if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP700)
 
 
 /*power switch for cs110, low active */
 /*power switch for cs110, low active */
 #define CS1180_PWR_ENABLE(x) gpio_bit_write(GPIOB,GPIO_PIN_12, x==1?RESET:SET)
 #define CS1180_PWR_ENABLE(x) gpio_bit_write(GPIOB,GPIO_PIN_12, x==1?RESET:SET)
@@ -37,7 +37,7 @@ void gpio_init(void);
 #define IS_HALL1_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_15)
 #define IS_HALL1_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_15)
 #define IS_HALL2_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_13)
 #define IS_HALL2_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_13)
 
 
-#elif defined CONFIG_BOARD_SP600
+#elif (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600)
 
 
 /*power switch for cs110, low active */
 /*power switch for cs110, low active */
 #define CS1180_PWR_ENABLE(x) gpio_bit_write(GPIOC,GPIO_PIN_15, x==1?RESET:SET)
 #define CS1180_PWR_ENABLE(x) gpio_bit_write(GPIOC,GPIO_PIN_15, x==1?RESET:SET)

+ 2 - 1
Application/bsp/irqs.c

@@ -92,7 +92,7 @@ void __weak ml5238_irq_handler(void){}
 void __weak charger_detect_irq_handler(void){}
 void __weak charger_detect_irq_handler(void){}
 void __weak hall1_detect_irq_handler(void){}
 void __weak hall1_detect_irq_handler(void){}
 void __weak hall2_detect_irq_handler(void){}
 void __weak hall2_detect_irq_handler(void){}
-
+void __weak small_current_short_handler(void){}
 void EXTI4_15_IRQHandler(void){
 void EXTI4_15_IRQHandler(void){
 	if(RESET != exti_interrupt_flag_get(EXTI_4)){
 	if(RESET != exti_interrupt_flag_get(EXTI_4)){
 		exti_interrupt_flag_clear(EXTI_4);
 		exti_interrupt_flag_clear(EXTI_4);
@@ -118,6 +118,7 @@ void EXTI4_15_IRQHandler(void){
 	}
 	}
 	if(RESET != exti_interrupt_flag_get(EXTI_11)){
 	if(RESET != exti_interrupt_flag_get(EXTI_11)){
 		exti_interrupt_flag_clear(EXTI_11);
 		exti_interrupt_flag_clear(EXTI_11);
+		small_current_short_handler();
 	}
 	}
 	//ms5238 irq
 	//ms5238 irq
 	if(RESET != exti_interrupt_flag_get(EXTI_12)){
 	if(RESET != exti_interrupt_flag_get(EXTI_12)){

+ 10 - 13
Application/bsp/ml5238.c

@@ -12,17 +12,6 @@ void ml5238_init(void){
 	ml5238_softreset();
 	ml5238_softreset();
 }
 }
 
 
-/* disable the vmon output the cell voltage */
-int ml5238_disable_vmon(void){
-	return ml5238_write(ML5238_VMON, 0x00);
-}
-
-/* select one cell (0-14) connect to vmon, so we can measure 
- * the cell voltage from vmon pin
-*/
-int ml5238_select_cell_to_vmon(int cell){
-	return ml5238_write(ML5238_VMON, cell | VMON_OUT);
-}
 
 
 int ml5238_enable_discharger_mosfet(int enable){
 int ml5238_enable_discharger_mosfet(int enable){
 	uint8_t data;
 	uint8_t data;
@@ -33,6 +22,10 @@ int ml5238_enable_discharger_mosfet(int enable){
 		data &= ~(FET_DF);
 		data &= ~(FET_DF);
 		if (enable){
 		if (enable){
 			data |= (FET_DF | FET_DRV);
 			data |= (FET_DF | FET_DRV);
+		}else {
+			if (data & FET_CF == 0){
+				data &= ~(FET_DRV);
+			}
 		}
 		}
 		return ml5238_write(ML5238_FET, data);
 		return ml5238_write(ML5238_FET, data);
 	}
 	}
@@ -49,6 +42,10 @@ int ml5238_enable_charger_mosfet(int enable){
 		data &= ~(FET_CF);
 		data &= ~(FET_CF);
 		if (enable){
 		if (enable){
 			data |= (FET_CF | FET_DRV);
 			data |= (FET_CF | FET_DRV);
+		}else {
+			if (data & FET_DF == 0){
+				data &= ~(FET_DRV);
+			}
 		}
 		}
 		return ml5238_write(ML5238_FET, data);
 		return ml5238_write(ML5238_FET, data);
 	}
 	}
@@ -96,7 +93,7 @@ void ml5238_irq_handler(void){
 
 
 
 
 int ml5238_write(uint8_t regaddr, uint8_t data){
 int ml5238_write(uint8_t regaddr, uint8_t data){
-	uint16_t send_data=(((uint16_t)regaddr)<<(0x08+1u))|((uint16_t)data);
+	uint16_t send_data=(((uint16_t)regaddr)<<(0x09))|((uint16_t)data);
 	ml5238_cs(0);
 	ml5238_cs(0);
 	int ret = spi0_send_uint16(send_data, NULL);
 	int ret = spi0_send_uint16(send_data, NULL);
 	ml5238_cs(1);
 	ml5238_cs(1);
@@ -104,7 +101,7 @@ int ml5238_write(uint8_t regaddr, uint8_t data){
 }
 }
 
 
 static int ml5238_read(uint8_t regaddr, uint8_t *data){
 static int ml5238_read(uint8_t regaddr, uint8_t *data){
-	uint16_t send_data=((((uint16_t)regaddr)<<(0x08+1u))|0x0100u)|((uint16_t)0x00u);
+	uint16_t send_data=((((uint16_t)regaddr)<<(0x09))|0x0100u)|((uint16_t)0x00u);
 	ml5238_cs(0);
 	ml5238_cs(0);
 	int ret = spi0_send_uint16(send_data, data);
 	int ret = spi0_send_uint16(send_data, data);
 	ml5238_cs(1);
 	ml5238_cs(1);

+ 13 - 5
Application/bsp/ml5238.h

@@ -6,7 +6,6 @@ void ml5238_softreset(void);
 int ml5238_enable_discharger_mosfet(int enable);
 int ml5238_enable_discharger_mosfet(int enable);
 int ml5238_enable_charger_mosfet(int enable);
 int ml5238_enable_charger_mosfet(int enable);
 int ml5238_short_current_detect(int mode);
 int ml5238_short_current_detect(int mode);
-int ml5238_select_cell_to_vmon(int cell);
 
 
 
 
 #define SHORT_CURRENT_MODE_DISABLE -1
 #define SHORT_CURRENT_MODE_DISABLE -1
@@ -22,22 +21,31 @@ int ml5238_select_cell_to_vmon(int cell);
 
 
 #include "ml5238_reg.h"
 #include "ml5238_reg.h"
 int ml5238_write(uint8_t regaddr, uint8_t data);
 int ml5238_write(uint8_t regaddr, uint8_t data);
+/* disable the vmon output the cell voltage */
+#define ML5238_VMON_DISABLE() {ml5238_write(ML5238_VMON, 0x00);};
 
 
+/* select one cell (0-14) connect to vmon, so we can measure 
+ * the cell voltage from vmon pin
+*/
+#define ML5238_SELECT_CELL(i) {ml5238_write(ML5238_VMON, i | VMON_OUT);};
+
+/* IMON output disable */
+#define ML5238_IMON_DISABLE() {ml5238_write(ML5238_IMON, 0x00);};
 /* IMON output 0V, used to cali the GAIN */
 /* IMON output 0V, used to cali the GAIN */
 #define ML5238_IMON_OUT_ZERO_10X() {ml5238_write(ML5238_IMON, 0x12);delay_us(1000);};
 #define ML5238_IMON_OUT_ZERO_10X() {ml5238_write(ML5238_IMON, 0x12);delay_us(1000);};
-#define ML5238_IMON_OUT_ZERO_50X() {ml5238_write(ML5238_IMON, 0x13);delay_us(1000);};
+#define ML5238_IMON_OUT_ZERO_50X() {ml5238_write(ML5238_IMON, 0x13);delay_us(5000);};
 
 
 /* IMON output 2V, used to cali the GAIN */
 /* IMON output 2V, used to cali the GAIN */
 #define ML5238_IMON_OUT_V2000_10X() {ml5238_write(ML5238_IMON, 0x14);delay_us(1000);};
 #define ML5238_IMON_OUT_V2000_10X() {ml5238_write(ML5238_IMON, 0x14);delay_us(1000);};
-#define ML5238_IMON_OUT_V2000_50X() {ml5238_write(ML5238_IMON, 0x15);delay_us(1000);};
+#define ML5238_IMON_OUT_V2000_50X() {ml5238_write(ML5238_IMON, 0x15);delay_us(5000);};
 
 
 /* IMON output 100mV, used to cali the GAIN */
 /* IMON output 100mV, used to cali the GAIN */
 #define ML5238_IMON_OUT_V100_10X() {ml5238_write(ML5238_IMON, 0x1c);delay_us(1000);};
 #define ML5238_IMON_OUT_V100_10X() {ml5238_write(ML5238_IMON, 0x1c);delay_us(1000);};
-#define ML5238_IMON_OUT_V100_50X() {ml5238_write(ML5238_IMON, 0x1d);delay_us(1000);};
+#define ML5238_IMON_OUT_V100_50X() {ml5238_write(ML5238_IMON, 0x1d);delay_us(5000);};
 
 
 /* IMON output real pin's voltage */
 /* IMON output real pin's voltage */
 #define ML5238_IMON_OUT_10X() {ml5238_write(ML5238_IMON, 0x10);delay_us(1000);};
 #define ML5238_IMON_OUT_10X() {ml5238_write(ML5238_IMON, 0x10);delay_us(1000);};
-#define ML5238_IMON_OUT_50X() {ml5238_write(ML5238_IMON, 0x11);delay_us(1000);};
+#define ML5238_IMON_OUT_50X() {ml5238_write(ML5238_IMON, 0x11);delay_us(5000);};
 
 
 //vim0 == xxx_OUT_ZERO_xxx, vim1 == xxx_OUT_V2000_xxx, vr == xxx_OUT_V100_xxx
 //vim0 == xxx_OUT_ZERO_xxx, vim1 == xxx_OUT_V2000_xxx, vr == xxx_OUT_V100_xxx
 #define ML5238_GAIN(vim0, vim1, vr) ((vim1-vim0)/vr)
 #define ML5238_GAIN(vim0, vim1, vr) ((vim1-vim0)/vr)

+ 13 - 0
Application/bsp/shark_bsp.h

@@ -16,6 +16,19 @@
 #error "Invalid Board"
 #error "Invalid Board"
 #endif
 #endif
 
 
+#if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP700)
+#define r_resistor 1.0f // 1ºÁÅ·
+#elif (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600)
+#define r_resistor 2.0f
+#endif
+
+
+#define CELLS_NUM 15
+#define PACK_TEMPS_NUM 3
+
+#define GD32_ADC 1
+#define CS1180_ADC 2
+
 void bsp_init(void);
 void bsp_init(void);
 void wdog_start(int timeout);
 void wdog_start(int timeout);
 void wdog_reload(void);
 void wdog_reload(void);

+ 4 - 3
Application/bsp/spi.c

@@ -55,7 +55,7 @@ void spi1_init(void){
     spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
     spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
     spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;
     spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;
     spi_init_struct.nss                  = SPI_NSS_SOFT;
     spi_init_struct.nss                  = SPI_NSS_SOFT;
-    spi_init_struct.prescale             = SPI_PSC_128 ;
+    spi_init_struct.prescale             = SPI_PSC_32 ;
     spi_init_struct.endian               = SPI_ENDIAN_MSB;
     spi_init_struct.endian               = SPI_ENDIAN_MSB;
     spi_init(SPI1, &spi_init_struct);
     spi_init(SPI1, &spi_init_struct);
 
 
@@ -102,12 +102,13 @@ int spi0_send_uint16(uint16_t s_data, uint8_t *r_data)
     return 0;
     return 0;
 }
 }
 
 
+#define max_wait1_count 4096
 
 
 int spi1_send_byte(uint8_t byte, uint8_t *r_data)
 int spi1_send_byte(uint8_t byte, uint8_t *r_data)
 {
 {
     /* loop while data register in not emplty */
     /* loop while data register in not emplty */
 	int count = 0;
 	int count = 0;
-    while (RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_TBE) && count < max_wait_count){
+    while (RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_TBE) && count < max_wait1_count){
 		count ++;
 		count ++;
 	};
 	};
 	if (RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_TBE)){
 	if (RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_TBE)){
@@ -118,7 +119,7 @@ int spi1_send_byte(uint8_t byte, uint8_t *r_data)
 
 
     /* wait to receive a byte */
     /* wait to receive a byte */
 	count = 0;
 	count = 0;
-    while(RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_RBNE) && count < max_wait_count){
+    while(RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_RBNE) && count < max_wait1_count){
 		count ++;
 		count ++;
 	};
 	};
 	if (RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_RBNE)){
 	if (RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_RBNE)){

+ 81 - 54
Project/SP600.uvoptx

@@ -135,12 +135,12 @@
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
           <Key>DLGUARM</Key>
           <Key>DLGUARM</Key>
-          <Name></Name>
+          <Name>d</Name>
         </SetRegEntry>
         </SetRegEntry>
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
           <Key>JL2CM3</Key>
           <Key>JL2CM3</Key>
-          <Name>-U20080643 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F3x0.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F330C8$Flash\GD32F3x0.FLM)</Name>
+          <Name>-U20080643 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F3x0.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F330C8$Flash\GD32F3x0.FLM)</Name>
         </SetRegEntry>
         </SetRegEntry>
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
@@ -149,6 +149,13 @@
         </SetRegEntry>
         </SetRegEntry>
       </TargetDriverDllRegistry>
       </TargetDriverDllRegistry>
       <Breakpoint/>
       <Breakpoint/>
+      <WatchWindow1>
+        <Ww>
+          <count>0</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>_bms_state,0x0A</ItemText>
+        </Ww>
+      </WatchWindow1>
       <Tracepoint>
       <Tracepoint>
         <THDelay>0</THDelay>
         <THDelay>0</THDelay>
       </Tracepoint>
       </Tracepoint>
@@ -212,29 +219,17 @@
       <RteFlg>0</RteFlg>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
       <bShared>0</bShared>
     </File>
     </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>2</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <bDave2>0</bDave2>
-      <PathWithFileName>..\Application\app\iv_measure.c</PathWithFileName>
-      <FilenameWithoutPath>iv_measure.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
   </Group>
   </Group>
 
 
   <Group>
   <Group>
     <GroupName>BSP</GroupName>
     <GroupName>BSP</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>3</FileNumber>
+      <FileNumber>2</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -246,7 +241,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>4</FileNumber>
+      <FileNumber>3</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -258,7 +253,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>5</FileNumber>
+      <FileNumber>4</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -270,7 +265,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>6</FileNumber>
+      <FileNumber>5</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -282,7 +277,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>7</FileNumber>
+      <FileNumber>6</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -294,7 +289,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>8</FileNumber>
+      <FileNumber>7</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -306,7 +301,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>8</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -318,7 +313,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>9</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -330,7 +325,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -342,7 +337,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -354,7 +349,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -374,7 +369,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -386,7 +381,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -398,7 +393,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -418,7 +413,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -430,7 +425,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -442,7 +437,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -454,7 +449,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -466,7 +461,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -478,7 +473,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -490,7 +485,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -502,7 +497,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -514,7 +509,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -526,7 +521,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -538,7 +533,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -550,7 +545,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -562,7 +557,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -574,7 +569,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -586,7 +581,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -598,7 +593,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -610,7 +605,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -622,7 +617,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -634,7 +629,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -646,7 +641,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -658,7 +653,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -670,7 +665,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -682,7 +677,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -702,7 +697,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>2</FileType>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -714,7 +709,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -726,4 +721,36 @@
     </File>
     </File>
   </Group>
   </Group>
 
 
+  <Group>
+    <GroupName>SOX</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>41</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\app\sox\sense_measure.c</PathWithFileName>
+      <FilenameWithoutPath>sense_measure.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>42</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\app\sox\state.c</PathWithFileName>
+      <FilenameWithoutPath>state.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
 </ProjectOpt>
 </ProjectOpt>

+ 15 - 5
Project/SP600.uvprojx

@@ -388,11 +388,6 @@
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\Application\app\main.c</FilePath>
               <FilePath>..\Application\app\main.c</FilePath>
             </File>
             </File>
-            <File>
-              <FileName>iv_measure.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>..\Application\app\iv_measure.c</FilePath>
-            </File>
           </Files>
           </Files>
         </Group>
         </Group>
         <Group>
         <Group>
@@ -610,6 +605,21 @@
             </File>
             </File>
           </Files>
           </Files>
         </Group>
         </Group>
+        <Group>
+          <GroupName>SOX</GroupName>
+          <Files>
+            <File>
+              <FileName>sense_measure.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\app\sox\sense_measure.c</FilePath>
+            </File>
+            <File>
+              <FileName>state.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\app\sox\state.c</FilePath>
+            </File>
+          </Files>
+        </Group>
       </Groups>
       </Groups>
     </Target>
     </Target>
   </Targets>
   </Targets>

+ 83 - 56
Project/SP700.uvoptx

@@ -135,12 +135,12 @@
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
           <Key>DLGUARM</Key>
           <Key>DLGUARM</Key>
-          <Name></Name>
+          <Name>d</Name>
         </SetRegEntry>
         </SetRegEntry>
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
           <Key>JL2CM3</Key>
           <Key>JL2CM3</Key>
-          <Name>-U20080643 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F3x0.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F330C8$Flash\GD32F3x0.FLM)</Name>
+          <Name>-U20080643 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F3x0.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F330C8$Flash\GD32F3x0.FLM)</Name>
         </SetRegEntry>
         </SetRegEntry>
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
@@ -149,13 +149,20 @@
         </SetRegEntry>
         </SetRegEntry>
       </TargetDriverDllRegistry>
       </TargetDriverDllRegistry>
       <Breakpoint/>
       <Breakpoint/>
+      <WatchWindow1>
+        <Ww>
+          <count>0</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>_bms_state,0x0A</ItemText>
+        </Ww>
+      </WatchWindow1>
       <Tracepoint>
       <Tracepoint>
         <THDelay>0</THDelay>
         <THDelay>0</THDelay>
       </Tracepoint>
       </Tracepoint>
       <DebugFlag>
       <DebugFlag>
         <trace>0</trace>
         <trace>0</trace>
         <periodic>1</periodic>
         <periodic>1</periodic>
-        <aLwin>1</aLwin>
+        <aLwin>0</aLwin>
         <aCover>0</aCover>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>
         <aSer2>0</aSer2>
@@ -196,7 +203,7 @@
 
 
   <Group>
   <Group>
     <GroupName>Application</GroupName>
     <GroupName>Application</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
@@ -212,18 +219,6 @@
       <RteFlg>0</RteFlg>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
       <bShared>0</bShared>
     </File>
     </File>
-    <File>
-      <GroupNumber>1</GroupNumber>
-      <FileNumber>2</FileNumber>
-      <FileType>1</FileType>
-      <tvExp>0</tvExp>
-      <tvExpOptDlg>0</tvExpOptDlg>
-      <bDave2>0</bDave2>
-      <PathWithFileName>..\Application\app\iv_measure.c</PathWithFileName>
-      <FilenameWithoutPath>iv_measure.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
   </Group>
   </Group>
 
 
   <Group>
   <Group>
@@ -234,7 +229,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>3</FileNumber>
+      <FileNumber>2</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -246,7 +241,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>4</FileNumber>
+      <FileNumber>3</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -258,7 +253,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>5</FileNumber>
+      <FileNumber>4</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -270,7 +265,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>6</FileNumber>
+      <FileNumber>5</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -282,7 +277,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>7</FileNumber>
+      <FileNumber>6</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -294,7 +289,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>8</FileNumber>
+      <FileNumber>7</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -306,7 +301,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>8</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -318,7 +313,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>9</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -330,7 +325,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -342,7 +337,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -354,7 +349,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -374,7 +369,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -386,7 +381,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -398,7 +393,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>3</GroupNumber>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -418,7 +413,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -430,7 +425,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -442,7 +437,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -454,7 +449,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -466,7 +461,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -478,7 +473,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -490,7 +485,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -502,7 +497,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -514,7 +509,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -526,7 +521,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -538,7 +533,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -550,7 +545,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -562,7 +557,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -574,7 +569,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -586,7 +581,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -598,7 +593,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -610,7 +605,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -622,7 +617,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -634,7 +629,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -646,7 +641,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -658,7 +653,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -670,7 +665,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -682,7 +677,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -696,13 +691,13 @@
 
 
   <Group>
   <Group>
     <GroupName>StartUp</GroupName>
     <GroupName>StartUp</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>2</FileType>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -714,7 +709,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -726,4 +721,36 @@
     </File>
     </File>
   </Group>
   </Group>
 
 
+  <Group>
+    <GroupName>SOX</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>41</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\app\sox\sense_measure.c</PathWithFileName>
+      <FilenameWithoutPath>sense_measure.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>42</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\app\sox\state.c</PathWithFileName>
+      <FilenameWithoutPath>state.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
 </ProjectOpt>
 </ProjectOpt>

+ 16 - 6
Project/SP700.uvprojx

@@ -275,7 +275,7 @@
               </OCR_RVCT3>
               </OCR_RVCT3>
               <OCR_RVCT4>
               <OCR_RVCT4>
                 <Type>1</Type>
                 <Type>1</Type>
-                <StartAddress>0x8002000</StartAddress>
+                <StartAddress>0x8000000</StartAddress>
                 <Size>0x10000</Size>
                 <Size>0x10000</Size>
               </OCR_RVCT4>
               </OCR_RVCT4>
               <OCR_RVCT5>
               <OCR_RVCT5>
@@ -388,11 +388,6 @@
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\Application\app\main.c</FilePath>
               <FilePath>..\Application\app\main.c</FilePath>
             </File>
             </File>
-            <File>
-              <FileName>iv_measure.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>..\Application\app\iv_measure.c</FilePath>
-            </File>
           </Files>
           </Files>
         </Group>
         </Group>
         <Group>
         <Group>
@@ -610,6 +605,21 @@
             </File>
             </File>
           </Files>
           </Files>
         </Group>
         </Group>
+        <Group>
+          <GroupName>SOX</GroupName>
+          <Files>
+            <File>
+              <FileName>sense_measure.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\app\sox\sense_measure.c</FilePath>
+            </File>
+            <File>
+              <FileName>state.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\app\sox\state.c</FilePath>
+            </File>
+          </Files>
+        </Group>
       </Groups>
       </Groups>
     </Target>
     </Target>
   </Targets>
   </Targets>