S12ZVC how to clear the RX buffer

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

S12ZVC how to clear the RX buffer

1,421 次查看
highlander
Contributor II

Is there a way to directly clear the CAN RX Buffer?

I have a routine that starts when it reads a certain ID. I need it to stop sending data as soon as the ECM is not sending this ID.
On certain occasions the buffer is kept full with this specific ID thus the code keeps running even when the ECM is not sending any other messages and I need to clear it.

Is there a way to clear the CAN RX buffer to avoid this loop?

 

Thanks

0 项奖励
回复
3 回复数

1,405 次查看
dastek
Contributor III

Hi,

This may not be relevant, but I want to accept all CAN traffic and I use

   CAN0IDAR0 = 0xff;

   CAN0IDMR0 = 0xff;

I want the CAN in a Don't Care mode, where is interrupts on all messages.

 

 

0 项奖励
回复

1,409 次查看
highlander
Contributor II

The setup is done by processor Expert.

CAN0BTR0 = 0x01U;

CAN0BTR1 = 0x1CU;

CANxIDAR0 = 0x00U

CANxIDMR1 = 0xFFU

The acceptance mode is Two 32-bit acceptance filters


I do not have a problem receiving. It works really nice and reliable. The problem is when it stops and that particular ID is on the buffer. I tested with CAN0RFLG = RXF; and it still did the same. I solved it by adding another timer into the code that resets when the id changes, thus is if the buffer is with the same ID for too long it stops transmitting. This was the current solution for now. Works rather well, but feel its not the correct way to code it.

Now if I could only get the chip after this development, it would be great.

 

0 项奖励
回复

1,416 次查看
dastek
Contributor III

Mr Highlander

The CAN bus has an acknowledge bit that is sent when you module receives the message,

This is automatic.

You need to do the following at the end of your CAN interrupt .

CAN1RFLG = RXF;     // Clear the RX Full flag to release buffer

I think that the re-transmit that you see is the fact that the transmiter and receiver do not have the same setup and by this I mean bit rate and other CAN setup which is in :

     CANxBTR0 and

     CANxBTR1

Have you setup the CAN acceptance to receive this CAN ID?

    CANxIDAC = ?

    CANxIDAR0 = ?   and   CANxIDMR1 = ?

I have seen that once you get the CAN settings right, it magically just works.

Good luck.

0 项奖励
回复