1

Stellaris Launchpad LM4F120 でウォッチドッグ タイマーを設定しようとしています。

コードは次のとおりです。

void configure_watchdog(void) {
    SYSCTL_RCGCWD_R = 0x1; /* Enabling Clock for WD0 */
    WATCHDOG0_LOAD_R = 0xffffffff; /* Setting initial value */
    WATCHDOG0_CTL_R = WDT_CTL_INTEN; /* Enabling interrupt generation */
}

データシートによると、これで十分なはずです。

問題は、コントローラーが常に落ちてFaultISRその後リセットされることです。理由がわかりません。

私は何を間違っていますか?

EDIT : コントローラはリセットされません。それはただ行くFaultISR

4

2 に答える 2

2

ウォッチドッグの有効期限が切れたときに ISR にジャンプすることは、正しい動作のように思えます。ISRコード内で正確に何をしていますか? ISR 内でウォッチドッグをリセットしている場合、(少なくとも投稿された構成コードに基づいて) マイクロコントローラー自体がリセットされることはありません。ウォッチドッグを設定したら、コンフィギュレーション レジスタを読み戻して、予期した値が保持されていることを確認します。そのレジスタの一部のビットは、特定の状況下でのみ設定でき、使用していると思われる設定で実行されていない可能性があります。

ウォッチドッグタイマーを一般的なダウンカウンターとして使用しようとしていたとのことでした。ウォッチドッグの代わりに汎用タイマーの 1 つを使用できますか? 時間が経過しても割り込みが発生しますが、通常のタイマーにはシステム全体をリセットする機能がありません。

于 2013-01-28T20:02:31.523 に答える
1

ウォッチドッグにサービスを提供し続ける必要があります。そうしないと、タイムアウトになり、その例外に設定されているものは何でも呼び出されます。 FaultISRあなたの場合はそうであるように見えます。

ウォッチドッグにタイムアウト時に何か他のことをさせたい場合は、特定のツールチェーンが関数を例外ソースに接続する方法を理解し、新しい関数を正しくマップする必要があります。

ウォッチドッグの有効期限が切れないようにする場合 (通常は、誤ったコードをキャッチするためにウォッチドッグが存在するため)、定期的にサービスを提供する必要があります。多くの場合、コンパイラ ベンダーは、これを行うための関数または組み込みを提供します。

于 2013-01-30T13:11:29.897 に答える