I need to configure CAN filters in such a way that only ID 0x80 and IDs between 0x200 and 0x300 passes all others are not allowed to be passed. How to do that?
I tried in this way but the problem is only 200-300 can pass but 80h is not passed. if i use if else then only 80h is passed not 200-300h. So, the problem is i can pass either 80h or 200h-300h. Not both 80h and 200-300h.
#define Filter_ID1 0x80
#define Filter_ID2 0x200
#if Filter_ID1
sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterBank = 0;
sFilterConfig.FilterIdHigh=0x80<<5;
sFilterConfig.FilterMaskIdHigh=0xff<<5;
sFilterConfig.FilterIdLow = 0x0000;
sFilterConfig.FilterMaskIdLow = 0x0000;
sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
sFilterConfig.FilterActivation = ENABLE;
#endif
#if Filter_ID2
sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterBank = 1;
sFilterConfig.FilterIdHigh=0x200<<5;
sFilterConfig.FilterMaskIdHigh=0x300<<5;
sFilterConfig.FilterIdLow = 0x0000;
sFilterConfig.FilterMaskIdLow = 0x0000;
sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
sFilterConfig.FilterActivation = ENABLE;
#endif