配置顺序:
先配置所有需要配置的邮箱的独立掩码(如果需要):
FLEXCAN_DRV_SetRxMaskType(instance, FLEXCAN_RX_MASK_INDIVIDUAL);
FLEXCAN_DRV_SetRxIndividualMask();
再配置所有需要配置的邮箱Mailbox
FLEXCAN_DRV_ConfigRxMb();
安装中断回调函数
FLEXCAN_DRV_InstallEventCallback();
FLEXCAN_DRV_InstallErrorCallback();
最后启动接收(使能邮箱中断)
FLEXCAN_DRV_Receive();
示例:
/* Set the individual mask type */
FLEXCAN_DRV_SetRxMaskType(CAN_INST, FLEXCAN_RX_MASK_INDIVIDUAL);
/* Set standard individual mask, bit 0-11 Optional, this example STD_ID 0x700U - 0x7FFU will be receive */
FLEXCAN_DRV_SetRxIndividualMask(CAN_INST, FLEXCAN_MSG_ID_STD, RX_STD_MAILBOX, 0xF00U);
/* Set extended individual mask, bit 0-28 Optional, this example EXD_ID 0x18C00100U - 0x18C001FFU will be receive */
FLEXCAN_DRV_SetRxIndividualMask(CAN_INST, FLEXCAN_MSG_ID_EXT, RX_EXT_MAILBOX, 0x1FFFFF00U);
/* After configure all individual masks, then congigure rx mailbox */
status |= FLEXCAN_DRV_ConfigRxMb(CAN_INST, RX_STD_MAILBOX, &rxMbStdInfo, RX_STD_MSG_ID);
status |= FLEXCAN_DRV_ConfigRxMb(CAN_INST, RX_EXT_MAILBOX, &rxMbExtInfo, RX_EXTMSG_ID);
/* Install rx callback */
FLEXCAN_DRV_InstallEventCallback(CAN_INST, DRV_CAN_RxEventCall, NULL);
FLEXCAN_DRV_InstallErrorCallback(CAN_INST, DRV_CAN_ErrorCall, NULL);
/* Start receiving data in RX_STD/EXT_MAILBOX. */
status |= FLEXCAN_DRV_Receive(CAN_INST, RX_STD_MAILBOX, &rxStdMsg);
status |= FLEXCAN_DRV_Receive(CAN_INST, RX_EXT_MAILBOX, &rxExtMsg);