Преглед на файлове

add gpio config for SP600

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui преди 5 години
родител
ревизия
d98ad8f754
променени са 7 файла, в които са добавени 84 реда и са изтрити 32 реда
  1. 8 2
      Application/app/iv_measure.c
  2. 0 4
      Application/app/main.c
  3. 8 0
      Application/bsp/bsp.c
  4. 32 15
      Application/bsp/gpio.c
  5. 36 4
      Application/bsp/gpio.h
  6. 0 4
      Application/bsp/spi.c
  7. 0 3
      Application/bsp/spi.h

+ 8 - 2
Application/app/iv_measure.c

@@ -37,6 +37,9 @@ static void __inline__ select_gain_10x(int select){
 	}
 }
 
+static int __inline__ _is_x10_gain(void){
+	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
@@ -74,10 +77,10 @@ void measure_system_init(void){
 /* get battery pack's current (mA) */
 float get_imon_current(int calibration){
 	float adc = adc_sample(ADC_CHAN_IMON, calibration);
-	if (adc >= 0xFFF0){//overflow, use 10x gain
+	if (adc >= 0xFFF0 && (!_is_x10_gain())){//overflow, use 10x gain
 		select_gain_10x(1);
 		adc = adc_sample(ADC_CHAN_IMON, calibration);
-	}else if (adc <= 0x1F){// is too small, select 50x gain
+	}else if (adc <= 0x1F && (_is_x10_gain())){// is too small, select 50x gain
 		select_gain_10x(0); 
 		adc = adc_sample(ADC_CHAN_IMON, calibration);		
 	}
@@ -110,6 +113,9 @@ int get_pcb_temperature(int calibration){
 	return get_temp_by_adc(adc);
 }
 
+/*
+ * index : 0...2
+*/
 int get_pack_temperature(int index, int calibration){
 	TEMP_OPEN(1);
 	delay_us(100);

+ 0 - 4
Application/app/main.c

@@ -1,10 +1,6 @@
 #include "bsp/shark_bsp.h"
 #include "libs/shark_task.h"
 
-const char iap_board_name[] __attribute__((at(0x08002800))) = "SP700";
-const char iap_fw_version[] __attribute__((at(0x08002A00))) = "1.0";
-const char iap_fw_name[] __attribute__((at(0x08002C00))) = "App";
-
 int main(void)
 {
 	bsp_init();

+ 8 - 0
Application/bsp/bsp.c

@@ -1,6 +1,14 @@
 #include "bsp/shark_bsp.h"
 #include "bsp/gpio.h"
 
+#if defined CONFIG_BOARD_SP700
+const char iap_board_name[] __attribute__((at(0x08002800))) = "SP700";
+#elif defined CONFIG_BOARD_SP600
+const char iap_board_name[] __attribute__((at(0x08002800))) = "SP600";
+#endif
+const char iap_fw_version[] __attribute__((at(0x08002A00))) = "1.0";
+const char iap_fw_name[] __attribute__((at(0x08002C00))) = "App";
+
 //all board's low level init is here
 void bsp_init(void){
 	wdog_start(4);

+ 32 - 15
Application/bsp/gpio.c

@@ -5,6 +5,8 @@ void gpio_init(void){
 	rcu_periph_clock_enable(RCU_GPIOB);
 	rcu_periph_clock_enable(RCU_GPIOC);
 	rcu_periph_clock_enable(RCU_GPIOF);
+
+#if defined CONFIG_BOARD_SP700	
 	//hall 2 detect
 	gpio_mode_input(GPIOC, GPIO_PUPD_NONE, GPIO_PIN_13);
 	//hall 1 detect
@@ -14,6 +16,33 @@ void gpio_init(void){
 	gpio_mode_output(GPIOC, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_14);
 	//IR uart2 enable
 	gpio_mode_output(GPIOF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_0);
+	//cs1180 power enable
+	gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_12);
+	//detect cs1180 ready
+	gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_0);
+	//CS1180 cs
+	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);	
+#elif defined CONFIG_BOARD_SP600
+	//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);
+	//rs485 pwr enable
+	gpio_mode_output(GPIOC, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_14);
+	//rs485 in/out detect, only works when rs485 pwr on 
+	gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_0);
+	//cs1180 pwr enable
+	gpio_mode_output(GPIOC, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_15);
+	//detect cs1180 ready
+	gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_12);		
+	//CS1180 cs
+	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);
+
+	//LED 0,1,2
+	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2|GPIO_PIN_3);
+	gpio_mode_output(GPIOF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_6);
+	//LED3,4
+	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10|GPIO_PIN_9);
+#endif
+
 	//power good detect
 	gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_7);
 	//temp senser enable
@@ -24,27 +53,15 @@ void gpio_init(void){
 	gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2);
 	//aux 12v lock detect
 	gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_11);
-#if 0	
-	//LED 0,1,2
-	gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_12);
-	gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_13);
-	gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_14);
-	//LED3,4
-	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_8);
-	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);
-#endif
-	//cs1180 power enable
-	gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_12);
-
 	//DC-DC enable
 	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_11);
 	//DC-DC power good indicat
 	gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_7);
-
 	//ms5238 irq
 	gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_12);
