Обновление 23.06.2026
This commit is contained in:
parent
68bf8fd28f
commit
385e9ac58b
|
|
@ -38,8 +38,10 @@ typedef struct {
|
||||||
this parameter can be a value between 0 to 0xFF */
|
this parameter can be a value between 0 to 0xFF */
|
||||||
} can_rx_message_type;
|
} can_rx_message_type;
|
||||||
|
|
||||||
|
#define COUNT_TX_CAN_HANDLER 24
|
||||||
|
|
||||||
#define COUNT_TX_HANDLER 3
|
|
||||||
|
#define COUNT_TX_HANDLER 24
|
||||||
#define COUNT_QUEUE 4
|
#define COUNT_QUEUE 4
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
||||||
|
|
@ -214,7 +214,7 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
env->tMbCfg.pRxBuf = CAN_GET_BUFFER(CAN_INDEX);
|
env->tMbCfg.pRxBuf = CAN_GET_BUFFER(CAN_INDEX);
|
||||||
|
|
||||||
// tx config
|
// tx config
|
||||||
env->tMbCfg.u8TxMsgCnt = 3U; // tx occupy 3 mb
|
env->tMbCfg.u8TxMsgCnt = COUNT_TX_CAN_HANDLER; // 3U
|
||||||
|
|
||||||
tRetVal = FLEXCAN_RxFilterConfig(CAN_INDEX, &env->tMbCfg);
|
tRetVal = FLEXCAN_RxFilterConfig(CAN_INDEX, &env->tMbCfg);
|
||||||
|
|
||||||
|
|
@ -713,26 +713,77 @@ vCanSerialPortFrameReceive(tCanSerialPortFrameFlagchip *env, uint8_t idFilter, u
|
||||||
// : 0;
|
// : 0;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
uint8_t max_i = 0;
|
||||||
|
uint8_t tx_init[COUNT_TX_CAN_HANDLER] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
||||||
|
|
||||||
FLEXCAN_ErrorType TransmitCan(tCanSerialPortFrameFlagchip *env, FLEXCAN_TxMsgType *tTxMsg) {
|
FLEXCAN_ErrorType TransmitCan(tCanSerialPortFrameFlagchip *env, FLEXCAN_TxMsgType *tTxMsg) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
for (uint32_t j = 0; j < 500000; ++j) {
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < COUNT_TX_CAN_HANDLER; ++i) {
|
||||||
|
uint8_t ready = FLEXCAN_TransmitProcess(env->CAN_INDEX, i);
|
||||||
|
|
||||||
|
if ((ready) || (tx_init[i])) {
|
||||||
|
tx_init[i] = 0;
|
||||||
|
tTxMsg->u8TxHandler = i;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
if (i > max_i) {
|
||||||
|
max_i = i;
|
||||||
|
}
|
||||||
|
asm("nop");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t ready = 0;
|
||||||
|
|
||||||
|
while (ready == 0) {
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < COUNT_TX_CAN_HANDLER; ++i) {
|
||||||
|
ready = IsTxBufferFree_ByCode(env->CAN_INDEX, i);
|
||||||
|
|
||||||
|
if ((ready)) {
|
||||||
|
tTxMsg->u8TxHandler = i;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
if (i > max_i) {
|
||||||
|
max_i = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (max_i >= COUNT_TX_CAN_HANDLER) {
|
||||||
|
asm("nop");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
FLEXCAN_ErrorType tRetval = FLEXCAN_TransmitData(env->CAN_INDEX, tTxMsg);
|
FLEXCAN_ErrorType tRetval = FLEXCAN_TransmitData(env->CAN_INDEX, tTxMsg);
|
||||||
|
|
||||||
if (tRetval != FLEXCAN_ERROR_OK) {
|
if (tRetval != FLEXCAN_ERROR_OK) {
|
||||||
FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg->u8TxHandler);
|
FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg->u8TxHandler);
|
||||||
} else {
|
} else {
|
||||||
/*
|
|
||||||
if (tTxMsg->bWaitTxCompleted) {
|
|
||||||
|
|
||||||
|
|
||||||
|
if (tTxMsg->bWaitTxCompleted) {
|
||||||
|
/*
|
||||||
uint8_t u8TxHandler;
|
uint8_t u8TxHandler;
|
||||||
if (osMessageQueueGet(env->txDataQueueCan[tTxMsg->u8TxHandler], &u8TxHandler, NULL, tTxMsg->bWaitTxCompleted) == osOK) {
|
if (osMessageQueueGet(env->txDataQueueCan[tTxMsg->u8TxHandler], &u8TxHandler, NULL, 50) == osOK) {
|
||||||
tRetval = FLEXCAN_ERROR_OK;
|
tRetval = FLEXCAN_ERROR_OK;
|
||||||
} else {
|
} else {
|
||||||
tRetval = FLEXCAN_ERROR_TIMEOUT;
|
tRetval = FLEXCAN_ERROR_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg->u8TxHandler);
|
}
|
||||||
|
|
||||||
|
// FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg->u8TxHandler);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return tRetval;
|
return tRetval;
|
||||||
|
|
@ -765,7 +816,7 @@ uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t *
|
||||||
tTxMsg.eDataType = FLEXCAN_FRAME_DATA;
|
tTxMsg.eDataType = FLEXCAN_FRAME_DATA;
|
||||||
tTxMsg.eFrameType = (FLEXCAN_IdType) env->canTypeFrame;
|
tTxMsg.eFrameType = (FLEXCAN_IdType) env->canTypeFrame;
|
||||||
tTxMsg.bWaitTxCompleted = 1U;
|
tTxMsg.bWaitTxCompleted = 1U;
|
||||||
tTxMsg.u16WaitTxTimeout = 50000;
|
tTxMsg.u16WaitTxTimeout = 50;
|
||||||
|
|
||||||
|
|
||||||
uint16_t len = 0;
|
uint16_t len = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue