Browse Source

V2版本初步集成

CHENJIE-PC\QiXiang_CHENJIE 4 years ago
parent
commit
df7f148fd9
5 changed files with 1349 additions and 78 deletions
  1. 160 0
      inc/app.h
  2. 13 7
      inc/hal_module_adapter.h
  3. 950 15
      src/app.c
  4. 2 2
      src/bsp_custom.c
  5. 224 54
      src/hal_module_adapter.c

+ 160 - 0
inc/app.h

@@ -22,6 +22,162 @@ extern "C" {
 #define QMSG_ID_SOCK_SENDPKG       (QMSG_ID_BASE + 4)
 #define QMSG_ID_SOCK_RECVPKG       (QMSG_ID_BASE + 5)
 #define QMSG_ID_SOCK_EXIT       (QMSG_ID_BASE + 6)
+#define QX_TCP_IPADRRES				"47.97.127.222"
+#define QX_TCP_PORT					"8712"
+#define APP_CHARGING_WORK_TIME      30
+#define APP_WAKEUP_WORK_TIME		1
+#define APP_SLEEP_TIME				5
+
+#define BATT_CELL_VOL_NUM      17
+#define BATT_TEMP_NUM         7
+#define BATT_SN_LEN           17
+
+#define TCP_START_SYM1			0x23
+#define TCP_START_SYM2			0x23
+#define TCP_CMD_SYM				0x02
+#define TCP_ANS_SYM 			0xFE
+
+//encrypt methord
+#define TCP_ENCPT_ENABLE		0x00
+#define TCP_ENCPT_DISABLE		0x01
+
+
+//message type mark
+#define BATTMSG				0x80
+#define GPSMSG				0x82
+
+
+//tcp Send Msg Case period
+#define SENDMSG5s			01
+#define SENDMSG10s			02
+#define SENDMSG20s			04
+#define SENDMSG30s			06
+#define SENDMSG60s			12
+#define SENDMSG180s			36
+#define SENDMSG300s			60
+#define SENDMSG600s			120
+#define SENDMSGPRDMAX		200
+
+
+extern UINT8 IH_appChargEndWorkTime;
+extern UINT8 IH_appWakeupWorkTime;
+extern UINT8 IH_appSleepTime;
+extern UINT8 IH_isBattLocked;
+
+
+extern UINT8 OH_appChargEndWorkTime;
+extern UINT8 OH_appWakeupWorkTime;
+extern UINT8 OH_appSleepTime;
+extern UINT8 OH_isBattLocked;
+extern UINT8 BattSN[BATT_SN_LEN];
+extern CHAR  TcpServerIpV4Address[16];
+extern CHAR  TcpServerPort[5];
+
+
+
+
+typedef enum
+{
+    PROCESS_STATE_IDLE = 0,
+    PROCESS_STATE_WORK,
+    PROCESS_STATE_SLEEP
+}process_Main;
+
+typedef enum
+{
+    PROCESS_UART_STATE_IDLE = 0,
+    PROCESS_UART_STATE_CHECK,
+    PROCESS_UART_STATE_WORK,
+    PROCESS_UART_STATE_SLEEP
+}process_Uart;
+
+typedef enum
+{
+    PROCESS_CAN_STATE_IDLE = 0,
+    PROCESS_CAN_STATE_WORK,
+    PROCESS_CAN_STATE_SLEEP
+}process_CAN;
+
+typedef enum
+{
+    PROCESS_TCP_STATE_IDLE = 0,
+    PROCESS_TCP_STATE_LINK,
+    PROCESS_TCP_STATE_WORK,
+    PROCESS_TCP_STATE_SLEEP
+}process_TCP;
+
+
+
+
+
+typedef struct BattInfoType
+{	
+	UINT8	sendTimeUTC[6];
+	UINT8	msgMark;
+	UINT8	msgCollectionTimeUTC[6];
+	UINT8	signalStrength;
+	UINT8	errClass;
+	UINT8	errCode[2];
+	UINT8	battI[2];
+	UINT8	battLinkVol[2];
+	UINT8	battPackVol[2];
+	UINT8   chrgState;
+	UINT8	battSOC;
+	UINT8	battSOH;
+	UINT8	batCellBalenceState[4];	//uint32 should change to uint8[]: each bit stand for 1 cell, up to 1024
+	UINT8	battCellNum[2];			//uint8 should change to uint16 (0~65535)  //zhengchao
+	UINT8	battCellU[BATT_CELL_VOL_NUM*2];
+	UINT8	battTempNum[2];			//uint8 should change to uint16 (0~65535)
+	UINT8	battCellTemp[BATT_TEMP_NUM];
+	UINT8	battWorkState;
+	UINT8	battHeatState;
+}BattInfoType;
+
+
+
+typedef struct BattMsgtoTcpType
+{	
+	UINT8 	startSymbol[2];
+	UINT8	cmdSymbol;
+	UINT8	ansSymbol;
+	UINT8	SN[BATT_SN_LEN];
+	UINT8	encryptMethod;
+	UINT8	dataLength[2];	
+	BattInfoType battInfo;	
+	UINT8	CRC;
+}BattMsgtoTcpType;
+
+
+typedef struct GPSInfoType
+{
+	UINT8	sendTimeUTC[6];
+	UINT8	msgMark;
+	UINT8	msgCollectionTimeUTC[6];
+	UINT8	locateMark;
+	UINT8	satelliteNum;
+	UINT8	direction[2];
+	UINT8	speed[2];
+	UINT8	altitude[2];
+	UINT8	latitude[4];
+	UINT8	longitude[4];
+	
+}GPSInfoType;
+
+
+typedef struct GPSMsgtoTcpType
+{
+	UINT8 	startSymbol[2];
+	UINT8	cmdSymbol;
+	UINT8	ansSymbol;
+	UINT8	SN[BATT_SN_LEN];
+	UINT8	encryptMethod;
+	UINT8	dataLength[2];	
+	GPSInfoType gpsInfo;	
+	UINT8	CRC;
+}GPSMsgtoTcpType;
+
+
+
 typedef enum
 {
     APP_INIT_STATE,
@@ -54,6 +210,10 @@ typedef struct Uart_Receive_Type
     uint8_t Reg_Num_L; 
 }Uart_Receive_Type;
 
+
+
+
+
 typedef struct Fota_Type
 {
     bool Fota_update_flag ;

+ 13 - 7
inc/hal_module_adapter.h

@@ -7,7 +7,8 @@ extern "C" {
 #include "commontypedef.h"
 #include "sensor.h"
 #include "can.h"
-#define USING_PRINTF
+
+#define USING_PRINTF 
 #define GPS_DATA_RECV_BUFFER_SIZE     						(1024)
 
 #define I2C_INT1_REQ_BITMAP    								 (0x1)
@@ -132,7 +133,12 @@ typedef enum
 	BL_LEVEL3, 
 }BlLogLevel;
 #endif
-
+typedef struct CAN_Msg_Type
+{
+	UINT32 Id;	
+	UINT8  DLC;
+	UINT8  Data[8];
+}CAN_Msg_Type;
 typedef void (*posGGACallBack )(UINT8 res, UINT8 * params);
 void PowerPinConfig(IOType iotype);
 
@@ -154,11 +160,11 @@ void CanTiggerEvt(UINT8 cmd);
 #endif
 INT32 CAN_WriteReg(UINT8 addr, UINT8 value);
 INT32 CAN_ReadReg(UINT8 reg, UINT8 len, UINT8 *buf);
- void HAL_Can_Init(Can_InitType param);
- void HAL_Can_Sleep(void);
- INT32 HAL_Can_Reset(void);
-INT32 HAL_Can_Transmit(Can_TxMsgType Can_TxMsg);
- UINT8  HAL_Can_Receive(UINT32 *CAN_ID,UINT8 *CAN_RX_Buf);
+void HAL_Can_Init(Can_InitType param);
+void HAL_Can_Sleep(void);
+INT32 HAL_Can_Reset(void);
+INT8 HAL_Can_Transmit(CAN_Msg_Type Can_TxMsg);
+void  HAL_Can_Receive(CAN_Msg_Type* CanRxMsgBuffer);
  #ifdef BL_FILE_LOG
 void bluejoy_printf(BlLogLevel level, const UINT8 *format, ...);
 void bluejoy_read_logfile(void);

File diff suppressed because it is too large
+ 950 - 15
src/app.c


+ 2 - 2
src/bsp_custom.c

@@ -154,8 +154,8 @@ void BSP_CustomInit(void)
 #else
     if(rawFlashPlatConfig && (rawFlashPlatConfig->logControl != 0 ))
     {
-        SetUnilogUart(PORT_USART_1, rawFlashPlatConfig->uartBaudRate, true);
-        uniLogInitStart(UART_1_FOR_UNILOG);
+        SetUnilogUart(PORT_USART_0, rawFlashPlatConfig->uartBaudRate, true);
+        uniLogInitStart(UART_0_FOR_UNILOG);
         ECOMM_STRING(UNILOG_PLA_STRING, build_info, P_SIG, "%s", getBuildInfo());
     }
 #endif

+ 224 - 54
src/hal_module_adapter.c

@@ -728,10 +728,10 @@ void HAL_Can_Init(Can_InitType param)
 		CAN_WriteReg(TXB0SIDH,0xFF&(param.TxStdIDH));//����?��?o3??��0������?������?��?????
 		CAN_WriteReg(TXB0SIDL,0xE0&(param.TxStdIDL));//����?��?o3??��0������?������?��?�̨�??		
 
-		CAN_WriteReg(RXM0SIDH,0xFF);
-		CAN_WriteReg(RXM0SIDL,0xE0);
-		CAN_WriteReg(RXM1SIDH,0xFF);
-		CAN_WriteReg(RXM1SIDL,0xE0);
+		CAN_WriteReg(RXM0SIDH,0x00);
+		CAN_WriteReg(RXM0SIDL,0x00);
+		CAN_WriteReg(RXM1SIDH,0x00);
+		CAN_WriteReg(RXM1SIDL,0x00);
 
 		/*?����???2��??��??��*/
 		CAN_WriteReg(RXF0SIDH,0xFF&(param.RxStdIDH[0]));
@@ -759,10 +759,10 @@ void HAL_Can_Init(Can_InitType param)
 		CAN_WriteReg(RXF5SIDL,0xE0&(param.RxStdIDL[5]));
 #endif
 	
-		CAN_WriteReg(RXB0CTRL,RXM_VALID_STD);
+		CAN_WriteReg(RXB0CTRL,RXM_RCV_ALL);
 		CAN_WriteReg(RXB0DLC,DLC_8);
 		
-		CAN_WriteReg(RXB1CTRL,RXM_VALID_STD|FILHIT1_FLTR_2);
+		CAN_WriteReg(RXB1CTRL,RXM_RCV_ALL);
 		CAN_WriteReg(RXB1DLC,DLC_8);
 	
 	}
@@ -775,10 +775,10 @@ void HAL_Can_Init(Can_InitType param)
 		CAN_WriteReg(TXB0EID0,0xFF&(param.TxExtIDL));
 		
 		 /*?����???2��??��??��*/
-		CAN_WriteReg(RXM0SIDH,0xFF);
-		CAN_WriteReg(RXM0SIDL,0xE3);
-		CAN_WriteReg(RXM0EID8,0xFF);
-		CAN_WriteReg(RXM0EID0,0xFF);
+		CAN_WriteReg(RXM0SIDH,0x00);  //FF->00 zhengchao
+		CAN_WriteReg(RXM0SIDL,0x00);  //E3->00 zhengchao
+		CAN_WriteReg(RXM0EID8,0x00);  //FF->00 zhengchao
+		CAN_WriteReg(RXM0EID0,0x00);  //FF->00 zhengchao
 
 		/*?����???2��??��??��*/
 		CAN_WriteReg(RXF0SIDH,0xFF&(param.RxStdIDH[0]));
@@ -812,7 +812,7 @@ void HAL_Can_Init(Can_InitType param)
 		CAN_WriteReg(RXF5EID8,0xFF&(param.RxExtIDL[5]));
 		
 	
-		CAN_WriteReg(RXB0CTRL,RXM_VALID_EXT);
+		CAN_WriteReg(RXB0CTRL,RXM_VALID_EXT|BUKT_ROLLOVER);
 		CAN_WriteReg(RXB0DLC,DLC_8);
 		
 		CAN_WriteReg(RXB1CTRL,RXM_VALID_EXT|FILHIT1_FLTR_2);
@@ -820,14 +820,15 @@ void HAL_Can_Init(Can_InitType param)
 	
 	}
 
