Explorar o código

cs1180 在线修改gain,需要check gain和校准寄存器

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui %!s(int64=5) %!d(string=hai) anos
pai
achega
de6a42a4db
Modificáronse 1 ficheiros con 12 adicións e 8 borrados
  1. 12 8
      Application/bsp/cs1180.c

+ 12 - 8
Application/bsp/cs1180.c

@@ -204,14 +204,18 @@ void cs1180_adc_init(void){
 	_cs1180_ready = _cali_gain_regs[16 * CS1180_NOW_GAIN] == CS1180_NOW_GAIN;
 }
 
-int _cs1180_read_gain(void){
-	uint8_t data[] = {0xff, 0xff, 0xff};
+int _cs1180_check_gain(int gain){
+	uint8_t data[13] = {0};
 	cs1180_cs(0);
 	cs_delay();	
-	spi_read_reg(0x0, data, 3);
+	spi_read_reg(0x0, data, 13);
 	cs1180_cs(1);
-	
-	return data[0];
+	for (int i = 0; i < 13; i++){
+		if (data[i] != _cali_gain_regs[16 * gain + i]){
+			return 0;
+		}
+	}
+	return 1;
 }
 
 int cs1180_adc_set_gain_online(int gain){
@@ -230,13 +234,13 @@ int cs1180_adc_set_gain_online(int gain){
 		cs1180_cs(1);
 		delay_us(10);
 
-		if (_cs1180_read_gain() == gain){
+		if (_cs1180_check_gain(gain)){
 			break;
 		}
 		count ++;
 	}while(count <= 5);
 	if (count >= 5) {
-		if (_cs1180_read_gain() != gain){
+		if (_cs1180_check_gain(gain) != 1){
 			sys_error("change gain error!!!\n");
 			return -1;
 		}
@@ -252,7 +256,7 @@ int cs1180_adc_set_gain_online(int gain){
 int cs1180_change_gain(int current){
 	if (abs(current) < 4000){ //4.5
 		return cs1180_adc_set_gain_online(CS1180_GAIN_128X);
-	}else if (abs(current) < 16 * 1000){ //18
+	}else if (abs(current) < 12 * 1000){ //18
 		return cs1180_adc_set_gain_online(CS1180_GAIN_32X);
 	}/*else if (abs(current) < 48 * 1000){ //72
 		return cs1180_adc_set_gain_online(CS1180_GAIN_8X);