summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Thompson <daniel@redfelineninja.org.uk>2020-05-09 13:18:39 (GMT)
committerDaniel Thompson <daniel@redfelineninja.org.uk>2020-05-09 13:19:10 (GMT)
commitc1f8823f615855c1a8e5e337e33ba0b36573bc43 (patch)
tree70a1ba31e3fc6d3f94f5a798255584ec9b74e1b0
parentb0dec58769c0b09ce33770de398e6801550dc3d9 (diff)
Add PNVRAM support to avoid forgetting the time during a reboot.
-rw-r--r--TODO.md2
m---------bootloader0
m---------micropython0
-rw-r--r--wasp/drivers/nrf_rtc.py16
4 files changed, 15 insertions, 3 deletions
diff --git a/TODO.md b/TODO.md
index 982a4b9..af655b3 100644
--- a/TODO.md
+++ b/TODO.md
@@ -47,7 +47,7 @@ applications.
### Bootloader
* [X] OTA bootloader update
- * [ ] RTC time measurement whilst in bootloader
+ * [X] RTC time measurement whilst in bootloader
### MicroPython
diff --git a/bootloader b/bootloader
-Subproject 7786926950902cf4ce49a93894f69a205d6fd32
+Subproject d8d7d76b17e188420f66705f0b319f6e80a328f
diff --git a/micropython b/micropython
-Subproject 5424de70d7cfb1d53828b54cd1df509c3f0fee7
+Subproject 8ea321106823866adcb6c4881b4045939b56cc3
diff --git a/wasp/drivers/nrf_rtc.py b/wasp/drivers/nrf_rtc.py
index 63a2a51..0ff2c1f 100644
--- a/wasp/drivers/nrf_rtc.py
+++ b/wasp/drivers/nrf_rtc.py
@@ -3,6 +3,7 @@
""" Real Time Clock based on the nRF-family low power counter """
+import machine
import time
#class Stim(object):
@@ -20,8 +21,17 @@ class RTC(object):
def __init__(self, counter):
self.counter = counter
- self._uptime = 0
- self.set_localtime((2020, 3, 1, 3, 0, 0, 0, 0))
+
+ if machine.mem32[0x200039c0] == 0x1abe11ed and \
+ machine.mem32[0x200039dc] == 0x10adab1e:
+ self.lastcount = self.counter.counter()
+ self.offset = machine.mem32[0x200039c4]
+ self._uptime = machine.mem32[0x200039c8] // 125
+ else:
+ machine.mem32[0x200039c0] = 0x1abe11ed
+ machine.mem32[0x200039dc] = 0x10adab1e
+ self._uptime = 0
+ self.set_localtime((2020, 3, 1, 3, 0, 0, 0, 0))
def update(self):
newcount = self.counter.counter()
@@ -34,6 +44,7 @@ class RTC(object):
self.lastcount += split
self.lastcount &= (1 << 24) - 1
self._uptime += split
+ machine.mem32[0x200039c8] = self._uptime * 125
return True
@@ -52,6 +63,7 @@ class RTC(object):
lt = time.mktime(t)
self.offset = lt - (self._uptime >> 3)
+ machine.mem32[0x200039c4] = self.offset
def get_localtime(self):
self.update()