|
@@ -30,6 +30,8 @@
|
|
|
GiantStandardDataFrameID_Struct_t stGiantStandardDataFrameID_rx;
|
|
|
GiantStandardRemoteFrameID_Struct_t stGiantStandardRemoteFrameID_rx;
|
|
|
GiantControlParams_Struct_t stGiantControlParams;
|
|
|
+CANFrame_Info_Struct_t stCANFrame_InfoRx = {MAXFRAME_SIZE, 0, 0, 0};
|
|
|
+CAN_ReceiveFrame_Struct_t stCAN_ReceiveFrame_Buf_Rx[MAXFRAME_SIZE];
|
|
|
/***************************************************************
|
|
|
Function:
|
|
|
Description:
|
|
@@ -42,7 +44,7 @@ GiantControlParams_Struct_t stGiantControlParams;
|
|
|
void giant_Init(void)
|
|
|
{
|
|
|
stGiantControlParams.RidingModeEn = 0;
|
|
|
- stGiantControlParams.AdjustingMode = 0x0B;//check mode
|
|
|
+ stGiantControlParams.AdjustingMode = AD_CHECKMODE;//check mode
|
|
|
stGiantControlParams.WheelCircumference = 2182;//mm
|
|
|
stGiantControlParams.StartMode = 2;
|
|
|
stGiantControlParams.SpeedLimitation = 4500;
|
|
@@ -126,14 +128,39 @@ void giant_10msTask(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void giant_DataProcess(void)
|
|
|
+void CANFrame_Rx_ISR(void)
|
|
|
{
|
|
|
- if(pRxMsg2->rx_ft == CAN_FT_DATA)
|
|
|
+ stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].id = (UWORD)pRxMsg2->rx_sfid;
|
|
|
+ stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].rx_ft = (UBYTE)pRxMsg2->rx_ft;
|
|
|
+ stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].rx_dlen = (UBYTE)pRxMsg2->rx_dlen;
|
|
|
+ memcpy(stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameWrInde].rx_data, (uint8_t*)pRxMsg2->rx_data, pRxMsg2->rx_dlen);
|
|
|
+
|
|
|
+ stCANFrame_InfoRx.ucFrameWrInde++;
|
|
|
+ if (stCANFrame_InfoRx.ucFrameWrInde >= stCANFrame_InfoRx.ucFrameSize)
|
|
|
+ {
|
|
|
+ stCANFrame_InfoRx.ucFrameWrInde = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ stCANFrame_InfoRx.ucFrameCnt++;
|
|
|
+ if (stCANFrame_InfoRx.ucFrameCnt >= stCANFrame_InfoRx.ucFrameSize)
|
|
|
{
|
|
|
- stGiantStandardDataFrameID_rx.FunctionGroup = (UBYTE)((pRxMsg2->rx_sfid & 0x600)>>9);
|
|
|
- stGiantStandardDataFrameID_rx.NodeGroup = (UBYTE)((pRxMsg2->rx_sfid & 0x1E0)>>5);
|
|
|
- stGiantStandardDataFrameID_rx.DataBehaviors = (UBYTE)((pRxMsg2->rx_sfid & 0x010)>>4);
|
|
|
- stGiantStandardDataFrameID_rx.DataAddress = (UBYTE)(pRxMsg2->rx_sfid & 0x00F);
|
|
|
+ stCANFrame_InfoRx.ucFrameCnt = stCANFrame_InfoRx.ucFrameSize;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void giant_CANRxData_Process(void)
|
|
|
+{
|
|
|
+ CAN_ReceiveFrame_Struct_t *CAN_ReceiveFrame_tmp;
|
|
|
+ if(stCANFrame_InfoRx.ucFrameCnt > 0)
|
|
|
+ {
|
|
|
+ CAN_ReceiveFrame_tmp = &stCAN_ReceiveFrame_Buf_Rx[stCANFrame_InfoRx.ucFrameRdInde];
|
|
|
+
|
|
|
+ if(CAN_ReceiveFrame_tmp->rx_ft == CAN_FT_DATA)
|
|
|
+ {
|
|
|
+ stGiantStandardDataFrameID_rx.FunctionGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x600)>>9);
|
|
|
+ stGiantStandardDataFrameID_rx.NodeGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x1E0)>>5);
|
|
|
+ stGiantStandardDataFrameID_rx.DataBehaviors = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x010)>>4);
|
|
|
+ stGiantStandardDataFrameID_rx.DataAddress = (UBYTE)(CAN_ReceiveFrame_tmp->id & 0x00F);
|
|
|
|
|
|
switch (stGiantStandardDataFrameID_rx.NodeGroup)
|
|
|
{
|
|
@@ -149,29 +176,29 @@ void giant_DataProcess(void)
|
|
|
{
|
|
|
case 0x0:
|
|
|
{
|
|
|
- if(pRxMsg2->rx_dlen == 2)//error
|
|
|
+ if(CAN_ReceiveFrame_tmp->rx_dlen == 2)//error
|
|
|
{
|
|
|
- stGiantControlParams.Error = (pRxMsg2->rx_data[0] & 0x01);//Error value
|
|
|
+ stGiantControlParams.Error = (CAN_ReceiveFrame_tmp->rx_data[0] & 0x01);//Error value
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
case 0x1:
|
|
|
{
|
|
|
- if(pRxMsg2->rx_dlen == 7)//cmd1
|
|
|
+ if(CAN_ReceiveFrame_tmp->rx_dlen == 7)//cmd1
|
|
|
{
|
|
|
- stGiantControlParams.ManualSleepEn = ((pRxMsg2->rx_data[0] & 0x40)>>6);//Manual sleep
|
|
|
- stGiantControlParams.AutomaticSleepEn = ((pRxMsg2->rx_data[0] & 0x20)>>5);//Automatic sleep
|
|
|
+ stGiantControlParams.ManualSleepEn = ((CAN_ReceiveFrame_tmp->rx_data[0] & 0x40)>>6);//Manual sleep
|
|
|
+ stGiantControlParams.AutomaticSleepEn = ((CAN_ReceiveFrame_tmp->rx_data[0] & 0x20)>>5);//Automatic sleep
|
|
|
|
|
|
- stGiantControlParams.InactivateErrorDetection = ((pRxMsg2->rx_data[1] & 0x80)>>7);//Inactivate the error detection
|
|
|
+ stGiantControlParams.InactivateErrorDetection = ((CAN_ReceiveFrame_tmp->rx_data[1] & 0x80)>>7);//Inactivate the error detection
|
|
|
|
|
|
- if((pRxMsg2->rx_data[1] & 0x10) == 0x10)//Reset fault history
|
|
|
+ if((CAN_ReceiveFrame_tmp->rx_data[1] & 0x10) == 0x10)//Reset fault history
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
- stGiantControlParams.ThrottleEn = ((pRxMsg2->rx_data[1] & 0x08)>>3);//Throttle state
|
|
|
+ stGiantControlParams.ThrottleEn = ((CAN_ReceiveFrame_tmp->rx_data[1] & 0x08)>>3);//Throttle state
|
|
|
|
|
|
- if((pRxMsg2->rx_data[1] & 0x04) == 0x04)//Reset trip distance and trip time
|
|
|
+ if((CAN_ReceiveFrame_tmp->rx_data[1] & 0x04) == 0x04)//Reset trip distance and trip time
|
|
|
{
|
|
|
MC_RideLog.TRIP_Km = 0;
|
|
|
MC_RideLog.TRIP_Time = 0;
|
|
@@ -183,22 +210,22 @@ void giant_DataProcess(void)
|
|
|
cp_stBikeRunInfoPara.ulRiTime = 0;
|
|
|
}
|
|
|
|
|
|
- stGiantControlParams.BrakeleEn = ((pRxMsg2->rx_data[1] & 0x02)>>1);//Brake state
|
|
|
- stGiantControlParams.WalkEn = (pRxMsg2->rx_data[1] & 0x01);//Walk
|
|
|
+ stGiantControlParams.BrakeleEn = ((CAN_ReceiveFrame_tmp->rx_data[1] & 0x02)>>1);//Brake state
|
|
|
+ stGiantControlParams.WalkEn = (CAN_ReceiveFrame_tmp->rx_data[1] & 0x01);//Walk
|
|
|
|
|
|
- if(pRxMsg2->rx_data[2] > 100)
|
|
|
+ if(CAN_ReceiveFrame_tmp->rx_data[2] > 100)
|
|
|
{
|
|
|
stGiantControlParams.ThrottlePowerPercentage = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- stGiantControlParams.ThrottlePowerPercentage = pRxMsg2->rx_data[2];//Throttle power percentage %,else 0%
|
|
|
+ stGiantControlParams.ThrottlePowerPercentage = CAN_ReceiveFrame_tmp->rx_data[2];//Throttle power percentage %,else 0%
|
|
|
}
|
|
|
|
|
|
- stGiantControlParams.RidingModeEn = ((pRxMsg2->rx_data[3] & 0x80)>>7);//Riding mode
|
|
|
- stGiantControlParams.AdjustingMode = (pRxMsg2->rx_data[3] & 0x1F);//Adjusting mode
|
|
|
+ stGiantControlParams.RidingModeEn = ((CAN_ReceiveFrame_tmp->rx_data[3] & 0x80)>>7);//Riding mode
|
|
|
+ stGiantControlParams.AdjustingMode = (CAN_ReceiveFrame_tmp->rx_data[3] & 0x1F);//Adjusting mode
|
|
|
|
|
|
- if((pRxMsg2->rx_data[4] & 0x04) == 0x04)//Reset odometer distance and odometer time
|
|
|
+ if((CAN_ReceiveFrame_tmp->rx_data[4] & 0x04) == 0x04)//Reset odometer distance and odometer time
|
|
|
{
|
|
|
MC_RideLog.ODO_Km = 0;
|
|
|
MC_RideLog.ODO_Time = 0;
|
|
@@ -220,19 +247,19 @@ void giant_DataProcess(void)
|
|
|
cp_stBikeRunInfoPara.ulRiTime = 0;
|
|
|
}
|
|
|
|
|
|
- stGiantControlParams.StartMode = ((pRxMsg2->rx_data[6] & 0xC0) >> 6);//Start mode,1-soft,2-normal,3-strong
|
|
|
+ stGiantControlParams.StartMode = ((CAN_ReceiveFrame_tmp->rx_data[6] & 0xC0) >> 6);//Start mode,1-soft,2-normal,3-strong
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
case 0x2:
|
|
|
{
|
|
|
- if(pRxMsg2->rx_dlen == 7)//cmd2
|
|
|
+ if(CAN_ReceiveFrame_tmp->rx_dlen == 7)//cmd2
|
|
|
{
|
|
|
- if((pRxMsg2->rx_data[0] & 0x30) == 0x00)
|
|
|
+ if((CAN_ReceiveFrame_tmp->rx_data[0] & 0x30) == 0x00)
|
|
|
{
|
|
|
MC_ControlCode.LightSwitch = MC_LightSwitch_OFF;//light off
|
|
|
}
|
|
|
- else if((pRxMsg2->rx_data[0] & 0x30) == 0x10)
|
|
|
+ else if((CAN_ReceiveFrame_tmp->rx_data[0] & 0x30) == 0x10)
|
|
|
{
|
|
|
MC_ControlCode.LightSwitch = MC_LightSwitch_ON;//light on
|
|
|
}
|
|
@@ -242,31 +269,31 @@ void giant_DataProcess(void)
|
|
|
}
|
|
|
MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;
|
|
|
|
|
|
- stGiantControlParams.WheelCircumference = (pRxMsg2->rx_data[2] + (pRxMsg2->rx_data[3]<<8));//Tire circumference,900-2500mm
|
|
|
+ stGiantControlParams.WheelCircumference = (CAN_ReceiveFrame_tmp->rx_data[2] + (CAN_ReceiveFrame_tmp->rx_data[3]<<8));//Tire circumference,900-2500mm
|
|
|
|
|
|
- stGiantControlParams.MaximumTorque = ((pRxMsg2->rx_data[4] & 0xF0)>>4);//Maximum torque,*10Nm
|
|
|
+ stGiantControlParams.MaximumTorque = ((CAN_ReceiveFrame_tmp->rx_data[4] & 0xF0)>>4);//Maximum torque,*10Nm
|
|
|
// if(0 == stGiantControlParams.MaximumTorque)
|
|
|
// {
|
|
|
// stGiantControlParams.MaximumTorque = 0;//default
|
|
|
// }
|
|
|
|
|
|
- stGiantControlParams.Acceleration = (pRxMsg2->rx_data[4] & 0x0F);//Acceleration,*30Nm/s
|
|
|
+ stGiantControlParams.Acceleration = (CAN_ReceiveFrame_tmp->rx_data[4] & 0x0F);//Acceleration,*30Nm/s
|
|
|
// if(0 == stGiantControlParams.Acceleration)
|
|
|
// {
|
|
|
// stGiantControlParams.Acceleration = 0;//default
|
|
|
// }
|
|
|
|
|
|
- stGiantControlParams.AssistRatio = pRxMsg2->rx_data[5];;//Assist ratio, *10%
|
|
|
+ stGiantControlParams.AssistRatio = CAN_ReceiveFrame_tmp->rx_data[5];;//Assist ratio, *10%
|
|
|
|
|
|
- stGiantControlParams.MaximumPower = pRxMsg2->rx_data[6];//Maximum power, *10Watt
|
|
|
+ stGiantControlParams.MaximumPower = CAN_ReceiveFrame_tmp->rx_data[6];//Maximum power, *10Watt
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
case 0x3:
|
|
|
{
|
|
|
- if(pRxMsg2->rx_dlen == 7)//cmd3
|
|
|
+ if(CAN_ReceiveFrame_tmp->rx_dlen == 7)//cmd3
|
|
|
{
|
|
|
- stGiantControlParams.SpeedLimitation = (UWORD)(pRxMsg2->rx_data[5] + (pRxMsg2->rx_data[6]<<8));//speed limitation,0.01km/h
|
|
|
+ stGiantControlParams.SpeedLimitation = (UWORD)(CAN_ReceiveFrame_tmp->rx_data[5] + (CAN_ReceiveFrame_tmp->rx_data[6]<<8));//speed limitation,0.01km/h
|
|
|
// if(0 == stGiantControlParams.SpeedLimitation)
|
|
|
// {
|
|
|
// stGiantControlParams.SpeedLimitation = 2500;//DU default
|
|
@@ -290,9 +317,9 @@ void giant_DataProcess(void)
|
|
|
{
|
|
|
case 0x1:
|
|
|
{
|
|
|
- if(pRxMsg2->rx_dlen == 8)//Capacity
|
|
|
+ if(CAN_ReceiveFrame_tmp->rx_dlen == 8)//Capacity
|
|
|
{
|
|
|
- BMS_RunInfo.SOC = pRxMsg2->rx_data[0];
|
|
|
+ BMS_RunInfo.SOC = CAN_ReceiveFrame_tmp->rx_data[0];
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -307,9 +334,9 @@ void giant_DataProcess(void)
|
|
|
{
|
|
|
case 0x4:
|
|
|
{
|
|
|
- if(pRxMsg2->rx_dlen == 8)//Customized Version
|
|
|
+ if(CAN_ReceiveFrame_tmp->rx_dlen == 8)//Customized Version
|
|
|
{
|
|
|
- memcpy(MC_RsASSCII.CustomASCII1, pRxMsg2->rx_data, 8);
|
|
|
+ memcpy(MC_RsASSCII.CustomASCII1, CAN_ReceiveFrame_tmp->rx_data, 8);
|
|
|
//执行存储操作
|
|
|
memcpy(flash_stPara.ubRsASSCII.CustomASCII1, MC_RsASSCII.CustomASCII1, sizeof(MC_RsASSCII.CustomASCII1));
|
|
|
}
|
|
@@ -324,11 +351,11 @@ void giant_DataProcess(void)
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- else if(pRxMsg2->rx_ft == CAN_FT_REMOTE)
|
|
|
+ else if(CAN_ReceiveFrame_tmp->rx_ft == CAN_FT_REMOTE)
|
|
|
{
|
|
|
- stGiantStandardRemoteFrameID_rx.MotionGroup = (UBYTE)((pRxMsg2->rx_sfid & 0x700)>>8);
|
|
|
- stGiantStandardRemoteFrameID_rx.RequireNodeGroup = (UBYTE)((pRxMsg2->rx_sfid & 0x0F0)>>4);
|
|
|
- stGiantStandardRemoteFrameID_rx.ResponseNodeGroup = (UBYTE)(pRxMsg2->rx_sfid & 0x00F);
|
|
|
+ stGiantStandardRemoteFrameID_rx.MotionGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x700)>>8);
|
|
|
+ stGiantStandardRemoteFrameID_rx.RequireNodeGroup = (UBYTE)((CAN_ReceiveFrame_tmp->id & 0x0F0)>>4);
|
|
|
+ stGiantStandardRemoteFrameID_rx.ResponseNodeGroup = (UBYTE)(CAN_ReceiveFrame_tmp->id & 0x00F);
|
|
|
|
|
|
if(stGiantStandardRemoteFrameID_rx.RequireNodeGroup == NODE_USERINTERFACE)
|
|
|
{
|
|
@@ -397,6 +424,16 @@ void giant_DataProcess(void)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ giant_DataProcess();
|
|
|
+
|
|
|
+ stCANFrame_InfoRx.ucFrameCnt--;
|
|
|
+ stCANFrame_InfoRx.ucFrameRdInde++;
|
|
|
+ if (stCANFrame_InfoRx.ucFrameRdInde >= stCANFrame_InfoRx.ucFrameSize)
|
|
|
+ {
|
|
|
+ stCANFrame_InfoRx.ucFrameRdInde = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void giant_SendDriveChainPassiveData(UBYTE remoteMG, UBYTE DataAddr)
|
|
@@ -631,7 +668,7 @@ void giant_SendRemote(UBYTE motiongroup)
|
|
|
CAN_SendRemote(ID);
|
|
|
}
|
|
|
|
|
|
-void giant_CANRxData_Process(void)
|
|
|
+void giant_DataProcess(void)
|
|
|
{
|
|
|
if(stGiantControlParams.RefreshFlag)
|
|
|
{
|
|
@@ -732,6 +769,7 @@ SLONG giant_slPolynomial(const SWORD *value)
|
|
|
|
|
|
return out;
|
|
|
}
|
|
|
+
|
|
|
/*************************************************************************
|
|
|
End of this File (EOF)!
|
|
|
Do not put anything after this part!
|