Version of Watchdog timer for LPC4088 that uses the Singleton design pattern for easy access throughout a program.

Fork of WDT4088 by Kevin Braun

Watchdog.cpp

Committer:
tbronez
Date:
2016-01-23
Revision:
1:06813ae93fea
Parent:
0:fc62d045ca0c

File content as of revision 1:06813ae93fea:

// T. Bronez. rev. 2016-01-23
// Based on https://developer.mbed.org/users/loopsva/code/WDT4088/
// Put into Singleton design pattern for easy use throughout a program

#include "mbed.h"
#include "Watchdog.h"

// Global static point to singleton instance
Watchdog* Watchdog::_pInstance = NULL;

bool Watchdog::isWatchdogReset() {
    return ((LPC_WDT->MOD >> 2) & 1);
}

Watchdog::Watchdog() {
}

Watchdog* Watchdog::getInstance() {
    if(!_pInstance) { _pInstance = new Watchdog(); }
    return _pInstance;
}

void Watchdog::enable(int WDTseconds) {
    if(WDTseconds < 1) WDTseconds = 1;      //minimum watchdog time is 1 sec
    if(WDTseconds > 134) WDTseconds = 134;  //maximum watchdog time is 134 sec
    LPC_WDT->TC = 125000 * WDTseconds;      //125000 * 8uS = 1.0 second tics
    LPC_WDT->MOD = 0x3;                     //enable and restart watchdog
    Watchdog::feed();
}

void Watchdog::feed() {
    LPC_WDT->FEED = 0xaa;                   //put sequence into FEED register
    LPC_WDT->FEED = 0x55;
}