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