mbed LPC1768でWDTを使う方法を調べたので、備忘録として記す。
リファレンス
WDTとは
Watch Dog Timer、直訳で番犬タイマー。 マイコンの暴走や無限ループに陥った際、強制的にリセットをかける機構。
WDTはカウントダウンタイマーである。値がセットされるとカウントダウンを開始し、0になるとマイコンをリセットさせる。 この機能を活かして、マイコンの動作を監視する。
以下、監視の手順を簡単に説明する。 監視対象のプログラムに、一定時間以内にWDTのカウンタを再セット(タップ)する処理を入れる。すると、正常に動作している間はWDTが0になる前にタップが行われるため、WDTによるリセットはかからない。 しかし、マイコンの暴走や無限ループなどの理由によりWDTへのタップが行われなくなった場合、WDTのカウンタが0となり、強制リセットが行われる。
register description
以下、LPC1768のWDTに関するレジスタとその説明を記す。
Name | Description |
---|---|
WDMOD | WDTのモード設定とステータス確認用レジスタ |
WDTC | タイムアウト値設定レジスタ |
WDFEED | 0xAAの後に0x55を書き込むと、WDTCにセットした値がWDTのカウンタにセットされる |
WDTV | 現在のWDTカウンタ値を確認するレジスタ |
WDCLKSEL | WDTのクロックソースを選択するレジスタ |
WDMOD
Bit | Symbol | Description |
---|---|---|
0 | WDEN | WDTを有効化する。1の場合はWDT実行中。 |
1 | WDRESET | WDTによる強制リセットを有効化する。1にすると有効となる |
2 | WDTOF | WDTのタイムアウトフラグ。WDTによるリセットが行われると1になる。自動でクリアされないので、ソフトウェアでクリアする |
3 | WDINT | WDT割り込みフラグ。読み込み専用 |
31:4 | - | 予約 |
WDENとWDRESETは一度設定すると、その後ソフトウェアからは無効化できない。
WDTは独立して動作する。そのため、デバッグ等で動作を止める場合、WDEN,WDRESETがともに1となっているとWDTによるリセットがかかり、デバッグができない。
WDTC
WDTのカウンタ値をセットする。 初期値は0xFFとなっている。
最小値はT_WDCLK * 256 * 4 (T_WDCLK = 1 / WDTクロックソースの周波数 ) 最大値は書かれていないため 0xffffffff と予想する。
WDFEED
ここに0xAA,0x55が書き込まれると、WDTCにセットされた値がカウンタにリロードされる。 つまり、WDTのタップ操作になる。
WDTV
現在のWDTカウンタの値を表示する。 ただしカウンタとの同期に6 WDCLKサイクル、加えて6 PCLKサイクルかかるため、実際のクロックの値に比べてWDTVの値は古くなる。
Name | Description |
---|---|
WDCLK | WDTのクロックソースから供給されるクロック |
PCLK | ペリフェラルクロック |
WDCLKSEL
Bit | Symbol | Description |
---|---|---|
0:1 | WDSEL | クロックソースを設定する。詳細は後述 |
30:2 | - | 予約 |
31 | WDLOCK | 1を書き込むとWDTのクロックソースをロックできる。一度ロックされると、リセットがかかるまでクロックソースが変更不可となる。 |
WDSELは0x00~0x10をセットすることでクロックソースを設定できる。
Value | Description |
---|---|
0x00 | 内蔵RCオシレータ |
0x01 | ペリフェラルクロック |
0x02 | RTCオシレーター |
0x03 | 予約 |