2145688_ja-JP

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

2145688_ja-JP

2145688_ja-JP

S32k311 ソフトウェアウォッチドッグの問題

S32K311 MCUにソフトウェアウォッチドッグタイマーを実装しようとしていますが、SWT 0インスタンスで問題が発生しています。

要件: 1秒のタイムアウト値を持つウォッチドッグを実装する必要があります。ソースクロックはSIRC (32Khz) SO、カウントは32000になります。これは、50%ウィンドウを持つウィンドウウォッチドッグである必要があります。つまり、カウントが16000を下回った後は、カウンタがダウンカウンタに更新されるだけです。

疑似コード:

初期化:
SWT_0.CR.R = 0xFF000188;
SWT_0.TO.R = 32000; // !ウォッチドッグの秒タイムアウト
SWT_0.WN.R = 16000; // カウントが下回ったらリフレッシュを実行する必要があります
SWT_0.CR.B.WEN = 1; // WDTを有効にする
s_time_since_last_refresh_ms = 0;

更新: 1 ミリ秒ごとにスケジューラで呼び出されます (時間は正確です)
    

if (s_time_since_last_refresh_ms > 700) //時間のジッタによる問題が発生しないように、500 ミリ秒ではなく 700 ミリ秒を維持しました

{

SWT_0.SR.R = 0xA602;

SWT_0.SR.R = 0xB480;

s_time_since_last_refresh_ms = 0;

}


スケジューラのタイミングは正しく、PINの切り替えでテストされていますが、700ms後にリフレッシュがシステムリセットと呼ばれる問題が発生します。

しかし、同じ構成をウィンドウモードから通常モードにスイッチすると、ピンを切り替えることでリセットなしで永久に実行されることが確認され、期待どおりに動作します。


リセットをチェックしましたが、リセット レジスタには SWT しかありません。


700ms経過時のリフレッシュAPI内のカウント値を確認したところ、カウントは16000未満で正確でした。

しかし、カウント値を取得するには、ウォッチドッグを無効にする必要があります。そうしないと、カウントを読み取ることができないため、何が間違っているのかわかりません。

問題の原因を教えていただけませんか?SDKで提供されているサンプルコードが使えません。SDKが使用しているサンプルコードも確認しましたが、SWTで正しく動作させるために他のペリフェラルの設定を見落としているのでしょうか?

Re: S32k311 Software watchdog issue

こんにちは@AKV

そのような制限はないと思います。
私たちはこの問題に多くの時間を費やしてきましたが、実用的な例を示しました。まだ質問がある場合は、プロジェクト全体を提供していただければ、考えられる原因の調査をお手伝いします。

Re: S32k311 Software watchdog issue

こんにちは@Senlent

指定されたワークスペースは期待どおりに動作しています。そこからバイナリを取得してコンパイルしたところ、いくつかの問題が発生しました。しかし、S32DS IDEs で作成されたアプリケーション ワークスペースでは、同じ手順が機能しません。SWT0 を適切に実行するために、何らかの事前構成が必要な可能性はありますか。

Re: S32k311 Software watchdog issue

わかりました@Senlent 、了解しました。同じことを更新してみます。また更新してくれてありがとう。

Re: S32k311 Software watchdog issue

こんにちは@AKV

ハードウェアは S32K31XEVB をベースにしており、IDEs は S32 DS V3.6.2 + RTD 6.0.0 です。

青色 LED は 700 ミリ秒の周期で切り替わります。

Re: S32k311 Software watchdog issue

更新情報をありがとうございます。CAN、ワークスペース全体を共有していただけますか。私も同じハードウェアを持っているので、自分のセットアップでテストしてみます。

Re: S32k311 Software watchdog issue

こんにちは@AKV

追加の手順は必要ありません。
このプロジェクトは、S32K311EVB ハードウェアでテストされています。まだ質問がある場合は、ビデオを録画することもCAN。

Re: S32k311 Software watchdog issue

自分のワークスペースでコードをテストしましたが、以前と同じように動作しません。事前の構成は必要ですか。

Re: S32k311 Software watchdog issue

こんにちは@AKV

以下は私のテストプロセスです。ベアメタルコードは次のとおりです。RTD は 6.0.0 です。

そして期待通りに動作します。



    IP_SWT_0->CR &= ~SWT_CR_WEN_MASK;
    IP_SWT_0->CR |= SWT_CR_WND_MASK;
    IP_SWT_0->WN = 16000;
    IP_SWT_0->TO = 32000;
    IP_SWT_0->SR = 0xA602;
    IP_SWT_0->SR = 0xB480;
    IP_SWT_0->CR |= SWT_CR_WEN_MASK;

void PitNotification(void)//1ms
{
    if(s_time_since_last_refresh_ms>700)
    {
		IP_SWT_0->SR = 0xA602;
		IP_SWT_0->SR = 0xB480;
		/* Toggle the gpio pin to blink the LED when the Pit notification is called */
		Siul2_Dio_Ip_TogglePins(LED_PORT, (1UL << LED_PIN));
		s_time_since_last_refresh_ms = 0;
    }
    else
    {
    	s_time_since_last_refresh_ms++;
    }
}

Re: S32k311 Software watchdog issue

AKV_0-1754250520948.pngAKV_0-1754250520948.png

これはMC_RGMレジスタの値をリセットした後です

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎11-21-2025 01:15 AM
更新者: