You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/11/04 23:56:05 UTC

[3/3] incubator-mynewt-core git commit: MYNEWT-403; nrf52x - clean up reset reg after reading it.

MYNEWT-403; nrf52x - clean up reset reg after reading it.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/615f00c5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/615f00c5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/615f00c5

Branch: refs/heads/develop
Commit: 615f00c52fed0cda8c2251c2c0ef1d53ac38f969
Parents: 1191f1e
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri Nov 4 16:36:37 2016 -0700
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Fri Nov 4 16:44:53 2016 -0700

----------------------------------------------------------------------
 hw/mcu/nordic/nrf52xxx/src/hal_reset_cause.c | 27 ++++++++++++++---------
 1 file changed, 16 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/615f00c5/hw/mcu/nordic/nrf52xxx/src/hal_reset_cause.c
----------------------------------------------------------------------
diff --git a/hw/mcu/nordic/nrf52xxx/src/hal_reset_cause.c b/hw/mcu/nordic/nrf52xxx/src/hal_reset_cause.c
index 66e53c2..b55f7ab 100644
--- a/hw/mcu/nordic/nrf52xxx/src/hal_reset_cause.c
+++ b/hw/mcu/nordic/nrf52xxx/src/hal_reset_cause.c
@@ -23,18 +23,23 @@
 enum hal_reset_reason
 hal_reset_cause(void)
 {
-    uint32_t reason;
+    static enum hal_reset_reason reason;
+    uint32_t reg;
 
-    reason = NRF_POWER->RESETREAS;
-
-    if (reason & (POWER_RESETREAS_RESETPIN_Msk | POWER_RESETREAS_LOCKUP_Msk)) {
-        return HAL_RESET_WATCHDOG;
-    }
-    if (reason & POWER_RESETREAS_SREQ_Msk) {
-        return HAL_RESET_SOFT;
+    if (reason) {
+        return reason;
     }
-    if (reason & POWER_RESETREAS_RESETPIN_Msk) {
-        return HAL_RESET_PIN;
+    reg = NRF_POWER->RESETREAS;
+
+    if (reg & (POWER_RESETREAS_DOG_Msk | POWER_RESETREAS_LOCKUP_Msk)) {
+        reason = HAL_RESET_WATCHDOG;
+    } else if (reg & POWER_RESETREAS_SREQ_Msk) {
+        reason = HAL_RESET_SOFT;
+    } else if (reg & POWER_RESETREAS_RESETPIN_Msk) {
+        reason = HAL_RESET_PIN;
+    } else {
+        reason = HAL_RESET_POR; /* could also be brownout */
     }
-    return HAL_RESET_POR;
+    NRF_POWER->RESETREAS = reg;
+    return reason;
 }