Hi,
I have some doubts about the FlexCAN function FLEXCAN_DRV_ConfigRxMb and FLEXCAN_DRVConfig Rx Fifo.
If I only get two messages, I can use FLEXCAN_DRV_ConfigRxMb, for example:
void CANCONfig(void)
{
//初始化CAN0
FLEXCAN_DRV_Init(INST_CANCOM0, &canCom0_State, &canCom0_InitConfig0);
//配置0x218帧
FLEXCAN_DRV_ConfigRxMb(INST_CANCOM0, RX_MAILBOX_0, &Data_Std_Info, 0x218);
FLEXCAN_DRV_SetRxIndividualMask(INST_CANCOM0,FLEXCAN_MSG_ID_STD,RX_MAILBOX_0,0x00000u);
//配置0x121帧
FLEXCAN_DRV_ConfigRxMb(INST_CANCOM0, RX_MAILBOX_1, &Data_Std_Info, 0x121);
FLEXCAN_DRV_SetRxIndividualMask(INST_CANCOM0,FLEXCAN_MSG_ID_STD,RX_MAILBOX_1,0x00000u);
FLEXCAN_DRV_Receive(INST_CANCOM0, RX_MAILBOX_0, &RecvMsg0);
FLEXCAN_DRV_Receive(INST_CANCOM0, RX_MAILBOX_1, &RecvMsg1);
//安装中断函数
FLEXCAN_DRV_InstallEventCallback(INST_CANCOM0, CAN0RxCallBack, NULL);
}
The callback function is as follow:
void CAN0RxCallBack(uint8_t instance, flexcan_event_type_t eventType,
uint32_t buffIdx, flexcan_state_t *flexcanState)
{
if(eventType == FLEXCAN_EVENT_RX_COMPLETE) {
uint32_t TempId;
if(instance == INST_CANCOM0) {
FLEXCAN_DRV_Receive(INST_CANCOM0, RX_MAILBOX_0, &RecvMsg0);
FLEXCAN_DRV_Receive(INST_CANCOM0, RX_MAILBOX_1, &RecvMsg1);
V_Vehicle_Speed = ((RecvMsg0.data[1]<<5)+((RecvMsg0.data[2]&0xF8)>>3))*0.05625;
Signal1 = RecvMsg1.data[0];
Signal2 = RecvMsg1.data[2];
}
}
}
But if I want get 70 messages, I can not use FLEXCAN_DRV_ConfigRxMb, because Rx_MailBox do not have so much, then I must use the FLEXCAN_DRV_ConfigRxFifo ,is it right?