Обновление

This commit is contained in:
cfif 2026-06-21 18:02:50 +03:00
parent 4b69b09d7e
commit 1ab1f01925
1 changed files with 40 additions and 20 deletions

View File

@ -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;