AnsweredAssumed Answered

s32k EAR 0.8.4 not handling CAN FIFO overflow

Question asked by Pontus Hedman on Jan 17, 2018
Latest reply on Jan 18, 2018 by Pontus Hedman

There seems to be a problem with flexcan_driver.c when FIFO mode is used and an incoming packet is not dealt with in time by (for example) FLEXCAN_DRV_RxFifoBlocking() causing an overrun.  The interrupt handler FLEXCAN_IRQHandler() at flexcan_driver.c gets called forever because the interrupt is never cleared from IFLAG1 (c.f. 50.4.2.11).

 

Basically, FLEXCAN_IRQHandler() finds mb_idx == 6 (FEATURE_CAN_RXFIFO_WARNING) but has no code that deals with that situation.  Since (state->mbs[6].state == FLEXCAN_MB_IDLE) the handler just drops down to FLEXCAN_ClearErrIntStatusFlag(base) near the end.  But FLEXCAN_ClearMsgBuffIntStatusFlag(base, mb_idx) never gets called to clear the interrupt so it goes on forever.

 

For now I've hacked FLEXCAN_IRQHandler() to clear the interrupt in this situation, but is there a better approach or will there be a fix?

Outcomes