Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
毎度お世話になっております。
今回はWDTについてお教え下さい。
CPUは LPC1114FN28/102です。
以下のようなコードで動作はしているのですがこれで正しいでしょうか?余計なコードなどが有りますか?
他の方のソースを見ると、SYSAHBCLKCTRLやWDTCLKSEL、WDTCLKDIVなどを設定するコードが見えないのですが、自分の環境ではこれらを設定しないと動かないようです。 https://mbed.org/users/WiredHome/code/Watchdog/file/2873f068f325/Watchdog.cpp
毎度申し訳ないのですが、またよろしくご教授をお願いいたします。
class Watchdog { public: void kick(float s) { // クロック関係の設定 P22 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<15); // WDTクロックをenable LPC_SYSCON->WDTCLKSEL = 0x01; // WDTクロックソースとしてメインクロックを使用する LPC_SYSCON->WDTCLKUEN = 0; // WDTクロックソース更新・・・0を書き込んでから LPC_SYSCON->WDTCLKUEN = 1; // 1を書き込む while (!(LPC_SYSCON->WDTCLKUEN & 0x01));// 更新待ち // WDTレジスタの設定 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; // タイムアウト値を設定 enable(); // Enabled and Reset and reload } // WDT有効 void enable() { LPC_WDT->MOD = 0x3; // b1=resetを発生させる,b0=enable kick(); } // WDT無効(debug用) void disable() { LPC_WDT->MOD = 0x0; } // WDTカウンタリロード void kick() { __disable_irq(); LPC_WDT->FEED = 0xAA; LPC_WDT->FEED = 0x55; __enable_irq(); } };