-	//detect cs1180 ready
-	gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_0);	
+	//ML5238 cs
+	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
+
 }
 
 

+ 36 - 4
Application/bsp/gpio.h

@@ -14,20 +14,52 @@ void gpio_init(void);
 #define DCDC_VOL_OPEN(x) gpio_bit_write(GPIOA,GPIO_PIN_11,(bit_status)(x))
 /* DCDC output power good detect */
 #define DCDC_POWER_GOOD() gpio_input_bit_get(GPIOF, GPIO_PIN_7)
-/*switch for IR uart0 */
-#define UART0_IR_EN(x) gpio_bit_write(GPIOC,GPIO_PIN_14,(bit_status)(x))
-/*switch for IR uart1 */
-#define UART1_IR_EN(x) gpio_bit_write(GPIOF,GPIO_PIN_0,(bit_status)(x))
 /*detect for charger in/out */
 #define IS_CHARGER_IN() !gpio_input_bit_get(GPIOB,GPIO_PIN_10)
+/*spi chip select for ml5238*/
+#define ml5238_cs(x) gpio_bit_write(GPIOA, GPIO_PIN_15, (bit_status)x)
+
+#if defined CONFIG_BOARD_SP700
+
 /*power switch for cs110, low active */
 #define CS1180_PWR_ENABLE(x) gpio_bit_write(GPIOB,GPIO_PIN_12, x==1?RESET:SET)
 /*detect for CS1180 is ready */
 #define IS_CS1180_READY() !!gpio_input_bit_get(GPIOA, GPIO_PIN_0)
+/*spi chip select for cs1180*/
+#define cs1180_cs(x) gpio_bit_write(GPIOA, GPIO_PIN_9, (bit_status)x)
+
+/*switch for IR uart0 */
+#define UART0_IR_EN(x) gpio_bit_write(GPIOC,GPIO_PIN_14,(bit_status)(x))
+/*switch for IR uart1 */
+#define UART1_IR_EN(x) gpio_bit_write(GPIOF,GPIO_PIN_0,(bit_status)(x))
+
 /*detect hall 1&2 */
 #define IS_HALL1_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_15)
 #define IS_HALL2_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_13)
 
+#elif defined CONFIG_BOARD_SP600
+
+/*power switch for cs110, low active */
+#define CS1180_PWR_ENABLE(x) gpio_bit_write(GPIOC,GPIO_PIN_15, x==1?RESET:SET)
+/*detect for CS1180 is ready */
+#define IS_CS1180_READY() !!gpio_input_bit_get(GPIOB, GPIO_PIN_12)
+/*spi chip select for cs1180*/
+#define cs1180_cs(x) gpio_bit_write(GPIOA, GPIO_PIN_8, (bit_status)x)
+
+/*rs485 power switch */
+#define RS485_PWR_ENABLE(x) gpio_bit_write(GPIOC, GPIO_PIN_14, x==1?SET:RESET)
+/* rs485¼ì²âÄ£Äâhall1, MUST 485 power on && GPIOF0 is detect */
+#define IS_HALL2_DETECTED() (gpio_input_bit_get(GPIOF, GPIO_PIN_0)&&gpio_output_bit_get(GPIOC ,GPIO_PIN_14))
+/* other hall2 is always 0 */
+#define IS_HALL1_DETECTED() (0)
+
+#define LED0_ON(x) gpio_bit_write(GPIOB,GPIO_PIN_12, x==1?RESET:SET)
+#define LED1_ON(x) gpio_bit_write(GPIOB,GPIO_PIN_13, x==1?RESET:SET)
+#define LED2_ON(x) gpio_bit_write(GPIOB,GPIO_PIN_14, x==1?RESET:SET)
+#define LED3_ON(x) gpio_bit_write(GPIOA,GPIO_PIN_8, x==1?RESET:SET)
+#define LED4_ON(x) gpio_bit_write(GPIOA,GPIO_PIN_9, x==1?RESET:SET)
+
+#endif
 static __inline__ void gpio_mode_analog_input(uint32_t gpio_periph, uint32_t pin){
 	gpio_mode_set(gpio_periph, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, pin);
 }

+ 0 - 4
Application/bsp/spi.c

@@ -17,8 +17,6 @@ void spi0_init(void){
 	gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_4);
 	gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_5);
 
-	//ML5238 cs
-	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
 	ml5238_cs(1);
 
 	spi_parameter_struct spi_init_struct;
@@ -58,8 +56,6 @@ void spi1_init(void){
 	gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_14);
 	gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_15);
 	
-	//CS1180 cs
-	gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
 	cs1180_cs(1);
 	
 	spi_parameter_struct spi_init_struct;

+ 0 - 3
Application/bsp/spi.h

@@ -9,8 +9,5 @@ void spi1_init(void);
 void spi1_deinit(void);
 int spi1_send_byte(uint8_t byte, uint8_t *r_data);
 
-#define cs1180_cs(x) gpio_bit_write(GPIOA, GPIO_PIN_9, (bit_status)x)
-#define ml5238_cs(x) gpio_bit_write(GPIOA, GPIO_PIN_15, (bit_status)x)
-
 #endif /* _SPI_H__ */