-	CAN_WriteReg(CANINTE,0x43);
+	CAN_WriteReg(BFPCTRL,0x0F);//zhengchao20210304  add
+	CAN_WriteReg(CANINTE,0x43); //zhengchao20210304  0x43 -> 0x03
 	CAN_WriteReg(CANINTF,0x00);
 	
 	CAN_WriteReg(CANCTRL,param.mode |CLKOUT_ENABLED);//??MCP2515¨¦¨¨???a?y3¡ê?¡ê¨º?,¨ª?3??????¡ê¨º? REQOP_NORMAL|CLKOUT_ENABLED
       CAN_ReadReg(CANSTAT,1,&temp);//?¨¢¨¨?CAN¡Á¡ä¨¬???¡ä??¡Â¦Ì??¦Ì
 	if(param.mode !=(temp&0xE0))//?D??MCP2515¨º?¡¤?¨°??-??¨¨??y3¡ê?¡ê¨º?
 	{
-    		CAN_WriteReg(CANCTRL,param.mode|CLKOUT_ENABLED);//?����???MCP2515����???a?y3��?�꨺?,��?3??????�꨺?REQOP_NORMAL
+    		CAN_WriteReg(CANCTRL,param.mode|CLKOUT_ENABLED);//?¨´¡ä???MCP2515¨¦¨¨???a?y3¡ê?¡ê¨º?,¨ª?3??????¡ê¨º?REQOP_NORMAL
 	}
 }
 
