Hello Byungju,
First of all I suggest to take the last SDK available for S32K144 which is S32 SDK K1xx BETA 2.9.0 can be found here S32 Design Studio for ARM 2018.R1 - Update 7 available .
An exemple of RX fifo use to receive multiple IDs on the same MBs (The fifo use MB0 to MB6 to store messages). this example use extended ID filters, you can adapt to use standard IDs if you need by setting filters type extended as false flTable[i].isExtendedFrame = false; and the mask type on the FLEXCAN_DRV_SetRxIndividualMask and FLEXCAN_DRV_SetRxFifoGlobalMask;
const flexcan_user_config_t canCom1_InitConfig0 = {
.fd_enable = false,
.pe_clock = FLEXCAN_CLK_SOURCE_OSC,
.max_num_mb = 32,
.num_id_filters = FLEXCAN_RX_FIFO_ID_FILTERS_8,
.is_rx_fifo_needed = true,
.flexcanMode = FLEXCAN_NORMAL_MODE,
.payload = FLEXCAN_PAYLOAD_SIZE_8,
.bitrate = {
.propSeg = 7,
.phaseSeg1 = 4,
.phaseSeg2 = 1,
.preDivider = 0,
.rJumpwidth = 1
},
.bitrate_cbt = {
.propSeg = 7,
.phaseSeg1 = 4,
.phaseSeg2 = 1,
.preDivider = 0,
.rJumpwidth = 1
},
.transfer_type = FLEXCAN_RXFIFO_USING_INTERRUPTS,
.rxFifoDMAChannel = 0U
};
#define TX_MAILBOX (1UL)
#define TX_MSG_ID (1UL)
/* The MB0 represents the fifo MB to extract the messages received by RxFIFO */
#define RX_MAILBOX (0UL)
#define RX_MSG_ID (2UL)
main()
{
flexcan_id_table_t flTable[10];
status_t status;
for(i=0;i<10;i++)
{
flTable[i].id=i;
flTable[i].isExtendedFrame=true;
flTable[i].isRemoteFrame=false;
}
status = FLEXCAN_DRV_Init(INST_CANCOM1, &canCom1_State, &canCom1_InitConfig0);
/* Need to provide a no of ID filters based on .num_id_filters = FLEXCAN_RX_FIFO_ID_FILTERS_8, from configuration structure canCom1_InitConfig0 */
FLEXCAN_DRV_ConfigRxFifo(INST_CANCOM1,FLEXCAN_RX_FIFO_ID_FORMAT_A,&flTable);
/* Bit 31 from the mask it represents the remote flag acceptance ! */
FLEXCAN_DRV_SetRxFifoGlobalMask(INST_CANCOM1, FLEXCAN_MSG_ID_EXT, ((1U<<31U)|0x1FFFF));
for(i=0; i<22; i++)
{
status = FLEXCAN_DRV_SetRxIndividualMask(INST_CANCOM1,FLEXCAN_MSG_ID_EXT, i, ((1U<<31U)|0x1FFFF));
if(status == STATUS_CAN_BUFF_OUT_OF_RANGE )
break;
}
while(1)
{
/* Define receive buffer */
flexcan_msgbuff_t recvBuff;
/* Start receiving data in RX_MAILBOX. */
FLEXCAN_DRV_RxFifo(INST_CANCOM1, &recvBuff);
/* Wait until the previous FlexCAN receive is completed */
while(FLEXCAN_DRV_GetTransferStatus(INST_CANCOM1, RX_MAILBOX) == STATUS_BUSY);
}
}
BR,
Alexandru Nan