Dear NXP.
I develop with S32K144 and S32DS for arm with SDK3.0.0
If I want to receive CAN id 0x111, How to set the Rx FIFO Mask?
I set like as below.
But all ID can be received.(0x000~ 0x7FF)
canDataInfoTable[idx].id = idx;
canDataInfoTable[idx].isExtendedFrame = FALSE;
canDataInfoTable[idx].isRemoteFrame = FALSE;
FLEXCAN_DRV_ConfigRxFifo(INST_CANCOM2, FLEXCAN_RX_FIFO_ID_FORMAT_B, canDataInfoTable);
FLEXCAN_DRV_SetRxFifoGlobalMask(INST_CANCOM2, FLEXCAN_MSG_ID_STD, (((uint32)(0x7FF)<<18u) & 0x1FFC0000u));
FLEXCAN_DRV_SetRxIndividualMask(INST_CANCOM2, FLEXCAN_MSG_ID_STD, 0, (((uint32)(0x111)<<18u) & 0x1FFC0000u));
Please let me know how to set the mask to receive the CAN ID 0x111.
Best regards,
Byungju.
Solved! Go to Solution.
Hi,
you should configure all ID elements in ID filter table and set mask properly. So for default 8 elements below code can be used
/* ID Filter table */
flexcan_id_table_t filterTable[8]={};
uint16_t id_counter;
for(id_counter=0;id_counter<8;id_counter++)
{
filterTable[id_counter].isRemoteFrame = false;
filterTable[id_counter].isExtendedFrame = false;
filterTable[id_counter].id = 0x111 ;
}
/* Configure RX FIFO ID filter table elements based on filter table defined above*/
FLEXCAN_DRV_ConfigRxFifo(INST_CANCOM1, FLEXCAN_RX_FIFO_ID_FORMAT_A, filterTable);
/* set individual masking type */
FLEXCAN_DRV_SetRxMaskType(INST_CANCOM1, FLEXCAN_RX_MASK_INDIVIDUAL);
for(id_counter=0;id_counter<8;id_counter++)
FLEXCAN_DRV_SetRxIndividualMask(INST_CANCOM1, FLEXCAN_MSG_ID_STD, id_counter, 0xC0000000|0x7FF);
BR, Petr
Hi,
you should configure all ID elements in ID filter table and set mask properly. So for default 8 elements below code can be used
/* ID Filter table */
flexcan_id_table_t filterTable[8]={};
uint16_t id_counter;
for(id_counter=0;id_counter<8;id_counter++)
{
filterTable[id_counter].isRemoteFrame = false;
filterTable[id_counter].isExtendedFrame = false;
filterTable[id_counter].id = 0x111 ;
}
/* Configure RX FIFO ID filter table elements based on filter table defined above*/
FLEXCAN_DRV_ConfigRxFifo(INST_CANCOM1, FLEXCAN_RX_FIFO_ID_FORMAT_A, filterTable);
/* set individual masking type */
FLEXCAN_DRV_SetRxMaskType(INST_CANCOM1, FLEXCAN_RX_MASK_INDIVIDUAL);
for(id_counter=0;id_counter<8;id_counter++)
FLEXCAN_DRV_SetRxIndividualMask(INST_CANCOM1, FLEXCAN_MSG_ID_STD, id_counter, 0xC0000000|0x7FF);
BR, Petr
Dear Petr Stancik
I checked the mask function.
Thanks for your help.
Best regards,
Byungju.
Pins indicates the modem or data set is ready to accept transmit data from the device Upsers.
Dear Warford Jonas,
I am sorry but I don't understand it.
I want to know to set mask to receive only CAN ID 0x111.
FLEXCAN_DRV_SetRxFifoGlobalMask(INST_CANCOM2, FLEXCAN_MSG_ID_STD, (((uint32)(0x7FF)<<18u) & 0x1FFC0000u));
FLEXCAN_DRV_SetRxIndividualMask(INST_CANCOM2, FLEXCAN_MSG_ID_STD, 0, (((uint32)(0x111)<<18u) & 0x1FFC0000u));
Best regards
Byungju.