This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Retain 32 bits across a watchdog reset ?

I'm sure the same question has been asked in a few different forms, but hoping for some ideas. . . Is there a way to retain 32 bits of information across a watchdog reset ?

I currently use PPI to clock a 32 bit counter at 1Hz from the RTC, this is nice because it gives me a real time clock time in a 32 bit register that runs in low power mode (why oh why is the rtc timer not 32bit ?!?!?!?! or at least has a 32 bit prescaler)

Anyway, the problem with this is that a watchdog reset clears the peripherals, so I lose the 32 bit count. I could write the value to NVM in the watchdog event handler, as long as the flash memory was erased at program startup otherwise it would take too long, but this doesn't seem like an elegant solution.

I know that the ram is not specifically reset, but may be corrupted, to this is also a possibility I guess.

Any suggestions appreciated! Thanks

Parents
  • Yeah, I should have added that we are ultra low power, our devices usually sleep @ less than 2uA to get the lifetime we require from a CR2032. No chance of writing to flash and even having to wake up the high frequency clock every second just to store the timer value make a real difference to our sleep current.

    I have experimented with writing the timer to a .noinit global variable and it looks to be working well in practice. I would have liked to store the timer value to this variable in the watchdog event handler, but it seems I cannot initialize the 32 bit counter to the stored value at startup ? Still trying to think about a simple way around all these catches.

Reply
  • Yeah, I should have added that we are ultra low power, our devices usually sleep @ less than 2uA to get the lifetime we require from a CR2032. No chance of writing to flash and even having to wake up the high frequency clock every second just to store the timer value make a real difference to our sleep current.

    I have experimented with writing the timer to a .noinit global variable and it looks to be working well in practice. I would have liked to store the timer value to this variable in the watchdog event handler, but it seems I cannot initialize the 32 bit counter to the stored value at startup ? Still trying to think about a simple way around all these catches.

Children
No Data
Related