CAN Rx Interrupt is not generated

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

CAN Rx Interrupt is not generated

773 Views
georgipetrov
Contributor I

Hello,

I have a simple code warrior 10.6 project that uses the processor's expert capabilities to generate an OS and a CAN driver (CAN_LDD). There are some periodic tasks defined that do some specific work, but they have nothing to do with the problem I am facing. Basically, I call once

CANPtr = CAN1_Init(NULL);

to initialize the driver, followed by periodic calls in a task to the function below:

Error = CAN1_SendFrame(CANPtr, 1U, &Frame);

 

The transmission works flawlessly and I can see that

PE_ISR(CAN1_InterruptRxTx) in CAN1.c gets called to signal the frame is transmitted. So far so good...

However, when I send a CAN frame to the device (of course an external CAN transceiver is connected) I see that no CAN Rx interrupt is ever called, in fact it should be processed in the same PE_ISR (CAN1_InterruptRxTx). At first I thought I had some issues with the CAN transceiver, but a logic analyzer showed me that the CAN data arrived at the RX pin of the processor. I tried to use the loopback mode which again led to a CAN Tx interrupt being generated, while no Rx interrupt occurred. I attach screenshots of my configuration as I might be doing something wrong there.

Any advice appreciated.

 

 Regards

Original Attachment has been moved to: ConfigScreens.zip

0 Kudos
2 Replies

611 Views
niksa
Contributor I

Hi Georgi,

we are experiencing exactly the same problem that you are describing. How did you resolve your problem?

BR,

Niksa

0 Kudos

611 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi, Georgi,

Frankly speaking, I do not know your question clearly, it seems that you ask why the CAN receiver can not receive the frame it transmits itself. From CAN theory, when CAN  node transmits a frame, because the CAN is a bus-type bus, the CAN_Rx pin will get the signals it transmitted from CAN transceiver, but CAN module is smart enough to not receive the frame it transmits itself.

How about using two processor and have another processor send a frame to Kinetis via CAN transceiver with different ID and check if the Kinetis can receive the frame or not?

I am sorry if I misunderstand you.

BR

Xiangjun Rong

0 Kudos