最新情報

ナウいマイコン 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 クリア
   }
}

 

ちゃんと動作しています(動画参照)

 

加納 大裕(かのう だいゆう)

最新の投稿記事

加納製作所の商品開発

  • 薪ストーブ
  • メッキアノード
  • 粉体塗料
  • ミニトマト選別機

開発でお悩みの方、

まずは新たな発想を生む
私達の開発環境へお越しください。
知識・経験・ノウハウがそのお悩みを解決します。

開発のご相談