Эх сурвалжийг харах

git-svn-id: https://svn.ti-link.com.cn/svn/G100/PowerManagement/PS100@5230 efa15413-de06-ce4f-a13f-2108acd733b2

liuguo1 5 жил өмнө
parent
commit
aacffdfe56

+ 107 - 0
bak/cb_operate.c

@@ -0,0 +1,107 @@
+
+int8_t Battery_CB_Switch_Bake(uint8_t cb_operate)
+{
+	CB_VAL cb_val_temp;
+	uint8_t delay_flag = 0;
+	
+	switch(cb_operate)
+	{
+		case CB_BAT1:
+			cb_val_temp.s10_bit = 1;
+			cb_val_temp.s11_bit = 1;
+			cb_val_temp.s20_bit = 0;
+			cb_val_temp.s21_bit = 0;
+			cb_val_temp.ss__bit = 0;
+			break;
+		case CB_BAT2:
+			
+			cb_val_temp.s10_bit = 0;
+			cb_val_temp.s11_bit = 0;
+			cb_val_temp.s20_bit = 1;
+			cb_val_temp.s21_bit = 1;
+			cb_val_temp.ss__bit = 0;
+			break;
+		case CB_BAT1_BAT2_PARRALLEL:
+			if(sub_bms_info_1.packet_common.m_total_vol >= sub_bms_info_2.packet_common.m_total_vol)
+			{
+			
+				cb_val_temp.s10_bit = 1;
+				cb_val_temp.s11_bit = 1;
+				cb_val_temp.s20_bit = 1;
+				cb_val_temp.s21_bit = 0;
+				cb_val_temp.ss__bit = 0;
+			}
+			else
+			{
+				
+				cb_val_temp.s10_bit = 1;
+				cb_val_temp.s11_bit = 0;
+				cb_val_temp.s20_bit = 1;
+				cb_val_temp.s21_bit = 1;
+				cb_val_temp.ss__bit = 0;
+			}
+			break;
+		case CB_BAT1_BAT2_SERIES:
+		
+			cb_val_temp.s10_bit = 1;
+			cb_val_temp.s11_bit = 0;
+			cb_val_temp.s20_bit = 1;
+			cb_val_temp.s21_bit = 0;
+			cb_val_temp.ss__bit = 1;
+			break;
+		case CB_BAT_NO:
+		default:
+			cb_val_temp.s10_bit = 0;
+			cb_val_temp.s11_bit = 0;
+			cb_val_temp.s20_bit = 0;
+			cb_val_temp.s21_bit = 0;
+			cb_val_temp.ss__bit = 0;
+			break;
+	}
+
+	// 1----->0
+	if(cb_val_last.s10_bit > cb_val_temp.s10_bit)
+	{
+		S10_ENABLE(cb_val_temp.s10_bit);
+		delay_flag = 1;
+	}
+
+	if(cb_val_last.s11_bit > cb_val_temp.s11_bit)
+	{
+		S11_ENABLE(cb_val_temp.s11_bit);
+		delay_flag = 1;
+	}
+
+	if(cb_val_last.s20_bit > cb_val_temp.s20_bit)
+	{
+		S20_ENABLE(cb_val_temp.s20_bit);
+		delay_flag = 1;
+	}
+
+	if(cb_val_last.s21_bit > cb_val_temp.s21_bit)
+	{
+		S21_ENABLE(cb_val_temp.s21_bit);
+		delay_flag = 1;
+	}
+
+	if(cb_val_last.ss__bit > cb_val_temp.ss__bit)
+	{
+		SS__ENABLE(cb_val_temp.ss__bit);
+		delay_flag = 1;
+	}
+
+	//delay
+	if(delay_flag)
+		delay_1ms(1);
+
+	//
+	Battery_CB_Operate(&cb_val_temp);
+
+	//
+	cb_val_last = cb_val_temp;
+
+	cb_operate_state = cb_operate;
+	
+	return cb_operate;
+	
+}

+ 0 - 0
bak/cb_operate.c.bak


+ 429 - 0
bak/drv_can - 副本

