Busoff interrupt lost when S32K118 at high load

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Busoff interrupt lost when S32K118 at high load

1,016件の閲覧回数
chenwilsoft
Contributor II

The test case is shorting CANH & CANL repeatedly.

If the load of S32K118 is low, the recovery strategy works fine.

Step1. Busoff raised interrupt & set a flag. Step2. In the main loop, if the flag is set, DeInit & Init CAN. Step 3. wait 100ms. Step 4. Send a frame of data. Step 5. Busoff raised again.

But when the load is high ( ADC interrupt raised every 10ms ), there is a different symptom that occurs in a very low probability. The beginning 4 steps are the same. 

Step1. Busoff raised interrupt & set a flag. Step2. In the main loop, if the flag is set, DeInit & Init CAN. Step 3. wait 100ms. Step 4. Send a frame of data.

But in step 5, Busoff interrupt is not raised. Instead, Busoff Done Int ( Bit 19 of ESR1) is set and FLTCONF of ESR1 changed from 0x00 to 0x11, which means busoff status.

I don't know why the status of CAN has been changed to BusOff. But the BufOff Int Flag ( bit 2 of ESR1 ) is not set. Instead, Busoff Done Int is set.

0 件の賞賛
返信
2 返答(返信)

976件の閲覧回数
chenwilsoft
Contributor II

The version of IDE is S32DS 2008 R1,update11, using SDK version 3.0.0.

The callback function judges the flag of ESR1 and sets a variable to 1. In the main loop, judge the variable. If it becomes 1, trigger functions and reset the variable to 0.

Increasing the priority of FlexCAN is under testing.

0 件の賞賛
返信

993件の閲覧回数
PetrS
NXP TechSupport
NXP TechSupport

Hi,

could you please specify the code/driver you are using and its version (SDK, RTD,...)?
If using SDK/RTD do you use callbacks to indicate ISR hit?
How do you check flag setting in the main?
If you increase priority of FlexCAN interrupts, do you see the same?

BR, Petr

0 件の賞賛
返信