Hallo,
ich habe ein S32K144 Evalboard und ein TLE9471-3ES Evalboard mit SPI
miteinander verbunden.
Die Kommunikation an für sich funktioniert, allerdings habe ich Probleme
beim Watchdog vom TLE9471.
Mein Vorgehen,
ich initialisiere den TLE9471 (Watchdog Timer = 1000ms) und gehe dann
in den STOP_MODE (Watchdog muss nicht mehr getriggert werden).
Nach ~2 Sekunden, wechsle ich zurück in den NORMAL_MODE und muss den
Watchdog Triggern. Dies mache ich auch (laut Code), dennoch wird der
Watchdog vom TLE getriggert und setzt diesen zurück.
Nur wenn ich das komplette SBC_Init ausführe, funktioniert es. Dann ist
es wie ein kompletter Neustart.
Im Datenblatt habe ich nichts gefunden, dass beim Wechseln von den
verschiedenen Modes etwas gemacht werden muss.
1 | SBC_ErrorCode errCode;
|
2 | errCode = SBC_Write_RegField(SBC_WK_CTRL_0, SBC_WK_CTRL_0_WD_STM_EN_1_Msk, SBC_WK_CTRL_0_WD_STM_EN_1_Pos, SBC_WD_STM_EN_1_NOWATCHDOG_STOPMODE, NULL);
|
3 | errCode = SBC_Write_RegField(SBC_WD_CTRL, SBC_WD_CTRL_WD_STM_EN_0_Msk, SBC_WD_CTRL_WD_STM_EN_0_Pos, SBC_WD_STM_EN_0_NOTACTIVE_STOPMODE, NULL);
|
4 | errCode = SBC_Mode_Stop();
|
5 | for(;;)
|
6 | {
|
7 | if (counter >= 2105483) // ~500 ms
|
8 | {
|
9 | counter = 0;
|
10 | if (counter2 >= 4)
|
11 | {
|
12 | wd_timer2 = SBC_Read_RegField(SBC_WD_CTRL, SBC_WD_CTRL_WD_TIMER_Msk, SBC_WD_CTRL_WD_TIMER_Pos);
|
13 | if (0 == state)
|
14 | {
|
15 | errCode = SBC_Mode_Normal();
|
16 | wd_timer3 = SBC_Read_RegField(SBC_WD_CTRL, SBC_WD_CTRL_WD_TIMER_Msk, SBC_WD_CTRL_WD_TIMER_Pos);
|
17 | //SBC_Init();
|
18 | //errCode = SBC_Write_RegField(SBC_WD_CTRL, SBC_WD_CTRL_WD_TIMER_Msk, SBC_WD_CTRL_WD_TIMER_Pos, SBC_WD_TIMER_1000MS, NULL);
|
19 | state = 1;
|
20 | }
|
21 | counter2 = 5;
|
22 | errCode = SBC_WD_Trigger();
|
23 | }
|
24 | }
|
25 | counter++;
|
26 | counter2++;
|
27 | }
|