watcdogtimerrrrrrrrrr
WatchDogTimer.cpp
- Committer:
- ryuna
- Date:
- 2015-02-24
- Revision:
- 0:2d7cdbcc260e
File content as of revision 0:2d7cdbcc260e:
#include "mbed.h" #include "WatchDogTimer.h" /*-------------------------------------------------------------------------------------------------- Watchdogクラス --------------------------------------------------------------------------------------------------*/ // WDT発生までの時間を秒数で指定する Watchdog::Watchdog() { } void Watchdog::kick(float s) { // WDTを動作可能にする P22 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<15); // WDTクロックソースの選択 // b00 IRC発振器 // b01 メインクロック // b10 WDT発振器 LPC_SYSCON->WDTCLKSEL = 0x01; // WDTクロックソース更新 LPC_SYSCON->WDTCLKUEN = 0; LPC_SYSCON->WDTCLKUEN = 1; while (!(LPC_SYSCON->WDTCLKUEN & 0x01)); // WDTレジスタの設定(SystemCoreClock=48MHzの場合) P276 LPC_SYSCON->WDTCLKDIV = 4; // WDTクロック分周レジスタ(0=disable,1~255=分周値) uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 LPC_WDT->TC = s * (float)clk; // タイムアウト値を設定 Watchdog::enable(); // Enabled and Reset and reload } // WDTカウンタリロード void Watchdog::kick(void) { //__disable_irq(); LPC_WDT->FEED = 0xAA; LPC_WDT->FEED = 0x55; //__enable_irq(); } // WDT有効 void Watchdog::enable(void) { LPC_WDT->MOD = 0x3; // b1=resetを発生させる,b0=enable kick(); } // WDT無効(debug用) void Watchdog::disable() { LPC_WDT->MOD = 0x0; }