@@ -0,0 +1,429 @@
+#include "common.h"
+#include "drv_can.h"
+
+//********************************************************CAN-START**********************************************************
+static uint8_t can_tx_buf[CAN_TX_BUF_MAX];
+static uint8_t can_rx_buf[CAN_RX_BUF_MAX];
+static uint16_t tx_count = 0,rx_count = 0,tx_buf_size = 0;
+
+static uint16_t can_filter_id_array[CAN_FILTER_ID_MAX];
+
+
+static void Reset_Can_Rx_Buffer(void)
+{
+    memset(can_rx_buf,0x00,sizeof(can_rx_buf));
+    rx_count = 0;
+}
+
+uint16_t Get_Data_Can(uint8_t * dbuf,uint16_t dbuf_len)
+{
+    if(dbuf == NULL || dbuf_len < rx_count)
+        return 0;
+
+    memcpy(dbuf,can_rx_buf,rx_count);
+    dbuf_len = rx_count;
+    Reset_Can_Rx_Buffer();
+
+    return dbuf_len;
+    
+}
+
+uint8_t Send_One_Frame_Can(uint8_t *data,uint8_t data_len)
+{
+	CanTxMsg TxMessage;
+	
+	if(data == NULL || data_len == 0 || data_len > 8)
+		return 0;
+
+	/* Transmit */
+    TxMessage.StdId = SUR_ID;
+    TxMessage.ExtId = 0x00;
+    TxMessage.RTR = CAN_RTR_DATA;
+    TxMessage.IDE = CAN_ID_STD;
+    TxMessage.DLC = data_len;
+	memcpy(TxMessage.Data,data,data_len);
+
+	return CAN_Transmit(CAN1,&TxMessage);
+		
+}
+
+#define test_1
+int8_t Send_Data_Can(uint8_t *data,uint16_t size)
+{
+   
+#ifdef test_1
+	if(data == NULL ||size == 0 || size > sizeof(can_tx_buf))
+	    return 0;
+
+	memset(can_tx_buf,0xFA,CAN_FRAME_START_LEN);
+	Send_One_Frame_Can(can_tx_buf,(uint8_t)CAN_FRAME_START_LEN);
+	
+	memcpy(can_tx_buf,data,size);
+	tx_count = 0;
+	tx_buf_size = size;
+	CAN_ITConfig(CAN1, CAN_IT_TME,ENABLE);
+	
+#else
+	if(data == NULL ||size == 0 || size + CAN_FRAME_START_LEN > sizeof(can_tx_buf))
+	    return 0;
+
+	memset(can_tx_buf,0xFA,CAN_FRAME_START_LEN);
+	memcpy(&can_tx_buf[CAN_FRAME_START_LEN],data,size);
+	tx_count = 0;
+	tx_buf_size = size + CAN_FRAME_START_LEN;
+	CAN_ITConfig(CAN1, CAN_IT_TME,ENABLE);
+#endif
+
+
+    
+
+    return 1;
+    
+}
+static void Can_NVIC_Config(void)
+{
+	NVIC_InitTypeDef  NVIC_InitStructure;
+
+	NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
+
+	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
+	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
+	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+	NVIC_Init(&NVIC_InitStructure);
+	
+	NVIC_InitStructure.NVIC_IRQChannel = USB_HP_CAN1_TX_IRQn;
+
+	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
+	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
+	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+	NVIC_Init(&NVIC_InitStructure);
+}
+
+static int8_t CAN_Set_Filter(uint16_t f_id)
+{
+	uint8_t f_index;
+	CAN_FilterInitTypeDef  CAN_FilterInitStructure;
+
+	if(f_id == 0)
+		return 0;
+
+	for(f_index = 0; f_index < CAN_FILTER_ID_MAX;f_index++)
+	{
+		if(can_filter_id_array[f_index] == 0)
+		{
+			can_filter_id_array[f_index] = f_id;
+			break;
+		}
+	}
+
+	if(f_index >= CAN_FILTER_ID_MAX)
+		return 0;
+	
+	/* CAN filter init */
+    CAN_FilterInitStructure.CAN_FilterNumber = f_index;
+    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
+    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
+    CAN_FilterInitStructure.CAN_FilterIdHigh = (can_filter_id_array[f_index]<<5);
+    CAN_FilterInitStructure.CAN_FilterIdLow = (CAN_ID_STD|CAN_RTR_DATA);
+    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0;//0xFFFF;
+    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0;//0xFFFF;
+    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
+    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
+    CAN_FilterInit(&CAN_FilterInitStructure);
+
+	return 1;
+	
+}
+
+void CAN_GPIO_Initial(void)
+{
+	GPIO_InitTypeDef  GPIO_InitStructure;
+	
+	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
+	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
+
+    /* Configure CAN pin: RX */
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+    /* Configure CAN pin: TX */
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
+   // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+    GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+    GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE);
+
+		//cs
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+    GPIO_Init(GPIOB, &GPIO_InitStructure);
+	Silent_Enable(0);
+	
+}
+
+void CAN_Initial(void)
+{
+	CAN_InitTypeDef        CAN_InitStructure;
+
+	 /* GPIO clock enable */
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
+ 
+    /* CANx Periph clock enable */
+    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
+
+
+    /* CAN register init */
+    CAN_DeInit(CAN1);
+    CAN_StructInit(&CAN_InitStructure);
+
+    /* CAN cell init */
+    CAN_InitStructure.CAN_TTCM = DISABLE;
+    CAN_InitStructure.CAN_ABOM = DISABLE;
+    CAN_InitStructure.CAN_AWUM = DISABLE;
+    CAN_InitStructure.CAN_NART = DISABLE;
+    CAN_InitStructure.CAN_RFLM = DISABLE;
+    CAN_InitStructure.CAN_TXFP = DISABLE;
+    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
+
+    /* CAN Baudrate = 1MBps*/
+    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
+    CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
+    CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
+    CAN_InitStructure.CAN_Prescaler = 4;
+    CAN_Init(CAN1, &CAN_InitStructure);
+	
+}
+/**
+  * @brief  Configures the CAN.
+  * @param  None
+  * @retval None
+  */
+void CAN_Config(void)
+{   
+	//nt8_t f_index = 0;
+	//nt16_t f_id = 2;
+	#if 1
+	GPIO_InitTypeDef  GPIO_InitStructure;
+	
+	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
+	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
+
+    /* Configure CAN pin: RX */
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+    /* Configure CAN pin: TX */
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
+   // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+    GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+    GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE);
+
+	//cs
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+    GPIO_Init(GPIOB, &GPIO_InitStructure);
+	Silent_Enable(0);
+#else
+	//CAN_GPIO_Initial();
+#endif
+	//CAN_Initial();
+
+	CAN_InitTypeDef        CAN_InitStructure;
+
+	 /* GPIO clock enable */
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
+ 
+    /* CANx Periph clock enable */
+    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
+
+
+    /* CAN register init */
+    CAN_DeInit(CAN1);
+    CAN_StructInit(&CAN_InitStructure);
+
+    /* CAN cell init */
+    CAN_InitStructure.CAN_TTCM = DISABLE;
+    CAN_InitStructure.CAN_ABOM = DISABLE;
+    CAN_InitStructure.CAN_AWUM = DISABLE;
+    CAN_InitStructure.CAN_NART = DISABLE;
+    CAN_InitStructure.CAN_RFLM = DISABLE;
+    CAN_InitStructure.CAN_TXFP = DISABLE;
+    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
+
+    /* CAN Baudrate = 1MBps*/
+    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
+    CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
+    CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
+    CAN_InitStructure.CAN_Prescaler = 4;
+    CAN_Init(CAN1, &CAN_InitStructure);
+#if 0
+	//memset(can_filter_id_array,0x00,sizeof(can_filter_id_array));
+    //CAN_Set_Filter(2);
+    //uint8_t f_index = 0;
+	//uint16_t f_id = 2;
+	CAN_FilterInitTypeDef  CAN_FilterInitStructure;
+
+	/*if(f_id == 0)
+		return ;
+
+	for(f_index = 0; f_index < CAN_FILTER_ID_MAX;f_index++)
+	{
+		if(can_filter_id_array[f_index] == 0)
+		{
+			can_filter_id_array[f_index] = f_id;
+			break;
+		}
+	}
+
+	if(f_index >= CAN_FILTER_ID_MAX)
+		return ;*/
+	
+	/* CAN filter init */
+    CAN_FilterInitStructure.CAN_FilterNumber = 0;
+    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
+    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
+    CAN_FilterInitStructure.CAN_FilterIdHigh = (2<<5);
+    CAN_FilterInitStructure.CAN_FilterIdLow = (CAN_ID_STD|CAN_RTR_DATA);
+    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0;//0xFFFF;
+    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0;//0xFFFF;
+    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
+    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
+    CAN_FilterInit(&CAN_FilterInitStructure);
+#else
+	CAN_FilterInitTypeDef  CAN_FilterInitStructure;
+	/* CAN filter init */
+    CAN_FilterInitStructure.CAN_FilterNumber = 0;
+    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
+    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
+    CAN_FilterInitStructure.CAN_FilterIdHigh = (DIS_ID<<5);
+    CAN_FilterInitStructure.CAN_FilterIdLow = (CAN_ID_STD|CAN_RTR_DATA);
+    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
+    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
+    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
+    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
+    CAN_FilterInit(&CAN_FilterInitStructure);
+
+	CAN_FilterInitStructure.CAN_FilterNumber = 1;
+    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
+    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
+    CAN_FilterInitStructure.CAN_FilterIdHigh = (2<<5);
+    CAN_FilterInitStructure.CAN_FilterIdLow = (CAN_ID_STD|CAN_RTR_DATA);
+    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
+    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
+    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
+    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
+    CAN_FilterInit(&CAN_FilterInitStructure);
+#endif
+	
+
+    Can_NVIC_Config();
+
+    CAN_ITConfig(CAN1, CAN_IT_FMP0,ENABLE);
+    
+
+	
+    
+}
+
+
+void USB_HP_CAN1_TX_IRQHandler(void)
+{
+	uint8_t data[8];
+	uint16_t data_len;
+	
+	if(CAN_GetITStatus(CAN1,CAN_IT_TME) != RESET)
+	{
+		CAN_ClearITPendingBit(CAN1,CAN_IT_TME);
+
+        if(tx_count >= tx_buf_size)
+        {
+			memset(data,0xFB,CAN_FRAME_END_LEN);
+            Send_One_Frame_Can(data,CAN_FRAME_END_LEN);
+		    CAN_ITConfig(CAN1, CAN_IT_TME,DISABLE);
+			return;
+        }
+
+#ifdef test_1
+
+		data_len = tx_buf_size - tx_count;
+		if(data_len > sizeof(data))
+		{
+			data_len = sizeof(data);
+		}
+#else
+		if(tx_count == 0)
+			data_len = CAN_FRAME_START_LEN;
+		else
+		{
+			data_len = tx_buf_size - tx_count;
+			if(data_len > sizeof(data))
+			{
+				data_len = sizeof(data);
+			}
+		}
+#endif		
+		memcpy(data,&can_tx_buf[tx_count],data_len);
+		Send_One_Frame_Can(data,(uint8_t)data_len);
+		tx_count += data_len;
+		
+	}
+}
+
+void USB_LP_CAN1_RX0_IRQHandler(void)
+{
+	CanRxMsg Rxmessage;
+	uint8_t data[8];
+	
+	CAN_Receive(CAN1, CAN_FIFO0, &Rxmessage);
+
+	if(Rxmessage.DLC == CAN_FRAME_START_LEN)
+	{
+		memset(data,0xFA,CAN_FRAME_START_LEN);
+		if(memcmp(Rxmessage.Data,data,CAN_FRAME_START_LEN) == 0)
+		{
+			rx_count = 0;
+			return;
+		}
+	}
+
+	if(Rxmessage.DLC == CAN_FRAME_END_LEN)
+	{
+		memset(data,0xFB,CAN_FRAME_END_LEN);
+		if(memcmp(Rxmessage.Data,data,CAN_FRAME_END_LEN) == 0)
+		{
+			g_event |= EVENT_CAN_RECEIVE_FINISH;
+			return;
+		}
+	}
+
+	if(rx_count + Rxmessage.DLC >= sizeof(can_rx_buf))
+	{
+		return;
+	}
+	memcpy(&can_rx_buf[rx_count],Rxmessage.Data,Rxmessage.DLC);
+	rx_count += Rxmessage.DLC;
+	
+}
+
+
+
+
+
+
+
+
+//********************************************************CAN-END**********************************************************
+
+
+
+
+
+
+