/* * ======== switchToWatchdogTimer ======== * * Use 250ms watchdog timer interrupt to drive the Clock tick * Stop the default Timer_A then start the watchdog timer. */ static void switchToWatchdogTimer() { Clock_TimerProxy_Handle clockTimer; static Hwi_Handle wdtHwi = NULL; /* Stop Timer_A currrently being used by Clock */ clockTimer = Clock_getTimerHandle(); Clock_TimerProxy_stop(clockTimer); MAP_WDT_A_holdTimer(); if (wdtHwi == NULL) { /* Create watchdog Timer Hwi */ wdtHwi = Hwi_create(19, clockTickFxn, NULL, NULL); /* set WDT to use 32KHz input, 250ms period */ MAP_WDT_A_initIntervalTimer(WDT_A_CLOCKSOURCE_XCLK, WDT_A_CLOCKITERATIONS_8192); } /* don't allow deeper than DEEPSLEEP1 */ Power_setConstraint(PowerMSP432_DISALLOW_DEEPSLEEP_1); /* Start watchdog Timer */ MAP_WDT_A_clearTimer(); MAP_WDT_A_startTimer(); /* hence, Clock_tick() will be called from 250ms watchdog timer interrupt */ }
/* * ======== WatchdogMSP432_clear ======== */ void WatchdogMSP432_clear(Watchdog_Handle handle) { MAP_WDT_A_clearTimer(); }