Flex_CAN Receive issue

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Flex_CAN Receive issue

1,294 Views
vardhan
Contributor I

In S32k144 Evolution board I import Flex CAN project. Transmit functions working properly but Receive functions i didn't get Receive data by using MICROCHIP CAN BUS Analyzer.

As of my observation this Flag (CAN0->FLAG1) is not setting in Receiver function. Please help me to  resolve the issue

Below is my working flow 

In main(){

for (;;)
{
/* Loop: if a msg is received, transmit a msg */
if ((CAN0->IFLAG1 >> 4) & 1) { /* If CAN 0 MB 4 flag is set (received msg), read MB4 */
FLEXCAN0_receive_msg (); /* Read message */
rx_msg_count++; /* Increment receive msg counter */

if (rx_msg_count == 1000) { /* If 1000 messages have been received, */
PTD->PTOR |= 1<<16; /* toggle output port D16 (Green LED) */
rx_msg_count = 0; /* and reset message counter */
}

}

FLEXCAN0_transmit_msg (); /* Transmit message using MB0 */
}
}

void FLEXCAN0_receive_msg(void)
{
/*! Receive msg from ID 0x556 using msg buffer 4
* =============================================
*/
uint8_t j;
uint32_t dummy;

RxCODE = (CAN0->RAMn[ 4*MSG_BUF_SIZE + 0] & 0x07000000) >> 24; /* Read CODE field */
RxID = (CAN0->RAMn[ 4*MSG_BUF_SIZE + 1] & CAN_WMBn_ID_ID_MASK) >> CAN_WMBn_ID_ID_SHIFT; /* Read ID */
RxLENGTH = (CAN0->RAMn[ 4*MSG_BUF_SIZE + 0] & CAN_WMBn_CS_DLC_MASK) >> CAN_WMBn_CS_DLC_SHIFT; /* Read Message Length */

for (j=0; j<2; j++)
{ /* Read two words of data (8 bytes) */
RxDATA[j] = CAN0->RAMn[ 4*MSG_BUF_SIZE + 2 + j];
}
RxTIMESTAMP = (CAN0->RAMn[ 0*MSG_BUF_SIZE + 0] & 0x000FFFF);
dummy = CAN0->TIMER; /* Read TIMER to unlock message buffers */
CAN0->IFLAG1 = 0x00000010; /* Clear CAN 0 MB 4 flag without clearing others*/
}

 

0 Kudos
Reply
3 Replies

1,281 Views
PetrS
NXP TechSupport
NXP TechSupport

Hi,

so you are using S32K144_Project_FlexCan example. You are able to send message (std ID 0x555), this is visible on CAN bus analyzer. This example is preparing MB4 to receive message with std ID 0x511. Is this message send from CAN bus analyzer? if yes, is the message ACKed, or do you see any error detected on both sides?

BR, Petr

0 Kudos
Reply

1,259 Views
vardhan
Contributor I

Hi PeteS,

Thank you for support.

I follow the below  procedure & I got Rx data but, in that I am getting garbage values .I am attaching Transmit &receive data screenshots for your reference. Please help me to sort out this problem. 

0 Kudos
Reply

1,239 Views
PetrS
NXP TechSupport
NXP TechSupport

Hi,

looks RxDATA[0] and RxDATA[1] have correct values, you read 32bit word and

RxDATA[0] = 16909060 = 0x1020304
RxDATA[1] = 84281096 = 0x5060708

thus byte values correspond to one transmitted by CAN tool.

BR, Petr

0 Kudos
Reply