Обновление

This commit is contained in:
cfif 2025-12-22 17:57:29 +03:00
parent 137947dfb6
commit 33a2b32529
2 changed files with 49 additions and 37 deletions

View File

@ -73,7 +73,7 @@ typedef struct {
osMessageQueueId_t rxDataQueue[COUNT_QUEUE];
osMessageQueueId_t rxDataSnifferQueue[COUNT_QUEUE];
osMessageQueueId_t txAccessQueue;
osMutexId_t access;
DMA_InitType dmaInitCfg_RX;
DMA_ChannelCfgType chnCfg_RX;

View File

@ -104,6 +104,9 @@ void vCanSerialPortFrameDMAInit(
env->DMA_BUF_LEN_RX = DMA_BUF_LEN_RX;
env->IdSoftFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdSoftFilter_RX;
env->CountSoftFilter_RX = CountSoftFilter_RX;
env->access = osMutexNew(NULL);
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
@ -392,59 +395,68 @@ vCanSerialPortFrameReceive(tCanSerialPortFrameFlagchip *env, uint8_t idFilter, u
// : 0;
//}
uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t *data, uint16_t size, uint32_t timeout) {
uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t *data, uint16_t size, uint32_t adr, uint8_t canType, uint32_t timeout) {
uint16_t fullSize = size / 8;
uint8_t tailSize = size % 8;
uint16_t sent = 0;
FLEXCAN_TxMsgType tTxMsg = {0};
FLEXCAN_ErrorType tRetval;
if (osMutexAcquire(env->access, 1000) == osOK) {
tTxMsg.u32CanId = env->id;
tTxMsg.u8TxHandler = 0U;
env->id = adr;
env->canTypeFrame = canType;
tTxMsg.bEnFd = FALSE;
tTxMsg.bEnBrs = FALSE;
tTxMsg.u32DataLen = 8;
uint16_t fullSize = size / 8;
uint8_t tailSize = size % 8;
tTxMsg.eDataType = FLEXCAN_FRAME_DATA;
tTxMsg.eFrameType = (FLEXCAN_IdType) env->canTypeFrame;
tTxMsg.bWaitTxCompleted = 1U;
tTxMsg.u16WaitTxTimeout = 10000U;
FLEXCAN_TxMsgType tTxMsg = {0};
FLEXCAN_ErrorType tRetval;
tTxMsg.u32CanId = env->id;
tTxMsg.u8TxHandler = 0U;
tTxMsg.bEnFd = FALSE;
tTxMsg.bEnBrs = FALSE;
tTxMsg.u32DataLen = 8;
tTxMsg.eDataType = FLEXCAN_FRAME_DATA;
tTxMsg.eFrameType = (FLEXCAN_IdType) env->canTypeFrame;
tTxMsg.bWaitTxCompleted = 1U;
tTxMsg.u16WaitTxTimeout = 10000U;
uint16_t len = 0;
for (uint16_t i = 0; i < fullSize; ++i) {
uint16_t len = 0;
for (uint16_t i = 0; i < fullSize; ++i) {
FCFUNC_FcOwnMemcpy(tTxMsg.aData, &data[len], 8, NULL);
len += 8;
FCFUNC_FcOwnMemcpy(tTxMsg.aData, &data[len], 8, NULL);
len += 8;
tRetval = FLEXCAN_TransmitData(env->CAN_INDEX, &tTxMsg);
if (tRetval != FLEXCAN_ERROR_OK) {
FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg.u8TxHandler);
} else {
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg.u8TxHandler);
tRetval = FLEXCAN_TransmitData(env->CAN_INDEX, &tTxMsg);
if (tRetval != FLEXCAN_ERROR_OK) {
FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg.u8TxHandler);
} else {
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg.u8TxHandler);
}
sent += 8;
size -= 8;
}
sent += 8;
size -= 8;
}
if (tailSize) {
tTxMsg.u32DataLen = tailSize;
if (tailSize) {
tTxMsg.u32DataLen = tailSize;
FCFUNC_FcOwnMemcpy(tTxMsg.aData, &data[len], tailSize, NULL);
FCFUNC_FcOwnMemcpy(tTxMsg.aData, &data[len], tailSize, NULL);
tRetval = FLEXCAN_TransmitData(env->CAN_INDEX, &tTxMsg);
if (tRetval != FLEXCAN_ERROR_OK) {
FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg.u8TxHandler);
} else {
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg.u8TxHandler);
}
tRetval = FLEXCAN_TransmitData(env->CAN_INDEX, &tTxMsg);
if (tRetval != FLEXCAN_ERROR_OK) {
FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg.u8TxHandler);
} else {
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg.u8TxHandler);
sent += tailSize;
size -= tailSize;
}
sent += tailSize;
size -= tailSize;
osMutexRelease(env->access);
}
return sent;