Home arrow Support arrow Forums

Luminary Micro Forums

tim124

Expert Boarder
Click here to see the profile of this user

2008/08/13 13:04

CAN message filters

I have the CAN controller working and im recieving massages. however they appear to only be picked up by one message filter. The idea was to set up two filters to read the two ID's i am expecting.

setup as follows:

Code:

  // RPM + TPOS g_MsgObjectRx1.ulMsgID 0x100; g_MsgObjectRx1.ulMsgIDMask 0; g_MsgObjectRx1.ulFlags MSG_OBJ_RX_INT_ENABLE MSG_OBJ_USE_ID_FILTER; g_MsgObjectRx1.ulMsgLen 8; g_MsgObjectRx1.pucMsgData = (unsigned char *)0xffffffff; CANMessageSet(CAN0_BASEMSGOBJ_NUM_DATA_RX1, &g_MsgObjectRx1MSG_OBJ_TYPE_RX); // PRES + TEMPS g_MsgObjectRx2.ulMsgID 0x101; g_MsgObjectRx2.ulMsgIDMask 0; g_MsgObjectRx2.ulFlags MSG_OBJ_RX_INT_ENABLE MSG_OBJ_USE_ID_FILTER; g_MsgObjectRx2.ulMsgLen 8; g_MsgObjectRx2.pucMsgData = (unsigned char *)0xffffffff; CANMessageSet(CAN0_BASEMSGOBJ_NUM_DATA_RX2, &g_MsgObjectRx2MSG_OBJ_TYPE_RX);



then in my ISR i am checking which one caused the interrupt:


Code:

      ulStatus CANIntStatus(CAN0_BASECAN_INT_STS_CAUSE);     // clear inturrupts     switch(ulStatus)     {     case MSGOBJ_NUM_DATA_RX2:         g_MsgObjectRx1.pucMsgData g_101;         g_MsgObjectRx1.ulMsgLen 8;         CANMessageGet(CAN0_BASEMSGOBJ_NUM_DATA_RX2, &g_MsgObjectRx21);         g_flag_101 1;         break;     case MSGOBJ_NUM_DATA_RX1:         g_MsgObjectRx1.pucMsgData g_100;         g_MsgObjectRx1.ulMsgLen 8;         CANMessageGet(CAN0_BASEMSGOBJ_NUM_DATA_RX1, &g_MsgObjectRx11);         g_flag_100 1;         break;



unfortunatly, g_flag_101 never gets set.

AND

if i read the messages that cause the g_flag_100 flag, it contains messages with varying ID's.

any ideas?

Tim

login or register to reply

ddelevski

Senior Boarder
Click here to see the profile of this user

2008/08/17 22:10

Re:CAN message filters

Hi,
What are MSGOBJ_NUM_DATA_RX1 and MSGOBJ_NUM_DATA_RX2 equal to?

login or register to reply

tim124

Expert Boarder
Click here to see the profile of this user

2008/08/18 02:48

Re:CAN message filters

they are equal to 1 and 2.

I have noticed that:

Code:

      case MSGOBJ_NUM_DATA_RX2:         g_MsgObjectRx1.pucMsgData g_101;         g_MsgObjectRx1.ulMsgLen 8;         CANMessageGet(CAN0_BASEMSGOBJ_NUM_DATA_RX2, &g_MsgObjectRx21);         g_flag_101 1;         break;     case MSGOBJ_NUM_DATA_RX1:         g_MsgObjectRx1.pucMsgData g_100;         g_MsgObjectRx1.ulMsgLen 8;         CANMessageGet(CAN0_BASEMSGOBJ_NUM_DATA_RX1, &g_MsgObjectRx11);         g_flag_100 1;         break;



should be:
(note >>)


Code:

      case MSGOBJ_NUM_DATA_RX2: >>        g_MsgObjectRx2.pucMsgData g_101; >>        g_MsgObjectRx2.ulMsgLen 8;         CANMessageGet(CAN0_BASEMSGOBJ_NUM_DATA_RX2, &g_MsgObjectRx21);         g_flag_101 1;         break;     case MSGOBJ_NUM_DATA_RX1:         g_MsgObjectRx1.pucMsgData g_100;         g_MsgObjectRx1.ulMsgLen 8;         CANMessageGet(CAN0_BASEMSGOBJ_NUM_DATA_RX1, &g_MsgObjectRx11);         g_flag_100 1;         break;



but i have not yet had time to test what difference this makes

login or register to reply