code that uses Watchdog to reset Mbed every 30seconds. After 30-60mins, the ethernet interface fails to setup() after WatchDog reset.

Dependencies:   mbed

main.cpp

Committer:
eqon
Date:
2012-06-07
Revision:
0:0ce833f21e63

File content as of revision 0:0ce833f21e63:

#include "mbed.h"
#include "EthernetNetIf.h"
EthernetNetIf eth;

void dogKick() {
    LPC_WDT->WDFEED = 0xAA;
    LPC_WDT->WDFEED = 0x55;
    printf("dogkick\n");
}
void setDog(float s =30) {
    LPC_WDT->WDCLKSEL = 0x1;                // Set CLK src to PCLK
    uint32_t clk = SystemCoreClock / 16;    // WD has a fixed /4 prescaler, PCLK default is /4
    LPC_WDT->WDTC = s * (float)clk;
    LPC_WDT->WDMOD = 0x3;                   // Enabled and Reset
    dogKick();
}
DigitalOut ethrst(P1_28);// PHY chip on mbed reset
DigitalOut led(LED3); //Alive
int main() {
    ethrst=0;//PHY reset
    wait(1);
    ethrst=1;
    wait(1);
    
    printf("\n\nStartup...\n");
   
    
    setDog(30);
    printf("Setting up...\n");
    EthernetErr ethErr = eth.setup();// i have tested with different timeouts setup(30000) etc


    if (ethErr) {
        printf("Error %d in setup.\n", ethErr);
        return -1;
    }
    printf("Setup OK\n");
    led=1;
    return 0;

}