Обновление 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 */
|
||||
} can_rx_message_type;
|
||||
|
||||
#define COUNT_TX_CAN_HANDLER 24
|
||||
|
||||
#define COUNT_TX_HANDLER 3
|
||||
|
||||
#define COUNT_TX_HANDLER 24
|
||||
#define COUNT_QUEUE 4
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
|
|
@ -214,7 +214,7 @@ bool vCanSerialPortFrameDMAInit(
|
|||
env->tMbCfg.pRxBuf = CAN_GET_BUFFER(CAN_INDEX);
|
||||
|
||||
// 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);
|
||||
|
||||
|
|
@ -713,26 +713,77 @@ vCanSerialPortFrameReceive(tCanSerialPortFrameFlagchip *env, uint8_t idFilter, u
|
|||
// : 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) {
|
||||
|
||||
/*
|
||||
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);
|
||||
|
||||
if (tRetval != FLEXCAN_ERROR_OK) {
|
||||
FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg->u8TxHandler);
|
||||
} else {
|
||||
/*
|
||||
if (tTxMsg->bWaitTxCompleted) {
|
||||
|
||||
|
||||
if (tTxMsg->bWaitTxCompleted) {
|
||||
/*
|
||||
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;
|
||||
} else {
|
||||
tRetval = FLEXCAN_ERROR_TIMEOUT;
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg->u8TxHandler);
|
||||
}
|
||||
|
||||
// FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg->u8TxHandler);
|
||||
|
||||
}
|
||||
|
||||
return tRetval;
|
||||
|
|
@ -765,7 +816,7 @@ uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t *
|
|||
tTxMsg.eDataType = FLEXCAN_FRAME_DATA;
|
||||
tTxMsg.eFrameType = (FLEXCAN_IdType) env->canTypeFrame;
|
||||
tTxMsg.bWaitTxCompleted = 1U;
|
||||
tTxMsg.u16WaitTxTimeout = 50000;
|
||||
tTxMsg.u16WaitTxTimeout = 50;
|
||||
|
||||
|
||||
uint16_t len = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue