From 1e4fd372c8b1850da01fc2d0fc461ffbe574a257 Mon Sep 17 00:00:00 2001
From: darya
Date: Wed, 24 Jun 2026 13:58:08 +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=2023.06.2026?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Inc/fc7xxx_driver_flexcan.h | 3 +++
Src/fc7xxx_driver_flexcan.c | 29 +++++++++++++++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/Inc/fc7xxx_driver_flexcan.h b/Inc/fc7xxx_driver_flexcan.h
index 48c746a..91a262b 100644
--- a/Inc/fc7xxx_driver_flexcan.h
+++ b/Inc/fc7xxx_driver_flexcan.h
@@ -458,4 +458,7 @@ void FLEXCAN_IRQHandler(uint8_t u8CanIndex);
/** @}*/
+
+bool IsTxBufferFree_ByCode(uint8_t canIndex, uint8_t handler);
+
#endif
diff --git a/Src/fc7xxx_driver_flexcan.c b/Src/fc7xxx_driver_flexcan.c
index b460761..8bc0ac8 100644
--- a/Src/fc7xxx_driver_flexcan.c
+++ b/Src/fc7xxx_driver_flexcan.c
@@ -2174,7 +2174,7 @@ FLEXCAN_ErrorType FLEXCAN_TransmitData(uint8_t u8CanIndex, const FLEXCAN_TxMsgTy
}
// -------------------------------
-
+/*
if (pTxMsg->bWaitTxCompleted)
{
u32TempAddr = 0U;
@@ -2200,7 +2200,7 @@ FLEXCAN_ErrorType FLEXCAN_TransmitData(uint8_t u8CanIndex, const FLEXCAN_TxMsgTy
tRetVal = FLEXCAN_ERROR_TIMEOUT;
}
}
-
+*/
// --------------------------
}
@@ -2213,6 +2213,31 @@ FLEXCAN_ErrorType FLEXCAN_TransmitData(uint8_t u8CanIndex, const FLEXCAN_TxMsgTy
}
+bool IsTxBufferFree_ByCode(uint8_t canIndex, uint8_t handler) {
+ FLEXCAN_Type *pCan = s_aFlexCan_InstanceTable[canIndex];
+ FLEXCAN_SettingType *pCurSetting = &s_aFlexCan_Setting_Table[canIndex];
+
+ if (handler >= pCurSetting->u8TxMbCnt1) {
+ return false; // Неверный handler
+ }
+
+ uint8_t realIndex = pCurSetting->u8TxMbStart1 + handler;
+
+ // Читаем код из первого слова MB
+ uint32_t addr = (uint32_t)FLEXCAN_MB_WORDN_ADDR(
+ &(pCan->RAM[0U]), realIndex, pCurSetting->eMbDataWidth, 0U);
+
+ uint32_t code = FLEXCAN_MB_CODE_GET(addr);
+
+ // Коды состояния буфера:
+ // 0x0 = EMPTY (не использовался) - СВОБОДЕН
+ // 0x8 = INACTIVE (неактивен) - СВОБОДЕН
+ // 0xC = TRANSMITTING (передаёт) - ЗАНЯТ
+ // 0x9 = ABORTING (прерывается) - ЗАНЯТ
+
+ return (code == 0x0 || code == 0x8);
+}
+
/**
* @brief Process flag after transmit
*