From 1ab1f01925f9c96f54c493e94b3585f6bd79ede8 Mon Sep 17 00:00:00 2001 From: cfif Date: Sun, 21 Jun 2026 18:02:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Src/CanSerialPortFrame.c | 60 ++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/Src/CanSerialPortFrame.c b/Src/CanSerialPortFrame.c index 408fb66..715064c 100644 --- a/Src/CanSerialPortFrame.c +++ b/Src/CanSerialPortFrame.c @@ -224,31 +224,34 @@ bool vCanSerialPortFrameDMAInit( if (CAN_ErrorInterrupt_CallBack == NULL) { env->tIntCfg.bEnErrorInterrupt = 0U; env->tIntCfg.pErrorNotify = NULL; - - env->tIntCfg.bEnTxMBInterrupt = 0U; - env->tIntCfg.pTxMBNotify = NULL; - - env->tIntCfg.bEnRxMBInterrupt = 0U; - env->tIntCfg.pRxMBNotify = NULL; - - env->tIntCfg.bEnRxFifoInterrupt = 0U; - env->tIntCfg.pRxFifoNotify = NULL; - } else { env->tIntCfg.bEnErrorInterrupt = 1U; env->tIntCfg.pErrorNotify = CAN_ErrorInterrupt_CallBack; - - env->tIntCfg.bEnTxMBInterrupt = 0U; - env->tIntCfg.pTxMBNotify = NULL; - - env->tIntCfg.bEnRxMBInterrupt = 1U; - env->tIntCfg.pRxMBNotify = CAN_RxInterrupt_CallBack; - - env->tIntCfg.bEnRxFifoInterrupt = 0U; - env->tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack; - } + if (CAN_TxInterrupt_CallBack == NULL) { + env->tIntCfg.bEnTxMBInterrupt = 0U; + env->tIntCfg.pTxMBNotify = NULL; + } else { + env->tIntCfg.bEnTxMBInterrupt = 1U; + env->tIntCfg.pTxMBNotify = CAN_TxInterrupt_CallBack; + } + + if (CAN_RxInterrupt_CallBack == NULL) { + env->tIntCfg.bEnRxMBInterrupt = 0U; + env->tIntCfg.pRxMBNotify = NULL; + } else { + env->tIntCfg.bEnRxMBInterrupt = 1U; + env->tIntCfg.pRxMBNotify = CAN_RxInterrupt_CallBack; + } + + if (CAN_RxFifoInterrupt_CallBack == NULL) { + env->tIntCfg.bEnRxFifoInterrupt = 0U; + env->tIntCfg.pRxFifoNotify = NULL; + } else { + env->tIntCfg.bEnRxFifoInterrupt = 1U; + env->tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack; + } if ((env->tIntCfg.bEnErrorInterrupt) || (env->tIntCfg.bEnTxMBInterrupt) || @@ -706,6 +709,23 @@ uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t * uint16_t sent = 0; + + FLEXCAN_ErrorInfoType errInfo; + FLEXCAN_GetErrorInfo(env->CAN_INDEX, &errInfo); + + + uint32_t fltConf = (errInfo.u32ErrorValue & FLEXCAN_ESR1_FLTCONF_MASK) >> FLEXCAN_ESR1_FLTCONF_SHIFT; + + if (fltConf == 1) { // Error Passive + asm("nop"); + } + + + if (fltConf == 3) { + // Текущее состояние — Bus Off + asm("nop"); + } + if (osMutexAcquire(env->access, 1000) == osOK) { env->id = adr;