void wdt_reset(void) {
LPC_WDT->FEED = 0xAA;
LPC_WDT->FEED = 0x55;
}
...
LPC_SYSCON->SYSAHBCLKCTRL = _BV(0)/*sys*/|_BV(1)/*rom*/|_BV(2)/*ram*/|_BV(3)/*flashreg*/|_BV(4)/*flasharray*/
|_BV(6)/*gpio*/|_BV(7)/*ct16b0*/|_BV(8)/*ct16b1*/|_BV(15)/*watchdog*/|_BV(16)/*iocon*/;
...
//watchdog
LPC_SYSCON->WDTOSCCTRL = 0x1f/*divider = 64*/ | 0x1<<5/*600kHz*/;
LPC_SYSCON->WDTCLKSEL = 0x2; //watchdog oscillator
LPC_SYSCON->WDTCLKUEN = 0;
LPC_SYSCON->WDTCLKUEN = 1; // clock change sequence
LPC_SYSCON->WDTCLKDIV = 255; // clock divider
LPC_WDT->TC = 256; // watchdog count, minimum is 256
/* T = (1/600kHz) * 64 * 255 * 256 = 7s */
LPC_WDT->MOD = _BV(0)/*WDEN*/ | _BV(1)/*WDRESET*/;
wdt_reset(); /* enable */