最新情報
ナウいマイコン PSoC4200 の WDT(備忘録)
PSoC4200でWDTがあるらしいのですが、よくわからないので調べてみました。
コンポーネントでWDTがあると思ったのですが・・・・・・無いです。
Clock 関係を調べてみると、Watchdog の設定ができるようです。
ここダブルクリックすると
この画面が出てきます。
Timer 0
周期(Period) 1秒
の設定にしてみました。
確認用に、スイッチ(SW)とLEDを2個配置(赤、緑)。
Solved: How to reset WDT in PSoc 4200? – Infineon Developer Community
このページに、WDTクリアらしい情報があったので参考にしました。
//———————————————————————————-
スイッチ(OFF)押されていなければ、
1 赤LED点滅
2 WDTクリア
3 1へ(繰返し)
スイッチ(ON)押している間WDTクリアせずループ(WDTリセット発生)。
WDTリセット発生したら、緑LED点灯
こんな感じのソフトで試してみます。
#include <project.h>
uint32 reason; //reason (理由、原因)
int main(void) {
CyGlobalIntEnable; /* Enable global interrupts. */
G_LED_Write(0); // 緑LED_OFF
R_1_LED_Write(0); // 赤LED_1_OFF
reason = CySysGetResetReason(CY_SYS_RESET_WDT); // 0bit目 (xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxx1)
if(reason && CY_SYS_RESET_WDT){ // CY_SYS_RESET_WDT WDT リセット?
// CY_SYS_RESET_PROTFAULT 保護失敗リセット?(いまのところ意味不明)
// CY_SYS_RESET_PROTFAULT ソフトウェアリセット?
CySysWdtDisable(CY_SYS_WDT_COUNTER0_MASK); // カウント停止
R_1_LED_Write(1); // WDT Reset 発生で 赤LED_1_ON
while(1); // ループ(停止)
}
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
for (;;) {
/* Place your application code here. */
G_LED_Write(~G_LED_Read()); // 緑LED 点滅 0.5秒 OFF 0.5秒ON
CyDelay(500);
if (SW_Read()== 0){ // ボタン押されたら
while(1); // ループ(停止)
}
CySysWatchdogFeed(CY_SYS_WDT_COUNTER0); //WDT クリア
}
}
ちゃんと動作しています(動画参照)
加納 大裕(かのう だいゆう)
-
- 2024.11.11
- 11月17日、薪ストーブイベント出展、ふれあいパークほうらい
-
- 2024.11.10
- 薪ストーブ展示場所リニューアル
-
- 2024.10.31
- 11月3日イベント出展、売木村&東栄町
-
- 2024.09.19
- 薪ストーブ、新城軽トラ市「49番ブース」、出店します。
-
- 2024.01.20
- 薪ストーブ出展 新城消防祭