@@ -841,10 +842,13 @@ void HAL_Can_Init(Can_InitType param)
 *******************************************************************************/
 void HAL_Can_Sleep(void)
 {
-	UINT8 temp=0,t=0;
+	UINT8 temp=0,temp2=0,t=0;
 	do{
-		CAN_WriteReg(CANCTRL,OPMODE_SLEEP |CLKOUT_DISABLED);
+		CAN_WriteReg(CANCTRL,OPMODE_CONFIG);
+		CAN_WriteReg(CANINTE,WAKIE|RX0IE|RX1IE);
+		//CAN_WriteReg(CNF3, WAKFIL);		
 		CAN_ReadReg(CANSTAT,1,&temp);
+		CAN_WriteReg(CANCTRL,OPMODE_SLEEP |CLKOUT_DISABLED);
 		#ifdef USING_PRINTF
 		//printf("%s[%d] [%#x]\r\n",__FUNCTION__, __LINE__,temp);
 		#endif		
@@ -869,35 +873,145 @@ void HAL_Can_Sleep(void)
 * ¡¤¦Ì???¦Ì  : ?T
 * ?¦Ì?¡Â    : ?T
 *******************************************************************************/
-INT32  HAL_Can_Transmit(Can_TxMsgType Can_TxMsg)
+INT8  HAL_Can_Transmit(CAN_Msg_Type Can_TxMsg)
 {
-	UINT8 tryTim,count,value,i;
-
-	count=0;	
-	while(count<Can_TxMsg.DLC)
+	UINT8 tryTim,count,value,i,temp,TXBufferCase = 0;
+	INT8 ret = 0;
+	UINT8 TXB0CTRLvalue,TXB1CTRLvalue,TXB2CTRLvalue,CANINTFValue=0;
+	CAN_ReadReg(TXB0CTRL, 1, &TXB0CTRLvalue);
+	CAN_ReadReg(TXB1CTRL, 1, &TXB1CTRLvalue);
+	CAN_ReadReg(TXB2CTRL, 1, &TXB2CTRLvalue);
+
+	if((TXB0CTRLvalue&TXREQ)==0)
+		TXBufferCase = 0;
+	else if((TXB1CTRLvalue&TXREQ)==0)
+		TXBufferCase =1;
+	else if((TXB2CTRLvalue&TXREQ)==0)
+		TXBufferCase =2;
+	
+	switch(TXBufferCase)
 	{
-		tryTim=0;
-		CAN_ReadReg(TXB0CTRL,1,&value);
-		while((value&0x08) && (tryTim<50))//?��?��?��?3D?���䨬???��?,�̨���yTXREQ����????��?
+
+		case 0:
 		{
-			CAN_ReadReg(TXB0CTRL,1,&value);
-			osDelay(1/portTICK_PERIOD_MS);
-			tryTim++;
+			//tryTim=0;
+			//CAN_RseadReg(TXB0CTRL,1,&value);
+			
+			//while((value&0x08) && (tryTim<50))//?��?��?��?3D?���䨬???��?,�̨���yTXREQ����????��?
+			//{
+			//	CAN_ReadReg(TXB0CTRL,1,&value);
+			//	osDelay(1/portTICK_PERIOD_MS);
+			//	tryTim++;
+			//}
+			
+			/*TXB0*/
+			CAN_WriteReg(TXB0SIDH,0xFF&((Can_TxMsg.Id)>>3));//����?��?o3??��0������?������?��?????
+			CAN_WriteReg(TXB0SIDL,0xE0&((Can_TxMsg.Id)<<5));//����?��?o3??��0������?������?��?�̨�??	
+			for(i=0;i<Can_TxMsg.DLC;i++)
+			{
+				CAN_WriteReg(TXB0D0+i,Can_TxMsg.Data[i]);//??��y����?����?��y?YD�䨨?����?��?o3???��??��
+				
+			}
+			CAN_WriteReg(TXB0DLC,Can_TxMsg.DLC);//??��???��y����?����?��y?Y3��?��D�䨨?����?��?o3??��0��?����?��3��?��??��??��
+			SPI_CS_Low();
+			CAN_WriteReg(TXB0CTRL,TXREQ);//???������?������??
+			//SPI_CS_High();
+
+			printf("IDsend0 = 0x%x\n",Can_TxMsg.Id);
+			printf("DataSend0=\n");
+			for(i=0;i<8;i++)
+			{
+				printf("0x%x\t",Can_TxMsg.Data[i]);
+			}
+			printf("\n");
+			
+			ret = 0;
+			break;
 		}
-		/*TXB0*/
-		CAN_WriteReg(TXB0SIDH,0xFF&(Can_TxMsg.stdIDH));//����?��?o3??��0������?������?��?????
-		CAN_WriteReg(TXB0SIDL,0xE0&(Can_TxMsg.stdIDL));//����?��?o3??��0������?������?��?�̨�??	
-		for(i=0;i<8;)
+		case 1:
 		{
-			CAN_WriteReg(TXB0D0+i,Can_TxMsg.Data[count++]);//??��y����?����?��y?YD�䨨?����?��?o3???��??��
-			i++;
-			if(count>=Can_TxMsg.DLC) break;
+			/*TXB0*/
+			CAN_WriteReg(TXB1SIDH,0xFF&((Can_TxMsg.Id)>>3));//����?��?o3??��0������?������?��?????
+			CAN_WriteReg(TXB1SIDL,0xE0&((Can_TxMsg.Id)<<5));//����?��?o3??��0������?������?��?�̨�??	
+			for(i=0;i<Can_TxMsg.DLC;i++)
+			{
+				CAN_WriteReg(TXB1D0+i,Can_TxMsg.Data[i]);//??��y����?����?��y?YD�䨨?����?��?o3???��??��
+				
+			}
+			CAN_WriteReg(TXB1DLC,Can_TxMsg.DLC);//??��???��y����?����?��y?Y3��?��D�䨨?����?��?o3??��0��?����?��3��?��??��??��
+			SPI_CS_Low();
+			CAN_WriteReg(TXB1CTRL,TXREQ);//???������?������??
+			//SPI_CS_High();
+
+			printf("IDsend1 = 0x%x\n",Can_TxMsg.Id);
+			printf("DataSend1=\n");
+			for(i=0;i<8;i++)
+			{
+				printf("0x%x\t",Can_TxMsg.Data[i]);
+			}
+			printf("\n");
+			ret = 1;
+			break;
+		}
+		case 2:
+		{	
+			/*TXB0*/
+			CAN_WriteReg(TXB2SIDH,0xFF&((Can_TxMsg.Id)>>3));//����?��?o3??��0������?������?��?????
+			CAN_WriteReg(TXB2SIDL,0xE0&((Can_TxMsg.Id)<<5));//����?��?o3??��0������?������?��?�̨�??	
+			for(i=0;i<Can_TxMsg.DLC;i++)
+			{
+				CAN_WriteReg(TXB2D0+i,Can_TxMsg.Data[i]);//??��y����?����?��y?YD�䨨?����?��?o3???��??��
+				
+			}
+			CAN_WriteReg(TXB2DLC,Can_TxMsg.DLC);//??��???��y����?����?��y?Y3��?��D�䨨?����?��?o3??��0��?����?��3��?��??��??��
+			SPI_CS_Low();
+			CAN_WriteReg(TXB2CTRL,TXREQ);//???������?������??
+			//SPI_CS_High();
+
+			printf("IDsend2 = 0x%x\n",Can_TxMsg.Id);
+			printf("DataSend2=\n");
+			for(i=0;i<8;i++)
+			{
+				printf("0x%x\t",Can_TxMsg.Data[i]);
+			}
+			printf("\n");
+			ret = 2;
+			break;
 		}
-		CAN_WriteReg(TXB0DLC,i);//??��???��y����?����?��y?Y3��?��D�䨨?����?��?o3??��0��?����?��3��?��??��??��
-		SPI_CS_Low();
-		CAN_WriteReg(TXB0CTRL,0x08);//???������?������??
-		SPI_CS_High();
+		default:
+		{
+			ret = -1;
+			break;
+		}
+	}
+
+	CAN_ReadReg(TXB0CTRL, 1, &TXB0CTRLvalue);
+	CAN_ReadReg(TXB1CTRL, 1, &TXB1CTRLvalue);
+	CAN_ReadReg(TXB2CTRL, 1, &TXB2CTRLvalue);
+
+	tryTim = 0;
+	while((TXB0CTRLvalue&TXREQ) && (TXB1CTRLvalue&TXREQ) && (TXB1CTRLvalue&TXREQ) && (tryTim<50))
+	{
+		//SPI_CS_High();
+		CAN_ReadReg(TXB0CTRL, 1, &TXB0CTRLvalue);
+		CAN_ReadReg(TXB1CTRL, 1, &TXB1CTRLvalue);
+		CAN_ReadReg(TXB2CTRL, 1, &TXB2CTRLvalue);
+		osDelay(1);
+		tryTim++;
 	}
+	CAN_ReadReg(CANINTF, 1, &CANINTFValue);
+	SPI_CS_High();
+	if((TXB0CTRLvalue&0x20)||(TXB1CTRLvalue&0x20)||(TXB2CTRLvalue&0x20)||(CANINTFValue&0x80))
+	{
+		ret = -1;
+		printf("TXB0CTRLvalue = 0x%x\n",TXB0CTRLvalue);
+		printf("TXB1CTRLvalue = 0x%x\n",TXB1CTRLvalue);
+		printf("TXB2CTRLvalue = 0x%x\n",TXB2CTRLvalue);
+		printf("CANINTFValue = 0x%x\n",CANINTFValue);
+	}
+	
+	printf("ret = %d\n",ret);
+	return ret;
 }
 
 /*******************************************************************************
@@ -908,35 +1022,91 @@ INT32  HAL_Can_Transmit(Can_TxMsgType Can_TxMsg)
 * ����???��  : len(?����?��?��y?Y��?3��?��,0~8��??��)
 * ?��?��    : ?T
 *******************************************************************************/
-UINT8  HAL_Can_Receive(UINT32 *CAN_ID,UINT8 *CAN_RX_Buf)
+void  HAL_Can_Receive(CAN_Msg_Type* CanRxMsgBuffer)
 {
-	UINT8 i=0,len=0,temp=0,idh,idl;
- 
+	
+	UINT8 i=0,len=0,temp=0;
+	UINT8 SIdH,SIdL,EId8,EId0;
+	//static UINT16 counterBuff0,counterBuff1 = 0;
+	
 	CAN_ReadReg(CANINTF,1,&temp);
-	if(temp & 0x01)
-	{
-		CAN_ReadReg(RXB0SIDH,1,&idh);
-		CAN_ReadReg(RXB0SIDL,1,&idl);
-		CAN_ReadReg(RXB0DLC,1,&len);
+//	printf("CANINTF = 0x%x\n",temp);
+//	USARTdrv->Send(&temp,1);
+	if(temp & 0x01)  //Rx Buffer 0
+	{	
+		/*get the id information*/
+		CAN_ReadReg(RXB0SIDH,1,&SIdH);
+		CAN_ReadReg(RXB0SIDL,1,&SIdL);
+		CAN_ReadReg(RXB0EID8,1,&EId8);
+		CAN_ReadReg(RXB0EID0,1,&EId0);
+		
+		CAN_ReadReg(RXB0DLC,1,&len);		
+		len = len&0x0F;
+		CanRxMsgBuffer[0].DLC = len;
+
+		if(SIdL & 0x8)  // if SIdL.3 = 1, the id belongs to ExtID
+		{
+			(CanRxMsgBuffer[0]).Id = ((SIdH<<5 | (SIdL>>5)<<2 | SIdL&0x3 )<<16 | (EId8<<8) | EId0);
+		}
+		else
+		{
+			(CanRxMsgBuffer[0]).Id = SIdH<<3 | SIdL>>5;
+		}
+		
+		i = 0;
 		while(i<len)
 		{	
-			CAN_ReadReg(RXB0D0+i,1,&CAN_RX_Buf[i]);
+			CAN_ReadReg(RXB0D0+i,1,&((CanRxMsgBuffer[0]).Data[i]));
 			i++;
+		}	
+
+		printf("ID0 = 0x%x\n",(CanRxMsgBuffer[0]).Id);
+		printf("Data0=\n");
+		for(i=0;i<8;i++)
+		{
+			printf("0x%x\t",(CanRxMsgBuffer[0]).Data[i]);
 		}
+		printf("\n");
+	}
+	if(temp & 0x02)  //RX Buffer 1
+	{
+		/*get the id information*/
+		CAN_ReadReg(RXB1SIDH,1,&SIdH);
+		CAN_ReadReg(RXB1SIDL,1,&SIdL);
+		CAN_ReadReg(RXB1EID8,1,&EId8);
+		CAN_ReadReg(RXB1EID0,1,&EId0);
 		
-	}else if(temp & 0x02){
-		CAN_ReadReg(RXB1SIDH,1,&idh);
-		CAN_ReadReg(RXB1SIDL,1,&idl);
-		CAN_ReadReg(RXB1DLC,1,&len);
+		CAN_ReadReg(RXB1DLC,1,&len);		
+		len = len & 0x0F;
+		CanRxMsgBuffer[1].DLC = len;
+	
+		if(SIdL & 0x8)  // SIdL.3 = 1, ExtID
+		{
+			(CanRxMsgBuffer[1]).Id = ((SIdH<<5 | (SIdL>>5)<<2 | SIdL&0x3 )<<16 | (EId8<<8) | EId0);
+		}
+		else
+		{
+			(CanRxMsgBuffer[1]).Id = SIdH<<3 | SIdL>>5;
+		}
+
+		i = 0 ;
 		while(i<len)
 		{	
-			CAN_ReadReg(RXB1D0+i,1,&CAN_RX_Buf[i]);
-			i++;
+			CAN_ReadReg(RXB1D0+i,1,&((CanRxMsgBuffer[1]).Data[i]));
+			i++;			
+		}
+
+		printf("ID1 = 0x%x\n",(CanRxMsgBuffer[1]).Id);
+		printf("Data1=\n");
+		for(i=0;i<8;i++)
+		{
+			printf("0x%x\t",(CanRxMsgBuffer[1]).Data[i]);
 		}
+		printf("\n");
 	}
 	CAN_WriteReg(CANINTF,0);
-	*CAN_ID=(idh<<3)+(idl>>5);
-	return len;
+	CAN_ReadReg(CANINTF, 1, &temp);
+	printf("CANINTF = %x\n",temp);
 }
 
 /**

Some files were not shown because too many files changed in this diff