Hello,
I made simple program in TASKING IDE where im sending CAN message from CAN node1 to CAN node0. I managed to send and receive CAN message with and without interrupt.
Now what i should do is connect tc27x board with CAN box(VN5610A CAN interface), send CAN message from CANOE and receive it on board but i cant get it working. Im using same code where sending
message from CAN node1 to CAN node0 is working properly, but when i connect CAN node0 to CAN interface, it just wont receive message. I tried using wires with and without termination resistors but still
no success.
My program never exits from while loop in RecV() function, even tho im sure i sent CAN message from CANOE.
Here is my code:
void RecV(void);
void SendMessage(void);
const unsigned id = 0x100 ;
IfxMultican_Can can;
IfxMultican_Can_NodeConfig canNodeConfig;
IfxMultican_Can_Node canSrcNode;
IfxMultican_Can_Node canDstNode;
IfxMultican_Can_MsgObj canSrcMsgObj;
IfxMultican_Can_MsgObj canDstMsgObj;
int main(void)
{
IfxMultican_Can_Config canConfig;
IfxMultican_Can_initModuleConfig(&canConfig, &MODULE_CAN);
IfxMultican_Can_initModule(&can, &canConfig);
IfxMultican_Can_Node_initConfig(&canNodeConfig,&ca n);
//Node 1
canNodeConfig.baudrate = 500000;
canNodeConfig.nodeId = IfxMultican_NodeId_1;
canNodeConfig.rxPin = &IfxMultican_RXD1B_P14_1_IN;
canNodeConfig.rxPinMode = IfxPort_InputMode_pullUp;
canNodeConfig.txPin = &IfxMultican_TXD1_P14_0_OUT;
canNodeConfig.txPinMode = IfxPort_OutputMode_pushPull;
IfxMultican_Can_Node_init(&canDstNode, &canNodeConfig);
//Node 0
canNodeConfig.nodeId = IfxMultican_NodeId_0;
canNodeConfig.rxPin = &IfxMultican_RXD0B_P20_7_IN;
canNodeConfig.rxPinMode = IfxPort_InputMode_pullUp;
canNodeConfig.txPin = &IfxMultican_TXD0_P20_8_OUT;
canNodeConfig.txPinMode = IfxPort_OutputMode_pushPull;
IfxMultican_Can_Node_init(&canSrcNode, &canNodeConfig);
//Msg
IfxMultican_Can_MsgObjConfig canMsgObjConfig;
IfxMultican_Can_MsgObj_initConfig(&canMsgObjConfig , &canSrcNode);
canMsgObjConfig.msgObjId = 0;
canMsgObjConfig.messageId = id;
canMsgObjConfig.frame = IfxMultican_Frame_transmit;
canMsgObjConfig.control.messageLen = IfxMultican_DataLengthCode_8;
canMsgObjConfig.control.extendedFrame = FALSE;
canMsgObjConfig.control.matchingId = FALSE;
IfxMultican_Can_MsgObj_init(&canSrcMsgObj, &canMsgObjConfig);
//Recv
IfxMultican_Can_MsgObj_initConfig(&canMsgObjConfig , &canDstNode);
canMsgObjConfig.msgObjId = 1;
canMsgObjConfig.messageId = id;
canMsgObjConfig.frame = IfxMultican_Frame_receive;
canMsgObjConfig.control.messageLen = IfxMultican_DataLengthCode_8;
canMsgObjConfig.control.extendedFrame = FALSE;
canMsgObjConfig.control.matchingId = FALSE;
IfxMultican_Can_MsgObj_init(&canDstMsgObj, &canMsgObjConfig);
CanNodeSetInterrupt(IfxMultican_RXD1B_P14_1_IN,Ifx Multican_SrcId_0,IfxSrc_Tos_cpu0,IFX_INTPRIO_CAN_N ODE1);
//SendMessage();
RecV();
}
void RecV()
{
IfxMultican_Message msg;
IfxMultican_Message_init(&msg, 0xdead, 0xdeadbeef, 0xdeadbeef, IfxMultican_DataLengthCode_8); // start with invalid values
// wait until Multican received a new message
while( !IfxMultican_Can_MsgObj_isRxPending(&canDstMsgObj) )
{
printf("Waiting for msg...\n");
}
// read message
IfxMultican_Status readStatus = IfxMultican_Can_MsgObj_readMessage(&canDstMsgObj, &msg);
printf("Received something!- %x %x\n",msg.data[0],msg.data[1]);
}
void SendMessage()
{
IfxMultican_Message msgSend;
IfxMultican_Message_init(&msgSend, id,0x00000000,0x00000000,IfxMultican_DataLengthCod e_8);
while( IfxMultican_Can_MsgObj_sendMessage(&canSrcMsgObj,& msgSend) == IfxMultican_Status_notSentBusy)
{
printf("CAN bus busy\n");
}
}