Обновление
This commit is contained in:
parent
137947dfb6
commit
33a2b32529
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue