diff --git a/Inc/CanSerialPortFrame.h b/Inc/CanSerialPortFrame.h index 398ba1e..329ba94 100644 --- a/Inc/CanSerialPortFrame.h +++ b/Inc/CanSerialPortFrame.h @@ -75,7 +75,7 @@ typedef struct { osMessageQueueId_t rxDataQueue[COUNT_QUEUE]; osMessageQueueId_t rxDataSnifferQueue[COUNT_QUEUE]; - osMutexId_t access; + osMutexId_t access[2]; DMA_InitType dmaInitCfg_RX; DMA_ChannelCfgType chnCfg_RX; @@ -157,7 +157,7 @@ bool vCanSerialPortFrameMbInit( ); - void CAN_RxInterrupt_CallBack_Handler(tCanSerialPortFrameFlagchip *env, uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg); +void CAN_RxInterrupt_CallBack_Handler(tCanSerialPortFrameFlagchip *env, uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg); void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_t *pBuf); diff --git a/Src/CanSerialPortFrame.c b/Src/CanSerialPortFrame.c index 3d8ee96..653e13a 100644 --- a/Src/CanSerialPortFrame.c +++ b/Src/CanSerialPortFrame.c @@ -267,7 +267,8 @@ bool vCanSerialPortFrameDMAInit( env->reInitOne = true; env->txDataQueueCan = osMessageQueueNew(1, 1, NULL); - env->access = osMutexNew(NULL); + env->access[0] = osMutexNew(NULL); + env->access[1] = osMutexNew(NULL); vCanSerialPortFrameInitStructure(env, 10, 0); @@ -423,7 +424,8 @@ bool vCanSerialPortFrameMbInit( if (!env->reInitOne) { env->reInitOne = true; - env->access = osMutexNew(NULL); + env->access[0] = osMutexNew(NULL); + env->access[1] = osMutexNew(NULL); env->txDataQueueCan = osMessageQueueNew(1, 1, NULL); vCanSerialPortFrameInitStructure(env, 10, 0); @@ -715,7 +717,7 @@ FLEXCAN_ErrorType TransmitCan(tCanSerialPortFrameFlagchip *env, FLEXCAN_TxMsgTyp if (tRetval != FLEXCAN_ERROR_OK) { FLEXCAN_TransmitAbort(env->CAN_INDEX, tTxMsg->u8TxHandler); } else { - +/* if (tTxMsg->bWaitTxCompleted) { uint8_t u8TxHandler; @@ -726,7 +728,7 @@ FLEXCAN_ErrorType TransmitCan(tCanSerialPortFrameFlagchip *env, FLEXCAN_TxMsgTyp } } - +*/ FLEXCAN_TransmitProcess(env->CAN_INDEX, tTxMsg->u8TxHandler); } @@ -735,11 +737,11 @@ FLEXCAN_ErrorType TransmitCan(tCanSerialPortFrameFlagchip *env, FLEXCAN_TxMsgTyp uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t *data, uint16_t size, uint32_t adr, - uint8_t canType, uint32_t timeout) { + uint8_t canType, uint32_t timeout, uint8_t u8TxHandler) { uint16_t sent = 0; - if (osMutexAcquire(env->access, 1000) == osOK) { + if (osMutexAcquire(env->access[u8TxHandler], 1000) == osOK) { env->id = adr; env->canTypeFrame = canType; @@ -751,7 +753,7 @@ uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t * FLEXCAN_ErrorType tRetval; tTxMsg.u32CanId = env->id; - tTxMsg.u8TxHandler = 0U; + tTxMsg.u8TxHandler = u8TxHandler; //0U; tTxMsg.bEnFd = FALSE; tTxMsg.bEnBrs = FALSE; @@ -760,7 +762,7 @@ uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t * tTxMsg.eDataType = FLEXCAN_FRAME_DATA; tTxMsg.eFrameType = (FLEXCAN_IdType) env->canTypeFrame; tTxMsg.bWaitTxCompleted = 1U; - tTxMsg.u16WaitTxTimeout = 50; + tTxMsg.u16WaitTxTimeout = 50000; uint16_t len = 0; @@ -786,7 +788,7 @@ uint16_t vCanSerialPortFrameTransmit(tCanSerialPortFrameFlagchip *env, uint8_t * size -= tailSize; } - osMutexRelease(env->access); + osMutexRelease(env->access[u8TxHandler]); } return sent;