Обновление
This commit is contained in:
parent
bf6303a3ef
commit
a58f53ebe2
|
|
@ -45,6 +45,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
FLEXCAN_IdType eRxFrameType; /**< FLEXCAN ID type, 0 STD, 1 EXT */
|
FLEXCAN_IdType eRxFrameType; /**< FLEXCAN ID type, 0 STD, 1 EXT */
|
||||||
uint32_t u32RxCanId; /**< FLEXCAN received ID */
|
uint32_t u32RxCanId; /**< FLEXCAN received ID */
|
||||||
|
uint32_t u32RxCanIdMask;
|
||||||
uint8_t filter;
|
uint8_t filter;
|
||||||
} FilterTo_FLEXCAN_RxMbFilterType;
|
} FilterTo_FLEXCAN_RxMbFilterType;
|
||||||
|
|
||||||
|
|
@ -67,8 +68,8 @@ typedef struct {
|
||||||
|
|
||||||
uint32_t g_u32RxDataIndex;
|
uint32_t g_u32RxDataIndex;
|
||||||
|
|
||||||
FLEXCAN_RxMbFilterType pRxFilterList[32];
|
FLEXCAN_RxMbFilterType pRxMbFilterList[32];
|
||||||
FLEXCAN_RxMbFilterType pRxFilterFifoList[32];
|
// FLEXCAN_RxMbFilterType pRxFilterFifoList[32];
|
||||||
|
|
||||||
osMessageQueueId_t rxDataQueue[COUNT_QUEUE];
|
osMessageQueueId_t rxDataQueue[COUNT_QUEUE];
|
||||||
osMessageQueueId_t rxDataSnifferQueue[COUNT_QUEUE];
|
osMessageQueueId_t rxDataSnifferQueue[COUNT_QUEUE];
|
||||||
|
|
@ -86,7 +87,7 @@ typedef struct {
|
||||||
uint8_t DMA_BUF_LEN_RX;
|
uint8_t DMA_BUF_LEN_RX;
|
||||||
uint8_t pBufCounter;
|
uint8_t pBufCounter;
|
||||||
|
|
||||||
FilterTo_FLEXCAN_RxMbFilterType *IdSoftFilter_RX;
|
FilterTo_FLEXCAN_RxMbFilterType *IdHardSoftFilter_RX;
|
||||||
|
|
||||||
can_rx_message_type rx_message_struct;
|
can_rx_message_type rx_message_struct;
|
||||||
|
|
||||||
|
|
@ -104,11 +105,11 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
const uint8_t *DMA_BUF_RX,
|
const uint8_t *DMA_BUF_RX,
|
||||||
uint8_t DMA_BUF_LEN_RX,
|
uint8_t DMA_BUF_LEN_RX,
|
||||||
|
|
||||||
const FilterTo_FLEXCAN_RxMbFilterType *IdSoftFilter_RX,
|
const FilterTo_FLEXCAN_RxMbFilterType *IdHardSoftFilter_RX,
|
||||||
uint8_t CountSoftFilter_RX,
|
uint8_t CountHardSoftFilter_RX,
|
||||||
|
|
||||||
const FLEXCAN_RxMbFilterType *IdFilterFifo_RX,
|
// const FLEXCAN_RxMbFilterType *IdFilterFifo_RX,
|
||||||
uint8_t CountFilterFifo_RX,
|
// uint8_t CountFilterFifo_RX,
|
||||||
|
|
||||||
IRQn_Type IRQ_DMA_RX,
|
IRQn_Type IRQ_DMA_RX,
|
||||||
uint8_t IRQ_DMA_PRIORITY_RX,
|
uint8_t IRQ_DMA_PRIORITY_RX,
|
||||||
|
|
|
||||||
|
|
@ -79,11 +79,11 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
const uint8_t *DMA_BUF_RX,
|
const uint8_t *DMA_BUF_RX,
|
||||||
uint8_t DMA_BUF_LEN_RX,
|
uint8_t DMA_BUF_LEN_RX,
|
||||||
|
|
||||||
const FilterTo_FLEXCAN_RxMbFilterType *IdSoftFilter_RX,
|
const FilterTo_FLEXCAN_RxMbFilterType *IdHardSoftFilter_RX,
|
||||||
uint8_t CountSoftFilter_RX,
|
uint8_t CountHardSoftFilter_RX,
|
||||||
|
|
||||||
const FLEXCAN_RxMbFilterType *IdFilterFifo_RX,
|
// const FLEXCAN_RxMbFilterType *IdFilterFifo_RX,
|
||||||
uint8_t CountFilterFifo_RX,
|
// uint8_t CountFilterFifo_RX,
|
||||||
|
|
||||||
IRQn_Type IRQ_DMA_RX,
|
IRQn_Type IRQ_DMA_RX,
|
||||||
uint8_t IRQ_DMA_PRIORITY_RX,
|
uint8_t IRQ_DMA_PRIORITY_RX,
|
||||||
|
|
@ -104,8 +104,8 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
env->can = CANx;
|
env->can = CANx;
|
||||||
env->CAN_INDEX = CAN_INDEX;
|
env->CAN_INDEX = CAN_INDEX;
|
||||||
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->IdHardSoftFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdHardSoftFilter_RX;
|
||||||
env->CountSoftFilter_RX = CountSoftFilter_RX;
|
env->CountSoftFilter_RX = CountHardSoftFilter_RX;
|
||||||
|
|
||||||
env->access = osMutexNew(NULL);
|
env->access = osMutexNew(NULL);
|
||||||
|
|
||||||
|
|
@ -169,7 +169,8 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
|
|
||||||
env->tInitCfg.eBaudrate = canBaudRate;
|
env->tInitCfg.eBaudrate = canBaudRate;
|
||||||
env->tInitCfg.eDataBaud = canBaudRate;
|
env->tInitCfg.eDataBaud = canBaudRate;
|
||||||
env->tInitCfg.bEnRxFifo = TRUE;
|
// env->tInitCfg.bEnRxFifo = TRUE;
|
||||||
|
env->tInitCfg.bEnRxFifo = FALSE;
|
||||||
|
|
||||||
// env->tInitCfg.bEnDma = TRUE;
|
// env->tInitCfg.bEnDma = TRUE;
|
||||||
env->tInitCfg.bEnDma = FALSE;
|
env->tInitCfg.bEnDma = FALSE;
|
||||||
|
|
@ -189,11 +190,21 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
|
|
||||||
if (tRetVal == FLEXCAN_ERROR_OK) {
|
if (tRetVal == FLEXCAN_ERROR_OK) {
|
||||||
|
|
||||||
env->tMbCfg.pRxFilterMBList = NULL;
|
for (uint8_t i = 0; i < CountHardSoftFilter_RX; ++i) {
|
||||||
env->tMbCfg.u8RxFilterMBCnt = 0;
|
env->pRxMbFilterList[i].eRxFrameType = IdHardSoftFilter_RX[i].eRxFrameType;
|
||||||
|
env->pRxMbFilterList[i].u32RxCanId = IdHardSoftFilter_RX[i].u32RxCanId;
|
||||||
|
env->pRxMbFilterList[i].u32RxCanIdMask = IdHardSoftFilter_RX[i].u32RxCanIdMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
env->tMbCfg.pRxFilterMBList = env->pRxMbFilterList;
|
||||||
|
env->tMbCfg.u8RxFilterMBCnt = CountHardSoftFilter_RX;
|
||||||
|
|
||||||
|
// env->tMbCfg.pRxFilterMBList = NULL;
|
||||||
|
// env->tMbCfg.u8RxFilterMBCnt = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
for (uint8_t i = 0; i < CountFilterFifo_RX; ++i) {
|
for (uint8_t i = 0; i < CountFilterFifo_RX; ++i) {
|
||||||
|
|
||||||
env->pRxFilterFifoList[i].eRxFrameType = IdFilterFifo_RX[i].eRxFrameType;
|
env->pRxFilterFifoList[i].eRxFrameType = IdFilterFifo_RX[i].eRxFrameType;
|
||||||
env->pRxFilterFifoList[i].u32RxCanId = IdFilterFifo_RX[i].u32RxCanId;
|
env->pRxFilterFifoList[i].u32RxCanId = IdFilterFifo_RX[i].u32RxCanId;
|
||||||
env->pRxFilterFifoList[i].u32RxCanIdMask = IdFilterFifo_RX[i].u32RxCanIdMask;
|
env->pRxFilterFifoList[i].u32RxCanIdMask = IdFilterFifo_RX[i].u32RxCanIdMask;
|
||||||
|
|
@ -201,6 +212,9 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
|
|
||||||
env->tMbCfg.pRxFilterFifoList = env->pRxFilterFifoList;
|
env->tMbCfg.pRxFilterFifoList = env->pRxFilterFifoList;
|
||||||
env->tMbCfg.u8RxFilterFifoCnt = CountFilterFifo_RX;
|
env->tMbCfg.u8RxFilterFifoCnt = CountFilterFifo_RX;
|
||||||
|
*/
|
||||||
|
env->tMbCfg.pRxFilterFifoList = NULL;
|
||||||
|
env->tMbCfg.u8RxFilterFifoCnt = 0;
|
||||||
|
|
||||||
env->tMbCfg.pRxBuf = CAN_GET_BUFFER(CAN_INDEX);
|
env->tMbCfg.pRxBuf = CAN_GET_BUFFER(CAN_INDEX);
|
||||||
|
|
||||||
|
|
@ -229,8 +243,8 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
env->tIntCfg.bEnTxMBInterrupt = 0U;
|
env->tIntCfg.bEnTxMBInterrupt = 0U;
|
||||||
env->tIntCfg.pTxMBNotify = NULL;
|
env->tIntCfg.pTxMBNotify = NULL;
|
||||||
|
|
||||||
env->tIntCfg.bEnRxMBInterrupt = 0U;
|
env->tIntCfg.bEnRxMBInterrupt = 1U;
|
||||||
env->tIntCfg.pRxMBNotify = NULL;
|
env->tIntCfg.pRxMBNotify = CAN_RxInterrupt_CallBack;
|
||||||
|
|
||||||
env->tIntCfg.bEnRxFifoInterrupt = 1U;
|
env->tIntCfg.bEnRxFifoInterrupt = 1U;
|
||||||
env->tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack;
|
env->tIntCfg.pRxFifoNotify = CAN_RxFifoInterrupt_CallBack;
|
||||||
|
|
@ -252,7 +266,7 @@ bool vCanSerialPortFrameDMAInit(
|
||||||
|
|
||||||
if (!env->reInit) {
|
if (!env->reInit) {
|
||||||
env->reInit = true;
|
env->reInit = true;
|
||||||
vCanSerialPortFrameInitStructure(env, 40, 0);
|
vCanSerialPortFrameInitStructure(env, 10, 0);
|
||||||
|
|
||||||
CanSerialPortFrameSetType(env, canTypeFrame);
|
CanSerialPortFrameSetType(env, canTypeFrame);
|
||||||
CanSerialPortFrameSetId(env, canId);
|
CanSerialPortFrameSetId(env, canId);
|
||||||
|
|
@ -301,20 +315,22 @@ void CanSerialPortFrameIrqRxProcessingNO_DMA(tCanSerialPortFrameFlagchip *env, F
|
||||||
|
|
||||||
for (uint8_t i = 0; i < env->CountSoftFilter_RX; ++i) {
|
for (uint8_t i = 0; i < env->CountSoftFilter_RX; ++i) {
|
||||||
|
|
||||||
if ((env->rx_message_struct.id_type == FLEXCAN_ID_STD) && (env->IdSoftFilter_RX[i].eRxFrameType == FLEXCAN_ID_STD)) {
|
if ((env->rx_message_struct.id_type == FLEXCAN_ID_STD) && (env->IdHardSoftFilter_RX[i].eRxFrameType == FLEXCAN_ID_STD)) {
|
||||||
|
|
||||||
if (env->rx_message_struct.standard_id == env->IdSoftFilter_RX[i].u32RxCanId) {
|
if (env->rx_message_struct.standard_id == env->IdHardSoftFilter_RX[i].u32RxCanId) {
|
||||||
env->rx_message_struct.filter_index = env->IdSoftFilter_RX[i].filter;
|
env->rx_message_struct.filter_index = env->IdHardSoftFilter_RX[i].filter;
|
||||||
|
env->rx_message_struct.id_type = pRxCfg->eFrameType;
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (env->rx_message_struct.extended_id == env->IdSoftFilter_RX[i].u32RxCanId) {
|
if (env->rx_message_struct.extended_id == env->IdHardSoftFilter_RX[i].u32RxCanId) {
|
||||||
|
|
||||||
if (env->rx_message_struct.extended_id == env->IdSoftFilter_RX[i].u32RxCanId) {
|
if (env->rx_message_struct.extended_id == env->IdHardSoftFilter_RX[i].u32RxCanId) {
|
||||||
env->rx_message_struct.filter_index = env->IdSoftFilter_RX[i].filter;
|
env->rx_message_struct.filter_index = env->IdHardSoftFilter_RX[i].filter;
|
||||||
|
env->rx_message_struct.id_type = pRxCfg->eFrameType;
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -328,7 +344,7 @@ void CanSerialPortFrameIrqRxProcessingNO_DMA(tCanSerialPortFrameFlagchip *env, F
|
||||||
|
|
||||||
if (index != 0xFF) {
|
if (index != 0xFF) {
|
||||||
memcpy(env->rx_message_struct.data, pRxCfg->aData, pRxCfg->u32DataLen);
|
memcpy(env->rx_message_struct.data, pRxCfg->aData, pRxCfg->u32DataLen);
|
||||||
CanSerialPortFrameAddDataQueue(env, &env->rx_message_struct, env->IdSoftFilter_RX[index].filter);
|
CanSerialPortFrameAddDataQueue(env, &env->rx_message_struct, env->IdHardSoftFilter_RX[index].filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (env->CountSoftFilter_RX == 0) {
|
if (env->CountSoftFilter_RX == 0) {
|
||||||
|
|
@ -365,20 +381,20 @@ void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_
|
||||||
|
|
||||||
for (uint8_t i = 0; i < env->CountSoftFilter_RX; ++i) {
|
for (uint8_t i = 0; i < env->CountSoftFilter_RX; ++i) {
|
||||||
|
|
||||||
if ((env->rx_message_struct.id_type == FLEXCAN_ID_STD) && (env->IdSoftFilter_RX[i].eRxFrameType == FLEXCAN_ID_STD)) {
|
if ((env->rx_message_struct.id_type == FLEXCAN_ID_STD) && (env->IdHardSoftFilter_RX[i].eRxFrameType == FLEXCAN_ID_STD)) {
|
||||||
|
|
||||||
if (env->rx_message_struct.standard_id == env->IdSoftFilter_RX[i].u32RxCanId) {
|
if (env->rx_message_struct.standard_id == env->IdHardSoftFilter_RX[i].u32RxCanId) {
|
||||||
env->rx_message_struct.filter_index = env->IdSoftFilter_RX[i].filter;
|
env->rx_message_struct.filter_index = env->IdHardSoftFilter_RX[i].filter;
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (env->rx_message_struct.extended_id == env->IdSoftFilter_RX[i].u32RxCanId) {
|
if (env->rx_message_struct.extended_id == env->IdHardSoftFilter_RX[i].u32RxCanId) {
|
||||||
|
|
||||||
if (env->rx_message_struct.extended_id == env->IdSoftFilter_RX[i].u32RxCanId) {
|
if (env->rx_message_struct.extended_id == env->IdHardSoftFilter_RX[i].u32RxCanId) {
|
||||||
env->rx_message_struct.filter_index = env->IdSoftFilter_RX[i].filter;
|
env->rx_message_struct.filter_index = env->IdHardSoftFilter_RX[i].filter;
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -402,7 +418,7 @@ void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_
|
||||||
REV_BYTES_32(pSrc[u8Index], pDest[u8Index]);
|
REV_BYTES_32(pSrc[u8Index], pDest[u8Index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
CanSerialPortFrameAddDataQueue(env, &env->rx_message_struct, env->IdSoftFilter_RX[index].filter);
|
CanSerialPortFrameAddDataQueue(env, &env->rx_message_struct, env->IdHardSoftFilter_RX[index].filter);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue