Обновление
This commit is contained in:
parent
137947dfb6
commit
33a2b32529
|
|
@ -73,7 +73,7 @@ typedef struct {
|
||||||
osMessageQueueId_t rxDataQueue[COUNT_QUEUE];
|
osMessageQueueId_t rxDataQueue[COUNT_QUEUE];
|
||||||
osMessageQueueId_t rxDataSnifferQueue[COUNT_QUEUE];
|
osMessageQueueId_t rxDataSnifferQueue[COUNT_QUEUE];
|
||||||
|
|
||||||
osMessageQueueId_t txAccessQueue;
|
osMutexId_t access;
|
||||||
|
|
||||||
DMA_InitType dmaInitCfg_RX;
|
DMA_InitType dmaInitCfg_RX;
|
||||||
DMA_ChannelCfgType chnCfg_RX;
|
DMA_ChannelCfgType chnCfg_RX;
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,9 @@ void vCanSerialPortFrameDMAInit(
|
||||||
env->DMA_BUF_LEN_RX = DMA_BUF_LEN_RX;
|
env->DMA_BUF_LEN_RX = DMA_BUF_LEN_RX;
|
||||||
env->IdSoftFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdSoftFilter_RX;
|
env->IdSoftFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdSoftFilter_RX;
|
||||||
env->CountSoftFilter_RX = CountSoftFilter_RX;
|
env->CountSoftFilter_RX = CountSoftFilter_RX;
|
||||||
|
|
||||||
|
env->access = osMutexNew(NULL);
|
||||||
|
|
||||||
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
||||||
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
||||||
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
//начало-----------------------------------DMA-RX-------------------------------------------------------------------
|
||||||
|
|
@ -392,59 +395,68 @@ vCanSerialPortFrameReceive(tCanSerialPortFrameFlagchip *env, uint8_t idFilter, u
|
||||||
// : 0;
|
// : 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;
|
uint16_t sent = 0;
|
||||||
|
|
||||||
FLEXCAN_TxMsgType tTxMsg = {0};
|
if (osMutexAcquire(env->access, 1000) == osOK) {
|
||||||
FLEXCAN_ErrorType tRetval;
|
|
||||||
|
|
||||||
tTxMsg.u32CanId = env->id;
|
env->id = adr;
|
||||||
tTxMsg.u8TxHandler = 0U;
|
env->canTypeFrame = canType;
|
||||||
|
|
||||||
tTxMsg.bEnFd = FALSE;
|
uint16_t fullSize = size / 8;
|
||||||
tTxMsg.bEnBrs = FALSE;
|
uint8_t tailSize = size % 8;
|
||||||
tTxMsg.u32DataLen = 8;
|
|
||||||
|
|
||||||
tTxMsg.eDataType = FLEXCAN_FRAME_DATA;
|
FLEXCAN_TxMsgType tTxMsg = {0};
|
||||||
tTxMsg.eFrameType = (FLEXCAN_IdType) env->canTypeFrame;
|
FLEXCAN_ErrorType tRetval;
|
||||||
tTxMsg.bWaitTxCompleted = 1U;
|
|
||||||
tTxMsg.u16WaitTxTimeout = 10000U;
|
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;
|
uint16_t len = 0;
|
||||||
for (uint16_t i = 0; i < fullSize; ++i) {
|
for (uint16_t i = 0; i < fullSize; ++i) {
|
||||||
|
|
||||||
FCFUNC_FcOwnMemcpy(tTxMsg.aData, &data[len], 8, NULL);
|
FCFUNC_FcOwnMemcpy(tTxMsg.aData, &data[len], 8, NULL);
|
||||||
len += 8;
|
len += 8;
|
||||||
|
|
||||||
tRetval = FLEXCAN_TransmitData(env->CAN_INDEX, &tTxMsg);
|
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 {
|
||||||
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg.u8TxHandler);
|
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg.u8TxHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
sent += 8;
|
||||||
|
size -= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
sent += 8;
|
if (tailSize) {
|
||||||
size -= 8;
|
tTxMsg.u32DataLen = tailSize;
|
||||||
}
|
|
||||||
|
|
||||||
if (tailSize) {
|
FCFUNC_FcOwnMemcpy(tTxMsg.aData, &data[len], tailSize, NULL);
|
||||||
tTxMsg.u32DataLen = tailSize;
|
|
||||||
|
|
||||||
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);
|
sent += tailSize;
|
||||||
if (tRetval != FLEXCAN_ERROR_OK) {
|
size -= tailSize;
|
||||||
FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg.u8TxHandler);
|
|
||||||
} else {
|
|
||||||
FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg.u8TxHandler);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sent += tailSize;
|
osMutexRelease(env->access);
|
||||||
size -= tailSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return sent;
|
return sent;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue