|
@@ -857,7 +857,7 @@ void HAL_Can_Init(Can_InitType param)
|
|
|
CAN_WriteReg(RXB1DLC, DLC_8);
|
|
|
}
|
|
|
else if (param.packType == EXT_PACK)
|
|
|
- {
|
|
|
+ {
|
|
|
/*TXB0*/
|
|
|
CAN_WriteReg(TXB0SIDH, 0xFF & (param.TxStdIDH));
|
|
|
CAN_WriteReg(TXB0SIDL, (0xEB & (param.TxStdIDL)) | 0x08);
|
|
@@ -868,44 +868,50 @@ void HAL_Can_Init(Can_InitType param)
|
|
|
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
|
|
|
+ CAN_WriteReg(RXM0EID0, 0xF3); //FF->00 zhengchao
|
|
|
+
|
|
|
+ /*?����???2��??��??��*/
|
|
|
+ CAN_WriteReg(RXM1SIDH, 0x00); //FF->00 zhengchao
|
|
|
+ CAN_WriteReg(RXM1SIDL, 0x00); //E3->00 zhengchao
|
|
|
+ CAN_WriteReg(RXM1EID8, 0x00); //FF->00 zhengchao
|
|
|
+ CAN_WriteReg(RXM1EID0, 0xF3); //FF->00 zhengchao
|
|
|
|
|
|
/*?����???2��??��??��*/
|
|
|
CAN_WriteReg(RXF0SIDH, 0xFF & (param.RxStdIDH[0]));
|
|
|
CAN_WriteReg(RXF0SIDL, (0xEB & (param.RxStdIDL[0])) | 0x08);
|
|
|
CAN_WriteReg(RXF0EID8, 0xFF & (param.RxExtIDH[0]));
|
|
|
- CAN_WriteReg(RXF0EID8, 0xFF & (param.RxExtIDL[0]));
|
|
|
+ CAN_WriteReg(RXF0EID0, 0xFF & (param.RxExtIDL[0]));
|
|
|
|
|
|
CAN_WriteReg(RXF1SIDH, 0xFF & (param.RxStdIDH[1]));
|
|
|
CAN_WriteReg(RXF1SIDL, (0xEB & (param.RxStdIDL[1])) | 0x08);
|
|
|
CAN_WriteReg(RXF1EID8, 0xFF & (param.RxExtIDH[1]));
|
|
|
- CAN_WriteReg(RXF1EID8, 0xFF & (param.RxExtIDL[1]));
|
|
|
+ CAN_WriteReg(RXF1EID0, 0xFF & (param.RxExtIDL[1]));
|
|
|
|
|
|
CAN_WriteReg(RXF2SIDH, 0xFF & (param.RxStdIDH[2]));
|
|
|
CAN_WriteReg(RXF2SIDL, (0xEB & (param.RxStdIDL[2])) | 0x08);
|
|
|
CAN_WriteReg(RXF2EID8, 0xFF & (param.RxExtIDH[2]));
|
|
|
- CAN_WriteReg(RXF2EID8, 0xFF & (param.RxExtIDL[2]));
|
|
|
+ CAN_WriteReg(RXF2EID0, 0xFF & (param.RxExtIDL[2]));
|
|
|
|
|
|
CAN_WriteReg(RXF3SIDH, 0xFF & (param.RxStdIDH[3]));
|
|
|
CAN_WriteReg(RXF3SIDL, (0xEB & (param.RxStdIDL[3])) | 0x08);
|
|
|
CAN_WriteReg(RXF3EID8, 0xFF & (param.RxExtIDH[3]));
|
|
|
- CAN_WriteReg(RXF3EID8, 0xFF & (param.RxExtIDL[3]));
|
|
|
+ CAN_WriteReg(RXF3EID0, 0xFF & (param.RxExtIDL[3]));
|
|
|
|
|
|
CAN_WriteReg(RXF4SIDH, 0xFF & (param.RxStdIDH[4]));
|
|
|
CAN_WriteReg(RXF4SIDL, (0xEB & (param.RxStdIDL[4])) | 0x08);
|
|
|
CAN_WriteReg(RXF4EID8, 0xFF & (param.RxExtIDH[4]));
|
|
|
- CAN_WriteReg(RXF4EID8, 0xFF & (param.RxExtIDL[4]));
|
|
|
+ CAN_WriteReg(RXF4EID0, 0xFF & (param.RxExtIDL[4]));
|
|
|
|
|
|
CAN_WriteReg(RXF5SIDH, 0xFF & (param.RxStdIDH[5]));
|
|
|
CAN_WriteReg(RXF5SIDL, (0xEB & (param.RxStdIDL[5])) | 0x08);
|
|
|
CAN_WriteReg(RXF5EID8, 0xFF & (param.RxExtIDH[5]));
|
|
|
- CAN_WriteReg(RXF5EID8, 0xFF & (param.RxExtIDL[5]));
|
|
|
+ CAN_WriteReg(RXF5EID0, 0xFF & (param.RxExtIDL[5]));
|
|
|
|
|
|
- CAN_WriteReg(RXB0CTRL, RXM_RCV_ALL | BUKT_ROLLOVER);
|
|
|
- CAN_WriteReg(RXB0DLC, DLC_8);
|
|
|
+ CAN_WriteReg(RXB0CTRL, RXM_VALID_EXT | BUKT_ROLLOVER);
|
|
|
+ //CAN_WriteReg(RXB0DLC, DLC_8);
|
|
|
|
|
|
- CAN_WriteReg(RXB1CTRL, RXM_RCV_ALL);
|
|
|
- CAN_WriteReg(RXB1DLC, DLC_8);
|
|
|
+ CAN_WriteReg(RXB1CTRL, RXM_VALID_EXT);
|
|
|
+ //CAN_WriteReg(RXB1DLC, DLC_8);
|
|
|
}
|
|
|
|
|
|
CAN_WriteReg(BFPCTRL, 0x3F); //zhengchao20210304 add
|
|
@@ -1124,7 +1130,7 @@ UINT8 HAL_Can_Receive(CAN_Msg_Type *CanRxMsgBuffer)
|
|
|
UINT8 ret = 0;
|
|
|
|
|
|
CAN_ReadReg(CANINTF, 1, &temp);
|
|
|
- //printf("CANINTF = %x\n",temp);
|
|
|
+
|
|
|
ret = temp & 0x03;
|
|
|
|
|
|
switch (ret)
|
|
@@ -1132,85 +1138,86 @@ UINT8 HAL_Can_Receive(CAN_Msg_Type *CanRxMsgBuffer)
|
|
|
case 0x00:
|
|
|
return ret;
|
|
|
break;
|
|
|
- // case 0x01:
|
|
|
- // /*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;
|
|
|
- // }
|
|
|
-
|
|
|
- // j = 0;
|
|
|
- // while (j < len)
|
|
|
- // {
|
|
|
- // CAN_ReadReg(RXB0D0 + j, 1, &((CanRxMsgBuffer[0]).Data[j]));
|
|
|
- // j++;
|
|
|
- // }
|
|
|
- // #ifdef USING_PRINTF
|
|
|
- // printf("1-buffer0 ID = %x\n", CanRxMsgBuffer[0].Id);
|
|
|
- // // for(j=0;j<8;j++)
|
|
|
- // // {
|
|
|
- // // printf("%x ",CanRxMsgBuffer[0].Data[j]);
|
|
|
- // // }
|
|
|
- // // printf("\n");
|
|
|
- // #endif
|
|
|
- // CAN_WriteReg(CANINTF, temp & 0xFE);
|
|
|
- // return ret;
|
|
|
- // break;
|
|
|
-
|
|
|
- // case 0x02:
|
|
|
- // /*get the id information*/
|
|
|
- // CAN_ReadReg(RXB1SIDH, 1, &SIdH);
|
|
|
- // CAN_ReadReg(RXB1SIDL, 1, &SIdL);
|
|
|
- // CAN_ReadReg(RXB1EID8, 1, &EId8);
|
|
|
- // CAN_ReadReg(RXB1EID0, 1, &EId0);
|
|
|
-
|
|
|
- // 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;
|
|
|
- // }
|
|
|
-
|
|
|
- // j = 0;
|
|
|
- // while (j < len)
|
|
|
- // {
|
|
|
- // CAN_ReadReg(RXB1D0 + j, 1, &((CanRxMsgBuffer[1]).Data[j]));
|
|
|
- // j++;
|
|
|
- // }
|
|
|
-
|
|
|
- // #ifdef USING_PRINTF
|
|
|
- // printf("1-buffer1 ID = %x\n", CanRxMsgBuffer[1].Id);
|
|
|
- // // for(j=0;j<8;j++)
|
|
|
- // // {
|
|
|
- // // printf("%x ",CanRxMsgBuffer[1].Data[j]);
|
|
|
- // // }
|
|
|
- // // printf("\n");
|
|
|
- // #endif
|
|
|
- // CAN_WriteReg(CANINTF, temp & 0xFD);
|
|
|
- // return ret;
|
|
|
- // break;
|
|
|
- //case 0x03:
|
|
|
- default:
|
|
|
+ case 0x01:
|
|
|
+ /*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;
|
|
|
+ }
|
|
|
+
|
|
|
+ j = 0;
|
|
|
+ while (j < len)
|
|
|
+ {
|
|
|
+ CAN_ReadReg(RXB0D0 + j, 1, &((CanRxMsgBuffer[0]).Data[j]));
|
|
|
+ j++;
|
|
|
+ }
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("1-buffer0 ID = %x\n", CanRxMsgBuffer[0].Id);
|
|
|
+ // for(j=0;j<8;j++)
|
|
|
+ // {
|
|
|
+ // printf("%x ",CanRxMsgBuffer[0].Data[j]);
|
|
|
+ // }
|
|
|
+ // printf("\n");
|
|
|
+ #endif
|
|
|
+ CAN_WriteReg(CANINTF, temp & 0xFE);
|
|
|
+ return ret;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 0x02:
|
|
|
+ /*get the id information*/
|
|
|
+ CAN_ReadReg(RXB1SIDH, 1, &SIdH);
|
|
|
+ CAN_ReadReg(RXB1SIDL, 1, &SIdL);
|
|
|
+ CAN_ReadReg(RXB1EID8, 1, &EId8);
|
|
|
+ CAN_ReadReg(RXB1EID0, 1, &EId0);
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ j = 0;
|
|
|
+ while (j < len)
|
|
|
+ {
|
|
|
+ CAN_ReadReg(RXB1D0 + j, 1, &((CanRxMsgBuffer[1]).Data[j]));
|
|
|
+ j++;
|
|
|
+ }
|
|
|
+
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("1-buffer1 ID = %x\n", CanRxMsgBuffer[1].Id);
|
|
|
+ // for(j=0;j<8;j++)
|
|
|
+ // {
|
|
|
+ // printf("%x ",CanRxMsgBuffer[1].Data[j]);
|
|
|
+ // }
|
|
|
+ // printf("\n");
|
|
|
+ #endif
|
|
|
+ CAN_WriteReg(CANINTF, temp & 0xFD);
|
|
|
+ return ret;
|
|
|
+ break;
|
|
|
+ case 0x03:
|
|
|
+ //default:
|
|
|
/*get the id information*/
|
|
|
+ //printf("CANINTF = %x\n",temp&0x03);
|
|
|
CAN_ReadReg(RXB0SIDH, 1, &SIdH);
|
|
|
CAN_ReadReg(RXB0SIDL, 1, &SIdL);
|
|
|
CAN_ReadReg(RXB0EID8, 1, &EId8);
|
|
@@ -1235,13 +1242,13 @@ UINT8 HAL_Can_Receive(CAN_Msg_Type *CanRxMsgBuffer)
|
|
|
CAN_ReadReg(RXB0D0 + j, 1, &((CanRxMsgBuffer[0]).Data[j]));
|
|
|
j++;
|
|
|
}
|
|
|
-#ifdef USING_PRINTF1
|
|
|
+#ifdef USING_PRINTF
|
|
|
printf("2-buffer0 ID = %x\n", CanRxMsgBuffer[0].Id);
|
|
|
- // for (j = 0; j < 8; j++)
|
|
|
- // {
|
|
|
- // printf("%x ", CanRxMsgBuffer[0].Data[j]);
|
|
|
- // }
|
|
|
- // printf("\n");
|
|
|
+ for (j = 0; j < 8; j++)
|
|
|
+ {
|
|
|
+ printf("%x ", CanRxMsgBuffer[0].Data[j]);
|
|
|
+ }
|
|
|
+ printf("\n");
|
|
|
#endif
|
|
|
|
|
|
/*get the id information*/
|
|
@@ -1270,20 +1277,20 @@ UINT8 HAL_Can_Receive(CAN_Msg_Type *CanRxMsgBuffer)
|
|
|
j++;
|
|
|
}
|
|
|
|
|
|
-#ifdef USING_PRINTF1
|
|
|
+#ifdef USING_PRINTF
|
|
|
printf("2-buffer1 ID = %x\n", CanRxMsgBuffer[1].Id);
|
|
|
- // for (j = 0; j < 8; j++)
|
|
|
- // {
|
|
|
- // printf("%x ", CanRxMsgBuffer[1].Data[j]);
|
|
|
- // }
|
|
|
- // printf("\n");
|
|
|
+ for (j = 0; j < 8; j++)
|
|
|
+ {
|
|
|
+ printf("%x ", CanRxMsgBuffer[1].Data[j]);
|
|
|
+ }
|
|
|
+ printf("\n");
|
|
|
#endif
|
|
|
CAN_WriteReg(CANINTF, temp & 0xFC);
|
|
|
return ret;
|
|
|
- break;
|
|
|
-
|
|
|
- // default:
|
|
|
- // break;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return ret;
|
|
|
+ break;
|
|
|
}
|
|
|
/*
|
|
|
CAN_ReadReg(CANINTF,1, &temp1);
|
|
@@ -2592,4 +2599,4 @@ BOOL NB_ADC_Get(UINT32 *adcValue, ADC_CHANNEL_TYPE adcChannel)
|
|
|
return TRUE;
|
|
|
else
|
|
|
return FALSE;
|
|
|
-}
|
|
|
+}
|