diff --git a/APP/main.c b/APP/main.c index f28bb0b..abbe00b 100644 --- a/APP/main.c +++ b/APP/main.c @@ -85,15 +85,6 @@ int main(void) { Bsp_CLOCK_Init(); - uint32_t a = 10; - - ++a; - - uint32_t v = 0; - for (int i=0; i<11; ++i) { - v++; - } - NVIC_SetPriorityGrouping(NVIC_PRIORITY_GROUP_4); osKernelInitialize(); diff --git a/MODULES/HVAC_M7_CanPorts/CanPorts.c b/MODULES/HVAC_M7_CanPorts/CanPorts.c index 8e5002e..7dbbf28 100644 --- a/MODULES/HVAC_M7_CanPorts/CanPorts.c +++ b/MODULES/HVAC_M7_CanPorts/CanPorts.c @@ -37,9 +37,14 @@ static void DMA_TransferCompleteCallbackCan1(void) { #else +volatile bool isCan0BusOff = false; +volatile uint32_t timeCan0BusOff = 0; + static void CAN0_ErrorInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_ErrorInfoType *pErrorInfo) { if (pErrorInfo->u32ErrorValue & FLEXCAN_ESR1_BOFFINT_MASK) { + timeCan0BusOff = SystemGetMs() + 3000; + isCan0BusOff = true; FLEXCAN_Stop(u8CanIndex); vCanPort_InitCan0(); } diff --git a/MODULES/HVAC_M7_StatusData/DiagnosticTask.c b/MODULES/HVAC_M7_StatusData/DiagnosticTask.c index 600bcbc..7191f67 100644 --- a/MODULES/HVAC_M7_StatusData/DiagnosticTask.c +++ b/MODULES/HVAC_M7_StatusData/DiagnosticTask.c @@ -354,12 +354,23 @@ setErrorDTC_CAN_VIN(uint8_t *dtc_state_error_model, ccu_candb_error_missing_rx_t } +extern volatile bool isCan0BusOff; +extern volatile uint32_t timeCan0BusOff; + static void setErrorDTC_CAN(tDiagnostic *env, uint8_t *dtc_state_error_model, ccu_candb_error_missing_rx_t *CAN_ERROR_MISSLE) { uint32_t timeCanSpamReceiver = getCanTimeReceived(env->canSpamReceiver) + 3000; uint32_t time = SystemGetMs(); + if (isCan0BusOff) { + if (time < timeCan0BusOff) { + dtc_state_error_model[DTC_BODY_CAN_BUS_OFF] = DTC_TEST_FAILED_CONFIRMED; + } else { + dtc_state_error_model[DTC_BODY_CAN_BUS_OFF] = dtc_state_error[DTC_BODY_CAN_BUS_OFF] & (~(DTC_TEST_FAILED)); + } + } + if ((CAN_ERROR_MISSLE->EMS_Veh) || (time > timeCanSpamReceiver)) { dtc_state_error_model[DTC_LOST_COMM_ECM_PCM] = DTC_TEST_FAILED_CONFIRMED; } else { @@ -469,7 +480,8 @@ setErrorDTC_LIN(uint8_t *dtc_state_error_model, uint8_t *LIN1_ERROR_MISSING, uin if ((LIN5_ERROR_MISSING[2]) || (LIN5_ERROR_MISSING[3]) || (LIN5_ERROR_MISSING[6]) || (LIN5_ERROR_MISSING[7])) { dtc_state_error_model[DTC_LOST_COMM_DRS_FRONT] = DTC_TEST_FAILED_CONFIRMED; } else { - dtc_state_error_model[DTC_LOST_COMM_DRS_FRONT] = dtc_state_error[DTC_LOST_COMM_DRS_FRONT] & (~(DTC_TEST_FAILED)); + dtc_state_error_model[DTC_LOST_COMM_DRS_FRONT] = + dtc_state_error[DTC_LOST_COMM_DRS_FRONT] & (~(DTC_TEST_FAILED)); } if ((LIN5_ERROR_MISSING[0]) || (LIN5_ERROR_MISSING[1]) || (LIN5_ERROR_MISSING[4]) || (LIN5_ERROR_MISSING[5])) {