Mini210S 開発キット詳細URL
第XVII章 ウォッチドッグタイマとリセット
第一節 S5PV210ウォッチドッグタイマ
S5PV210の ウォッチドッグタイマは普通の16bitタイマと同じで、それは PWM タイマと異なったのはウォッチドッグタイマがreset発信できます。S5PV210 ウォッチドッグタイマの構造図は下記の通りです:
第二節 程序相关讲解プログラム説明
完全なコードは、ディレクトリ17.watchdogご参照ください。
1. main.c
手順は4つあります:
ステップ 1 シリアルポート初期化;
ステップ 2 割り込み初期化;
ステップ 3 ウォッチドッグテスト、関数 wtd_test()を呼び出し、 wtd.c 中に定義されます;
ステップ 4 無限ループ、ウォッチドッグ割り込み発生を待ちます;
2. wtd.c
wtd_test()手順は4つあります:
ステップ 1 VIC 割り込み設定、 WTDハンドラ関数をisr_wtd()と設定し、割り込みをオンにします;
ステップ 2 ウォッチドッグタイマ機能テスト、関数 wtd_operate()を呼び出し、ここではタイマ機能を使用して、 reset 機能は使用しません;
wtd_operate()コード:
void wtd_operate(unsigned long uenreset、 unsigned long uenint、 unsigned long uselectclk、
unsigned long uenwtd、 unsigned long uprescaler、unsigned long uwtdat、 unsigned long
uwtcnt)
{
WTDAT = uwtdat;
WTCNT = uwtcnt;
/*uenreset: resetオン状態判断
*uenint: 割り込みオン状態判断
*uselectclk: 分周係数
*uenwtd: タイマオン状態判断
*bit[8:15]:プリスケーラ因子
*/
WTCON= (uenreset<<0)|(uenint<<2)|(uselectclk<<3)|(uenwtd<<5)|((uprescaler)<<8);
}
先ずカウント相関のレジスタWTDAT と WTCNTを設定します、レジスタ WTDAT はウォッチドッグタイマのタイムアウト時間を管理します的、ウォッチドッグタイマ起動後、レジスタ WTDATの値は自動的レジスタ WTCNTに送信します、 WTCNTのカウントは 0になると:割り込みがオンな場合、割り込みします;resetがオンな場合、resetを送信します、WTDATの値をロードし、リカウントします。
レジスタ WTCON を設定し、 reset機能、割り込み、分周、タイマ機能などを設定します:
ウォッチドッグの割り込みハンドラ関数、コードは:
void isr_wtd()
{
//割り込み回数を記録
static int wtdcounter=0;
printf("%d\r\n"、++wtdcounter);
// ウォッチドッグ割り込みクリア
WTCLRINT = 1;
// VIC 割り込みクリア
intc_clearvectaddr();
if(wtdcounter==5)
{
// reset ウォッチドッグ
printf("waiting system reset\r\n");
wtd_operate(1、1、0、1、100、100000000、100000000);
}
}
手順は3つあります:
ステップ 1 割り込み回数をプリントアウト;
ステップ 2 割り込みクリア;
ステップ 3 割り込みが5回発生すると、ウォッチドッグの reset機能を使用、システムリセット;
第三節 コードコンパイルとプログラミングの実行
コードをコンパイルし、Fedora端末で下記のコマンドを実行します:
# cd 17.watchdog
# make
17.watchdogのディレクトリ下にwatchdog.binを生成し、それを開発ボードにプログラムします。
第四節 実験現象
先ず 1、2、3、4...、をプリントアウトし、5になると、ウォッチドッグの reset機能起用、システムがrise、ウォッチドッグのリセット機能が正常に作動します。実際効果は下記図ご参照ください:
---続く